瀏覽代碼

Make FLAG_FORCE_ARRAY not affect V8Function objects, #closes 160

Stefan Siegl 9 年之前
父節點
當前提交
53995ac616
共有 2 個文件被更改,包括 24 次插入1 次删除
  1. 23 0
      tests/issue_160_basic.phpt
  2. 1 1
      v8js_convert.cc

+ 23 - 0
tests/issue_160_basic.phpt

@@ -0,0 +1,23 @@
+--TEST--
+Test V8::executeString() : Issue #160 V8Function affected by V8Js::FLAG_FORCE_ARRAY
+--SKIPIF--
+<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
+--FILE--
+<?php
+$v8 = new V8Js();
+
+$JS = <<<EOT
+(function(foo) { print(foo); });
+EOT;
+
+$func = $v8->executeString($JS, 'test', V8Js::FLAG_FORCE_ARRAY);
+
+var_dump($func);
+$func("Test-Foo Func Call\n");
+?>
+===EOF===
+--EXPECTF--
+object(V8Function)#%d (0) {
+}
+Test-Foo Func Call
+===EOF===

+ 1 - 1
v8js_convert.cc

@@ -244,7 +244,7 @@ int v8js_to_zval(v8::Handle<v8::Value> jsValue, zval *return_value, int flags, v
 			RETVAL_ZVAL(object, 1, 0);
 			return SUCCESS;
 		}
-		if ((flags & V8JS_FLAG_FORCE_ARRAY) || jsValue->IsArray()) {
+		if ((flags & V8JS_FLAG_FORCE_ARRAY && !jsValue->IsFunction()) || jsValue->IsArray()) {
 			array_init(return_value);
 			return v8js_get_properties_hash(jsValue, Z_ARRVAL_P(return_value), flags, isolate TSRMLS_CC);
 		} else {