summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2018-06-29 23:22:41 +0200
committerNikita Popov <nikita.ppv@gmail.com>2018-06-29 23:22:41 +0200
commit962706d16c29ec6dd5ec3a78edae9e8907bca20a (patch)
treecf8d5797626d2677798e85ce048c83eac6853f09
parentfb09f1341f9924cb3d3a1c12caded82097378063 (diff)
downloadphp-git-962706d16c29ec6dd5ec3a78edae9e8907bca20a.tar.gz
Fix nullable type pretty-printing
-rw-r--r--Zend/tests/assert/expect_015.phpt4
-rw-r--r--Zend/zend_ast.c6
2 files changed, 8 insertions, 2 deletions
diff --git a/Zend/tests/assert/expect_015.phpt b/Zend/tests/assert/expect_015.phpt
index 0c53c75c4d..1679640851 100644
--- a/Zend/tests/assert/expect_015.phpt
+++ b/Zend/tests/assert/expect_015.phpt
@@ -20,7 +20,7 @@ assert(0 && ($a = function () {
yield from $x;
}));
-assert(0 && ($a = function &(array &$a, X $b = null) use ($c,&$d) : X {
+assert(0 && ($a = function &(array &$a, ?X $b = null) use ($c,&$d) : ?X {
abstract class A extends B implements C, D {
const X = 12;
const Y = self::X, Z = "aaa";
@@ -161,7 +161,7 @@ Warning: assert(): assert(0 && ($a = function () {
yield from $x;
})) failed in %sexpect_015.php on line %d
-Warning: assert(): assert(0 && ($a = function &(array &$a, X $b = null) use($c, &$d): X {
+Warning: assert(): assert(0 && ($a = function &(array &$a, ?X $b = null) use($c, &$d): ?X {
abstract class A extends B implements C, D {
const X = 12;
const Y = self::X, Z = 'aaa';
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index fd3cce8735..faa3b80d1e 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -1080,6 +1080,9 @@ tail_call:
zend_ast_export_ex(str, decl->child[1], 0, indent);
if (decl->child[3]) {
smart_str_appends(str, ": ");
+ if (decl->child[3]->attr & ZEND_TYPE_NULLABLE) {
+ smart_str_appendc(str, '?');
+ }
zend_ast_export_ns_name(str, decl->child[3], 0, indent);
}
if (decl->child[2]) {
@@ -1614,6 +1617,9 @@ simple_list:
break;
case ZEND_AST_PARAM:
if (ast->child[0]) {
+ if (ast->child[0]->attr & ZEND_TYPE_NULLABLE) {
+ smart_str_appendc(str, '?');
+ }
zend_ast_export_ns_name(str, ast->child[0], 0, indent);
smart_str_appendc(str, ' ');
}