Skip to content

Commit 33d2de5

Browse files
committed
Merge pull request #173 from kynx/function-properties
Added ability to set properties on V8Function
2 parents 7f194fb + a58f944 commit 33d2de5

File tree

2 files changed

+33
-4
lines changed

2 files changed

+33
-4
lines changed

tests/function_properties.phpt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--TEST--
2+
Test V8::executeString() : Set property on function
3+
--SKIPIF--
4+
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
5+
--FILE--
6+
<?php
7+
8+
$v8 = new V8Js();
9+
10+
$JS = <<< EOT
11+
(function(exports) {
12+
// begin module code
13+
exports.hello = function() { return 'hello'; };
14+
// end module code
15+
return exports;
16+
})({})
17+
EOT;
18+
19+
$exports = $v8->executeString($JS, 'basic.js');
20+
$exports->hello->foo = "bar";
21+
$v8->func = $exports->hello;
22+
23+
$v8->executeString('print(PHP.func.foo + "\n");');
24+
25+
?>
26+
===EOF===
27+
--EXPECT--
28+
bar
29+
===EOF===

v8js_v8object_class.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ static int v8js_v8object_has_property(zval *object, zval *member, int has_set_ex
6363
V8JS_CTX_PROLOGUE_EX(obj->ctx, retval);
6464
v8::Local<v8::Value> v8obj = v8::Local<v8::Value>::New(isolate, obj->v8obj);
6565

66-
if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject() && !v8obj->IsFunction())
66+
if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject())
6767
{
6868

6969
v8::Local<v8::Object> jsObj = v8obj->ToObject();
@@ -123,7 +123,7 @@ static zval *v8js_v8object_read_property(zval *object, zval *member, int type ZE
123123
V8JS_CTX_PROLOGUE_EX(obj->ctx, retval);
124124
v8::Local<v8::Value> v8obj = v8::Local<v8::Value>::New(isolate, obj->v8obj);
125125

126-
if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject() && !v8obj->IsFunction())
126+
if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject())
127127
{
128128

129129
v8::Local<v8::Object> jsObj = v8obj->ToObject();
@@ -166,7 +166,7 @@ static void v8js_v8object_write_property(zval *object, zval *member, zval *value
166166
V8JS_CTX_PROLOGUE(obj->ctx);
167167
v8::Local<v8::Value> v8obj = v8::Local<v8::Value>::New(isolate, obj->v8obj);
168168

169-
if (v8obj->IsObject() && !v8obj->IsFunction()) {
169+
if (v8obj->IsObject()) {
170170
v8obj->ToObject()->ForceSet(V8JS_SYML(Z_STRVAL_P(member), Z_STRLEN_P(member)), zval_to_v8js(value, isolate TSRMLS_CC));
171171
}
172172
}
@@ -185,7 +185,7 @@ static void v8js_v8object_unset_property(zval *object, zval *member ZEND_HASH_KE
185185
V8JS_CTX_PROLOGUE(obj->ctx);
186186
v8::Local<v8::Value> v8obj = v8::Local<v8::Value>::New(isolate, obj->v8obj);
187187

188-
if (v8obj->IsObject() && !v8obj->IsFunction()) {
188+
if (v8obj->IsObject()) {
189189
v8obj->ToObject()->Delete(V8JS_SYML(Z_STRVAL_P(member), Z_STRLEN_P(member)));
190190
}
191191
}

0 commit comments

Comments
 (0)