forked from rogchap/v8go
-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathobject_template.cc
58 lines (47 loc) · 1.49 KB
/
object_template.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "object_template.h"
#include "context.h"
#include "deps/include/v8-context.h"
#include "deps/include/v8-isolate.h"
#include "deps/include/v8-locker.h"
#include "deps/include/v8-template.h"
#include "template-macros.h"
using namespace v8;
TemplatePtr NewObjectTemplate(v8Isolate* iso) {
Locker locker(iso);
Isolate::Scope isolate_scope(iso);
HandleScope handle_scope(iso);
m_template* ot = new m_template;
ot->iso = iso;
ot->ptr.Reset(iso, ObjectTemplate::New(iso));
return ot;
}
RtnValue ObjectTemplateNewInstance(TemplatePtr ptr, m_ctx* ctx) {
LOCAL_TEMPLATE(ptr);
TryCatch try_catch(iso);
Local<Context> local_ctx = ctx->ptr.Get(iso);
Context::Scope context_scope(local_ctx);
RtnValue rtn = {};
Local<ObjectTemplate> obj_tmpl = tmpl.As<ObjectTemplate>();
Local<Object> obj;
if (!obj_tmpl->NewInstance(local_ctx).ToLocal(&obj)) {
rtn.error = ExceptionError(try_catch, iso, local_ctx);
return rtn;
}
m_value* val = new m_value;
val->id = 0;
val->iso = iso;
val->ctx = ctx;
val->ptr = Global<Value>(iso, obj);
rtn.value = tracked_value(ctx, val);
return rtn;
}
void ObjectTemplateSetInternalFieldCount(TemplatePtr ptr, int field_count) {
LOCAL_TEMPLATE(ptr);
Local<ObjectTemplate> obj_tmpl = tmpl.As<ObjectTemplate>();
obj_tmpl->SetInternalFieldCount(field_count);
}
int ObjectTemplateInternalFieldCount(TemplatePtr ptr) {
LOCAL_TEMPLATE(ptr);
Local<ObjectTemplate> obj_tmpl = tmpl.As<ObjectTemplate>();
return obj_tmpl->InternalFieldCount();
}