]> granicus.if.org Git - php/commitdiff
Fix Bug #69754 (Compile failure with ::class in array)
authorBob Weinand <bobwei9@hotmail.com>
Wed, 3 Jun 2015 21:59:59 +0000 (23:59 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Wed, 3 Jun 2015 21:59:59 +0000 (23:59 +0200)
Zend/tests/bug69754.phpt [new file with mode: 0644]
Zend/zend_compile.c

diff --git a/Zend/tests/bug69754.phpt b/Zend/tests/bug69754.phpt
new file mode 100644 (file)
index 0000000..be55ae2
--- /dev/null
@@ -0,0 +1,25 @@
+--TEST--
+Bug #69754 (Use of ::class inside array causes compile error)
+--FILE--
+<?php
+
+class Example {
+       public function test() {
+               var_dump(static::class);
+               var_dump(static::class . 'IsAwesome');
+               var_dump(static::class . date('Ymd'));
+               var_dump([static::class]);
+    }
+}
+
+(new Example)->test();
+
+?>
+--EXPECTF--
+string(7) "Example"
+string(16) "ExampleIsAwesome"
+string(15) "Example%d"
+array(1) {
+  [0]=>
+  string(7) "Example"
+}
index d1b57c413f65aa04533cf6dd6964fc68ed3d3fb0..0853dde10beb893f763cb37d4e78daa09836c66f 100644 (file)
@@ -7140,8 +7140,12 @@ void zend_eval_const_expr(zend_ast **ast_ptr) /* {{{ */
                        zend_ast *name_ast = ast->child[1];
                        zend_string *resolved_name;
 
-                       if (zend_try_compile_const_expr_resolve_class_name(&result, class_ast, name_ast, 1)) {
-                               break;
+                       if (zend_try_compile_const_expr_resolve_class_name(&result, class_ast, name_ast, 0)) {
+                               if (Z_TYPE(result) == IS_NULL) {
+                                       return;
+                               } else {
+                                       break;
+                               }
                        }
 
                        zend_eval_const_expr(&class_ast);