diff --git a/php_v8js_macros.h b/php_v8js_macros.h index cdca2e1..ba6a74e 100644 --- a/php_v8js_macros.h +++ b/php_v8js_macros.h @@ -63,9 +63,19 @@ extern "C" { #if ZEND_MODULE_API_NO >= 20100409 # define ZEND_HASH_KEY_DC , const zend_literal *key # define ZEND_HASH_KEY_CC , key +# define ZEND_HASH_KEY_NULL , NULL #else # define ZEND_HASH_KEY_DC # define ZEND_HASH_KEY_CC +# define ZEND_HASH_KEY_NULL +#endif + +/* method signatures of zend_update_property and zend_read_property were + * declared as 'char *' instead of 'const char *' before PHP 5.4 */ +#if ZEND_MODULE_API_NO >= 20100525 +# define V8JS_CONST +#else +# define V8JS_CONST (char *) #endif /* Global flags */ diff --git a/v8js_convert.cc b/v8js_convert.cc index b1e3cb5..525b4fe 100644 --- a/v8js_convert.cc +++ b/v8js_convert.cc @@ -461,8 +461,8 @@ static void php_v8js_fake_call_impl(const v8::FunctionCallbackInfo& i // okay, look up the method name and manually invoke it. const zend_object_handlers *h = Z_OBJ_HT_P(object); zend_function *method_ptr = - h->get_method(&object, (char*)method_name, method_name_len, - NULL TSRMLS_DC); + h->get_method(&object, (char*)method_name, method_name_len + ZEND_HASH_KEY_NULL TSRMLS_DC); if (method_ptr == NULL || (method_ptr->common.fn_flags & ZEND_ACC_PUBLIC) == 0 || (method_ptr->common.fn_flags & (ZEND_ACC_CTOR|ZEND_ACC_DTOR|ZEND_ACC_CLONE)) != 0) { @@ -590,7 +590,7 @@ static inline v8::Local php_v8js_named_property_callback(v8::Local php_v8js_named_property_callback(v8::Localhas_property(object, prop, 2, NULL TSRMLS_CC)) + if (!h->has_property(object, prop, 2 ZEND_HASH_KEY_NULL TSRMLS_CC)) ret_value = v8::Handle(); else { ret_value = V8JS_NULL; @@ -614,7 +614,7 @@ static inline v8::Local php_v8js_named_property_callback(v8::Local(); @@ -626,13 +626,13 @@ static inline v8::Local php_v8js_named_property_callback(v8::Localhas_property(object, prop, 0, NULL TSRMLS_CC)) { + if (h->has_property(object, prop, 0 ZEND_HASH_KEY_NULL TSRMLS_CC)) { ret_value = v8::Integer::NewFromUnsigned(v8::None); } else { ret_value = v8::Handle(); // empty handle } } else { - h->unset_property(object, prop, NULL TSRMLS_CC); + h->unset_property(object, prop ZEND_HASH_KEY_NULL TSRMLS_CC); ret_value = V8JS_BOOL(true); } zval_ptr_dtor(&prop);