@@ -31,20 +31,17 @@ php_v8_callback_info_t * php_v8_callback_info_fetch_object(zend_object *obj) {
31
31
return (php_v8_callback_info_t *)((char *)obj - XtOffsetOf (php_v8_callback_info_t , std));
32
32
}
33
33
34
- void php_v8_callback_info_invalidate (zval *val) {
35
- PHP_V8_CALLBACK_INFO_FETCH_INTO (val, php_v8_callback_info);
36
- php_v8_callback_info->php_v8_isolate = NULL ;
37
-
38
- if (!Z_ISUNDEF (php_v8_callback_info->retval )) {
39
- php_v8_return_value_mark_expired (&php_v8_callback_info->retval );
34
+ void php_v8_callback_info_invalidate (php_v8_callback_info_t *php_v8_callback_info) {
35
+ if (php_v8_callback_info->php_v8_return_value ) {
36
+ php_v8_return_value_mark_expired (php_v8_callback_info->php_v8_return_value );
40
37
}
41
38
}
42
39
43
40
44
41
static HashTable * php_v8_callback_info_gc (zval *object, zval **table, int *n) {
45
42
PHP_V8_CALLBACK_INFO_FETCH_INTO (object, php_v8_callback_info);
46
43
47
- int size = 2 ; // args + retval
44
+ int size = 2 ; // args + php_v8_return_value->this_ptr
48
45
49
46
if (php_v8_callback_info->gc_data_count < size) {
50
47
php_v8_callback_info->gc_data = (zval *)safe_erealloc (php_v8_callback_info->gc_data , size, sizeof (zval), 0 );
@@ -53,7 +50,7 @@ static HashTable * php_v8_callback_info_gc(zval *object, zval **table, int *n) {
53
50
php_v8_callback_info->gc_data_count = size;
54
51
55
52
ZVAL_COPY_VALUE (&php_v8_callback_info->gc_data [0 ], &php_v8_callback_info->args );
56
- ZVAL_COPY_VALUE (&php_v8_callback_info->gc_data [1 ], &php_v8_callback_info->retval );
53
+ ZVAL_COPY_VALUE (&php_v8_callback_info->gc_data [1 ], &php_v8_callback_info->php_v8_return_value -> this_ptr );
57
54
58
55
*table = php_v8_callback_info->gc_data ;
59
56
*n = php_v8_callback_info->gc_data_count ;
@@ -93,8 +90,12 @@ void php_v8_callback_info_free(zend_object *object) {
93
90
delete php_v8_callback_info->holder_obj ;
94
91
}
95
92
96
- if (!Z_ISUNDEF (php_v8_callback_info->retval )) {
97
- zval_ptr_dtor (&php_v8_callback_info->retval );
93
+ if (php_v8_callback_info->php_v8_return_value ) {
94
+ if (!Z_ISUNDEF (php_v8_callback_info->php_v8_return_value ->this_ptr )) {
95
+ zval_ptr_dtor (&php_v8_callback_info->php_v8_return_value ->this_ptr );
96
+ }
97
+
98
+ php_v8_callback_info->php_v8_return_value = NULL ;
98
99
}
99
100
100
101
if (!Z_ISUNDEF (php_v8_callback_info->args )) {
@@ -186,7 +187,17 @@ static PHP_METHOD(V8CallbackInfo, GetReturnValue) {
186
187
PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
187
188
PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT (php_v8_callback_info);
188
189
189
- RETVAL_ZVAL (&php_v8_callback_info->retval , 1 , 0 );
190
+ RETVAL_ZVAL (&php_v8_callback_info->php_v8_return_value ->this_ptr , 1 , 0 );
191
+ }
192
+
193
+ static PHP_METHOD (V8CallbackInfo, InContext) {
194
+ if (zend_parse_parameters_none () == FAILURE) {
195
+ return ;
196
+ }
197
+
198
+ PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
199
+
200
+ RETURN_BOOL (PHP_V8_V8_CALLBACK_INFO_IN_CONTEXT (php_v8_callback_info));
190
201
}
191
202
192
203
@@ -205,13 +216,17 @@ ZEND_END_ARG_INFO()
205
216
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_callback_info_GetReturnValue, ZEND_RETURN_VALUE, 0 , IS_OBJECT, PHP_V8_NS " \\ ReturnValue" , 0 )
206
217
ZEND_END_ARG_INFO()
207
218
219
+ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_callback_info_InContext, ZEND_RETURN_VALUE, 0 , _IS_BOOL, NULL , 0 )
220
+ ZEND_END_ARG_INFO()
221
+
208
222
209
223
static const zend_function_entry php_v8_callback_info_methods[] = {
210
224
PHP_ME (V8CallbackInfo, This, arginfo_v8_callback_info_This, ZEND_ACC_PUBLIC)
211
225
PHP_ME (V8CallbackInfo, Holder, arginfo_v8_callback_info_Holder, ZEND_ACC_PUBLIC)
212
226
PHP_ME (V8CallbackInfo, GetIsolate, arginfo_v8_callback_info_GetIsolate, ZEND_ACC_PUBLIC)
213
227
PHP_ME (V8CallbackInfo, GetContext, arginfo_v8_callback_info_GetContext, ZEND_ACC_PUBLIC)
214
228
PHP_ME (V8CallbackInfo, GetReturnValue, arginfo_v8_callback_info_GetReturnValue, ZEND_ACC_PUBLIC)
229
+ PHP_ME (V8CallbackInfo, InContext, arginfo_v8_callback_info_InContext, ZEND_ACC_PUBLIC)
215
230
PHP_FE_END
216
231
};
217
232
0 commit comments