From: Dmitry Stogov Date: Wed, 8 Jun 2005 06:48:39 +0000 (+0000) Subject: Fixed bug #30961 (Wrong linenumber in ReflectionClass getStartLine()) X-Git-Tag: php-5.0.5RC1~186 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=55e2692100be707cd7a21fdd0fc137f75452f4a0;p=php Fixed bug #30961 (Wrong linenumber in ReflectionClass getStartLine()) --- diff --git a/NEWS b/NEWS index 7f5ae40e13..f08cdd3b4a 100644 --- a/NEWS +++ b/NEWS @@ -125,6 +125,8 @@ PHP NEWS serializer). (Dmitry) - Fixed bug #31465 (False warning in unpack() when working with *). (Ilia) - Fixed bug #31363 (broken non-blocking flock()). ian at snork dot net +- Fixed bug #30961 (Wrong linenumber in ReflectionClass getStartLine()). + (Dmitry) - Fixed bug #30889 (Conflict between __get/__set and ++ operator). (Dmitry) - Fixed bug #30833 (array_count_values() modifying input array). (Tony) - Fixed bug #30819 (Better support for LDAP SASL bind). (Jani) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index a68b7cba22..5d0eb4bcf9 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2502,8 +2502,8 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod zend_initialize_class_data(new_class_entry, 1 TSRMLS_CC); new_class_entry->filename = zend_get_compiled_filename(TSRMLS_C); - new_class_entry->line_start = zend_get_compiled_lineno(TSRMLS_C); - new_class_entry->ce_flags |= class_token->u.constant.value.lval; + new_class_entry->line_start = class_token->u.opline_num; + new_class_entry->ce_flags |= class_token->u.EA.type; if (parent_class_name && parent_class_name->op_type != IS_UNUSED) { doing_inheritance = 1; diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index afaa8d0cad..f26406b268 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -291,9 +291,9 @@ unticked_class_declaration_statement: class_entry_type: - T_CLASS { $$.u.constant.value.lval = 0; } - | T_ABSTRACT T_CLASS { $$.u.constant.value.lval = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; } - | T_FINAL T_CLASS { $$.u.constant.value.lval = ZEND_ACC_FINAL_CLASS; } + T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = 0; } + | T_ABSTRACT T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_EXPLICIT_ABSTRACT_CLASS; } + | T_FINAL T_CLASS { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_FINAL_CLASS; } ; extends_from: @@ -302,7 +302,7 @@ extends_from: ; interface_entry: - T_INTERFACE { $$.u.constant.value.lval = ZEND_ACC_INTERFACE; } + T_INTERFACE { $$.u.opline_num = CG(zend_lineno); $$.u.EA.type = ZEND_ACC_INTERFACE; } ; interface_extends_list: diff --git a/ext/reflection/tests/bug30961.phpt b/ext/reflection/tests/bug30961.phpt new file mode 100755 index 0000000000..78067471d4 --- /dev/null +++ b/ext/reflection/tests/bug30961.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #30961 (Wrong linenumber in ReflectionClass getStartLine()) +--FILE-- +getStartLine() . "\n"; + echo $ref2->getStartLine() . "\n"; +?> +--EXPECT-- +2 +6