Are you linking against a debug version of v8? Also please post a stack
trace of where your code is failing.
On Monday, April 24, 2017 at 9:17:15 PM UTC-7, AleK Shmakov wrote:
>
> Thx Zac, my best bugged code is:
> void GetPointX(Local<String> property,
> const PropertyCallbackInfo<Value>& info) {
> Local<Object> self = info.Holder();
> Local<External> wrap =
> Local<External>::Cast(self->GetInternalField(0));
> void* ptr = wrap->Value();
> int value = static_cast<Point*>(ptr)->x_;
> info.GetReturnValue().Set(value);
> }
>
> void SetPointX(Local<String> property, Local<Value> value,
> const PropertyCallbackInfo<void>& info) {
> Local<Object> self = info.Holder();
> Local<External> wrap =
> Local<External>::Cast(self->GetInternalField(0));
> void* ptr = wrap->Value();
> static_cast<Point*>(ptr)->x_ = value->Int32Value();
> }
>
> void v8_Point(const v8::FunctionCallbackInfo<v8::Value>& args) {
> printf("Is constructor call: %s\n", args.IsConstructCall()?"yes":"no");
> Point * p = new Point(12);
> printf("Internal field count: %d\n",args.This()->InternalFieldCount());
> args.This()->SetInternalField(0, External::New(args.GetIsolate(), p));
> args.GetReturnValue().Set(args.This());
> }
>
> ManagerV8::ManagerV8() {
> const char * temp_cc1 = "";
> V8::InitializeICUDefaultLocation(temp_cc1);
> V8::InitializeExternalStartupData(temp_cc1);
> platform = platform::CreateDefaultPlatform();
> V8::InitializePlatform(platform);
> V8::Initialize();
> };
>
> ManagerV8::~ManagerV8() {
> V8::Dispose();
> V8::ShutdownPlatform();
> delete platform;
> }
>
> std::string ManagerV8::v8_execute(const char* scriptSource, Point*
> shareVar) {
> Isolate::CreateParams create_params;
> create_params.array_buffer_allocator =
> v8::ArrayBuffer::Allocator::NewDefaultAllocator();
> std::string temp_variable_result;
>
> Isolate* isolate = Isolate::New(create_params);
> {
> Isolate::Scope isolate_scope(isolate);
> HandleScope handle_scope(isolate);
> Local<ObjectTemplate> global_templ = ObjectTemplate::New(isolate);
> Local<FunctionTemplate> point_constructor =
> FunctionTemplate::New(isolate, v8_Point);
> point_constructor->InstanceTemplate()->SetInternalFieldCount(1);
>
> point_constructor->InstanceTemplate()->SetAccessor(String::NewFromUtf8(isolate,
>
> "x"), GetPointX, SetPointX);
>
> Local<Context> context = Context::New(isolate, NULL, global_templ);
> Context::Scope context_scope(context);
>
> Local<String> source = String::NewFromUtf8(isolate, scriptSource,
> NewStringType::kNormal).ToLocalChecked();
> Local<Script> script = Script::Compile(context,
> source).ToLocalChecked();
> if(!script.IsEmpty()) {
> Local<Value> result = script->Run(context).ToLocalChecked();
> String::Utf8Value utf8(result);
> temp_variable_result = *utf8;
> }
> }
>
> isolate->Dispose();
> delete create_params.array_buffer_allocator;
> return temp_variable_result;
> }
> And the header:
> class Point {
> public:
> Point(int x) : x_(x) { }
> int x_;
> };
>
> class ManagerV8 {
> Platform* platform;
>
> public:
> int x_;
>
> ManagerV8();
> ~ManagerV8();
>
> std::string v8_execute(const char* scriptSource, Point* shareVar);
> };
> As the result of JS code "*x+1;*" is:
> <unknown>:12: Uncaught ReferenceError: x is not defined
>
> #
> # Fatal error in v8::ToLocalChecked
> # Empty MaybeLocal.
> #
>
> Received signal 4 ILL_ILLOPN 000000cf345f
>
> ==== C stack trace ===============================
>
> [0x000000cf21ef]
> [0x7f06b9b088d0]
> [0x000000cf345f]
> [0x000002709e28]
> [end of stack trace]
>
> All this code based on stackoverflow and Embedder's guide.
> Clear code of Embedder's guide don't work at all:
>
> ==== C stack trace ===============================
>
> [0x000000cf1dbf]
> [0x7fb45a6998d0]
> [0x0000004a2851]
> [0x00000073959e]
> [0x00000078534e]
> [0x000000784a2d]
> [0x00000072a8b7]
> [0x00000072b058]
> [0x0000007322fc]
> [0x2b4f6cd840dd]
> [end of stack trace]
>
>
>
>
>
> вторник, 25 апреля 2017 г., 6:41:29 UTC+7 пользователь Zac Hansen написал:
>>
>> it looks at least pretty close. can you post some code and say what
>> specific problems you're having?
>>
>> On Thursday, April 20, 2017 at 12:57:18 AM UTC-7, AleK Shmakov wrote:
>>>
>>> "Embedder's Guide" <https://github.com/v8/v8/wiki/Embedder%27s-Guide>
>>> unfotunatelly is not valid.
>>>
>>
--
--
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].
For more options, visit https://groups.google.com/d/optout.