From 962706d16c29ec6dd5ec3a78edae9e8907bca20a Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 29 Jun 2018 23:22:41 +0200 Subject: [PATCH] Fix nullable type pretty-printing --- Zend/tests/assert/expect_015.phpt | 4 ++-- Zend/zend_ast.c | 6 ++++++ 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, ' '); } -- 2.40.0