mirror of
https://github.com/phpv8/v8js.git
synced 2024-12-22 14:01:53 +00:00
Create temporary HandleScope to get & call methods likewise, closes #33
This commit is contained in:
parent
1f4caaeead
commit
f90650d630
26
tests/function_call.phpt
Normal file
26
tests/function_call.phpt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
--TEST--
|
||||||
|
Test V8::executeString() : Call passed-back function (directly)
|
||||||
|
--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');
|
||||||
|
echo $exports->hello()."\n";
|
||||||
|
|
||||||
|
?>
|
||||||
|
===EOF===
|
||||||
|
--EXPECT--
|
||||||
|
hello
|
||||||
|
===EOF===
|
16
v8js.cc
16
v8js.cc
@ -242,9 +242,15 @@ static HashTable *php_v8js_v8_get_debug_info(zval *object, int *is_temp TSRMLS_D
|
|||||||
|
|
||||||
static zend_function *php_v8js_v8_get_method(zval **object_ptr, char *method, int method_len ZEND_HASH_KEY_DC TSRMLS_DC) /* {{{ */
|
static zend_function *php_v8js_v8_get_method(zval **object_ptr, char *method, int method_len ZEND_HASH_KEY_DC TSRMLS_DC) /* {{{ */
|
||||||
{
|
{
|
||||||
zend_function *f;
|
|
||||||
v8::Local<v8::String> jsKey = V8JS_STRL(method, method_len);
|
|
||||||
php_v8js_object *obj = (php_v8js_object *) zend_object_store_get_object(*object_ptr TSRMLS_CC);
|
php_v8js_object *obj = (php_v8js_object *) zend_object_store_get_object(*object_ptr TSRMLS_CC);
|
||||||
|
zend_function *f;
|
||||||
|
|
||||||
|
v8::Locker locker(obj->isolate);
|
||||||
|
v8::Isolate::Scope isolate_scope(obj->isolate);
|
||||||
|
v8::HandleScope local_scope(obj->isolate);
|
||||||
|
v8::Local<v8::Context> temp_context = v8::Context::New(obj->isolate);
|
||||||
|
v8::Context::Scope temp_scope(temp_context);
|
||||||
|
v8::Local<v8::String> jsKey = V8JS_STRL(method, method_len);
|
||||||
|
|
||||||
if (!obj->v8obj.IsEmpty() && obj->v8obj->IsObject() && !obj->v8obj->IsFunction()) {
|
if (!obj->v8obj.IsEmpty() && obj->v8obj->IsObject() && !obj->v8obj->IsFunction()) {
|
||||||
v8::Local<v8::Object> jsObj = obj->v8obj->ToObject();
|
v8::Local<v8::Object> jsObj = obj->v8obj->ToObject();
|
||||||
@ -283,6 +289,12 @@ static int php_v8js_v8_call_method(char *method, INTERNAL_FUNCTION_PARAMETERS) /
|
|||||||
zend_get_parameters_array_ex(argc, argv);
|
zend_get_parameters_array_ex(argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v8::Locker locker(obj->isolate);
|
||||||
|
v8::Isolate::Scope isolate_scope(obj->isolate);
|
||||||
|
v8::HandleScope local_scope(obj->isolate);
|
||||||
|
v8::Local<v8::Context> temp_context = v8::Context::New(obj->isolate);
|
||||||
|
v8::Context::Scope temp_scope(temp_context);
|
||||||
|
|
||||||
v8::Local<v8::String> method_name = V8JS_SYML(method, strlen(method));
|
v8::Local<v8::String> method_name = V8JS_SYML(method, strlen(method));
|
||||||
v8::Local<v8::Object> v8obj = obj->v8obj->ToObject();
|
v8::Local<v8::Object> v8obj = obj->v8obj->ToObject();
|
||||||
v8::Local<v8::Function> cb;
|
v8::Local<v8::Function> cb;
|
||||||
|
Loading…
Reference in New Issue
Block a user