diff options
author | Zeev Suraski <zeev@php.net> | 2003-08-03 08:21:08 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2003-08-03 08:21:08 +0000 |
commit | 9d7122fb53fd7f043f2cde7eeb4f9aa0e2115adf (patch) | |
tree | a978e8d04915e4df8a3ae1f1524ebcc55f1aed7a /Zend/zend_compile.c | |
parent | 973b85672b4af12e8cb50376d89149b358c484f5 (diff) | |
download | php-git-9d7122fb53fd7f043f2cde7eeb4f9aa0e2115adf.tar.gz |
Generalize fetch_class
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r-- | Zend/zend_compile.c | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 605e4e491d..a4e212a973 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1185,19 +1185,20 @@ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) opline->extended_value = ZEND_FETCH_CLASS_GLOBAL; CG(catch_begin) = fetch_class_op_number; if (class_name->op_type == IS_CONST) { + int fetch_type; + zend_str_tolower(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len); - if ((class_name->u.constant.value.str.len == (sizeof("self") - 1)) && - !memcmp(class_name->u.constant.value.str.val, "self", sizeof("self"))) { - SET_UNUSED(opline->op2); - opline->extended_value = ZEND_FETCH_CLASS_SELF; - zval_dtor(&class_name->u.constant); - } else if ((class_name->u.constant.value.str.len == (sizeof("parent") - 1)) && - !memcmp(class_name->u.constant.value.str.val, "parent", sizeof("parent"))) { - SET_UNUSED(opline->op2); - opline->extended_value = ZEND_FETCH_CLASS_PARENT; - zval_dtor(&class_name->u.constant); - } else { - opline->op2 = *class_name; + fetch_type = zend_get_class_fetch_type(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len); + switch (fetch_type) { + case ZEND_FETCH_CLASS_SELF: + case ZEND_FETCH_CLASS_PARENT: + SET_UNUSED(opline->op2); + opline->extended_value = fetch_type; + zval_dtor(&class_name->u.constant); + break; + default: + opline->op2 = *class_name; + break; } } else { opline->op2 = *class_name; @@ -3414,6 +3415,20 @@ void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify_handlers ce->interfaces = NULL; } + +int zend_get_class_fetch_type(char *class_name, uint class_name_len) +{ + if ((class_name_len == sizeof("self")-1) && + !memcmp(class_name, "self", sizeof("self"))) { + return ZEND_FETCH_CLASS_SELF; + } else if ((class_name_len == sizeof("parent")-1) && + !memcmp(class_name, "parent", sizeof("parent"))) { + return ZEND_FETCH_CLASS_PARENT; + } else { + return ZEND_FETCH_CLASS_DEFAULT; + } +} + /* * Local variables: * tab-width: 4 |