Right. Actually the JS function was just failing, but the 1st call was
within a v8::TryCatch so I didn't notice. Doh.

On Apr 20, 11:44 am, Anthony <[email protected]> wrote:
> New to v8, I'm compiling a script that returns a JS object, and I'd
> like to keep a handle to a function that is a property of that object.
> I'm creating a persistent handle to it, but it's not working. I assume
> because the underlying handle is going out of scope?
>
> v8::Persistent<v8::Context> context;
> v8::Persistent<v8::Function> update;
>
> void Foo() {
>         v8::HandleScope handle_scope;
>
>         context = v8::Context::New(NULL, global);
>         v8::Context::Scope context_scope(context);
>
>         v8::Local<v8::Script> script = // script compiles fine
>
>         v8::Local<v8::Value> result = script->Run();
>         v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast(result);
>         // i've tried creating a persistent handle to obj and using
> that from here down. doesn't work either
>         v8::Local<v8::Value> update_val = 
> obj->Get(v8::Local<v8::String>(v8::String::New("update")));
>
>         v8::Local<v8::Function> update_fun =
> v8::Local<v8::Function>::Cast(update_val);
>         // create persistent handle to keep around
>         update = v8::Persistent<v8::Function>::New(update_fun);
>
>        // calling now works fine
>         v8::Local<v8::Number> v = v8::Number::New(0.2);
>         v8::Local<v8::Value> val[1] = { v };
>         update->Call(context->Global(), 1, val);
>
> }
>
> void Bar() {
>         // calling here doesn't work
>         v8::Local<v8::Number> v = v8::Number::New(0.2);
>         v8::Local<v8::Value> val[1] = { v };
>         update->Call(context->Global(), 1, val);
>
> }

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to