🦋 Welcome to the IRC channel of the core developers of the Raku Programming Language (raku.org #rakulang). This channel is logged for the purpose of history keeping about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Logs available at irclogs.raku.org/raku-dev/live.html | For MoarVM see #moarvm
Set by lizmat on 8 June 2022.
00:00 reportable6 left 00:02 reportable6 joined 06:00 reportable6 left 06:02 reportable6 joined
Geth rakudo/main: 5d7e385777 | (Elizabeth Mattijsen)++ | src/core.c/Exception.pm6

This was supposed to have been removed from 2020.11 already
rakudo/main: f49b108041 | (Stefan Seifert)++ | 3 files
RakuAST: throw correct exception type on redeclaration of packages
rakudo/main: 3f7deafbcd | (Stefan Seifert)++ | src/Raku/Grammar.nqp
RakuAST: restore correct exception on unknown type in declaration
rakudo/main: 46a99d1863 | (Stefan Seifert)++ | src/Raku/ast/variable-access.rakumod
RakuAST: properly report undeclared &-sigiled variables

These must be reported as unknown routines.
rakudo/main: 610bcfaf0f | (Stefan Seifert)++ | src/Raku/ast/signature.rakumod
RakuAST: fix IMPL-HAS-PARAMETER stumbling over targetless parameters
rakudo/main: 9406dfe9fb | (Stefan Seifert)++ | src/Raku/ast/code.rakumod
RakuAST: fix duplicate lexical $_ in pointy blocks with explicit $_ arg
lizmat 716/1355 ! 11:47
12:00 reportable6 left 12:01 reportable6 joined
Geth rakudo/main: c9987b7c4d | (Elizabeth Mattijsen)++ | 2 files
Actually add type info to constant declaration

And make sure any errors are correctly reported
lizmat ^^ nine is there a reason why the type check can't live in the BEGIN-CHECK ?
or shouldn't live there ? 12:07
nine Why should it? 12:10
lizmat to be able to proved feedback earlier ?
*provide 12:11
nine That's actually not considered a good thing
In general, any correctness checks should be done as late as possible. This gives e.g. macros the chance to do something about issues first. 12:13
lizmat ah, good point. understood
nine Also with late checks we can collect multiple issues we find and give a more complete list of errors. That can be a bit of a double edged sword, if one error is actually the cause of the other, but in general it's nice to have. 12:14
Geth rakudo/main: c487eb152e | (Elizabeth Mattijsen)++ | 2 files
RakuAST: add test for RakuAST::Var::Lexical::Constant
rakudo/main: bc24e6f222 | (Stefan Seifert)++ | src/Raku/ast/literals.rakumod
RakuAST: Fix pairs in quotewords getting stringified when they shouldn't
rakudo/main: 79ec334ea9 | (Stefan Seifert)++ | 2 files
RakuAST: fix \n, \r\n, \t in heredocs disturbing detentation

When detenting heredocs, we need to treat explicit \n, \r\n and \t as opaque strings, i.e. we need to ignore the newline in foo\nbar
13:01 linkable6 left, evalable6 left 13:02 evalable6 joined 13:03 linkable6 joined
Geth rakudo/main: ac217e866f | (Stefan Seifert)++ | src/Raku/ast/name.rakumod
RakuAST: fix without-colonpairs stumbling over QuotedString

Fixes regression caused by e8f419aefb716e2e89b098662cbed01fc3ec3bbd
nine Wowser....this ^^^ regression affected a lot more than expected. 13:09
lizmat nice! meanwhile, I just notice that {*} as part of a statement list, is parsed as { * } 13:11
which is *not* the same, and thus blocks re-dispatching from non-simple protos
perhaps some LHF for you? 13:12
nine ^^
nine Which test file does this affect?
lizmat I don't know, I was just looking at .raku and .DEPARSE of {*} 13:13
and found that {*} in a statement list didn't trigger
725/1355 ! 13:17
nine Like I said...quite unexpected how effective that regression fix is :) Since the spectest run I do after every commit didn't flag it, that means that the fixes since e8f419aefb716 were better than expected 13:19
13:19 linkable6 left 13:22 linkable6 joined
nine lizmat: that {*} thing sounds easy: just look for that string in the old grammar and check if the new one handles it in the same places. Probably just missing one 13:37
lizmat ok, will do 13:38
so far, only macro_def appears missing.... 13:47
BTW, do we plan to support old macro behaviour in RakuAST ? 13:48
nine So we already parse it. What exactly do we parse it to? 13:53
lizmat a block with a statement list with a whatever in it 13:54
as if it was "{ * }" instead of {*} 13:55
nine Huh....I wonder how the old frontend dealt with the onlystar in a statement list if not in the parser 13:58
lizmat in the case of Moar, it looks like the Grammar actually writes out the QAST immediately 13:59
line 4199 in Perl6/Grammar 14:00
afk& 14:01
nine You mean in Perl6/Actions? 14:04
No, there is a difference in the grammars: Raku::Grammar is missing the token term:sym<onlystar> 14:08
That's "onlystar in term position"
Geth rakudo/main: 525dd64384 | (Stefan Seifert)++ | src/Raku/Actions.nqp
RakuAST: fix our scoped names not found lexically

Our-scoped does not mean "only our-scoped". Even for our-scoped symbols, we always create a lexical alias.
rakudo/main: 5a869366e9 | (Stefan Seifert)++ | 2 files
RakuAST: support {*} in term position

This is enough to support re-dispatch from protos to the multi, e.g. proto foo(|) { say "before"; {*}; say "after"}
nine lizmat: ^^^
that's 2 more :)
lizmat cool! 15:13
Geth rakudo/main: 6 commits pushed by (Elizabeth Mattijsen)++ 15:28
lizmat nine: I wonder whether it wouldn't make sense to create a separate RakuAST::Signature object for (|) 15:35
nine why? 15:42
lizmat it now is a whole Signator -> parameters -> Parameter(type, names, captures, slurpy) thing 15:44
that needs to be deciphered when making the AST for not doing anything basically ?
nine But (|) _is_ a signature. And it does have one Parameter which is a capture 15:46
lizmat *Signature
yeah, but at QAST level it has different handling, no ?
nine Different how? 15:51
lizmat just look at the qast that "sub a (|c) { }" and "sub a (|) { }" generate on the Perl6 grammar 15:54
nine And "sub a ($c) { }" will yet again produce different qast. I fail to see what makes (|) so special that we'd put it in its own class? 15:56
lizmat so we wouldn't need to introspects the Signature -> Parameter -> type/name/etc to figure out it's a noop 16:00
when producing the qast ?
nine You'll need to check for that condition somewhere. Either when producing the QAST or when producing the AST. Only that in the latter case, every user who wants to assemble RakuAST manually will have to know about this mandatory check as well. 16:01
The goal of RakuAST is not to be the most efficient representation of the program or the the fastest compiler frontend. It's to be a correct and semantically rich representation which lends itself to manipulation (including the important subset of optimization). Making the compiler faster will (hopefully) be a side-effect. 16:04
lizmat sure, but (|) is effectively about *not* creating a Capture object, and now we need to specify it as creating a nameless Capture object ? 16:19
fwiw, I've always seen (|) more as a "trait" than actually as a signature 16:20
but I guess otoh, you could think of not creating a nameless Capture to be an optimization
still it feels LTAish to me
nine It _is_ an optimization. Nothing is broken by doing exactly what the signature says, i.e.creating a Capture. 16:39
17:46 linkable6 left, evalable6 left 17:48 evalable6 joined 17:49 linkable6 joined
Geth rakudo/main: 5787c4f631 | (Elizabeth Mattijsen)++ | src/Raku/ast/signature.rakumod
RakuAST: only wrap when *not* given a parameters List

Because if it *is* specified, it is already a List
18:00 reportable6 left 18:01 reportable6 joined
Geth rakudo/main: 13c2bade8f | (Stefan Seifert)++ | src/Raku/ast/code.rakumod
RakuAST: fix "No such method 'IMPL-CURRIED' for invocant of type 'RakuAST::OnlyStar'"

Since OnlyStar can now appear in term position, it must be a Term
rakudo/main: 9c03075459 | (Stefan Seifert)++ | 3 files
RakuAST: report redeclarations of lexicals as compilation errors
18:05 vrurg_ joined, vrurg left 18:24 linkable6 left 18:27 linkable6 joined
Geth rakudo/main: 2a5220a5f9 | (Elizabeth Mattijsen)++ | src/Raku/ast/code.rakumod
RakuAST: Onlystar doesn't actually need statements

In fact, I wonder whether this class should be instantiated at all and whether it should be a Blockoid. Feels to me it could be a standalone class, just like RakuAST::Statement::Elsif
19:38 vrurg_ left 19:39 vrurg joined
nine lizmat: it can only be a routine's body if it's a Blockoid 19:46
lizmat yeah, tested that already :-) 19:47
nine: now that I have you on the horn 19:48
if I create a multi sub using RakuAST:: calls, the proto should be made automatically 19:49
it *is* when coming from the grammar
but in a test file, it fails because $resolver.resolve-lexical($name) resolves (when it shouldn't)
to a RakuAST::Declaration::External object 19:50
which cannot do: $proto.compile-time-value.derive_dispatcher
easy solution would be to wrap it in a try() 19:51
but that feels meh
line 1283 and following in ast/code
lizmat gives up for now 19:54
nine Does that happen in a golfed case? 20:16
Geth roast: patrickbkr++ created pull request #833:
Test supply setup with a blocking recursion