Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions tests/function_properties.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
--TEST--
Test V8::executeString() : Set property on function
--SKIPIF--
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
--FILE--
<?php

$v8 = new V8Js();

$JS = <<< EOT
(function(exports) {
// begin module code
exports.hello = function() { return 'hello'; };
// end module code
return exports;
})({})
EOT;

$exports = $v8->executeString($JS, 'basic.js');
$exports->hello->foo = "bar";
$v8->func = $exports->hello;

$v8->executeString('print(PHP.func.foo + "\n");');

?>
===EOF===
--EXPECT--
bar
===EOF===
8 changes: 4 additions & 4 deletions v8js_v8object_class.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<v8::Value> v8obj = v8::Local<v8::Value>::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<v8::Object> jsObj = v8obj->ToObject();
Expand Down Expand Up @@ -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<v8::Value> v8obj = v8::Local<v8::Value>::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<v8::Object> jsObj = v8obj->ToObject();
Expand Down Expand Up @@ -166,7 +166,7 @@ static void v8js_v8object_write_property(zval *object, zval *member, zval *value
V8JS_CTX_PROLOGUE(obj->ctx);
v8::Local<v8::Value> v8obj = v8::Local<v8::Value>::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));
}
}
Expand All @@ -185,7 +185,7 @@ static void v8js_v8object_unset_property(zval *object, zval *member ZEND_HASH_KE
V8JS_CTX_PROLOGUE(obj->ctx);
v8::Local<v8::Value> v8obj = v8::Local<v8::Value>::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)));
}
}
Expand Down