From 6a70b7e8d18e2b12a313d8e54e059b38598d6506 Mon Sep 17 00:00:00 2001 From: Max Heiber Date: Mon, 8 Aug 2022 11:44:09 -0700 Subject: [PATCH] test case for yielding a readonly key Summary: Test case to ensure that we do readonly checking for the *key* in a yield expression Reviewed By: jamesjwu Differential Revision: D38491269 fbshipit-source-id: d06eb007fbc1326917226d2bf154c9fa7a05cec4 --- .../typecheck/readonly/yield_expression_key.php | 24 ++++++++++++++++++++++ .../readonly/yield_expression_key.php.exp | 2 ++ 2 files changed, 26 insertions(+) create mode 100644 hphp/hack/test/typecheck/readonly/yield_expression_key.php create mode 100644 hphp/hack/test/typecheck/readonly/yield_expression_key.php.exp diff --git a/hphp/hack/test/typecheck/readonly/yield_expression_key.php b/hphp/hack/test/typecheck/readonly/yield_expression_key.php new file mode 100644 index 00000000000..a75e2420f4e --- /dev/null +++ b/hphp/hack/test/typecheck/readonly/yield_expression_key.php @@ -0,0 +1,24 @@ +(readonly T $t): T { + foreach(generator($t) as $k => $_) { + return $k; + } + throw new Error(""); +} + +function generator(readonly T $t): Generator { + // should error here + yield ($t) => 1; +} + +class Foo { + public function __construct(public int $prop) {} +} + +<<__EntryPoint>> +function main(): void { + $ro = readonly new Foo(2); + $mut = un_readonly($ro); + $mut->prop = 3; // should not be allowed: mutation of a readonly value +} diff --git a/hphp/hack/test/typecheck/readonly/yield_expression_key.php.exp b/hphp/hack/test/typecheck/readonly/yield_expression_key.php.exp new file mode 100644 index 00000000000..135dd927d5b --- /dev/null +++ b/hphp/hack/test/typecheck/readonly/yield_expression_key.php.exp @@ -0,0 +1,2 @@ +File "yield_expression_key.php", line 12, characters 10-11: +This expression is readonly. We currently do not support yielding readonly values. (Parsing[1002]) -- 2.11.4.GIT