Skip to content

Instantly share code, notes, and snippets.

@Whateverable
Created May 13, 2026 10:16
Show Gist options
  • Select an option

  • Save Whateverable/b7896f6e4b002a2da9ed6d681afa521b to your computer and use it in GitHub Desktop.

Select an option

Save Whateverable/b7896f6e4b002a2da9ed6d681afa521b to your computer and use it in GitHub Desktop.
bisectable6
old=2026.03 class A { has Str $.foo = "bar"; method a() { $.foo = "foo" } }; A.new.a
Bisecting: 76 revisions left to test after this (roughly 6 steps)
[dabe0f4d5ab317aa2f674fc559838d900d829b76] Merge pull request #6125 from ugexe/ugexe/rakuast-speedup-add-phasers-handling
»»»»» Testing dabe0f4d5ab317aa2f674fc559838d900d829b76
»»»»» Script output:
Cannot modify an immutable Str (bar)
in method a at /tmp/rBark5idaU line 1
in block <unit> at /tmp/rBark5idaU line 1
»»»»» Script exit code: 1
»»»»» Bisecting by exit code
»»»»» Current exit code is 1, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “new”
»»»»» -------------------------------------------------------------------------
»»»»» Testing 2d92f016fe80d6bb21fe5ddc41ed02b2415e11ba
»»»»» Script output:
Cannot modify an immutable Str (bar)
in method a at /tmp/rBark5idaU line 1
in block <unit> at /tmp/rBark5idaU line 1
»»»»» Script exit code: 1
»»»»» Bisecting by exit code
»»»»» Current exit code is 1, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “new”
»»»»» -------------------------------------------------------------------------
»»»»» Testing 3b8b6d61d416eb1ea7f2207ad423a15959b28a9f
»»»»» Script output:
»»»»» Script exit code: 0
»»»»» Bisecting by exit code
»»»»» Current exit code is 0, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “old”
»»»»» -------------------------------------------------------------------------
»»»»» Testing 9a8b94dfebe4df1277d4b8db196f0081edf813ed
»»»»» Script output:
»»»»» Script exit code: 0
»»»»» Bisecting by exit code
»»»»» Current exit code is 0, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “old”
»»»»» -------------------------------------------------------------------------
»»»»» Testing 4ee541b5c23da638d0002af1918902174e0d9750
»»»»» Script output:
Cannot modify an immutable Str (bar)
in method a at /tmp/rBark5idaU line 1
in block <unit> at /tmp/rBark5idaU line 1
»»»»» Script exit code: 1
»»»»» Bisecting by exit code
»»»»» Current exit code is 1, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “new”
»»»»» -------------------------------------------------------------------------
»»»»» Testing a21eeb1ba562aac1471c9caa4676995cf01da3d1
»»»»» Script output:
»»»»» Script exit code: 0
»»»»» Bisecting by exit code
»»»»» Current exit code is 0, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “old”
»»»»» -------------------------------------------------------------------------
»»»»» Testing dc5e9452e0ea40ccc7636ab74bbe3dfa1cba4108
»»»»» Script output:
»»»»» Script exit code: 0
»»»»» Bisecting by exit code
»»»»» Current exit code is 0, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “old”
»»»»» -------------------------------------------------------------------------
»»»»» Testing 00a4188114fabfac3fcd02d9b4a106fc97f303de
»»»»» Script output:
Cannot modify an immutable Str (bar)
in method a at /tmp/rBark5idaU line 1
in block <unit> at /tmp/rBark5idaU line 1
»»»»» Script exit code: 1
»»»»» Bisecting by exit code
»»»»» Current exit code is 1, exit code on “old” revision is 0
»»»»» If exit code is not the same as on “old” revision, this revision will be marked as “new”
»»»»» Therefore, marking this revision as “new”
00a4188114fabfac3fcd02d9b4a106fc97f303de is the first new commit
commit 00a4188114fabfac3fcd02d9b4a106fc97f303de
Author: Nick Logan <[email protected]>
Date: Sun Apr 19 15:43:30 2026 -0700
Fix silent no-op for `$.foo = ...` on non-rw attributes (#6118)
`$.foo` compiles to `self.foo.item` (and `@.foo`/`%.foo` use
`.list`/`.hash`). For non-rw accessors, the accessor returns a bare
value, and `Mu.item` wraps it in a fresh mutable Scalar via
`(my $ = item)`. Assigning to `$.foo` then silently stores into that
throwaway container with no effect on the attribute, instead of
throwing `X::Assignment::RO` the way `$obj.foo = ...` does.
This regressed in a6608c212 (2025-02), which switched `Mu.item` from
`p6bindattrinvres(create(Scalar), ...)` (no rw descriptor, so STORE
threw) to `(my $ = item)` (rw descriptor, so STORE silently succeeds)
to unbreak a PDF distribution test. A later attempt to make `.item`
return a read-only container (f95f85ac3) was reverted in e0d0d960c
because it re-broke the same PDF path.
Fix it at the call site instead of in `Mu.item`: strip the
sigil contextualizer (`.item`/`.list`/`.hash`) when the `$.foo` /
`@.foo` / `%.foo` term is used as an lvalue, so the assignment lands
on the bare `self.foo` method call. Non-rw scalar accessors then
error via p6store as expected; `@.foo = 1,2,3` still works through
`Array.STORE`; `is rw` accessors are unaffected; and explicit
`self.foo.item = 5` written by the user is left alone because only
the compiler-inserted wrap is stripped.
Fixes #6113. Also fixes #5908 (same root cause), for which
t/spec/S12-methods/accessors.t already has a `#?rakudo todo` test;
that test now passes but throws `X::Assignment::RO` (matching
external `$obj.a = 5`) rather than the `X::AdHoc` the todo assumed,
so the roast expectation needs a follow-up update.
src/Perl6/Actions.nqp | 16 +++++++++++++++-
src/Raku/ast/variable-access.rakumod | 10 ++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment