@@ -26,178 +26,66 @@ zend_class_entry *php_v8_callback_info_class_entry;
2626static zend_object_handlers php_v8_callback_info_object_handlers;
2727
2828
29- void php_v8_callback_info_invalidate (php_v8_callback_info_t *php_v8_callback_info) {
30- if (php_v8_callback_info->php_v8_return_value ) {
31- php_v8_return_value_mark_expired (php_v8_callback_info->php_v8_return_value );
32- }
33- }
34-
35-
36- static HashTable * php_v8_callback_info_gc (zval *object, zval **table, int *n) {
37- PHP_V8_CALLBACK_INFO_FETCH_INTO (object, php_v8_callback_info);
38-
39- int size = 2 ; // args + php_v8_return_value->this_ptr
40-
41- if (php_v8_callback_info->gc_data_count < size) {
42- php_v8_callback_info->gc_data = (zval *)safe_erealloc (php_v8_callback_info->gc_data , size, sizeof (zval), 0 );
43- }
44-
45- php_v8_callback_info->gc_data_count = size;
46-
47- ZVAL_COPY_VALUE (&php_v8_callback_info->gc_data [0 ], &php_v8_callback_info->args );
48- ZVAL_COPY_VALUE (&php_v8_callback_info->gc_data [1 ], &php_v8_callback_info->php_v8_return_value ->this_ptr );
49-
50- *table = php_v8_callback_info->gc_data ;
51- *n = php_v8_callback_info->gc_data_count ;
52-
53- return zend_std_get_properties (object);
54- }
55-
56- void php_v8_callback_info_free (zend_object *object) {
57- php_v8_callback_info_t *php_v8_callback_info = php_v8_callback_info_fetch_object (object);
58-
59- if (php_v8_callback_info->length ) {
60-
61- for (int i=0 ; i< php_v8_callback_info->length ; i++) {
62- if (PHP_V8_ISOLATE_HAS_VALID_HANDLE (php_v8_callback_info)) {
63- php_v8_callback_info->arguments [i]->Reset ();
64- }
65-
66- delete php_v8_callback_info->arguments [i];
67- }
68-
69- efree (php_v8_callback_info->arguments );
70- }
71-
72- if (php_v8_callback_info->this_obj ) {
73- if (PHP_V8_ISOLATE_HAS_VALID_HANDLE (php_v8_callback_info)) {
74- php_v8_callback_info->this_obj ->Reset ();
75- }
76-
77- delete php_v8_callback_info->this_obj ;
78- }
79-
80- if (php_v8_callback_info->holder_obj ) {
81- if (PHP_V8_ISOLATE_HAS_VALID_HANDLE (php_v8_callback_info)) {
82- php_v8_callback_info->holder_obj ->Reset ();
83- }
84-
85- delete php_v8_callback_info->holder_obj ;
86- }
87-
88- if (php_v8_callback_info->php_v8_return_value ) {
89- if (!Z_ISUNDEF (php_v8_callback_info->php_v8_return_value ->this_ptr )) {
90- zval_ptr_dtor (&php_v8_callback_info->php_v8_return_value ->this_ptr );
91- }
92-
93- php_v8_callback_info->php_v8_return_value = NULL ;
94- }
95-
96- if (!Z_ISUNDEF (php_v8_callback_info->args )) {
97- zval_ptr_dtor (&php_v8_callback_info->args );
98- }
99-
100- if (php_v8_callback_info->gc_data ) {
101- efree (php_v8_callback_info->gc_data );
102- }
103-
104- zend_object_std_dtor (&php_v8_callback_info->std );
105- }
106-
107- static zend_object * php_v8_callback_info_ctor (zend_class_entry *ce) {
108-
109- php_v8_callback_info_t *php_v8_callback_info;
110-
111- php_v8_callback_info = (php_v8_callback_info_t *) ecalloc (1 , sizeof (php_v8_callback_info_t ) + zend_object_properties_size (ce));
112-
113- zend_object_std_init (&php_v8_callback_info->std , ce);
114- object_properties_init (&php_v8_callback_info->std , ce);
115-
116- php_v8_callback_info->this_obj = new v8::Persistent<v8::Object>();
117- php_v8_callback_info->holder_obj = new v8::Persistent<v8::Object>();
118-
119- php_v8_callback_info->std .handlers = &php_v8_callback_info_object_handlers;
120-
121- return &php_v8_callback_info->std ;
122- }
123-
124-
12529static PHP_METHOD (V8CallbackInfo, GetIsolate) {
30+ zval rv;
31+ zval *tmp;
32+
12633 if (zend_parse_parameters_none () == FAILURE) {
12734 return ;
12835 }
12936
130- PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
131- PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT (php_v8_callback_info);
132-
133- ZVAL_OBJ (return_value, &php_v8_callback_info->php_v8_isolate ->std );
134- Z_ADDREF_P (return_value);
37+ tmp = zend_read_property (this_ce, getThis (), ZEND_STRL (" isolate" ), 0 , &rv);
38+ ZVAL_COPY (return_value, tmp);
13539}
13640
13741static PHP_METHOD (V8CallbackInfo, GetContext) {
42+ zval rv;
43+ zval *tmp;
44+
13845 if (zend_parse_parameters_none () == FAILURE) {
13946 return ;
14047 }
14148
142- PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
143- PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT (php_v8_callback_info);
144-
145- ZVAL_OBJ (return_value, &php_v8_callback_info->php_v8_context ->std );
146- Z_ADDREF_P (return_value);
49+ tmp = zend_read_property (this_ce, getThis (), ZEND_STRL (" context" ), 0 , &rv);
50+ ZVAL_COPY (return_value, tmp);
14751}
14852
14953static PHP_METHOD (V8CallbackInfo, This) {
54+ zval rv;
55+ zval *tmp;
56+
15057 if (zend_parse_parameters_none () == FAILURE) {
15158 return ;
15259 }
15360
154- PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
155- PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT (php_v8_callback_info);
156-
157- v8::Isolate *isolate = php_v8_callback_info->php_v8_isolate ->isolate ;
158-
159- v8::Local<v8::Object> local_object = v8::Local<v8::Object>::New (isolate, *php_v8_callback_info->this_obj );
160-
161- php_v8_get_or_create_value (return_value, local_object, php_v8_callback_info->php_v8_isolate );
61+ tmp = zend_read_property (this_ce, getThis (), ZEND_STRL (" this" ), 0 , &rv);
62+ ZVAL_COPY (return_value, tmp);
16263}
16364
16465static PHP_METHOD (V8CallbackInfo, Holder) {
66+ zval rv;
67+ zval *tmp;
68+
16569 if (zend_parse_parameters_none () == FAILURE) {
16670 return ;
16771 }
16872
169- PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
170- PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT (php_v8_callback_info);
171-
172- v8::Isolate *isolate = php_v8_callback_info->php_v8_isolate ->isolate ;
173-
174- v8::Local<v8::Object> local_object = v8::Local<v8::Object>::New (isolate, *php_v8_callback_info->holder_obj );
175-
176- php_v8_get_or_create_value (return_value, local_object, php_v8_callback_info->php_v8_isolate );
73+ tmp = zend_read_property (this_ce, getThis (), ZEND_STRL (" holder" ), 0 , &rv);
74+ ZVAL_COPY (return_value, tmp);
17775}
17876
17977static PHP_METHOD (V8CallbackInfo, GetReturnValue) {
180- if (zend_parse_parameters_none () == FAILURE) {
181- return ;
182- }
78+ zval rv;
79+ zval *tmp;
18380
184- PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
185- PHP_V8_V8_CALLBACK_INFO_CHECK_IN_CONTEXT (php_v8_callback_info);
186-
187- RETVAL_ZVAL (&php_v8_callback_info->php_v8_return_value ->this_ptr , 1 , 0 );
188- }
189-
190- static PHP_METHOD (V8CallbackInfo, InContext) {
19181 if (zend_parse_parameters_none () == FAILURE) {
19282 return ;
19383 }
19484
195- PHP_V8_CALLBACK_INFO_FETCH_WITH_CHECK (getThis (), php_v8_callback_info);
196-
197- RETURN_BOOL (PHP_V8_V8_CALLBACK_INFO_IN_CONTEXT (php_v8_callback_info));
85+ tmp = zend_read_property (this_ce, getThis (), ZEND_STRL (" return_value" ), 0 , &rv);
86+ ZVAL_COPY (return_value, tmp);
19887}
19988
200-
20189PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX (arginfo_v8_callback_info_GetIsolate, ZEND_RETURN_VALUE, 0 , V8\\Isolate, 0 )
20290ZEND_END_ARG_INFO()
20391
@@ -213,17 +101,12 @@ ZEND_END_ARG_INFO()
213101PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_v8_callback_info_GetReturnValue, ZEND_RETURN_VALUE, 0 , V8\\ReturnValue, 0 )
214102ZEND_END_ARG_INFO()
215103
216- PHP_V8_ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_v8_callback_info_InContext, ZEND_RETURN_VALUE, 0 , _IS_BOOL, 0 )
217- ZEND_END_ARG_INFO()
218-
219-
220104static const zend_function_entry php_v8_callback_info_methods[] = {
221105 PHP_ME (V8CallbackInfo, This, arginfo_v8_callback_info_This, ZEND_ACC_PUBLIC)
222106 PHP_ME (V8CallbackInfo, Holder, arginfo_v8_callback_info_Holder, ZEND_ACC_PUBLIC)
223107 PHP_ME (V8CallbackInfo, GetIsolate, arginfo_v8_callback_info_GetIsolate, ZEND_ACC_PUBLIC)
224108 PHP_ME (V8CallbackInfo, GetContext, arginfo_v8_callback_info_GetContext, ZEND_ACC_PUBLIC)
225109 PHP_ME (V8CallbackInfo, GetReturnValue, arginfo_v8_callback_info_GetReturnValue, ZEND_ACC_PUBLIC)
226- PHP_ME (V8CallbackInfo, InContext, arginfo_v8_callback_info_InContext, ZEND_ACC_PUBLIC)
227110 PHP_FE_END
228111};
229112
@@ -232,13 +115,14 @@ PHP_MINIT_FUNCTION (php_v8_callback_info) {
232115
233116 INIT_NS_CLASS_ENTRY (ce, PHP_V8_NS, " CallbackInfo" , php_v8_callback_info_methods);
234117 this_ce = zend_register_internal_class (&ce);
235- this_ce->create_object = php_v8_callback_info_ctor;
236118
237119 memcpy (&php_v8_callback_info_object_handlers, zend_get_std_object_handlers (), sizeof (zend_object_handlers));
238120
239- php_v8_callback_info_object_handlers.offset = XtOffsetOf (php_v8_callback_info_t , std);
240- php_v8_callback_info_object_handlers.free_obj = php_v8_callback_info_free;
241- php_v8_callback_info_object_handlers.get_gc = php_v8_callback_info_gc;
121+ zend_declare_property_null (this_ce, ZEND_STRL (" isolate" ), ZEND_ACC_PRIVATE);
122+ zend_declare_property_null (this_ce, ZEND_STRL (" context" ), ZEND_ACC_PRIVATE);
123+ zend_declare_property_null (this_ce, ZEND_STRL (" this" ), ZEND_ACC_PRIVATE);
124+ zend_declare_property_null (this_ce, ZEND_STRL (" holder" ), ZEND_ACC_PRIVATE);
125+ zend_declare_property_null (this_ce, ZEND_STRL (" return_value" ), ZEND_ACC_PRIVATE);
242126
243127 return SUCCESS;
244128}
0 commit comments