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
v8-users@googlegroups.com
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 v8-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to