diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-08 11:37:49 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-05-08 11:37:49 +0200 |
commit | e2ef4e9e2fa8cdb749ce4c2afdd3499765ffb721 (patch) | |
tree | ff60a0cba8399d105feba1e26a5daff9eec7605a /Zend | |
parent | d153fbc5a935a73e95bfb1c13f82208c4983aa2f (diff) | |
parent | d19b6aa5ba6ea7b488cca748934264e11469f3d5 (diff) | |
download | php-git-e2ef4e9e2fa8cdb749ce4c2afdd3499765ffb721.tar.gz |
Merge branch 'PHP-7.2' into PHP-7.3
Diffstat (limited to 'Zend')
-rw-r--r-- | Zend/tests/type_declarations/parent_is_not_proto.phpt | 17 | ||||
-rw-r--r-- | Zend/zend_inheritance.c | 4 |
2 files changed, 19 insertions, 2 deletions
diff --git a/Zend/tests/type_declarations/parent_is_not_proto.phpt b/Zend/tests/type_declarations/parent_is_not_proto.phpt new file mode 100644 index 0000000000..f6ee536547 --- /dev/null +++ b/Zend/tests/type_declarations/parent_is_not_proto.phpt @@ -0,0 +1,17 @@ +--TEST-- +The parent class is not necessarily the class of the prototype +--FILE-- +<?php + +class A { + function test(): B {} +} +class B extends A {} +class C extends B { + function test(): parent {} +} + +?> +===DONE=== +--EXPECT-- +===DONE=== diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index eed2074729..0b0cb314b6 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -208,8 +208,8 @@ static int zend_do_perform_type_hint_check(const zend_function *fe, zend_arg_inf fe_class_name = ZEND_TYPE_NAME(fe_arg_info->type); class_name = ZSTR_VAL(fe_class_name); class_name_len = ZSTR_LEN(fe_class_name); - if (class_name_len == sizeof("parent")-1 && !strcasecmp(class_name, "parent") && proto->common.scope) { - fe_class_name = zend_string_copy(proto->common.scope->name); + if (class_name_len == sizeof("parent")-1 && !strcasecmp(class_name, "parent") && fe->common.scope && fe->common.scope->parent) { + fe_class_name = zend_string_copy(fe->common.scope->parent->name); } else if (class_name_len == sizeof("self")-1 && !strcasecmp(class_name, "self") && fe->common.scope) { fe_class_name = zend_string_copy(fe->common.scope->name); } else { |