summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2015-06-03 23:59:59 +0200
committerBob Weinand <bobwei9@hotmail.com>2015-06-03 23:59:59 +0200
commit1d3f77d13d2b457bdf1bc52045da4679741e65cb (patch)
tree6e98d6a4456de81f53924fbf91840a0d72bec2fb /Zend
parent2fcdad6a58e0f4e1dd78fbc4f9dec4ea2c868088 (diff)
downloadphp-git-1d3f77d13d2b457bdf1bc52045da4679741e65cb.tar.gz
Fix Bug #69754 (Compile failure with ::class in array)
Diffstat (limited to 'Zend')
-rw-r--r--Zend/tests/bug69754.phpt25
-rw-r--r--Zend/zend_compile.c8
2 files changed, 31 insertions, 2 deletions
diff --git a/Zend/tests/bug69754.phpt b/Zend/tests/bug69754.phpt
new file mode 100644
index 0000000000..be55ae2b78
--- /dev/null
+++ b/Zend/tests/bug69754.phpt
@@ -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"
+}
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index d1b57c413f..0853dde10b 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -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);