Код перехватчиков V8 не работает

Я начал изучать V8, но я застрял в реализации перехватчиков. Я имею ошибку времени выполнения в этом коде.

#include "..\v8\\v8.h"#include "..\common\common.h"#include <iostream>
#include "JsPoint.h"#include "GlobalVar.h"
int main(int argc, char *argv[]) {
if( argc != 2 ) {
std::cout << "Usage: " << argv[0] << " < js file name > \n";
return 1;
}

using namespace v8;
v8::Locker locker;
v8::HandleScope scope;
v8::Handle<ObjectTemplate> globalTemplate = v8::ObjectTemplate::New();
Local<FunctionTemplate> pointTemplate;
Local<ObjectTemplate> instanceTemplate;

// ----------- Accessor -------------------------------------------------------------------------------
pointTemplate = FunctionTemplate::New(PointConstructor);
pointTemplate->SetClassName(String::New("Point"));
instanceTemplate = pointTemplate->InstanceTemplate();
instanceTemplate->SetInternalFieldCount(1);
instanceTemplate->SetAccessor(String::New("x"), AccessorGetter(PointGetX), AccessorSetter(PointSetX));
instanceTemplate->SetAccessor(String::New("y"), AccessorGetter(PointGetY), AccessorSetter(PointSetY));
// --------------end Accessor -------------------------------------------------------------------------

// In accessor we know what is the name after . like .x and .y
// but when you do not, use interceptors.
// ----------- Interceptor ----------------------------------------------------------------------------
Handle<ObjectTemplate> globalVarTemplate = ObjectTemplate::New();
//globalVarTemplate->NewInstance();
globalVarTemplate->SetInternalFieldCount(1);
globalVarTemplate->SetNamedPropertyHandler(GetGlobalVar, SetGlobalVar);
auto it = Persistent<ObjectTemplate>::New(globalVarTemplate);
Handle<ObjectTemplate> hit = it;
Handle<Object> gv_instance = hit->NewInstance();   // **Failing HERE !!!**
Handle<External> gv_to_set = External::New(MyGlobalVar::getInstance());
gv_instance->SetInternalField(0, gv_to_set);
//-------------- end Interceptor ----------------------------------------------------------------------

globalTemplate->Set(String::New("Global"), gv_instance, ReadOnly);
globalTemplate->Set(String::New("Point"), pointTemplate, ReadOnly);

Persistent<v8::Context> context = v8::Context::New(NULL, globalTemplate);
Context::Scope cscope = Context::Scope(context);

executeScript( argv[1], context );

context.Dispose();
v8::V8::Dispose();
return 0;
}

когда я закомментирую часть перехватчика, она работает отлично. Это не в NewInstance() Зов Перехватчика. Так как я новичок в V8, если вы найдете какую-либо другую ошибку, укажите на них тоже.

Благодарю.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]