|
34 | 34 | #if ZEND_DEBUG
|
35 | 35 | static zend_class_entry *zend_test_interface;
|
36 | 36 | static zend_class_entry *zend_test_class;
|
| 37 | +static zend_object_handlers zend_test_class_handlers; |
37 | 38 | #endif
|
38 | 39 |
|
39 | 40 | static ZEND_FUNCTION(zend_version);
|
@@ -262,6 +263,50 @@ ZEND_END_ARG_INFO()
|
262 | 263 |
|
263 | 264 | /* }}} */
|
264 | 265 |
|
| 266 | +#if ZEND_DEBUG |
| 267 | +static zend_object *zend_test_class_new(zend_class_entry *class_type) /* {{{ */ { |
| 268 | + zend_object *obj = zend_objects_new(class_type); |
| 269 | + obj->handlers = &zend_test_class_handlers; |
| 270 | + return obj; |
| 271 | +} |
| 272 | +/* }}} */ |
| 273 | + |
| 274 | +static zend_function *zend_test_class_method_get(zend_object **object, zend_string *name, const zval *key) /* {{{ */ { |
| 275 | + zend_internal_function *fptr = emalloc(sizeof(zend_internal_function)); |
| 276 | + fptr->type = ZEND_OVERLOADED_FUNCTION_TEMPORARY; |
| 277 | + fptr->num_args = 1; |
| 278 | + fptr->arg_info = NULL; |
| 279 | + fptr->scope = (*object)->ce; |
| 280 | + fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER; |
| 281 | + fptr->function_name = zend_string_copy(name); |
| 282 | + fptr->handler = ZEND_FN(zend_test_func); |
| 283 | + zend_set_function_arg_flags((zend_function*)fptr); |
| 284 | + |
| 285 | + return (zend_function*)fptr; |
| 286 | +} |
| 287 | +/* }}} */ |
| 288 | + |
| 289 | +static zend_function *zend_test_class_static_method_get(zend_class_entry *ce, zend_string *name) /* {{{ */ { |
| 290 | + zend_internal_function *fptr = emalloc(sizeof(zend_internal_function)); |
| 291 | + fptr->type = ZEND_OVERLOADED_FUNCTION; |
| 292 | + fptr->num_args = 1; |
| 293 | + fptr->arg_info = NULL; |
| 294 | + fptr->scope = ce; |
| 295 | + fptr->fn_flags = ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_STATIC; |
| 296 | + fptr->function_name = name; |
| 297 | + fptr->handler = ZEND_FN(zend_test_func); |
| 298 | + zend_set_function_arg_flags((zend_function*)fptr); |
| 299 | + |
| 300 | + return (zend_function*)fptr; |
| 301 | +} |
| 302 | +/* }}} */ |
| 303 | + |
| 304 | +static int zend_test_class_call_method(zend_string *method, zend_object *object, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */ { |
| 305 | + return 0; |
| 306 | +} |
| 307 | +/* }}} */ |
| 308 | +#endif |
| 309 | + |
265 | 310 | static const zend_function_entry builtin_functions[] = { /* {{{ */
|
266 | 311 | ZEND_FE(zend_version, arginfo_zend__void)
|
267 | 312 | ZEND_FE(func_num_args, arginfo_zend__void)
|
@@ -351,6 +396,12 @@ ZEND_MINIT_FUNCTION(core) { /* {{{ */
|
351 | 396 | INIT_CLASS_ENTRY(class_entry, "_ZendTestClass", NULL);
|
352 | 397 | zend_test_class = zend_register_internal_class_ex(&class_entry, NULL);
|
353 | 398 | zend_class_implements(zend_test_class, 1, zend_test_interface);
|
| 399 | + zend_test_class->create_object = zend_test_class_new; |
| 400 | + zend_test_class->get_static_method = zend_test_class_static_method_get; |
| 401 | + |
| 402 | + memcpy(&zend_test_class_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); |
| 403 | + zend_test_class_handlers.get_method = zend_test_class_method_get; |
| 404 | + zend_test_class_handlers.call_method = zend_test_class_call_method; |
354 | 405 | #endif
|
355 | 406 |
|
356 | 407 | return SUCCESS;
|
@@ -2059,8 +2110,6 @@ ZEND_FUNCTION(zend_test_func2)
|
2059 | 2110 |
|
2060 | 2111 | zend_parse_parameters(ZEND_NUM_ARGS(), "|zz", &arg1, &arg2);
|
2061 | 2112 | }
|
2062 |
| - |
2063 |
| - |
2064 | 2113 | #ifdef ZTS
|
2065 | 2114 | ZEND_FUNCTION(zend_thread_id)
|
2066 | 2115 | {
|
|
0 commit comments