From a58f944804cf3209eef687de68200776c1abda3b Mon Sep 17 00:00:00 2001 From: Matt Kynaston Date: Tue, 3 Nov 2015 17:35:30 +0000 Subject: [PATCH] Experiment to see if #172 is easy to fix --- tests/function_properties.phpt | 29 +++++++++++++++++++++++++++++ v8js_v8object_class.cc | 8 ++++---- 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 tests/function_properties.phpt diff --git a/tests/function_properties.phpt b/tests/function_properties.phpt new file mode 100644 index 0000000..ec30a85 --- /dev/null +++ b/tests/function_properties.phpt @@ -0,0 +1,29 @@ +--TEST-- +Test V8::executeString() : Set property on function +--SKIPIF-- + +--FILE-- +executeString($JS, 'basic.js'); +$exports->hello->foo = "bar"; +$v8->func = $exports->hello; + +$v8->executeString('print(PHP.func.foo + "\n");'); + +?> +===EOF=== +--EXPECT-- +bar +===EOF=== diff --git a/v8js_v8object_class.cc b/v8js_v8object_class.cc index debabff..c51929d 100644 --- a/v8js_v8object_class.cc +++ b/v8js_v8object_class.cc @@ -63,7 +63,7 @@ static int v8js_v8object_has_property(zval *object, zval *member, int has_set_ex V8JS_CTX_PROLOGUE_EX(obj->ctx, retval); v8::Local v8obj = v8::Local::New(isolate, obj->v8obj); - if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject() && !v8obj->IsFunction()) + if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject()) { v8::Local jsObj = v8obj->ToObject(); @@ -123,7 +123,7 @@ static zval *v8js_v8object_read_property(zval *object, zval *member, int type ZE V8JS_CTX_PROLOGUE_EX(obj->ctx, retval); v8::Local v8obj = v8::Local::New(isolate, obj->v8obj); - if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject() && !v8obj->IsFunction()) + if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject()) { v8::Local jsObj = v8obj->ToObject(); @@ -166,7 +166,7 @@ static void v8js_v8object_write_property(zval *object, zval *member, zval *value V8JS_CTX_PROLOGUE(obj->ctx); v8::Local v8obj = v8::Local::New(isolate, obj->v8obj); - if (v8obj->IsObject() && !v8obj->IsFunction()) { + if (v8obj->IsObject()) { v8obj->ToObject()->ForceSet(V8JS_SYML(Z_STRVAL_P(member), Z_STRLEN_P(member)), zval_to_v8js(value, isolate TSRMLS_CC)); } } @@ -185,7 +185,7 @@ static void v8js_v8object_unset_property(zval *object, zval *member ZEND_HASH_KE V8JS_CTX_PROLOGUE(obj->ctx); v8::Local v8obj = v8::Local::New(isolate, obj->v8obj); - if (v8obj->IsObject() && !v8obj->IsFunction()) { + if (v8obj->IsObject()) { v8obj->ToObject()->Delete(V8JS_SYML(Z_STRVAL_P(member), Z_STRLEN_P(member))); } }