I am trying to set the prototype of a v8::Object, but I can’t seem to get
it to work.
First I tried the following:
v8::Local<v8::Object> prot = v8::Object::New(isolate);
prot->Set(context, v8::String::NewFromUtf8(isolate,
"f").ToLocalChecked(), v8::Int32::New(isolate, 66));
context->Global()->SetPrototype(context, prot);
But I can’t access property f in Javascript:
// javascript:
f; // undefined
__proto__.f; // undefined
Then I tried constructing the prototype in place with the overloaded
Object::New(…) function:
v8::Local<v8::Name> n = v8::String::NewFromUtf8(isolate,
"what").ToLocalChecked();
v8::Local<v8::Value> v = v8::Number::New(isolate, 4.8);
auto ob = v8::Object::New(isolate);
auto glob = v8::Object::New(isolate, ob, &n, &v, 0);
The idea was to then emplace ‘glob’ into a Context::NewRemoteContext(). But
I can’t get that far, because the Object::New() function crashes. This
might have something to do with the extra property arguments—I’m not really
sure what they do, and the documentation doesn’t say anything about them.
But I’ve tried many different combinations with them, and I get the same
crash. I do get a stack trace here:
==== C stack trace ===============================
v8::base::debug::StackTrace::StackTrace [0x00007FFEEF84CB9B+27]
v8::platform::DefaultPlatform::GetStackTracePrinter
[0x00007FFEEFD5C508+72]
V8_Fatal [0x00007FFEEF82E8E2+210]
v8::base::SetDcheckFunction [0x00007FFEEF82E133+51]
v8::Object::New [0x00007FFE5E5B0DCC+492]
main [0x00007FF7E244AE4E+1566]
(C:\Users\lgoodacre\source\repos\v8_sandbox\v8_sandbox\Source.cpp:99)
invoke_main [0x00007FF7E244C999+57]
(d:\a01\_work\20\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:79)
__scrt_common_main_seh [0x00007FF7E244C83E+302]
(d:\a01\_work\20\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288)
__scrt_common_main [0x00007FF7E244C6FE+14]
(d:\a01\_work\20\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:331)
mainCRTStartup [0x00007FF7E244CA2E+14]
(d:\a01\_work\20\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp:17)
BaseThreadInitThunk [0x00007FFF39677034+20]
RtlUserThreadStart [0x00007FFF39A02651+33]
Can anyone tell me how I can set the prototype from within C++? I feel like
it shouldn’t be this hard.
(Note that I know how to do it using a FunctionTemplate. But I don’t think
that this will work in my case, as the I want to set the prototype
dynamically, so different instances have different prototypes).
--
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to the Google Groups
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/v8-users/bd4c730d-b74a-4e56-85dc-b9bc218b69a6n%40googlegroups.com.