Hello,
 
can i pass a context as argument to a function, execute a script there and 
then use the same context again when the function returns. Or how can I 
copy the state of the context and return it, so I can use it outside the 
function. Or pass the context by reference? I use here local context. In my 
case this function is node.js.

I am trying to embed node.js into my application. If i run the following 
code with executeScript (commented) it's ok, the C++ functions are exposed 
to JavaScript, the script is run and then the C++ functions are run. But I 
want to use the APIs of node.js in my functions. So instead of 
executeScript i use node.js. I built node.js as shared library and pass to 
node the Isolate from my app. I also pass the context as parameter:

        Isolate* isolate = Isolate::GetCurrent();         
        HandleScope handleScope(isolate);            
        Handle<String> source = readFile(isolate, param);

        Handle<ObjectTemplate> global = ObjectTemplate::New(isolate);
    //Log
    global->Set(String::NewFromUtf8(isolate, "log"),
              FunctionTemplate::New(isolate, LogCallback));
              
     Handle<Context> context = Context::New(isolate, NULL, global);     
    context_.Reset(isolate, context);
            
    //Context::Scope contextScope(context);
    //if (!executeScript(source)) return;
    
    char *argv_n[] = {(char*)"node", (char*)"sourceOperator.js", NULL};
    
    int argc_n = sizeof(argv_n) / sizeof(char*) - 1;
    
    Local<Context> new_context;
    new_context = node::Start2(argc_n, argv_n, context, global);
    
    Context::Scope contextScope2(new_context);
    stateInitFunctionJS.Reset(isolate, 
registerFunction((char*)"stateInit"));   

/////////////////////////////////
modified node Start:
Local<Context> Start2(int argc, char** argv, Handle<Context> &context)
Then i pass the context to CreateEnvironment 
...
In Start() of node.cc i commented some lines so the V8 will not be disposed

...
   //code = EmitExit(env);
      //RunAtExit(env);
    }
    
    //env->Dispose();
    //env = NULL;
    printf("Before return  \n");
    return handle_scope.Escape(env->context());
    
  //CHECK_NE(node_isolate, NULL);
  //node_isolate->Dispose();
  //node_isolate = NULL;
  //V8::Dispose();

  //delete[] exec_argv;
  //exec_argv = NULL;

  //return 1;// code;
....
And then i have in the console:

Before return  
Function stateInit not found!

If i use console.log in the JavaScript file it is executed correctly, but 
my functions don't execute. 
And do I have to enter a context before node::Start()?

Thanks, 
Peter Stoyanov

-- 
-- 
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.

Reply via email to