diff --git a/tests/function_passback2.phpt b/tests/function_passback2.phpt new file mode 100644 index 0000000..b13a4d1 --- /dev/null +++ b/tests/function_passback2.phpt @@ -0,0 +1,28 @@ +--TEST-- +Test V8::executeString() : Call passed-back function (property access) +--SKIPIF-- + +--FILE-- +executeString($JS, 'basic.js'); +$v8->func = $exports->hello; + +echo $v8->executeString('PHP.func();')."\n"; + +?> +===EOF=== +--EXPECT-- +hello +===EOF=== diff --git a/v8js.cc b/v8js.cc index 34d9d10..e48bd11 100644 --- a/v8js.cc +++ b/v8js.cc @@ -118,6 +118,12 @@ static zval *php_v8js_v8_read_property(zval *object, zval *member, int type ZEND if (Z_TYPE_P(member) == IS_STRING && obj->v8obj->IsObject() && !obj->v8obj->IsFunction()) { + v8::Locker locker(obj->isolate); + v8::Isolate::Scope isolate_scope(obj->isolate); + v8::HandleScope local_scope(obj->isolate); + v8::Local temp_context = v8::Context::New(obj->isolate); + v8::Context::Scope temp_scope(temp_context); + v8::Local jsObj = obj->v8obj->ToObject(); v8::Local jsKey = V8JS_STRL(Z_STRVAL_P(member), Z_STRLEN_P(member)); v8::Local jsVal;