Hi,
I want to use V8 as the scripting engine of my 3D modeler... but for the
moment, I have some troubles...
basicaly, I have a structre like this:
typedef struct
{
v8::Isolate* isolate;
v8::Handle<v8::ObjectTemplate> global;
v8::Handle<v8::Context> context;
v8::Handle<v8::Script> script;
}v8ScriptEngineDef;
a function to compile a script:
int scriptCompile(char *fileName, char *code, v8ScriptEngineDef *v8Engine,
scriptExternalFuncDef *externalFunc)
{
v8::HandleScope handle_scope(v8Engine->isolate);
v8Engine->global = v8::ObjectTemplate::New();
v8_create_file_obj(v8Engine->isolate, v8Engine->global);
v8_create_color_obj(v8Engine->isolate, v8Engine->global);
v8_create_image_obj(v8Engine->isolate, v8Engine->global);
v8_create_gui_obj(v8Engine->isolate, v8Engine->global);
v8Engine->global->Set(v8::String::NewFromUtf8(v8Engine->isolate,
"console"),
v8::FunctionTemplate::New(v8Engine->isolate,
v8_console));
v8Engine->context = v8::Context::New(v8Engine->isolate, NULL,
v8Engine->global);
if(v8Engine->context.IsEmpty()) {
scriptEngineAddToConsole(v8Engine, "Error creating context\n");
return FALSE;
}
v8Engine->context->Enter();
v8::TryCatch try_catch;
v8::Handle<v8::String> v8fileName =
v8::String::NewFromUtf8(v8Engine->isolate,
fileName);
v8::Handle<v8::String> v8code =
v8::String::NewFromUtf8(v8Engine->isolate, code);
v8Engine->script = v8::Script::Compile(v8code, v8fileName);
if(v8Engine->script.IsEmpty())
{
// Print errors that happened during compilation.
ReportException(v8Engine, v8Engine->isolate, &try_catch);
return false;
}
v8Engine->context->Exit();
// scriptRun(engine);
return TRUE;
}
and a running function:
int scriptRun(v8ScriptEngineDef *v8Engine)
{
v8::HandleScope handle_scope(v8Engine->isolate);
v8::TryCatch try_catch;
v8Engine->context->Enter();
v8::Handle<v8::Value> result = v8Engine->script->Run();
if (result.IsEmpty())
{
assert(try_catch.HasCaught());
// Print errors that happened during execution.
ReportException(v8Engine, v8Engine->isolate, &try_catch);
return false;
}
assert(!try_catch.HasCaught());
if (!result->IsUndefined())
{
// If all went well and the result wasn't undefined then print
// the returned value.
v8::String::Utf8Value str(result);
const char* cstr = *str;
scriptEngineAddToConsole(v8Engine, (char *)cstr);
}
v8Engine->context->Exit();
return true;
}
The problem is if I call the running function from the Compile function (in
comment), everythink is working fine.
But, If I call the compile fonction, then the run function... crash!!!
Can somebody explain me what I am doing wrong?
thanks,
Pierre
--
--
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/groups/opt_out.