Skip to content

Commit 61a6861

Browse files
committed
Fix handling of hooked properties
1 parent 9c9c0b8 commit 61a6861

File tree

2 files changed

+98
-12
lines changed

2 files changed

+98
-12
lines changed

Zend/zend_language_parser.y

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -817,13 +817,13 @@ optional_cpp_modifiers:
817817

818818
parameter:
819819
optional_cpp_modifiers optional_type_without_static
820-
is_reference is_variadic T_VARIABLE backup_doc_comment optional_property_hook_list backup_doc_comment
821-
{ if ($6 && $8) { zend_string_release_ex($6, 0); }; $$ = zend_ast_create_ex(ZEND_AST_PARAM, $1 | $3 | $4, $2, $5, NULL,
822-
NULL, $8 ? zend_ast_create_zval_from_str($8) : ($6 ? zend_ast_create_zval_from_str($6) : NULL), $7); }
820+
is_reference is_variadic T_VARIABLE backup_doc_comment optional_property_hook_list
821+
{ $$ = zend_ast_create_ex(ZEND_AST_PARAM, $1 | $3 | $4, $2, $5, NULL,
822+
NULL, ($6 ? zend_ast_create_zval_from_str($6) : NULL), $7); }
823823
| optional_cpp_modifiers optional_type_without_static
824-
is_reference is_variadic T_VARIABLE backup_doc_comment '=' expr optional_property_hook_list backup_doc_comment
825-
{ $$ = zend_ast_create_ex(ZEND_AST_PARAM, $1 | $3 | $4, $2, $5, $8,
826-
NULL, $10 ? zend_ast_create_zval_from_str($10) : ($6 ? zend_ast_create_zval_from_str($6) : NULL), $9); }
824+
is_reference is_variadic T_VARIABLE '=' expr backup_doc_comment optional_property_hook_list
825+
{ $$ = zend_ast_create_ex(ZEND_AST_PARAM, $1 | $3 | $4, $2, $5, $7,
826+
NULL, ($8 ? zend_ast_create_zval_from_str($8) : NULL), $9); }
827827
;
828828

829829
optional_type_without_static:

ext/reflection/tests/ReflectionParameter_getDocComment_property_hooks.phpt

Lines changed: 92 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,19 @@ class A
1414
get { return "foo"; }
1515
/** setter */
1616
set(string $value /** $value */) {}
17-
}
17+
},
18+
public string $bar /** $bar */ {
19+
/** getter */
20+
get { return "bar"; }
21+
/** setter */
22+
set(string $value /** $value */) {}
23+
},
24+
public string $baz {
25+
/** getter */
26+
get { return "foo"; }
27+
/** setter */
28+
set(string $value /** $value */) {}
29+
} /** $baz */,
1830
) {}
1931
}
2032

@@ -35,23 +47,97 @@ $rp = $rh->getParameters()[0];
3547
echo "\n---> Doc comment for A::property \$foo::set parameter $" . $rp->getName() . ":\n";
3648
var_dump($rp->getDocComment());
3749

50+
// ---------
51+
52+
$rp = $rc->getConstructor()->getParameters()[1];
53+
echo "\n---> Doc comment for A::constructor parameter $" . $rp->getName() . ":\n";
54+
var_dump($rp->getDocComment());
55+
56+
$rp = $rc->getProperty('bar');
57+
echo "\n---> Doc comment for A::property $" . $rp->getName() . ":\n";
58+
var_dump($rp->getDocComment());
59+
60+
$rh = $rp->getHook(PropertyHookType::Get);
61+
echo "\n---> Doc comment for A::property " . $rh->getName() . ":\n";
62+
var_dump($rh->getDocComment());
63+
64+
$rh = $rp->getHook(PropertyHookType::Set);
65+
echo "\n---> Doc comment for A::property " . $rh->getName() . ":\n";
66+
var_dump($rh->getDocComment());
67+
68+
$rp = $rh->getParameters()[0];
69+
echo "\n---> Doc comment for A::property \$bar::set parameter $" . $rp->getName() . ":\n";
70+
var_dump($rp->getDocComment());
71+
72+
// ---------
73+
74+
$rp = $rc->getConstructor()->getParameters()[2];
75+
echo "\n---> Doc comment for A::constructor parameter $" . $rp->getName() . ":\n";
76+
var_dump($rp->getDocComment());
77+
78+
$rp = $rc->getProperty('baz');
79+
echo "\n---> Doc comment for A::property $" . $rp->getName() . ":\n";
80+
var_dump($rp->getDocComment());
81+
82+
$rh = $rp->getHook(PropertyHookType::Get);
83+
echo "\n---> Doc comment for A::property " . $rh->getName() . ":\n";
84+
var_dump($rh->getDocComment());
85+
86+
$rh = $rp->getHook(PropertyHookType::Set);
87+
echo "\n---> Doc comment for A::property " . $rh->getName() . ":\n";
88+
var_dump($rh->getDocComment());
89+
90+
$rp = $rh->getParameters()[0];
91+
echo "\n---> Doc comment for A::property \$baz::set parameter $" . $rp->getName() . ":\n";
92+
var_dump($rp->getDocComment());
93+
3894
$rp = $rc->getConstructor()->getParameters()[0];
3995
echo "\n---> Doc comment for A::constructor parameter $" . $rp->getName() . ":\n";
4096
var_dump($rp->getDocComment());
4197

4298
?>
4399
--EXPECTF--
44100
---> Doc comment for A::property $foo:
45-
string(%d) "/** $foo */"
101+
string(11) "/** $foo */"
46102

47103
---> Doc comment for A::property $foo::get:
48-
string(%d) "/** getter */"
104+
string(13) "/** getter */"
49105

50106
---> Doc comment for A::property $foo::set:
51-
string(%d) "/** setter */"
107+
string(13) "/** setter */"
52108

53109
---> Doc comment for A::property $foo::set parameter $value:
54-
string(%d) "/** $value */"
110+
string(13) "/** $value */"
111+
112+
---> Doc comment for A::constructor parameter $bar:
113+
string(11) "/** $bar */"
114+
115+
---> Doc comment for A::property $bar:
116+
string(11) "/** $bar */"
117+
118+
---> Doc comment for A::property $bar::get:
119+
string(13) "/** getter */"
120+
121+
---> Doc comment for A::property $bar::set:
122+
string(13) "/** setter */"
123+
124+
---> Doc comment for A::property $bar::set parameter $value:
125+
string(13) "/** $value */"
126+
127+
---> Doc comment for A::constructor parameter $baz:
128+
bool(false)
129+
130+
---> Doc comment for A::property $baz:
131+
bool(false)
132+
133+
---> Doc comment for A::property $baz::get:
134+
string(13) "/** getter */"
135+
136+
---> Doc comment for A::property $baz::set:
137+
string(13) "/** setter */"
138+
139+
---> Doc comment for A::property $baz::set parameter $value:
140+
string(13) "/** $value */"
55141

56142
---> Doc comment for A::constructor parameter $foo:
57-
string(%d) "/** $foo */"
143+
string(11) "/** $foo */"

0 commit comments

Comments
 (0)