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.