To really store something:

        Persistent<Value> MyVal = Persistent<Value>::New( Value::New() );

Replace Value with something like Array, for example. That will give you an 
ever-existing value, not devoured by the GC. That, at least, works in my case 
o.o;
Am Sa. Jan. 25 2014 19:07:14 schrieb mh:

> Hi.
> 
> A cursory look at the code tells me you aren't quite aware of the existence 
> of the "monster" called GC in v8. You can't just
> store the return value of a call for later use, there ain't any guarantee  
> the monster won't devour it before you get to it :-). 
> Search for the term Persistent in this group, and maybe you will find the 
> answer. Hope it helps.
> 
> 
> 
> On Friday, January 24, 2014 2:23:06 PM UTC-6, Pierre Saunier wrote:
> 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