com php-src: Merge branch 'PHP-5.3' into PHP-5.4: Zend/zend_c ompile.c Zend/zend_language_parser.y
| From: | Dmitry Stogov | Date: | Wed, 09 Jan 2013 13:36:44 +0000 |
| Subject: | com php-src: Merge branch 'PHP-5.3' into PHP-5.4: Zend/zend_c ompile.c Zend/zend_language_parser.y | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-70898@lists.php.net to get a copy of this message | ||
Commit: 625000ab442dd4c1bfc6975a4a979f2c5f60a78d
Author: Dmitry Stogov <dmitry@zend.com> Wed, 9 Jan 2013 17:36:44 +0400
Parents: f9e8678dd3a41ed8a100d8201153a41d6fd25f2e d4650c5d69ffb49d476a2969c6200879bd424caf
Branches: PHP-5.4 PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=625000ab442dd4c1bfc6975a4a979f2c5f60a78d
Log:
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3:
Fixed compilator bug that might cause jump depended on unitialized value
Changed paths:
MM Zend/zend_compile.c
MM Zend/zend_language_parser.y
Diff:
diff --cc Zend/zend_compile.c
index 9acdc5b,8382b48..8f4f9c4
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@@ -4912,28 -3527,12 +4913,28 @@@ void zend_do_end_class_declaration(cons
}
}
- ce->line_end = zend_get_compiled_lineno(TSRMLS_C);
+ ce->info.user.line_end = zend_get_compiled_lineno(TSRMLS_C);
+
+ /* Check for traits and proceed like with interfaces.
+ * The only difference will be a combined handling of them in the end.
+ * Thus, we need another opcode here. */
+ if (ce->num_traits > 0) {
+ zend_op *opline;
+
+ ce->traits = NULL;
+ ce->num_traits = 0;
+ ce->ce_flags |= ZEND_ACC_IMPLEMENT_TRAITS;
+
+ /* opcode generation: */
+ opline = get_next_op(CG(active_op_array) TSRMLS_CC);
+ opline->opcode = ZEND_BIND_TRAITS;
+ SET_NODE(opline->op1, &CG(implementing_class));
+ }
if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))
- && ((parent_token->op_type != IS_UNUSED) || (ce->num_interfaces > 0))) {
+ && (parent_token || (ce->num_interfaces > 0))) {
zend_verify_abstract_class(ce TSRMLS_CC);
- if (ce->num_interfaces) {
+ if (ce->num_interfaces && !(ce->ce_flags & ZEND_ACC_IMPLEMENT_TRAITS)) {
do_verify_abstract_class(TSRMLS_C);
}
}