ugexe m: my %h; %h<a> = 1; say %h.keys.head.WHAT 01:58
camelia (Str)
ugexe why does that get to be a Str but
m: my Str $x = <1>; say $x.WHAT
camelia (IntStr)
ugexe that has to be an IntStr
i guess because it just coerces everything to str 02:00
it would be nice if `my Int $y = 0; my Str $x = $y;` could be a compile time error, but it can't because of allomorphs
which is sad because that being a compile time error is way more useful than not having to explicitly coerce env variables or main params to the expected type 02:01
japhb m: my Int $y = 0; my Str $x = $y; dd $x, $y; 02:34
camelia Type check failed in assignment to $x; expected Str but got Int (0)
in block <unit> at <tmp> line 1
japhb ugexe: I'm guessing you meant `my Int $y = <0>` ? 02:35
09:13 lizmat joined 09:47 lizmat left
ab5tract I wonder if allomorphs arrived conceptually before coercions did? 13:34
I don't think you'd develop allomorphs without being a) a successor to Perl and b) not already having coercions at hand 13:36
ugexe japhb that is runtime 13:49
having slept on it though its not allomorphs that prevent it, its just the most obvious example 14:58
really the type check applies to the value which isn't known at compile time usually 14:59
Geth rakudo/main: 5be14389eb | (Nick Logan)++ | tools/build/raku-ast-compiler.nqp
Let the RakuAST source preprocessor skip an empty comment

Previously the ws token in tools/build/raku-ast-compiler.nqp needed at least one character after a # to treat it as a comment. A bare # at the end of a line matched nothing, which went unnoticed because the
  <?[\s#]> lookahead in front of it consumed that character instead of
merely checking for it. With the regex compiler now honoring the lookahead, the code tokenizer looped on such a line without progress.
This accepts a comment with nothing after the #.
16:26
rakudo/main: c69055bdc6 | (Nick Logan)++ | src/Raku/ast/regex.rakumod
RakuAST: drop marker flags from character class subtraction

Previously RakuAST::Regex::Assertion::CharClass set the zerowidth and negate flags on the concat node it built for a subtracted element, and RakuAST::Regex::CharClassElement::Enumeration set negate on the concat for a negated enumeration with more than one part. The regex compiler ignored those flags on group nodes, which is also why lookarounds such ... (13 more lines)
rakudo/main: 1a21cd5ac4 | (Nick Logan)++ (committed using GitHub Web editor) | 2 files
Merge pull request #6641 from ugexe/ugexe/regex-zerowidth-groups

RakuAST: drop marker flags from character class subtraction
nqp/main: 14672f427e | (Nick Logan)++ | src/QRegex/P6Regex/Actions.nqp
Decide character class subtraction by its sign

Previously assertion:sym<[> treated any element whose compiled node had its negate flag set as a subtraction, so <[a] + [\S]> excluded the non-space characters instead of adding them. It also set the zerowidth and negate flags on the concat node it built, and cclass_elem set negate on its own, as markers the regex compiler does not act on there. ... (10 more lines)
16:54
nqp/main: bb66b142c6 | (Nick Logan)++ | 4 files
Honor zerowidth and negate on regex group nodes

Previously the MoarVM regex compiler only acted on the zerowidth and negate flags of leaf nodes. A lookaround over a character class that compiles to an alt or concat, such as <?[\s a]> or <![a] - [b]>, had the flags set on that group node, so its parts still consumed a character and a negated one was not inverted at all. ... (7 more lines)
16:54 [Coke] left
Geth nqp/main: 260582462c | (Nick Logan)++ (committed using GitHub Web editor) | 5 files
Merge pull request #869 from ugexe/ugexe/regex-zerowidth-groups

Honor zerowidth and negate on regex group nodes
16:54
rakudo: ugexe++ created pull request #6644:
Bump NQP to honor zerowidth and negate on regex group nodes
16:56
rakudo/main: 490a59092f | (Nick Logan)++ (committed using GitHub Web editor) | tools/templates/NQP_REVISION
Bump NQP to honor zerowidth and negate on regex group nodes (#6644)
17:42
nqp/main: 37a755a41b | (Nick Logan)++ | 2 files
Give ignoremark character lists base character NFA edges

Previously a character list compiled under :ignoremark got a charlist edge in the LTM NFA, which compares whole graphemes. When such a list sat in an alternation, for instance the one <[ a \n ]> compiles to, the NFA ruled the branch out on marked input like "a\x[300]" before the mark insensitive runtime check could run.
This gives a non negated ignoremark list one base character edge per entry, which is what an ignoremark literal already gets. Negated lists keep the charlist edge, since that only ever lets more branches through.
18:15
nqp/main: b9b9e553ee | (Nick Logan)++ | 3 files
Fold character class entries after assembling them

Previously a character class folded each plain character for
  :ignorecase and :ignoremark before appending it to the entries, and
escaped characters were appended without any folding at all. As such
  <[ \x[E0] ]> under :ignoremark did not match "a", and an entry that
adjacent characters form under NFG, such as the "Ć " in <[ a \x[300] ]>, ... (9 more lines)
nqp/main: f54a86c7d2 | (Nick Logan)++ (committed using GitHub Web editor) | 4 files
Merge pull request #870 from ugexe/ugexe/regex-charclass-escapes

Fix ignoremark and escape handling in character classes
rakudo: ugexe++ created pull request #6645:
Bump NQP to fix ignoremark and escape handling in character classes
18:26
18:27 lizmat joined 18:51 [Coke] joined
Geth rakudo/main: 3b9bf77294 | (Nick Logan)++ (committed using GitHub Web editor) | tools/templates/NQP_REVISION
Bump NQP to fix ignoremark and escape handling in character classes (#6645)
19:09
nqp/main: 4176b65f51 | (Nick Logan)++ (committed using GitHub Web editor) | 2 files
Flush the position before subrule arguments and limits blocks run (#868)

Previously the MoarVM regex compiler wrote the position register back to the cursor's $!pos only after it had compiled the arguments of a subrule call, and never before running a dynamic quantifier's limits block. Code that ran as part of either saw the cursor's stale $!pos:
  -3 from cursor creation, or the position of the last flush. In Raku
... (8 more lines)
19:10
rakudo: ugexe++ created pull request #6646:
Bump NQP to flush the regex position before subrule arguments and limits blocks run
19:16
rakudo/main: 8bb460f2aa | (Nick Logan)++ (committed using GitHub Web editor) | src/Raku/ast/regex.rakumod
RakuAST: Fold character class entries after assembling them (#6642)

Previously a character class folded each plain character for
  :ignorecase and :ignoremark before appending it to the entries, and
escaped characters were appended without any folding at all. As such
  <[ \x[E0] ]> under :ignoremark did not match "a", and an entry that
adjacent characters form under NFG, such as the "Ć " in <[ a \x[300] ]>, ... (11 more lines)
19:19
19:31 lizmat left
Geth rakudo/main: 17f3157cde | (Nick Logan)++ (committed using GitHub Web editor) | tools/templates/NQP_REVISION
Bump NQP to flush the regex position before subrule arguments and limits blocks run (#6646)
20:04
rakudo/main: 63811d17ce | (Nick Logan)++ (committed using GitHub Web editor) | 3 files
Take apart only an index or coercion on the right of but and does (#6643)

Previously both frontends split any call op on the right of but or does whose first argument had a compile time value into the role and a named value argument, so `42 but "a" ~ $s` and `42 but f(Role, "x")` went to the operator as a role plus value instead of as the result of the call. The RakuAST frontend had escaped that for operator calls, ... (5 more lines)
20:05
rakudo/main: a63417ba40 | (Nick Logan)++ (committed using GitHub Web editor) | 2 files
Settle a channel's closed promise even when the marker is in flight (#6640)

Previously the closed promise of a Channel was kept or broken only by a reader that saw the close or fail marker at the head of the queue after taking a value, or by close itself when the queue was already empty. A reader that shifts the marker pushes it straight back, which leaves the queue empty for a moment. A reader taking the last value in that moment ... (14 more lines)
20:08
roast: 23cfb5fbdd | (Nick Logan)++ (committed using GitHub Web editor) | S05-metasyntax/regex.t
Test block quantifier limits when backtracked into (#905)

A capture, a named regex, an exhaustive match, a frugal quantifier and a separated frugal quantifier each restart a cursor holding a
  `** {code}` quantifier and must keep the limits that quantifier
computed.
Covers rakudo/rakudo#5588
20:17
linkable6 ROAST#905 [closed]: github.com/Raku/roast/pull/905 Test block quantifier limits when backtracked into
linkable6 RAKUDO#5588 [closed]: github.com/rakudo/rakudo/issues/5588 [regex][Will be addressed in RakuAST] Regex quantifier with {} doesn't match the correct number of characters in some cases
Geth roast: 0041559fa0 | (Nick Logan)++ (committed using GitHub Web editor) | S05-capture/caps.t
Test that backtracking drops captures seen by code blocks (#906)

A code block and an assertion after a quantified capture must see only the captures the regex has not backtracked past.
Covers rakudo/rakudo#4105
linkable6 ROAST#906 [closed]: github.com/Raku/roast/pull/906 Test that backtracking drops captures seen by code blocks
linkable6 RAKUDO#4105 [closed]: github.com/rakudo/rakudo/issues/4105 [regex] With `(foo)+` the corresponding sub-captures aren't removed during backtracking
Geth roast: 96258a1b4c | (Nick Logan)++ (committed using GitHub Web editor) | S05-metasyntax/charset.t
Test lookarounds over compound character classes (#907)

Previously a lookahead over a character class that mixes backslash sequences with characters, or subtracts one class from another, consumed a character, and a negated one was not inverted at all. A plus sign in front of a negated backslash sequence subtracted instead of adding, and a lookahead over an empty enumeration always matched. This ... (5 more lines)
linkable6 ROAST#907 [closed]: github.com/Raku/roast/pull/907 Test lookarounds over compound character classes
roast: 7f9846e0a9 | (Nick Logan)++ (committed using GitHub Web editor) | 2 files
Test escapes and combining characters in character classes (#908)

Covers ignoremark character classes that sit in an alternation, hex and named escapes under :ignorecase and :ignoremark, case forms that are not a single character, and a base character followed by a combining escape forming one entry of the class.
rakudo/rakudo#2962
linkable6 ROAST#908 [closed]: github.com/Raku/roast/pull/908 Test escapes and combining characters in character classes
linkable6 RAKUDO#2962 [closed]: github.com/rakudo/rakudo/issues/2962 [Unicode][regex] A Synthetic in a character range, interferes with :ignoremark
Geth rakudo: ugexe++ created pull request #6647:
RakuAST: split long decimal numbers before converting them to Int
20:57
rakudo: ugexe++ created pull request #6648:
Compare routine identity instead of addresses in the qualified call test
21:20
rakudo/main: 93df74e3f8 | (Nick Logan)++ (committed using GitHub Web editor) | 2 files
Compare routine identity instead of addresses in the qualified call test (#6648)

Previously the shared module state test proved both consumers reached the same routine by comparing two .WHERE results taken in separate calls. A closure clone bound into the stash at module load lives in the nursery, and a nursery collection between the two calls moves it, so the same object reported two addresses and the test failed at ... (10 more lines)
21:59
rakudo: ugexe++ created pull request #6649:
RakuAST: look up a sigiled indirect name at run time
22:22
nqp: ugexe++ created pull request #871:
Ugexe/altseq terminates ltm
22:29
rakudo/main: 13e3f3a30c | (Nick Logan)++ (committed using GitHub Web editor) | 2 files
RakuAST: look up a sigiled indirect name at run time (#6649)

Previously a sigiled indirect name written with a constant string, like &::("foo") or $::("bar"), compiled as a plain lexical of that name. The runtime symbolic lookup consults the symbols a require merged into the caller before anything visible at compile time, so a require-injected sub was never seen, while the legacy frontend compiles these as runtime lookups.
This compiles a sigiled indirect name as a package variable, which emits the runtime lookup with the sigil.
22:59
[Coke] another blin in progress. 23:32
Geth rakudo: ugexe++ created pull request #6650:
Backtrack into interpolated regex alternatives
23:41
rakudo: ugexe++ created pull request #6651:
Match the initializer symbol before rejecting a signature declaration
23:55