From 845fc6b5f765fd1118e8a170fb3acb03589d9644 Mon Sep 17 00:00:00 2001 From: Alex Snezhko Date: Tue, 6 Aug 2024 20:55:49 -0700 Subject: [PATCH 1/2] feat(compiler)!: Allow infix operators on new line --- compiler/src/parsing/wrapped_lexer.re | 23 +++++++++++++++++ .../basic_functionality.950b8fda.0.snapshot | 17 +++++++++++-- compiler/test/suites/functions.re | 25 +++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/compiler/src/parsing/wrapped_lexer.re b/compiler/src/parsing/wrapped_lexer.re index f66864ac10..dd26cf4b36 100644 --- a/compiler/src/parsing/wrapped_lexer.re +++ b/compiler/src/parsing/wrapped_lexer.re @@ -114,6 +114,28 @@ let ignore_fns = state => { }; }; +let is_infix_op = (token) => { + switch (token) { + | INFIX_30(_) + | INFIX_40(_) + | INFIX_50(_) + | INFIX_60(_) + | INFIX_70(_) + | INFIX_80(_) + | INFIX_90(_) + | INFIX_100(_) + | INFIX_110(_) + | INFIX_120(_) + | STAR + | SLASH + | DASH + | PIPE + | LCARET + | RCARET => true + | _ => false + } +} + let rec check_lparen_fn = (state, closing, acc) => { let rparen = try(lex_balanced(~push=DiscoverFunctions, state, RPAREN, [])) { @@ -399,6 +421,7 @@ let token = state => { | AND | ELSE | PIPE => next_triple^ + | x when is_infix_op(x) => next_triple^ | _ => state.queued_tokens = List.tl( diff --git a/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot b/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot index 69cf61785d..e71d05b682 100644 --- a/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot +++ b/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot @@ -2,12 +2,18 @@ basic functionality › binop2.3 (module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import \"_genv\" \"tbl\" (table $tbl 0 funcref)) (import \"_genv\" \"relocBase\" (global $relocBase_0 i32)) (import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32)) (import \"_genv\" \"runtimeHeapStart\" (global $runtimeHeapStart_0 i32)) (import \"_genv\" \"runtimeHeapNextPtr\" (global $runtimeHeapNextPtr_0 (mut i32))) (import \"_genv\" \"metadataPtr\" (global $metadataPtr_0 i32)) + (import \"GRAIN$MODULE$runtime/gc.gr\" \"GRAIN$EXPORT$incRef\" (global $GRAIN$EXPORT$incRef_0 (mut i32))) + (import \"GRAIN$MODULE$pervasives.gr\" \"GRAIN$EXPORT$-\" (global $-_1113 (mut i32))) + (import \"GRAIN$MODULE$runtime/gc.gr\" \"incRef\" (func $incRef_0 (param i32 i32) (result i32))) + (import \"GRAIN$MODULE$pervasives.gr\" \"-\" (func $-_1113 (param i32 i32 i32) (result i32))) (global $GRAIN$TABLE_SIZE i32 (i32.const 0)) (memory $0 0) (elem $elem (global.get $relocBase_0)) @@ -22,8 +28,15 @@ basic functionality › binop2.3 (local $3 i64) (local $4 f32) (local $5 f64) - (block $compile_block.1 (result i32) - (i32.const -3) + (block $compile_block.1 + (return_call $-_1113 + (call $incRef_0 + (global.get $GRAIN$EXPORT$incRef_0) + (global.get $-_1113) + ) + (i32.const 5) + (i32.const 5) + ) ) ) (func $_start diff --git a/compiler/test/suites/functions.re b/compiler/test/suites/functions.re index 0d9f0136e0..c65ba3c6e1 100644 --- a/compiler/test/suites/functions.re +++ b/compiler/test/suites/functions.re @@ -385,4 +385,29 @@ truc()|}, |}, "which has a default value, but the matching argument does not.", ); + + assertRun( + "infix_op1", + {| + let a = 1 + +2 + + -1 + print(a) + |}, + "2\n", + ); + + assertRun( + "infix_op2", + {| + let (|>) = (x, f) => f(x) + let double = x => x * 2 + let a = 3 + |> double + |> toString + print(a) + |}, + "6\n", + ); }); From 86ed1d16c559caf2d10151b6286ca05b34b1c3c1 Mon Sep 17 00:00:00 2001 From: Alex Snezhko Date: Sun, 25 Aug 2024 14:30:31 -0700 Subject: [PATCH 2/2] Finalize implementation, add warnings for footguns --- compiler/src/formatting/fmt.re | 144 ++- compiler/src/parsing/ast_helper.re | 4 + compiler/src/parsing/ast_helper.rei | 2 +- compiler/src/parsing/ast_mapper.re | 7 +- compiler/src/parsing/lexer.re | 3 +- compiler/src/parsing/parser.messages | 992 +++++++++--------- compiler/src/parsing/parser.mly | 67 +- compiler/src/parsing/parser_header.re | 14 + compiler/src/parsing/parser_utils.re | 87 ++ compiler/src/parsing/parsetree.re | 10 +- compiler/src/parsing/parsetree_iter.re | 2 +- compiler/src/parsing/well_formedness.re | 69 +- compiler/src/parsing/wrapped_lexer.re | 11 +- compiler/src/typed/typecore.re | 14 +- compiler/src/utils/warnings.re | 12 +- compiler/src/utils/warnings.rei | 3 +- .../basic_functionality.16eea1e9.0.snapshot | 48 + .../basic_functionality.7edbad66.0.snapshot | 48 + .../basic_functionality.950b8fda.0.snapshot | 17 +- .../application_indenting.expected.gr | 22 +- compiler/test/grainfmt/binop_perf.expected.gr | 238 ++--- compiler/test/grainfmt/binops.expected.gr | 18 +- compiler/test/grainfmt/infix.expected.gr | 33 +- compiler/test/grainfmt/infix.input.gr | 19 + .../lone_negative_numbers.expected.gr | 26 + .../grainfmt/lone_negative_numbers.input.gr | 26 + compiler/test/runner.re | 2 +- compiler/test/stdlib/array.test.gr | 96 +- compiler/test/stdlib/bigint.test.gr | 48 +- compiler/test/stdlib/hash.test.gr | 12 +- compiler/test/stdlib/json.test.gr | 274 ++--- compiler/test/stdlib/list.test.gr | 8 +- compiler/test/stdlib/number.test.gr | 156 +-- compiler/test/stdlib/option.test.gr | 32 +- compiler/test/stdlib/path.test.gr | 12 +- compiler/test/stdlib/priorityqueue.test.gr | 24 +- compiler/test/stdlib/queue.test.gr | 4 +- compiler/test/stdlib/range.test.gr | 8 +- compiler/test/stdlib/regex.test.gr | 284 ++--- compiler/test/stdlib/result.test.gr | 16 +- compiler/test/stdlib/string.test.gr | 136 +-- compiler/test/stdlib/uri.test.gr | 86 +- compiler/test/suites/basic_functionality.re | 20 +- compiler/test/suites/blocks.re | 18 +- compiler/test/suites/formatter.re | 1 + compiler/test/suites/functions.re | 128 ++- stdlib/char.gr | 6 +- stdlib/hash.gr | 10 +- stdlib/json.gr | 100 +- stdlib/marshal.gr | 81 +- stdlib/number.gr | 16 +- stdlib/priorityqueue.gr | 14 +- stdlib/range.gr | 8 +- stdlib/regex.gr | 103 +- stdlib/runtime/atof/decimal.gr | 12 +- stdlib/runtime/atof/lemire.gr | 10 +- stdlib/runtime/atof/parse.gr | 32 +- stdlib/runtime/atoi/parse.gr | 6 +- stdlib/runtime/bigint.gr | 28 +- stdlib/runtime/compare.gr | 4 +- stdlib/runtime/equal.gr | 4 +- stdlib/runtime/numberUtils.gr | 58 +- stdlib/runtime/numbers.gr | 68 +- stdlib/runtime/string.gr | 22 +- stdlib/string.gr | 132 +-- stdlib/uri.gr | 42 +- stdlib/wasi/file.gr | 26 +- 67 files changed, 2322 insertions(+), 1761 deletions(-) create mode 100644 compiler/src/parsing/parser_utils.re create mode 100644 compiler/test/__snapshots__/basic_functionality.16eea1e9.0.snapshot create mode 100644 compiler/test/__snapshots__/basic_functionality.7edbad66.0.snapshot create mode 100644 compiler/test/grainfmt/lone_negative_numbers.expected.gr create mode 100644 compiler/test/grainfmt/lone_negative_numbers.input.gr diff --git a/compiler/src/formatting/fmt.re b/compiler/src/formatting/fmt.re index d384c0b823..d61d5a9649 100644 --- a/compiler/src/formatting/fmt.re +++ b/compiler/src/formatting/fmt.re @@ -181,49 +181,6 @@ let precedence = expr => { }; }; -let infixop = op => { - switch (op.[0]) { - | '+' - | '-' - | '*' - | '/' - | '%' - | '=' - | '^' - | '<' - | '>' - | '&' - | '|' - | '?' => true - | _ when op == "is" => true - | _ when op == "isnt" => true - | _ when String.starts_with(~prefix="!=", op) => true - | _ - | exception _ => false - }; -}; - -let is_infix_op = expr => { - switch (expr.pexp_desc) { - | PExpId({txt: Identifier.IdentName({txt: op})}) => infixop(op) - | _ => false - }; -}; - -let prefixop = op => - switch (op.[0]) { - | '!' => true - | _ - | exception _ => false - }; - -let is_prefix_op = expr => { - switch (expr.pexp_desc) { - | PExpId({txt: Identifier.IdentName({txt: op})}) => prefixop(op) - | _ => false - }; -}; - let is_keyword_function = expr => { switch (expr.pexp_desc) { | PExpId({txt: Identifier.IdentName({txt: "assert" | "throw" | "fail"})}) => @@ -236,13 +193,17 @@ let needs_grouping = (~parent, ~side: infix_side, expr) => { switch (expr.pexp_desc, side) { | (PExpIf(_), _) => ParenGrouping | (PExpApp(fn1, _), Left) - when is_infix_op(fn1) && precedence(fn1) < precedence(parent) => + when + Parser_utils.is_infix_op(fn1) + && precedence(fn1) < precedence(parent) => ParenGrouping | (PExpApp(fn1, _), Right) - when is_infix_op(fn1) && precedence(fn1) <= precedence(parent) => + when + Parser_utils.is_infix_op(fn1) + && precedence(fn1) <= precedence(parent) => ParenGrouping | (PExpApp(fn1, _), _) => - if (is_infix_op(fn1)) { + if (Parser_utils.is_infix_op(fn1)) { if ((!is_math_op(parent) && !is_logic_op(parent)) && !is_same_op(fn1, parent)) { ParenGrouping; @@ -871,7 +832,7 @@ let print_pattern = (fmt, {ppat_desc, ppat_loc}) => { }; let print_ident_string = (fmt, ident) => - if (infixop(ident) || prefixop(ident)) { + if (Parser_utils.infixop(ident) || Parser_utils.prefixop(ident)) { parens(string(ident)); } else { string(ident); @@ -923,7 +884,7 @@ let print_grouped_access_expression = (fmt, expr) => | PExpBlock(_) | PExpArray(_) | PExpList(_) => fmt.print_expression(fmt, expr) - | PExpApp(func, _) when is_infix_op(func) => + | PExpApp(func, _) when Parser_utils.is_infix_op(func) => parens(indent(break ++ fmt.print_expression(fmt, expr)) ++ break) | PExpApp(_) => fmt.print_expression(fmt, expr) | _ => parens(indent(break ++ fmt.print_expression(fmt, expr)) ++ break) @@ -1515,7 +1476,7 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => { indent( concat_map( ~lead= - first => + ((_, first)) => fmt.print_comment_range( fmt, ~none=hardline, @@ -1525,7 +1486,7 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => { first.pexp_loc, ), ~sep= - (prev, next) => + ((_, prev), (_, next)) => fmt.print_comment_range( fmt, ~none= @@ -1543,7 +1504,7 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => { next.pexp_loc, ), ~trail= - last => + ((_, last)) => fmt.print_comment_range( fmt, ~block_end=true, @@ -1552,13 +1513,21 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => { enclosing_end_location(expr.pexp_loc), ), ~f= - (~final, e) => + (~final, (i, e)) => if (has_disable_formatting_comment(fmt.comments, e.pexp_loc)) { fmt.print_original_code(fmt, e.pexp_loc); } else { - fmt.print_expression(fmt, e); + let include_parens = + i != 0 + && Parser_utils.starts_with_negative_value( + ~bypass_parens=false, + e, + ); + let format_expr = + include_parens ? parens(~wrap=Fun.id) : Fun.id; + format_expr(fmt.print_expression(fmt, e)); }, - exprs, + List.mapi((i, expr) => (i, expr.pblk_expr), exprs), ), ) ++ hardline, @@ -1602,7 +1571,7 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => { ~f=(~final, vb) => fmt.print_value_binding(fmt, vb), vbs, ) - | PExpApp(fn, [arg]) when is_prefix_op(fn) => + | PExpApp(fn, [arg]) when Parser_utils.is_prefix_op(fn) => fmt.print_infix_prefix_op(fmt, fn) ++ fmt.print_comment_range(fmt, fn.pexp_loc, arg.paa_loc) ++ ( @@ -1617,7 +1586,7 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => { | None => fmt.print_application_argument(fmt, arg) } ) - | PExpApp(fn, [lhs, rhs]) when is_infix_op(fn) => + | PExpApp(fn, [lhs, rhs]) when Parser_utils.is_infix_op(fn) => // To ensure adequate grouping/breaking of subexpressions, chains of // binops are included in a single Doc.group, with new groups inserted // where necessary. By default, this group indents when breaking. This @@ -1647,19 +1616,18 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => { ) ++ fmt.print_comment_range( fmt, - ~none=space, + ~none=breakable_space, ~lead=space, - ~trail=space, - ~allow_breaks=false, + ~trail=breakable_space, lhs.paa_loc, fn.pexp_loc, ) ++ fmt.print_infix_prefix_op(fmt, fn) ++ fmt.print_comment_range( fmt, - ~none=breakable_space, + ~none=space, ~lead=space, - ~trail=breakable_space, + ~trail=space, fn.pexp_loc, rhs.paa_loc, ) @@ -3319,6 +3287,30 @@ let print_include_declaration = ); }; +let rec exprs_with_include_parens = (stmts, prev_is_expr, acc) => { + switch (stmts) { + | [first, ...rest] => + let wrap_in_parens = + switch (first.ptop_desc) { + | PTopExpr(expr) => + Parser_utils.starts_with_negative_value(~bypass_parens=false, expr) + | _ => false + }; + let curr_is_expr = + switch (first.ptop_desc) { + | PTopExpr(_) + | PTopLet(_) => true + | _ => false + }; + exprs_with_include_parens( + rest, + curr_is_expr, + [(first, wrap_in_parens), ...acc], + ); + | [] => acc + }; +}; + let print_module_declaration = (fmt, {pmod_name, pmod_stmts, pmod_loc}) => { string("module") ++ fmt.print_comment_range( @@ -3337,7 +3329,7 @@ let print_module_declaration = (fmt, {pmod_name, pmod_stmts, pmod_loc}) => { indent( concat_map( ~lead= - next => + ((next, _)) => fmt.print_comment_range( fmt, ~none=hardline, @@ -3347,7 +3339,7 @@ let print_module_declaration = (fmt, {pmod_name, pmod_stmts, pmod_loc}) => { next.ptop_loc, ), ~sep= - (prev, next) => + ((prev, _), (next, _)) => fmt.print_comment_range( fmt, ~none= @@ -3365,7 +3357,7 @@ let print_module_declaration = (fmt, {pmod_name, pmod_stmts, pmod_loc}) => { next.ptop_loc, ), ~trail= - prev => + ((prev, _)) => fmt.print_comment_range( fmt, ~lead=space, @@ -3373,13 +3365,15 @@ let print_module_declaration = (fmt, {pmod_name, pmod_stmts, pmod_loc}) => { enclosing_end_location(pmod_loc), ), ~f= - (~final, s) => + (~final, (s, include_parens)) => if (has_disable_formatting_comment(fmt.comments, s.ptop_loc)) { fmt.print_original_code(fmt, s.ptop_loc); } else { - fmt.print_toplevel_stmt(fmt, s); + let format_expr = + include_parens ? parens(~wrap=Fun.id) : Fun.id; + format_expr(fmt.print_toplevel_stmt(fmt, s)); }, - pmod_stmts, + List.rev(exprs_with_include_parens(pmod_stmts, false, [])), ), ) ++ hardline, @@ -3999,7 +3993,7 @@ let print_program = (fmt, parsed_program) => { | _ => concat_map( ~lead= - first => + ((first, _)) => fmt.print_comment_range( fmt, ~none=hardline ++ hardline, @@ -4009,7 +4003,7 @@ let print_program = (fmt, parsed_program) => { first.ptop_loc, ), ~sep= - (prev, next) => { + ((prev, _), (next, _)) => { fmt.print_comment_range( fmt, ~none= @@ -4028,7 +4022,7 @@ let print_program = (fmt, parsed_program) => { ) }, ~trail= - last => + ((last, _)) => fmt.print_comment_range( fmt, ~block_end=true, @@ -4038,13 +4032,17 @@ let print_program = (fmt, parsed_program) => { ) ++ hardline, ~f= - (~final, s) => + (~final, (s, include_parens)) => if (has_disable_formatting_comment(fmt.comments, s.ptop_loc)) { fmt.print_original_code(fmt, s.ptop_loc); } else { - fmt.print_toplevel_stmt(fmt, s); + let format_expr = + include_parens ? parens(~wrap=Fun.id) : Fun.id; + format_expr(fmt.print_toplevel_stmt(fmt, s)); }, - parsed_program.statements, + List.rev( + exprs_with_include_parens(parsed_program.statements, false, []), + ), ) }; diff --git a/compiler/src/parsing/ast_helper.re b/compiler/src/parsing/ast_helper.re index 6335163e30..64d5bf6de5 100644 --- a/compiler/src/parsing/ast_helper.re +++ b/compiler/src/parsing/ast_helper.re @@ -209,6 +209,8 @@ module Expression = { pexp_attributes: attributes, pexp_loc: loc, pexp_core_loc: core_loc, + // Placehoder; will be corrected later in parsing + pexp_in_parens: false, }; }; let ident = (~loc, ~core_loc, ~attributes=?, a) => @@ -430,6 +432,8 @@ module Toplevel = { ptop_attributes: attributes, ptop_loc: loc, ptop_core_loc: core_loc, + // Placehoder; will be corrected later in parsing + ptop_ends_semi: false, }; }; let include_ = (~loc, ~core_loc, ~attributes=?, i) => diff --git a/compiler/src/parsing/ast_helper.rei b/compiler/src/parsing/ast_helper.rei index 0493011b0f..444f4ca3e5 100644 --- a/compiler/src/parsing/ast_helper.rei +++ b/compiler/src/parsing/ast_helper.rei @@ -424,7 +424,7 @@ module Expression: { ~loc: loc, ~core_loc: loc, ~attributes: attributes=?, - list(expression) + list(block_expression) ) => expression; let ignore: expression => expression; diff --git a/compiler/src/parsing/ast_mapper.re b/compiler/src/parsing/ast_mapper.re index 0235f7f629..b8895ed97a 100644 --- a/compiler/src/parsing/ast_mapper.re +++ b/compiler/src/parsing/ast_mapper.re @@ -267,7 +267,12 @@ module E = { }, ) | PExpBlock(el) => - block(~loc, ~core_loc, ~attributes, List.map(sub.expr(sub), el)) + block( + ~loc, + ~core_loc, + ~attributes, + List.map(e => {...e, pblk_expr: sub.expr(sub, e.pblk_expr)}, el), + ) | PExpConstraint(e, t) => constraint_( ~loc, diff --git a/compiler/src/parsing/lexer.re b/compiler/src/parsing/lexer.re index a9a9beeab6..a8e94f98f3 100644 --- a/compiler/src/parsing/lexer.re +++ b/compiler/src/parsing/lexer.re @@ -272,7 +272,8 @@ let rec token = lexbuf => { | "*" => positioned(STAR) | "/" => positioned(SLASH) | "|" => positioned(PIPE) - | "-" => positioned(DASH) + | ("-", blank | newlines) => positioned(DASHWHITESPACE) + | "-" => positioned(DASHNOWHITESPACE) | "->" => positioned(ARROW) | "=>" => positioned(THICKARROW) | "type" => positioned(TYPE) diff --git a/compiler/src/parsing/parser.messages b/compiler/src/parsing/parser.messages index 2a7142d14e..7ff44fe933 100644 --- a/compiler/src/parsing/parser.messages +++ b/compiler/src/parsing/parser.messages @@ -76,7 +76,7 @@ program: MODULE UIDENT EOL USE YIELD ## ## Ends in an error in state: 40. ## -## use_stmt -> FROM . qualified_uid USE use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## use_stmt -> FROM . qualified_uid USE use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FROM @@ -426,7 +426,7 @@ program: MODULE UIDENT EOL USE UIDENT YIELD ## ## Ends in an error in state: 42. ## -## use_stmt -> FROM qualified_uid . USE use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## use_stmt -> FROM qualified_uid . USE use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FROM qualified_uid @@ -444,7 +444,7 @@ program: MODULE UIDENT EOL USE UIDENT DOT YIELD ## ## Ends in an error in state: 43. ## -## use_stmt -> FROM qualified_uid USE . use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## use_stmt -> FROM qualified_uid USE . use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FROM qualified_uid USE @@ -454,7 +454,7 @@ program: MODULE UIDENT EOL USE UIDENT DOT EOL YIELD ## Ends in an error in state: 92. ## ## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . type_id_str [ DOT ] -## use_stmt -> USE lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## use_stmt -> USE lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . use_shape [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## USE lseparated_nonempty_list_inner(dot,type_id_str) DOT eols @@ -473,7 +473,7 @@ program: MODULE UIDENT EOL USE UIDENT DOT LBRACE YIELD ## ## Ends in an error in state: 46. ## -## use_shape -> lbrace . option(use_items) rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## use_shape -> lbrace . option(use_items) rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## lbrace @@ -549,7 +549,7 @@ program: MODULE UIDENT EOL PROVIDE LBRACE LIDENT EOL YIELD ## ## Ends in an error in state: 60. ## -## rbrace -> eols . RBRACE [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] +## rbrace -> eols . RBRACE [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## eols @@ -695,7 +695,7 @@ program: MODULE UIDENT EOL ASSERT WHEN ## ## Ends in an error in state: 38. ## -## stmt_expr -> ASSERT . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## stmt_expr -> ASSERT . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## ASSERT @@ -800,24 +800,24 @@ program: MODULE UIDENT EOL AT LIDENT LPAREN STRING WHILE Expected a comma followed by more attribute parameters or `)` to complete the attribute. -program: MODULE UIDENT EOL DASH WHILE +program: MODULE UIDENT EOL DASHNOWHITESPACE WHILE ## ## Ends in an error in state: 50. ## -## const -> option(DASH) . NUMBER_INT [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . NUMBER_FLOAT [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . INT32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . INT64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . FLOAT32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . FLOAT64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . WASMI32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . WASMI64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . WASMF32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . WASMF64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## const -> option(DASH) . BIGINT [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . NUMBER_INT [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . NUMBER_FLOAT [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . INT32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . INT64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . FLOAT32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . FLOAT64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . WASMI32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . WASMI64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . WASMF32 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . WASMF64 [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## const -> option(DASHNOWHITESPACE) . BIGINT [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: -## option(DASH) +## option(DASHNOWHITESPACE) ## Expected a number to follow the minus sign. @@ -1175,9 +1175,9 @@ program: MODULE UIDENT EOL LPAREN UNDERSCORE ## ## Ends in an error in state: 157. ## -## id_str -> lparen . special_op rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EQUAL EOL EOF ELSE DOT DASH COMMA COLON ] -## paren_expr -> lparen . expr rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## simple_expr -> lparen . tuple_exprs rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## id_str -> lparen . special_op rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## paren_expr -> lparen . expr rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## simple_expr -> lparen . tuple_exprs rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## lparen @@ -1208,7 +1208,7 @@ program: MODULE UIDENT EOL MATCH LPAREN UNDERSCORE ## ## Ends in an error in state: 15. ## -## match_expr -> MATCH lparen . expr rparen lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## match_expr -> MATCH lparen . expr rparen lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## MATCH lparen @@ -1249,7 +1249,7 @@ program: MODULE UIDENT EOL PREFIX_150 WHEN ## ## Ends in an error in state: 13. ## -## prim1_expr -> PREFIX_150 . non_assign_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## prim1_expr -> PREFIX_150 . non_assign_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## PREFIX_150 @@ -1258,7 +1258,7 @@ program: MODULE UIDENT EOL THROW WHEN ## ## Ends in an error in state: 11. ## -## stmt_expr -> THROW . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## stmt_expr -> THROW . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## THROW @@ -1267,7 +1267,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_70 EOL UNDERSCORE ## ## Ends in an error in state: 569. ## -## binop_expr -> non_stmt_expr INFIX_70 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_70 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_70 eols @@ -1402,8 +1402,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI RPAREN YIELD ## ## Ends in an error in state: 607. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen @@ -1412,7 +1412,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI RPAREN EOL YIELD ## ## Ends in an error in state: 609. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen eols @@ -1428,8 +1428,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI EOL RPAREN YIELD ## ## Ends in an error in state: 614. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen @@ -1438,7 +1438,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI EOL RPAREN EOL YIELD ## ## Ends in an error in state: 616. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen eols @@ -1454,8 +1454,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI UIDENT EOL SEMI RPAREN YIELD ## ## Ends in an error in state: 621. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen @@ -1464,7 +1464,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI UIDENT EOL SEMI RPAREN EOL YIELD ## ## Ends in an error in state: 623. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen eols @@ -1480,8 +1480,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI UIDENT EOL SEMI EOL RPAREN YIELD ## ## Ends in an error in state: 627. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen @@ -1490,7 +1490,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI UIDENT EOL SEMI EOL RPAREN EOL YIELD ## ## Ends in an error in state: 629. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen eols @@ -1506,8 +1506,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI RPAREN YIELD ## ## Ends in an error in state: 635. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen @@ -1516,7 +1516,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI RPAREN EOL YIELD ## ## Ends in an error in state: 637. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen eols @@ -1532,8 +1532,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI EOL RPAREN YIELD ## ## Ends in an error in state: 641. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen @@ -1542,7 +1542,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI EOL RPAREN EOL YIELD ## ## Ends in an error in state: 643. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen eols @@ -1558,8 +1558,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL UIDENT EOL SEMI RPAREN YIELD ## ## Ends in an error in state: 648. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen @@ -1568,7 +1568,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL UIDENT EOL SEMI RPAREN EOL YIELD ## ## Ends in an error in state: 650. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen eols @@ -1584,8 +1584,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL UIDENT EOL SEMI EOL RPAREN YIELD ## ## Ends in an error in state: 654. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen @@ -1594,7 +1594,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL UIDENT EOL SEMI EOL RPAREN EOL YI ## ## Ends in an error in state: 656. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen eols @@ -1610,8 +1610,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI SEMI RPAREN YIELD ## ## Ends in an error in state: 663. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen @@ -1620,7 +1620,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI SEMI RPAREN EOL YIELD ## ## Ends in an error in state: 665. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen eols @@ -1636,8 +1636,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI SEMI EOL RPAREN YIELD ## ## Ends in an error in state: 669. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen @@ -1646,7 +1646,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI SEMI EOL RPAREN EOL YIELD ## ## Ends in an error in state: 671. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen eols @@ -1662,8 +1662,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI UIDENT EOL SEMI RPAREN YIE ## ## Ends in an error in state: 676. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen @@ -1672,7 +1672,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI UIDENT EOL SEMI RPAREN EOL ## ## Ends in an error in state: 678. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen eols @@ -1688,8 +1688,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI UIDENT EOL SEMI EOL RPAREN ## ## Ends in an error in state: 682. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen @@ -1698,7 +1698,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI UIDENT EOL SEMI EOL RPAREN ## ## Ends in an error in state: 684. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen eols @@ -1714,8 +1714,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL SEMI RPAREN YIELD ## ## Ends in an error in state: 690. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen @@ -1724,7 +1724,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL SEMI RPAREN EOL YIELD ## ## Ends in an error in state: 692. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen eols @@ -1740,8 +1740,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL SEMI EOL RPAREN YIELD ## ## Ends in an error in state: 696. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen @@ -1750,7 +1750,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL SEMI EOL RPAREN EOL YI ## ## Ends in an error in state: 698. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen eols @@ -1766,8 +1766,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL UIDENT EOL SEMI RPAREN ## ## Ends in an error in state: 703. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen @@ -1776,7 +1776,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL UIDENT EOL SEMI RPAREN ## ## Ends in an error in state: 705. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen eols @@ -1792,8 +1792,8 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL UIDENT EOL SEMI EOL RP ## ## Ends in an error in state: 709. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen @@ -1802,7 +1802,7 @@ program: MODULE UIDENT EOL FOR LPAREN UIDENT EOL SEMI EOL UIDENT EOL SEMI EOL RP ## ## Ends in an error in state: 711. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen eols @@ -1818,8 +1818,8 @@ program: MODULE UIDENT EOL WHILE LPAREN UIDENT RPAREN YIELD ## ## Ends in an error in state: 768. ## -## while_expr -> WHILE lparen expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] -## while_expr -> WHILE lparen expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## while_expr -> WHILE lparen expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] +## while_expr -> WHILE lparen expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## WHILE lparen expr rparen @@ -1828,7 +1828,7 @@ program: MODULE UIDENT EOL WHILE LPAREN UIDENT RPAREN EOL YIELD ## ## Ends in an error in state: 770. ## -## while_expr -> WHILE lparen expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## while_expr -> WHILE lparen expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## WHILE lparen expr rparen eols @@ -1840,6 +1840,32 @@ program: MODULE UIDENT EOL WHILE LPAREN UIDENT RPAREN EOL YIELD ## In state 1, spurious reduction of production nonempty_list(eol) -> EOL ## In state 5, spurious reduction of production eols -> nonempty_list(eol) ## +program: MODULE UIDENT EOL UIDENT DASHWHITESPACE YIELD +## +## Ends in an error in state: 542. +## +## binop_expr -> non_stmt_expr DASHWHITESPACE . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHWHITESPACE DASHNOWHITESPACE COMMA COLON AND ] +## binop_expr -> non_stmt_expr DASHWHITESPACE . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHWHITESPACE DASHNOWHITESPACE COMMA COLON AND ] +## +## The known suffix of the stack is as follows: +## non_stmt_expr DASHWHITESPACE +## +program: MODULE UIDENT EOL UIDENT DASHWHITESPACE EOL YIELD +## +## Ends in an error in state: 544. +## +## binop_expr -> non_stmt_expr DASHWHITESPACE eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHWHITESPACE DASHNOWHITESPACE COMMA COLON AND ] +## +## The known suffix of the stack is as follows: +## non_stmt_expr DASHWHITESPACE eols +## +## WARNING: This example involves spurious reductions. +## This implies that, although the LR(1) items shown above provide an +## accurate view of the past (what has been recognized so far), they +## may provide an INCOMPLETE view of the future (what was expected next). +## In state 1, spurious reduction of production nonempty_list(eol) -> EOL +## In state 5, spurious reduction of production eols -> nonempty_list(eol) +## Expected an expression. @@ -2191,7 +2217,7 @@ program: MODULE UIDENT EOL FAIL WHEN ## ## Ends in an error in state: 33. ## -## stmt_expr -> FAIL . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## stmt_expr -> FAIL . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FAIL @@ -2203,7 +2229,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI EOL WASMI64 RBRACK ## ## Ends in an error in state: 694. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr @@ -2223,7 +2249,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI WASMI64 RBRACK ## ## Ends in an error in state: 690. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr @@ -2243,7 +2269,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL WASMI64 EOL SEMI EOL UNDERSCORE ## ## Ends in an error in state: 702. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols @@ -2259,7 +2285,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL WASMI64 EOL SEMI EOL WASMI64 RBRA ## ## Ends in an error in state: 703. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr @@ -2279,7 +2305,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL WASMI64 EOL SEMI WASMI64 RBRACK ## ## Ends in an error in state: 699. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr @@ -2299,7 +2325,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI EOL WASMI64 RBRACK ## ## Ends in an error in state: 675. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr @@ -2319,7 +2345,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI WASMI64 RBRACK ## ## Ends in an error in state: 667. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr @@ -2339,7 +2365,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI WASMI64 EOL SEMI EOL WASMI64 RBRACK ## ## Ends in an error in state: 684. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr @@ -2359,7 +2385,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI WASMI64 EOL SEMI WASMI64 RBRACK ## ## Ends in an error in state: 680. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr @@ -2379,7 +2405,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL SEMI EOL WASMI64 RBRA ## ## Ends in an error in state: 733. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr @@ -2399,7 +2425,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL SEMI WASMI64 RBRACK ## ## Ends in an error in state: 729. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr @@ -2419,7 +2445,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL WASMI64 EOL SEMI EOL ## ## Ends in an error in state: 742. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr @@ -2439,7 +2465,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL WASMI64 EOL SEMI WASM ## ## Ends in an error in state: 738. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr @@ -2459,7 +2485,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI SEMI EOL WASMI64 RBRACK ## ## Ends in an error in state: 714. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr @@ -2479,7 +2505,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI SEMI WASMI64 RBRACK ## ## Ends in an error in state: 710. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr @@ -2499,7 +2525,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI WASMI64 EOL SEMI EOL WASM ## ## Ends in an error in state: 723. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr @@ -2519,7 +2545,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI WASMI64 EOL SEMI WASMI64 ## ## Ends in an error in state: 719. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr @@ -2542,8 +2568,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI WHEN ## ## Ends in an error in state: 689. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI @@ -2552,8 +2578,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL WASMI64 EOL SEMI WHEN ## ## Ends in an error in state: 698. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI @@ -2562,7 +2588,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI EOL UNDERSCORE ## ## Ends in an error in state: 674. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI eols @@ -2578,8 +2604,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI SEMI WHEN ## ## Ends in an error in state: 666. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr SEMI @@ -2588,7 +2614,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI WASMI64 EOL SEMI EOL UNDERSCORE ## ## Ends in an error in state: 683. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols @@ -2604,8 +2630,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI WASMI64 EOL SEMI WHEN ## ## Ends in an error in state: 679. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols SEMI @@ -2614,7 +2640,7 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL SEMI EOL UNDERSCORE ## ## Ends in an error in state: 693. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols @@ -2630,7 +2656,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL SEMI EOL UNDERSCORE ## ## Ends in an error in state: 732. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols @@ -2646,8 +2672,8 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL SEMI WHEN ## ## Ends in an error in state: 728. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI @@ -2656,7 +2682,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL WASMI64 EOL SEMI EOL ## ## Ends in an error in state: 741. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols @@ -2672,8 +2698,8 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL WASMI64 EOL SEMI WHEN ## ## Ends in an error in state: 737. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI @@ -2682,7 +2708,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI SEMI EOL UNDERSCORE ## ## Ends in an error in state: 713. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols @@ -2698,8 +2724,8 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI SEMI WHEN ## ## Ends in an error in state: 709. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr SEMI @@ -2708,7 +2734,7 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI WASMI64 EOL SEMI EOL UNDE ## ## Ends in an error in state: 722. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols @@ -2724,8 +2750,8 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI WASMI64 EOL SEMI WHEN ## ## Ends in an error in state: 718. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI . for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI . eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI @@ -2737,10 +2763,10 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL UNDERSCORE ## ## Ends in an error in state: 687. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols @@ -2756,8 +2782,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL WASMI64 EOL WHILE ## ## Ends in an error in state: 697. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr eols @@ -2773,14 +2799,14 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI WHEN ## ## Ends in an error in state: 664. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI . eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI @@ -2789,10 +2815,10 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL UNDERSCORE ## ## Ends in an error in state: 726. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols @@ -2811,10 +2837,10 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI EOL WASMI64 RPAREN ## ## Ends in an error in state: 688. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI eols for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI eols for_inner_expr @@ -2834,8 +2860,8 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI WASMI64 EOL WHILE ## ## Ends in an error in state: 678. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr eols @@ -2851,10 +2877,10 @@ program: MODULE UIDENT EOL FOR LPAREN SEMI WASMI64 RPAREN ## ## Ends in an error in state: 665. ## -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) SEMI for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) SEMI for_inner_expr @@ -2874,8 +2900,8 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL WASMI64 EOL WHILE ## ## Ends in an error in state: 736. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr eols @@ -2891,10 +2917,10 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI EOL WASMI64 RPAREN ## ## Ends in an error in state: 727. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI eols for_inner_expr @@ -2914,8 +2940,8 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI WASMI64 EOL WHILE ## ## Ends in an error in state: 717. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr eols @@ -2931,10 +2957,10 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI WASMI64 RPAREN ## ## Ends in an error in state: 708. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI for_inner_expr . eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI for_inner_expr @@ -2957,22 +2983,22 @@ program: MODULE UIDENT EOL FOR LPAREN UNDERSCORE ## ## Ends in an error in state: 31. ## -## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen . option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen @@ -2987,14 +3013,14 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL SEMI WHEN ## ## Ends in an error in state: 707. ## -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols SEMI . eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols SEMI @@ -3006,14 +3032,14 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 EOL WHILE ## ## Ends in an error in state: 706. ## -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) eols . SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) eols @@ -3029,22 +3055,22 @@ program: MODULE UIDENT EOL FOR LPAREN WASMI64 RPAREN ## ## Ends in an error in state: 663. ## -## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR lparen option(block_body_expr) . eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR lparen option(block_body_expr) @@ -3068,22 +3094,22 @@ program: MODULE UIDENT EOL FOR WHILE ## ## Ends in an error in state: 30. ## -## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## for_expr -> FOR . lparen option(block_body_expr) eols SEMI eols for_inner_expr eols SEMI eols for_inner_expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FOR @@ -3095,7 +3121,7 @@ program: MODULE UIDENT EOL FUN LIDENT THICKARROW WHEN ## ## Ends in an error in state: 29. ## -## lam_expr -> FUN LIDENT thickarrow . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## lam_expr -> FUN LIDENT thickarrow . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FUN LIDENT thickarrow @@ -3113,7 +3139,7 @@ program: MODULE UIDENT EOL FUN LIDENT WHILE ## ## Ends in an error in state: 26. ## -## lam_expr -> FUN LIDENT . thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## lam_expr -> FUN LIDENT . thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FUN LIDENT @@ -3122,7 +3148,7 @@ program: MODULE UIDENT EOL FUN LPAREN RPAREN WHILE ## ## Ends in an error in state: 750. ## -## lam_expr -> FUN lparen option(patterns) rparen . thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## lam_expr -> FUN lparen option(patterns) rparen . thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FUN lparen option(patterns) rparen @@ -3135,7 +3161,7 @@ program: MODULE UIDENT EOL FUN LPAREN RPAREN THICKARROW EOL UNDERSCORE ## ## Ends in an error in state: 751. ## -## lam_expr -> FUN lparen option(patterns) rparen thickarrow . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## lam_expr -> FUN lparen option(patterns) rparen thickarrow . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FUN lparen option(patterns) rparen thickarrow @@ -3185,7 +3211,7 @@ program: MODULE UIDENT EOL LET LBRACKRCARET NUMBER_INT YIELD ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 358, spurious reduction of production const -> option(DASH) NUMBER_INT +## In state 358, spurious reduction of production const -> option(DASHNOWHITESPACE) NUMBER_INT ## In state 397, spurious reduction of production pattern -> const ## program: MODULE UIDENT EOL LET LBRACKRCARET NUMBER_INT COMMA NUMBER_INT YIELD @@ -3207,7 +3233,7 @@ program: MODULE UIDENT EOL LET LBRACKRCARET NUMBER_INT COMMA NUMBER_INT YIELD ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 358, spurious reduction of production const -> option(DASH) NUMBER_INT +## In state 358, spurious reduction of production const -> option(DASHNOWHITESPACE) NUMBER_INT ## In state 397, spurious reduction of production pattern -> const ## @@ -3238,7 +3264,7 @@ program: MODULE UIDENT EOL UIDENT LPAREN COMMA WHILE ## ## Ends in an error in state: 704. ## -## construct_expr -> type_id lparen option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## construct_expr -> type_id lparen option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## type_id lparen option(comma) @@ -3254,7 +3280,7 @@ program: MODULE UIDENT EOL UIDENT LPAREN UIDENT THICKARROW ## ## Ends in an error in state: 473. ## -## construct_expr -> type_id lparen lseparated_nonempty_list_inner(comma,expr) . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## construct_expr -> type_id lparen lseparated_nonempty_list_inner(comma,expr) . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## lseparated_nonempty_list_inner(comma,expr) -> lseparated_nonempty_list_inner(comma,expr) . comma expr [ RPAREN EOL COMMA ] ## ## The known suffix of the stack is as follows: @@ -3278,7 +3304,7 @@ program: MODULE UIDENT EOL UIDENT LPAREN UIDENT COMMA RBRACK ## ## Ends in an error in state: 707. ## -## construct_expr -> type_id lparen lseparated_nonempty_list_inner(comma,expr) option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## construct_expr -> type_id lparen lseparated_nonempty_list_inner(comma,expr) option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## type_id lparen lseparated_nonempty_list_inner(comma,expr) option(comma) @@ -3297,7 +3323,7 @@ program: MODULE UIDENT EOL FUN LPAREN WHILE ## ## Ends in an error in state: 747. ## -## lam_expr -> FUN lparen . option(patterns) rparen thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## lam_expr -> FUN lparen . option(patterns) rparen thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FUN lparen @@ -3315,8 +3341,8 @@ program: MODULE UIDENT EOL FUN WHILE ## ## Ends in an error in state: 25. ## -## lam_expr -> FUN . lparen option(patterns) rparen thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## lam_expr -> FUN . LIDENT thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## lam_expr -> FUN . lparen option(patterns) rparen thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## lam_expr -> FUN . LIDENT thickarrow expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## FUN @@ -3329,12 +3355,12 @@ program: MODULE UIDENT EOL IF LPAREN UNDERSCORE ## ## Ends in an error in state: 24. ## -## if_expr -> IF lparen . expr rparen expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen . expr rparen expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen . expr rparen expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen . expr rparen eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen . expr rparen eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen . expr rparen eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen . expr rparen expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen . expr rparen expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen . expr rparen expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen . expr rparen eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen . expr rparen eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen . expr rparen eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen @@ -3352,9 +3378,9 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN CONTINUE WHILE ## ## Ends in an error in state: 755. ## -## if_expr -> IF lparen expr rparen expr . [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen expr . ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen expr . ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen expr . [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen expr . ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen expr . ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen expr @@ -3363,9 +3389,9 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN EOL CONTINUE WHILE ## ## Ends in an error in state: 761. ## -## if_expr -> IF lparen expr rparen eols expr . [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen eols expr . ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen eols expr . ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen eols expr . [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen eols expr . ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen eols expr . ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen eols expr @@ -3377,9 +3403,9 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN EOL UNDERSCORE ## ## Ends in an error in state: 760. ## -## if_expr -> IF lparen expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen eols . expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen eols . expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen eols . expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen eols . expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen eols @@ -3395,7 +3421,7 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN EOL WASMI64 ELSE EOL UNDERSC ## ## Ends in an error in state: 764. ## -## if_expr -> IF lparen expr rparen eols expr ELSE eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen eols expr ELSE eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen eols expr ELSE eols @@ -3411,8 +3437,8 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN EOL WASMI64 ELSE WHEN ## ## Ends in an error in state: 762. ## -## if_expr -> IF lparen expr rparen eols expr ELSE . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen eols expr ELSE . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen eols expr ELSE . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen eols expr ELSE . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen eols expr ELSE @@ -3421,7 +3447,7 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN WASMI64 ELSE EOL UNDERSCORE ## ## Ends in an error in state: 758. ## -## if_expr -> IF lparen expr rparen expr ELSE eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen expr ELSE eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen expr ELSE eols @@ -3437,8 +3463,8 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN WASMI64 ELSE WHEN ## ## Ends in an error in state: 756. ## -## if_expr -> IF lparen expr rparen expr ELSE . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen expr ELSE . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen expr ELSE . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen expr ELSE . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen expr ELSE @@ -3447,12 +3473,12 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 RPAREN WHEN ## ## Ends in an error in state: 754. ## -## if_expr -> IF lparen expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen . expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen . expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen . eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr rparen . eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr rparen . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen . expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen . expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen . eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr rparen . eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr rparen @@ -3464,12 +3490,12 @@ program: MODULE UIDENT EOL IF LPAREN WASMI64 THICKARROW ## ## Ends in an error in state: 753. ## -## if_expr -> IF lparen expr . rparen expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr . rparen expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr . rparen expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr . rparen eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr . rparen eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF lparen expr . rparen eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF lparen expr . rparen expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr . rparen expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr . rparen expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr . rparen eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr . rparen eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF lparen expr . rparen eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF lparen expr @@ -3491,12 +3517,12 @@ program: MODULE UIDENT EOL IF WHILE ## ## Ends in an error in state: 23. ## -## if_expr -> IF . lparen expr rparen expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF . lparen expr rparen expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF . lparen expr rparen expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF . lparen expr rparen eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF . lparen expr rparen eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## if_expr -> IF . lparen expr rparen eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## if_expr -> IF . lparen expr rparen expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF . lparen expr rparen expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF . lparen expr rparen expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF . lparen expr rparen eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF . lparen expr rparen eols expr ELSE expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## if_expr -> IF . lparen expr rparen eols expr ELSE eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## IF @@ -3599,10 +3625,10 @@ program: MODULE UIDENT EOL LBRACE BREAK RBRACE DOT EOL WHILE ## ## Ends in an error in state: 308. ## -## record_get -> braced_expr DOT eols . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## record_set -> braced_expr DOT eols . simple_id equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> braced_expr DOT eols . simple_id assign_binop_op expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> braced_expr DOT eols . simple_id assign_binop_op eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_get -> braced_expr DOT eols . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT eols . simple_id equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT eols . simple_id assign_binop_op expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT eols . simple_id assign_binop_op eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## braced_expr DOT eols @@ -3618,14 +3644,14 @@ program: MODULE UIDENT EOL LBRACE BREAK RBRACE DOT WHILE ## ## Ends in an error in state: 300. ## -## record_get -> braced_expr DOT . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## record_get -> braced_expr DOT . eols simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## record_set -> braced_expr DOT . simple_id equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> braced_expr DOT . eols simple_id equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> braced_expr DOT . simple_id assign_binop_op expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> braced_expr DOT . simple_id assign_binop_op eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> braced_expr DOT . eols simple_id assign_binop_op expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> braced_expr DOT . eols simple_id assign_binop_op eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_get -> braced_expr DOT . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## record_get -> braced_expr DOT . eols simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT . simple_id equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT . eols simple_id equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT . simple_id assign_binop_op expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT . simple_id assign_binop_op eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT . eols simple_id assign_binop_op expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> braced_expr DOT . eols simple_id assign_binop_op eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## braced_expr DOT @@ -3634,8 +3660,8 @@ program: MODULE UIDENT EOL PREFIX_150 LBRACK RBRACK DOT WHILE ## ## Ends in an error in state: 555. ## -## record_get -> list_expr DOT . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASH COMMA COLON ] -## record_get -> list_expr DOT . eols simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASH COMMA COLON ] +## record_get -> list_expr DOT . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## record_get -> list_expr DOT . eols simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## list_expr DOT @@ -3644,7 +3670,7 @@ program: MODULE UIDENT EOL PREFIX_150 LBRACK RBRACK DOT EOL WHILE ## ## Ends in an error in state: 557. ## -## record_get -> list_expr DOT eols . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASH COMMA COLON ] +## record_get -> list_expr DOT eols . simple_id [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## list_expr DOT eols @@ -3663,8 +3689,8 @@ program: MODULE UIDENT EOL LBRACE BREAK RBRACE LBRACK UNDERSCORE ## ## Ends in an error in state: 322. ## -## array_get -> braced_expr lbrack . expr rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## array_set -> braced_expr lbrack . expr rbrack equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## array_get -> braced_expr lbrack . expr rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## array_set -> braced_expr lbrack . expr rbrack equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## braced_expr lbrack @@ -3679,7 +3705,7 @@ program: MODULE UIDENT EOL PREFIX_150 LBRACK RBRACK LBRACK WHEN ## ## Ends in an error in state: 559. ## -## array_get -> list_expr lbrack . expr rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASH COMMA COLON ] +## array_get -> list_expr lbrack . expr rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## list_expr lbrack @@ -3697,8 +3723,8 @@ program: MODULE UIDENT EOL LBRACE BREAK RBRACE LBRACK WASMI64 THICKARROW ## ## Ends in an error in state: 323. ## -## array_get -> braced_expr lbrack expr . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## array_set -> braced_expr lbrack expr . rbrack equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## array_get -> braced_expr lbrack expr . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## array_set -> braced_expr lbrack expr . rbrack equal expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## braced_expr lbrack expr @@ -3717,7 +3743,7 @@ program: MODULE UIDENT EOL PREFIX_150 LBRACK RBRACK LBRACK BIGINT THICKARROW ## ## Ends in an error in state: 560. ## -## array_get -> list_expr lbrack expr . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASH COMMA COLON ] +## array_get -> list_expr lbrack expr . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## list_expr lbrack expr @@ -3739,7 +3765,7 @@ program: MODULE UIDENT EOL LBRACE BREAK RBRACE LPAREN WASMI64 COMMA RBRACK ## ## Ends in an error in state: 320. ## -## app_expr -> braced_expr lparen lseparated_nonempty_list_inner(comma,expr) option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## app_expr -> braced_expr lparen lseparated_nonempty_list_inner(comma,expr) option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## braced_expr lparen lseparated_nonempty_list_inner(comma,expr) option(comma) @@ -3840,7 +3866,7 @@ program: MODULE UIDENT EOL UIDENT LBRACE ELLIPSIS UIDENT THICKARROW ## ## Ends in an error in state: 488. ## -## construct_expr -> type_id lbrace lseparated_nonempty_list_inner(comma,record_field) . option(comma) rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## construct_expr -> type_id lbrace lseparated_nonempty_list_inner(comma,record_field) . option(comma) rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## lseparated_nonempty_list_inner(comma,record_field) -> lseparated_nonempty_list_inner(comma,record_field) . comma punned_record_field [ RBRACE EOL COMMA ] ## lseparated_nonempty_list_inner(comma,record_field) -> lseparated_nonempty_list_inner(comma,record_field) . comma non_punned_record_field [ RBRACE EOL COMMA ] ## lseparated_nonempty_list_inner(comma,record_field) -> lseparated_nonempty_list_inner(comma,record_field) . comma spread_record_field [ RBRACE EOL COMMA ] @@ -4027,8 +4053,8 @@ program: MODULE UIDENT EOL LBRACE UNDERSCORE ## ## Ends in an error in state: 183. ## -## braced_expr -> lbrace . block_body rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## braced_expr -> lbrace . record_exprs rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## braced_expr -> lbrace . block_body rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## braced_expr -> lbrace . record_exprs rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## lbrace @@ -4046,7 +4072,7 @@ program: MODULE UIDENT EOL UIDENT LBRACE WHILE ## ## Ends in an error in state: 487. ## -## construct_expr -> type_id lbrace . record_exprs rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## construct_expr -> type_id lbrace . record_exprs rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## type_id lbrace @@ -4083,8 +4109,8 @@ program: MODULE UIDENT EOL LBRACK UNDERSCORE ## ## Ends in an error in state: 181. ## -## list_expr -> lbrack . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## list_expr -> lbrack . lseparated_nonempty_list_inner(comma,list_item) option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## list_expr -> lbrack . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## list_expr -> lbrack . lseparated_nonempty_list_inner(comma,list_item) option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## lbrack @@ -4123,7 +4149,7 @@ program: MODULE UIDENT EOL LBRACK WASMI64 THICKARROW ## ## Ends in an error in state: 448. ## -## list_expr -> lbrack lseparated_nonempty_list_inner(comma,list_item) . option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## list_expr -> lbrack lseparated_nonempty_list_inner(comma,list_item) . option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## lseparated_nonempty_list_inner(comma,list_item) -> lseparated_nonempty_list_inner(comma,list_item) . comma list_item [ RBRACK EOL COMMA ] ## ## The known suffix of the stack is as follows: @@ -4148,9 +4174,9 @@ program: MODULE UIDENT EOL LBRACKRCARET UNDERSCORE ## ## Ends in an error in state: 173. ## -## array_expr -> lbrackrcaret . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## array_expr -> lbrackrcaret . lseparated_nonempty_list_inner(comma,expr) option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## array_expr -> lbrackrcaret . eols lseparated_nonempty_list_inner(comma,expr) option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## array_expr -> lbrackrcaret . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## array_expr -> lbrackrcaret . lseparated_nonempty_list_inner(comma,expr) option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## array_expr -> lbrackrcaret . eols lseparated_nonempty_list_inner(comma,expr) option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## lbrackrcaret @@ -4189,7 +4215,7 @@ program: MODULE UIDENT EOL LBRACKRCARET WASMI64 COMMA RPAREN ## ## Ends in an error in state: 177. ## -## array_expr -> lbrackrcaret lseparated_nonempty_list_inner(comma,expr) option(comma) . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## array_expr -> lbrackrcaret lseparated_nonempty_list_inner(comma,expr) option(comma) . rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## lbrackrcaret lseparated_nonempty_list_inner(comma,expr) option(comma) @@ -4208,7 +4234,7 @@ program: MODULE UIDENT EOL LBRACKRCARET WASMI64 EOL WHILE ## ## Ends in an error in state: 179. ## -## rbrack -> eols . RBRACK [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] +## rbrack -> eols . RBRACK [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## eols @@ -4227,7 +4253,7 @@ program: MODULE UIDENT EOL LBRACKRCARET WASMI64 THICKARROW ## ## Ends in an error in state: 176. ## -## array_expr -> lbrackrcaret lseparated_nonempty_list_inner(comma,expr) . option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## array_expr -> lbrackrcaret lseparated_nonempty_list_inner(comma,expr) . option(comma) rbrack [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## lseparated_nonempty_list_inner(comma,expr) -> lseparated_nonempty_list_inner(comma,expr) . comma expr [ RBRACK EOL COMMA ] ## ## The known suffix of the stack is as follows: @@ -4247,80 +4273,80 @@ program: MODULE UIDENT EOL LBRACKRCARET WASMI64 THICKARROW Expected a comma followed by an expression or `]` to complete the array expression. -program: MODULE UIDENT EOL LET DASH WHILE +program: MODULE UIDENT EOL LET DASHNOWHITESPACE WHILE ## ## Ends in an error in state: 370. ## -## const -> option(DASH) . NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . NUMBER_FLOAT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . INT32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . INT64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . FLOAT32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . FLOAT64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . WASMI32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . WASMI64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . WASMF32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . WASMF64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## const -> option(DASH) . BIGINT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] -## pattern -> option(DASH) . NUMBER_INT SLASH option(DASH) NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . NUMBER_FLOAT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . INT32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . INT64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . FLOAT32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . FLOAT64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . WASMI32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . WASMI64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . WASMF32 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . WASMF64 [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## const -> option(DASHNOWHITESPACE) . BIGINT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## pattern -> option(DASHNOWHITESPACE) . NUMBER_INT SLASH option(DASHNOWHITESPACE) NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] ## ## The known suffix of the stack is as follows: -## option(DASH) +## option(DASHNOWHITESPACE) ## -program: MODULE UIDENT EOL LET NUMBER_INT SLASH DASH WHILE +program: MODULE UIDENT EOL LET NUMBER_INT SLASH DASHNOWHITESPACE WHILE ## ## Ends in an error in state: 373. ## -## pattern -> option(DASH) NUMBER_INT SLASH option(DASH) . NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## pattern -> option(DASHNOWHITESPACE) NUMBER_INT SLASH option(DASHNOWHITESPACE) . NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] ## ## The known suffix of the stack is as follows: -## option(DASH) NUMBER_INT SLASH option(DASH) +## option(DASHNOWHITESPACE) NUMBER_INT SLASH option(DASHNOWHITESPACE) ## -program: MODULE UIDENT EOL LET DASH NUMBER_INT SLASH YIELD +program: MODULE UIDENT EOL LET DASHNOWHITESPACE NUMBER_INT SLASH YIELD ## ## Ends in an error in state: 372. ## -## pattern -> DASH NUMBER_INT SLASH . option(DASH) NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## pattern -> DASHNOWHITESPACE NUMBER_INT SLASH . option(DASHNOWHITESPACE) NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] ## ## The known suffix of the stack is as follows: -## DASH NUMBER_INT SLASH +## DASHNOWHITESPACE NUMBER_INT SLASH ## -program: MODULE UIDENT EOL LET DASH NUMBER_INT SLASH DASH YIELD +program: MODULE UIDENT EOL LET DASHNOWHITESPACE NUMBER_INT SLASH DASHNOWHITESPACE YIELD ## ## Ends in an error in state: 373. ## -## pattern -> DASH NUMBER_INT SLASH option(DASH) . NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## pattern -> DASHNOWHITESPACE NUMBER_INT SLASH option(DASHNOWHITESPACE) . NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] ## ## The known suffix of the stack is as follows: -## DASH NUMBER_INT SLASH option(DASH) +## DASHNOWHITESPACE NUMBER_INT SLASH option(DASHNOWHITESPACE) ## -program: MODULE UIDENT EOL LET LPAREN DASH YIELD +program: MODULE UIDENT EOL LET LPAREN DASHNOWHITESPACE YIELD ## ## Ends in an error in state: 391. ## -## const -> DASH . NUMBER_INT [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . NUMBER_FLOAT [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . INT8 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . INT16 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . INT32 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . INT64 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . UINT8 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . UINT16 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . UINT32 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . UINT64 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . FLOAT32 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . FLOAT64 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . WASMI32 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . WASMI64 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . WASMF32 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . WASMF64 [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . BIGINT [ RPAREN PIPE EOL COMMA COLON AS ] -## const -> DASH . RATIONAL [ RPAREN PIPE EOL COMMA COLON AS ] -## pattern -> DASH . NUMBER_INT SLASH option(DASH) NUMBER_INT [ RPAREN PIPE EOL COMMA COLON AS ] -## special_op -> DASH . [ RPAREN EOL ] -## -## The known suffix of the stack is as follows: -## DASH +## const -> DASHNOWHITESPACE . NUMBER_INT [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . NUMBER_FLOAT [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . INT8 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . INT16 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . INT32 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . INT64 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . UINT8 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . UINT16 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . UINT32 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . UINT64 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . FLOAT32 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . FLOAT64 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . WASMI32 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . WASMI64 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . WASMF32 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . WASMF64 [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . BIGINT [ RPAREN PIPE EOL COMMA COLON AS ] +## const -> DASHNOWHITESPACE . RATIONAL [ RPAREN PIPE EOL COMMA COLON AS ] +## pattern -> DASHNOWHITESPACE . NUMBER_INT SLASH option(DASHNOWHITESPACE) NUMBER_INT [ RPAREN PIPE EOL COMMA COLON AS ] +## special_op -> DASHNOWHITESPACE . [ RPAREN EOL ] +## +## The known suffix of the stack is as follows: +## DASHNOWHITESPACE ## Expected a number. @@ -4800,10 +4826,10 @@ program: MODULE UIDENT EOL LET NUMBER_INT SLASH WHILE ## ## Ends in an error in state: 372. ## -## pattern -> option(DASH) NUMBER_INT SLASH . option(DASH) NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] +## pattern -> option(DASHNOWHITESPACE) NUMBER_INT SLASH . option(DASHNOWHITESPACE) NUMBER_INT [ WHEN THICKARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ] ## ## The known suffix of the stack is as follows: -## option(DASH) NUMBER_INT SLASH +## option(DASHNOWHITESPACE) NUMBER_INT SLASH ## Expected a number or a minus sign followed by a number. @@ -4827,7 +4853,7 @@ program: MODULE UIDENT EOL LET NUMBER_INT WHILE ## This implies that, although the LR(1) items shown above provide an ## accurate view of the past (what has been recognized so far), they ## may provide an INCOMPLETE view of the future (what was expected next). -## In state 371, spurious reduction of production const -> option(DASH) NUMBER_INT +## In state 371, spurious reduction of production const -> option(DASHNOWHITESPACE) NUMBER_INT ## In state 414, spurious reduction of production pattern -> const ## @@ -4837,7 +4863,7 @@ program: MODULE UIDENT EOL LET UIDENT DOT EOL WHILE ## ## Ends in an error in state: 92. ## -## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS THICKARROW ] +## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS THICKARROW ] ## ## The known suffix of the stack is as follows: ## lseparated_nonempty_list_inner(dot,type_id_str) DOT eols @@ -4853,8 +4879,8 @@ program: MODULE UIDENT EOL LET UIDENT DOT WHILE ## ## Ends in an error in state: 90. ## -## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS THICKARROW ] -## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS THICKARROW ] +## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS THICKARROW ] +## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols type_id_str [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS THICKARROW ] ## ## The known suffix of the stack is as follows: ## lseparated_nonempty_list_inner(dot,type_id_str) DOT @@ -4912,15 +4938,15 @@ program: MODULE UIDENT EOL LET NUMBER_INT EQUAL UIDENT AND YIELD Expected a binding, e.g. `foo = 5`. -program: MODULE UIDENT EOL LPAREN DASH WHILE +program: MODULE UIDENT EOL LPAREN DASHNOWHITESPACE WHILE ## ## Ends in an error in state: 376. ## -## option(DASH) -> DASH . [ WASMI64 WASMI32 WASMF64 WASMF32 NUMBER_INT NUMBER_FLOAT INT64 INT32 FLOAT64 FLOAT32 BIGINT ] -## special_op -> DASH . [ RPAREN EOL ] +## option(DASHNOWHITESPACE) -> DASHNOWHITESPACE . [ WASMI64 WASMI32 WASMF64 WASMF32 NUMBER_INT NUMBER_FLOAT INT64 INT32 FLOAT64 FLOAT32 BIGINT ] +## special_op -> DASHNOWHITESPACE . [ RPAREN EOL ] ## ## The known suffix of the stack is as follows: -## DASH +## DASHNOWHITESPACE ## Expected a number to create a negative number or `)` to reference the minus function. @@ -4929,7 +4955,7 @@ program: MODULE UIDENT EOL LPAREN PREFIX_150 WHEN ## ## Ends in an error in state: 158. ## -## prim1_expr -> PREFIX_150 . non_assign_expr [ STAR SLASH RPAREN RCARET PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL DASH COMMA COLON ] +## prim1_expr -> PREFIX_150 . non_assign_expr [ STAR SLASH RPAREN RCARET PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL DASHNOWHITESPACE COMMA COLON ] ## special_op -> PREFIX_150 . [ RPAREN EOL ] ## ## The known suffix of the stack is as follows: @@ -4955,7 +4981,7 @@ program: MODULE UIDENT EOL AT LPAREN YIELD ## ## Ends in an error in state: 68. ## -## id_str -> lparen . special_op rparen [ WHEN TYPE THICKARROW STAR SLASH SEMI RPAREN RECORD RCARET RBRACK RBRACE PIPE MODULE LPAREN LET LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 INCLUDE GETS FROM FOREIGN PROVIDE EQUAL EOL EOF ENUM ELSE DOT DASH COMMA COLON AT AS ] +## id_str -> lparen . special_op rparen [ WHEN TYPE THICKARROW STAR SLASH SEMI RPAREN RECORD RCARET RBRACK RBRACE PIPE MODULE LPAREN LET LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 INCLUDE GETS FROM FOREIGN PROVIDE EQUAL EOL EOF ENUM ELSE DOT DASHNOWHITESPACE COMMA COLON AT AS ] ## ## The known suffix of the stack is as follows: ## lparen @@ -4973,7 +4999,7 @@ program: MODULE UIDENT EOL LPAREN WASMI64 COMMA BREAK COMMA RBRACK ## ## Ends in an error in state: 517. ## -## simple_expr -> lparen tuple_exprs . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## simple_expr -> lparen tuple_exprs . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## lparen tuple_exprs @@ -5038,7 +5064,7 @@ program: MODULE UIDENT EOL LPAREN WASMI64 EOL WHILE ## ## Ends in an error in state: 113. ## -## rparen -> eols . RPAREN [ WHILE WHEN WASMI64 WASMI32 WASMF64 WASMF32 VOID UIDENT TYPE TRUE THROW THICKARROW STRING STAR SLASH SEMI RPAREN RECORD RCARET RBRACK RBRACE PREFIX_150 PIPE NUMBER_INT NUMBER_FLOAT MATCH LPAREN LIDENT LET LCARET LBRACKRCARET LBRACK LBRACE INT64 INT32 INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 INCLUDE IF GETS FUN FROM FOR FLOAT64 FLOAT32 FALSE FAIL PROVIDE EQUAL EOL EOF ENUM ELSE DOT DASH CONTINUE COMMA COLON CHAR BREAK BIGINT AT ASSERT AS THICKARROW ] +## rparen -> eols . RPAREN [ WHILE WHEN WASMI64 WASMI32 WASMF64 WASMF32 VOID UIDENT TYPE TRUE THROW THICKARROW STRING STAR SLASH SEMI RPAREN RECORD RCARET RBRACK RBRACE PREFIX_150 PIPE NUMBER_INT NUMBER_FLOAT MATCH LPAREN LIDENT LET LCARET LBRACKRCARET LBRACK LBRACE INT64 INT32 INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 INCLUDE IF GETS FUN FROM FOR FLOAT64 FLOAT32 FALSE FAIL PROVIDE EQUAL EOL EOF ENUM ELSE DOT DASHNOWHITESPACE CONTINUE COMMA COLON CHAR BREAK BIGINT AT ASSERT AS THICKARROW ] ## ## The known suffix of the stack is as follows: ## eols @@ -5057,7 +5083,7 @@ program: MODULE UIDENT EOL LPAREN WASMI64 THICKARROW ## ## Ends in an error in state: 519. ## -## paren_expr -> lparen expr . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## paren_expr -> lparen expr . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## tuple_exprs -> expr . COMMA [ RPAREN EOL ] ## tuple_exprs -> expr . COMMA lseparated_nonempty_list_inner(comma,expr) option(comma) [ RPAREN EOL ] ## tuple_exprs -> expr . COMMA eols lseparated_nonempty_list_inner(comma,expr) option(comma) [ RPAREN EOL ] @@ -5158,7 +5184,7 @@ program: MODULE UIDENT EOL MATCH LPAREN WASMI64 RPAREN LBRACE WHILE ## ## Ends in an error in state: 768. ## -## match_expr -> MATCH lparen expr rparen lbrace . match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## match_expr -> MATCH lparen expr rparen lbrace . match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## MATCH lparen expr rparen lbrace @@ -5192,7 +5218,7 @@ program: MODULE UIDENT EOL MATCH LPAREN WASMI64 RPAREN WHILE ## ## Ends in an error in state: 767. ## -## match_expr -> MATCH lparen expr rparen . lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## match_expr -> MATCH lparen expr rparen . lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## MATCH lparen expr rparen @@ -5204,7 +5230,7 @@ program: MODULE UIDENT EOL MATCH LPAREN WASMI64 THICKARROW ## ## Ends in an error in state: 766. ## -## match_expr -> MATCH lparen expr . rparen lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## match_expr -> MATCH lparen expr . rparen lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## MATCH lparen expr @@ -5226,7 +5252,7 @@ program: MODULE UIDENT EOL MATCH WHILE ## ## Ends in an error in state: 14. ## -## match_expr -> MATCH . lparen expr rparen lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## match_expr -> MATCH . lparen expr rparen lbrace match_branches rbrace [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## MATCH @@ -5406,8 +5432,8 @@ program: MODULE UIDENT EOL WASMI64 COLON LPAREN WHILE ## ## Ends in an error in state: 100. ## -## typ -> lparen . tuple_typs rparen [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] -## typ -> lparen . typ rparen [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> lparen . tuple_typs rparen [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] +## typ -> lparen . typ rparen [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## lparen @@ -5517,7 +5543,7 @@ program: MODULE UIDENT EOL RECORD UIDENT LCARET LIDENT EOL WHILE ## ## Ends in an error in state: 86. ## -## rcaret -> eols . RCARET [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET LBRACE INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS THICKARROW ] +## rcaret -> eols . RCARET [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET LBRACE INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS THICKARROW ] ## ## The known suffix of the stack is as follows: ## eols @@ -5602,8 +5628,8 @@ program: MODULE UIDENT EOL UIDENT DOT EOL WHILE ## ## Ends in an error in state: 155. ## -## id -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . non_modid [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] -## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . type_id_str [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] +## id -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . non_modid [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] +## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT eols . type_id_str [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## lseparated_nonempty_list_inner(dot,type_id_str) DOT eols @@ -5619,10 +5645,10 @@ program: MODULE UIDENT EOL UIDENT DOT WHILE ## ## Ends in an error in state: 130. ## -## id -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . non_modid [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] -## id -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols non_modid [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] -## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . type_id_str [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] -## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols type_id_str [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASH COMMA COLON AS ] +## id -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . non_modid [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] +## id -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols non_modid [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] +## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . type_id_str [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] +## lseparated_nonempty_list_inner(dot,type_id_str) -> lseparated_nonempty_list_inner(dot,type_id_str) DOT . eols type_id_str [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_ASSIGNMENT_10 INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS FROM EQUAL EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## lseparated_nonempty_list_inner(dot,type_id_str) DOT @@ -5634,7 +5660,7 @@ program: MODULE UIDENT EOL WASMI64 DOT EOL LIDENT EQUAL EOL UNDERSCORE ## ## Ends in an error in state: 650. ## -## record_set -> simple_expr DOT eols simple_id equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_set -> simple_expr DOT eols simple_id equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## simple_expr DOT eols simple_id equal @@ -5651,7 +5677,7 @@ program: MODULE UIDENT EOL WASMI64 DOT LIDENT DOT LIDENT EQUAL EOL UNDERSCORE ## ## Ends in an error in state: 618. ## -## record_set -> record_get DOT simple_id equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_set -> record_get DOT simple_id equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## record_get DOT simple_id equal @@ -5676,7 +5702,7 @@ program: MODULE UIDENT EOL WASMI64 DOT LIDENT GETS EOL UNDERSCORE ## ## Ends in an error in state: 614. ## -## assign_expr -> record_get GETS eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## assign_expr -> record_get GETS eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## record_get GETS eols @@ -5692,8 +5718,8 @@ program: MODULE UIDENT EOL WASMI64 DOT LIDENT GETS WHEN ## ## Ends in an error in state: 46. ## -## assign_expr -> record_get GETS . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## assign_expr -> record_get GETS . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## assign_expr -> record_get GETS . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## assign_expr -> record_get GETS . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## record_get GETS @@ -5702,7 +5728,7 @@ program: MODULE UIDENT EOL WASMI64 DOT LIDENT LBRACK WASMI64 RBRACK EQUAL EOL UN ## ## Ends in an error in state: 635. ## -## array_set -> record_get lbrack expr rbrack equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## array_set -> record_get lbrack expr rbrack equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## record_get lbrack expr rbrack equal @@ -5719,8 +5745,8 @@ program: MODULE UIDENT EOL BIGINT DOT EOL LIDENT INFIX_ASSIGNMENT_10 WHEN ## ## Ends in an error in state: 652. ## -## record_set -> simple_expr DOT eols simple_id assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> simple_expr DOT eols simple_id assign_binop_op . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_set -> simple_expr DOT eols simple_id assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> simple_expr DOT eols simple_id assign_binop_op . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## simple_expr DOT eols simple_id assign_binop_op @@ -5729,7 +5755,7 @@ program: MODULE UIDENT EOL BIGINT DOT EOL LIDENT INFIX_ASSIGNMENT_10 EOL WHEN ## ## Ends in an error in state: 654. ## -## record_set -> simple_expr DOT eols simple_id assign_binop_op eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_set -> simple_expr DOT eols simple_id assign_binop_op eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## simple_expr DOT eols simple_id assign_binop_op eols @@ -5745,8 +5771,8 @@ program: MODULE UIDENT EOL BIGINT DOT LIDENT INFIX_ASSIGNMENT_10 WHEN ## ## Ends in an error in state: 644. ## -## record_set -> simple_expr DOT simple_id assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## record_set -> simple_expr DOT simple_id assign_binop_op . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_set -> simple_expr DOT simple_id assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## record_set -> simple_expr DOT simple_id assign_binop_op . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## simple_expr DOT simple_id assign_binop_op @@ -5755,7 +5781,7 @@ program: MODULE UIDENT EOL BIGINT DOT LIDENT INFIX_ASSIGNMENT_10 EOL WHEN ## ## Ends in an error in state: 646. ## -## record_set -> simple_expr DOT simple_id assign_binop_op eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## record_set -> simple_expr DOT simple_id assign_binop_op eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## simple_expr DOT simple_id assign_binop_op eols @@ -5771,7 +5797,7 @@ program: MODULE UIDENT EOL LIDENT INFIX_ASSIGNMENT_10 EOL WHEN ## ## Ends in an error in state: 240. ## -## assign_expr -> id_expr assign_binop_op eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## assign_expr -> id_expr assign_binop_op eols . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## id_expr assign_binop_op eols @@ -5787,8 +5813,8 @@ program: MODULE UIDENT EOL LIDENT INFIX_ASSIGNMENT_10 WHEN ## ## Ends in an error in state: 238. ## -## assign_expr -> id_expr assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## assign_expr -> id_expr assign_binop_op . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## assign_expr -> id_expr assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## assign_expr -> id_expr assign_binop_op . eols expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## id_expr assign_binop_op @@ -5797,7 +5823,7 @@ program: MODULE UIDENT EOL UIDENT LBRACK UIDENT RBRACK INFIX_ASSIGNMENT_10 YIELD ## ## Ends in an error in state: 478. ## -## array_set -> left_accessor_expr lbrack expr rbrack assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON AND ] +## array_set -> left_accessor_expr lbrack expr rbrack assign_binop_op . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AND ] ## ## The known suffix of the stack is as follows: ## left_accessor_expr lbrack expr rbrack assign_binop_op @@ -5806,7 +5832,7 @@ program: MODULE UIDENT EOL LIDENT EQUAL WHEN ## ## Ends in an error in state: 224. ## -## assign_expr -> id_expr equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## assign_expr -> id_expr equal . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## id_expr equal @@ -5824,8 +5850,8 @@ program: MODULE UIDENT EOL RETURN WHEN ## ## Ends in an error in state: 13. ## -## stmt_expr -> RETURN . [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## stmt_expr -> RETURN . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## stmt_expr -> RETURN . [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## stmt_expr -> RETURN . expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## RETURN @@ -5837,8 +5863,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_70 WHEN ## ## Ends in an error in state: 567. ## -## binop_expr -> non_stmt_expr INFIX_70 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_70 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_70 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_70 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_70 @@ -5847,7 +5873,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_40 EOL UNDERSCORE ## ## Ends in an error in state: 583. ## -## binop_expr -> non_stmt_expr INFIX_40 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_40 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_40 eols @@ -5863,8 +5889,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_40 WHEN ## ## Ends in an error in state: 581. ## -## binop_expr -> non_stmt_expr INFIX_40 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_40 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_40 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_40 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_40 @@ -5873,7 +5899,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_60 EOL UNDERSCORE ## ## Ends in an error in state: 573. ## -## binop_expr -> non_stmt_expr INFIX_60 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_60 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_60 eols @@ -5889,20 +5915,20 @@ program: MODULE UIDENT EOL WASMI64 INFIX_60 WHEN ## ## Ends in an error in state: 571. ## -## binop_expr -> non_stmt_expr INFIX_60 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_60 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_60 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_60 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_60 ## -program: MODULE UIDENT EOL WASMI64 DASH EOL UNDERSCORE +program: MODULE UIDENT EOL WASMI64 DASHNOWHITESPACE EOL UNDERSCORE ## ## Ends in an error in state: 541. ## -## binop_expr -> non_stmt_expr DASH eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr DASHNOWHITESPACE eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: -## non_stmt_expr DASH eols +## non_stmt_expr DASHNOWHITESPACE eols ## ## WARNING: This example involves spurious reductions. ## This implies that, although the LR(1) items shown above provide an @@ -5911,21 +5937,21 @@ program: MODULE UIDENT EOL WASMI64 DASH EOL UNDERSCORE ## In state 3, spurious reduction of production nonempty_list(eol) -> EOL ## In state 5, spurious reduction of production eols -> nonempty_list(eol) ## -program: MODULE UIDENT EOL WASMI64 DASH WHEN +program: MODULE UIDENT EOL WASMI64 DASHNOWHITESPACE WHEN ## ## Ends in an error in state: 539. ## -## binop_expr -> non_stmt_expr DASH . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr DASH . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr DASHNOWHITESPACE . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr DASHNOWHITESPACE . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: -## non_stmt_expr DASH +## non_stmt_expr DASHNOWHITESPACE ## program: MODULE UIDENT EOL WASMI64 INFIX_80 EOL UNDERSCORE ## ## Ends in an error in state: 565. ## -## binop_expr -> non_stmt_expr INFIX_80 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_80 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_80 eols @@ -5941,8 +5967,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_80 WHEN ## ## Ends in an error in state: 563. ## -## binop_expr -> non_stmt_expr INFIX_80 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_80 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_80 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_80 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_80 @@ -5951,7 +5977,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_90 EOL UNDERSCORE ## ## Ends in an error in state: 561. ## -## binop_expr -> non_stmt_expr INFIX_90 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_90 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_90 eols @@ -5967,8 +5993,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_90 WHEN ## ## Ends in an error in state: 559. ## -## binop_expr -> non_stmt_expr INFIX_90 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_90 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_90 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_90 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_90 @@ -5977,7 +6003,7 @@ program: MODULE UIDENT EOL WASMI64 LCARET EOL UNDERSCORE ## ## Ends in an error in state: 557. ## -## binop_expr -> non_stmt_expr LCARET eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr LCARET eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr LCARET eols @@ -5993,8 +6019,8 @@ program: MODULE UIDENT EOL WASMI64 LCARET WHEN ## ## Ends in an error in state: 555. ## -## binop_expr -> non_stmt_expr LCARET . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr LCARET . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr LCARET . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr LCARET . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr LCARET @@ -6003,7 +6029,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_100 EOL UNDERSCORE ## ## Ends in an error in state: 543. ## -## binop_expr -> non_stmt_expr INFIX_100 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_100 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_100 eols @@ -6019,8 +6045,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_100 WHEN ## ## Ends in an error in state: 537. ## -## binop_expr -> non_stmt_expr INFIX_100 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_100 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_100 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_100 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_100 @@ -6029,7 +6055,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_120 EOL UNDERSCORE ## ## Ends in an error in state: 531. ## -## binop_expr -> non_stmt_expr INFIX_120 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_120 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_120 eols @@ -6045,8 +6071,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_120 WHEN ## ## Ends in an error in state: 529. ## -## binop_expr -> non_stmt_expr INFIX_120 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_120 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_120 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_120 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_120 @@ -6055,7 +6081,7 @@ program: MODULE UIDENT EOL WASMI64 PIPE EOL UNDERSCORE ## ## Ends in an error in state: 575. ## -## binop_expr -> non_stmt_expr PIPE eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr PIPE eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr PIPE eols @@ -6071,8 +6097,8 @@ program: MODULE UIDENT EOL WASMI64 PIPE WHEN ## ## Ends in an error in state: 553. ## -## binop_expr -> non_stmt_expr PIPE . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr PIPE . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr PIPE . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr PIPE . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr PIPE @@ -6081,7 +6107,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_30 EOL UNDERSCORE ## ## Ends in an error in state: 587. ## -## binop_expr -> non_stmt_expr INFIX_30 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_30 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_30 eols @@ -6097,8 +6123,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_30 WHEN ## ## Ends in an error in state: 585. ## -## binop_expr -> non_stmt_expr INFIX_30 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_30 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_30 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_30 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_30 @@ -6107,7 +6133,7 @@ program: MODULE UIDENT EOL WASMI64 INFIX_110 EOL UNDERSCORE ## ## Ends in an error in state: 535. ## -## binop_expr -> non_stmt_expr INFIX_110 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_110 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_110 eols @@ -6123,8 +6149,8 @@ program: MODULE UIDENT EOL WASMI64 INFIX_110 WHEN ## ## Ends in an error in state: 533. ## -## binop_expr -> non_stmt_expr INFIX_110 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_110 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_110 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_110 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_110 @@ -6133,7 +6159,7 @@ program: MODULE UIDENT EOL WASMI64 RCARET EOL UNDERSCORE ## ## Ends in an error in state: 551. ## -## binop_expr -> non_stmt_expr RCARET eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr RCARET eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr RCARET eols @@ -6149,8 +6175,8 @@ program: MODULE UIDENT EOL WASMI64 RCARET RCARET RCARET WHEN ## ## Ends in an error in state: 66. ## -## binop_expr -> non_stmt_expr lnonempty_list_inner(RCARET) RCARET . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr lnonempty_list_inner(RCARET) RCARET . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr lnonempty_list_inner(RCARET) RCARET . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr lnonempty_list_inner(RCARET) RCARET . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## lnonempty_list_inner(RCARET) -> lnonempty_list_inner(RCARET) RCARET . [ RCARET ] ## ## The known suffix of the stack is as follows: @@ -6160,7 +6186,7 @@ program: MODULE UIDENT EOL WASMI64 SLASH EOL UNDERSCORE ## ## Ends in an error in state: 527. ## -## binop_expr -> non_stmt_expr SLASH eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr SLASH eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr SLASH eols @@ -6176,8 +6202,8 @@ program: MODULE UIDENT EOL WASMI64 SLASH WHEN ## ## Ends in an error in state: 68. ## -## binop_expr -> non_stmt_expr SLASH . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr SLASH . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr SLASH . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr SLASH . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr SLASH @@ -6186,7 +6212,7 @@ program: MODULE UIDENT EOL WASMI64 STAR EOL UNDERSCORE ## ## Ends in an error in state: 547. ## -## binop_expr -> non_stmt_expr STAR eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr STAR eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr STAR eols @@ -6202,8 +6228,8 @@ program: MODULE UIDENT EOL WASMI64 STAR WHEN ## ## Ends in an error in state: 63. ## -## binop_expr -> non_stmt_expr STAR . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr STAR . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr STAR . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr STAR . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr STAR @@ -6212,7 +6238,7 @@ program: MODULE UIDENT EOL BIGINT INFIX_50 EOL WHEN ## ## Ends in an error in state: 579. ## -## binop_expr -> non_stmt_expr INFIX_50 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_50 eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_50 eols @@ -6228,8 +6254,8 @@ program: MODULE UIDENT EOL BIGINT INFIX_50 WHEN ## ## Ends in an error in state: 577. ## -## binop_expr -> non_stmt_expr INFIX_50 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr INFIX_50 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_50 . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr INFIX_50 . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr INFIX_50 @@ -6238,8 +6264,8 @@ program: MODULE UIDENT EOL BIGINT RCARET WHEN ## ## Ends in an error in state: 549. ## -## binop_expr -> non_stmt_expr RCARET . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr RCARET . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr RCARET . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr RCARET . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## lnonempty_list_inner(RCARET) -> RCARET . [ RCARET ] ## ## The known suffix of the stack is as follows: @@ -6249,7 +6275,7 @@ program: MODULE UIDENT EOL BIGINT RCARET RCARET EOL WHEN ## ## Ends in an error in state: 545. ## -## binop_expr -> non_stmt_expr lnonempty_list_inner(RCARET) RCARET eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr lnonempty_list_inner(RCARET) RCARET eols . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr lnonempty_list_inner(RCARET) RCARET eols @@ -6265,8 +6291,8 @@ program: MODULE UIDENT EOL BIGINT RCARET RCARET RPAREN ## ## Ends in an error in state: 65. ## -## binop_expr -> non_stmt_expr rcaret_rcaret_op . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## binop_expr -> non_stmt_expr rcaret_rcaret_op . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## binop_expr -> non_stmt_expr rcaret_rcaret_op . non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## binop_expr -> non_stmt_expr rcaret_rcaret_op . eols non_stmt_expr [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_stmt_expr rcaret_rcaret_op @@ -6310,8 +6336,8 @@ program: MODULE UIDENT EOL WASMI64 COLON WHILE ## ## Ends in an error in state: 72. ## -## annotated_expr -> non_binop_expr COLON . typ [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] -## annotated_expr -> non_binop_expr COLON . eols typ [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## annotated_expr -> non_binop_expr COLON . typ [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] +## annotated_expr -> non_binop_expr COLON . eols typ [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## non_binop_expr COLON @@ -6323,7 +6349,7 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LIDENT THICKARROW EOL WHILE ## ## Ends in an error in state: 78. ## -## typ -> FUN LIDENT arrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> FUN LIDENT arrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## FUN LIDENT arrow @@ -6340,7 +6366,7 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LPAREN RPAREN THICKARROW EOL WHILE ## ## Ends in an error in state: 122. ## -## typ -> FUN lparen option(typs) rparen arrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> FUN lparen option(typs) rparen arrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## FUN lparen option(typs) rparen arrow @@ -6357,7 +6383,7 @@ program: MODULE UIDENT EOL UIDENT COLON FUN UIDENT THICKARROW YIELD ## ## Ends in an error in state: 217. ## -## typ -> FUN data_typ thickarrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS AND ] +## typ -> FUN data_typ thickarrow . typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS AND ] ## ## The known suffix of the stack is as follows: ## FUN data_typ thickarrow @@ -6375,7 +6401,7 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LIDENT WHILE ## ## Ends in an error in state: 75. ## -## typ -> FUN LIDENT . arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> FUN LIDENT . arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## FUN LIDENT @@ -6384,7 +6410,7 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LPAREN RPAREN WHILE ## ## Ends in an error in state: 121. ## -## typ -> FUN lparen option(typs) rparen . arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> FUN lparen option(typs) rparen . arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## FUN lparen option(typs) rparen @@ -6397,7 +6423,7 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LPAREN UIDENT RCARET ## ## Ends in an error in state: 120. ## -## typ -> FUN lparen option(typs) . rparen arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> FUN lparen option(typs) . rparen arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## FUN lparen option(typs) @@ -6422,7 +6448,7 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN LPAREN WHILE ## ## Ends in an error in state: 118. ## -## typ -> FUN lparen . option(typs) rparen arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> FUN lparen . option(typs) rparen arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## FUN lparen @@ -6456,8 +6482,8 @@ program: MODULE UIDENT EOL WASMI64 COLON FUN WHILE ## ## Ends in an error in state: 74. ## -## typ -> FUN . LIDENT arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] -## typ -> FUN . lparen option(typs) rparen arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> FUN . LIDENT arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] +## typ -> FUN . lparen option(typs) rparen arrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## FUN @@ -6538,7 +6564,7 @@ program: MODULE UIDENT EOL WASMI64 COLON LPAREN UIDENT WHEN ## tuple_typs -> typ . COMMA lseparated_nonempty_list_inner(comma,typ) comma [ RPAREN EOL ] ## tuple_typs -> typ . COMMA eols lseparated_nonempty_list_inner(comma,typ) [ RPAREN EOL ] ## tuple_typs -> typ . COMMA eols lseparated_nonempty_list_inner(comma,typ) comma [ RPAREN EOL ] -## typ -> lparen typ . rparen [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS ] +## typ -> lparen typ . rparen [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS ] ## ## The known suffix of the stack is as follows: ## lparen typ @@ -6558,7 +6584,7 @@ program: MODULE UIDENT EOL UIDENT COLON FUN UIDENT YIELD ## ## Ends in an error in state: 216. ## -## typ -> FUN data_typ . thickarrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS AND ] +## typ -> FUN data_typ . thickarrow typ [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS AND ] ## ## The known suffix of the stack is as follows: ## FUN data_typ @@ -6578,7 +6604,7 @@ program: MODULE UIDENT EOL WASMI64 COLON UIDENT LCARET EOL WHILE ## ## Ends in an error in state: 82. ## -## data_typ -> type_id lcaret . typs rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS THICKARROW ] +## data_typ -> type_id lcaret . typs rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS THICKARROW ] ## ## The known suffix of the stack is as follows: ## type_id lcaret @@ -6598,7 +6624,7 @@ program: MODULE UIDENT EOL WASMI64 COLON UIDENT LCARET UIDENT RPAREN ## ## Ends in an error in state: 83. ## -## data_typ -> type_id lcaret typs . rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASH COMMA COLON AS THICKARROW ] +## data_typ -> type_id lcaret typs . rcaret [ WHEN THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 FROM EQUAL EOL EOF ELSE DASHNOWHITESPACE COMMA COLON AS THICKARROW ] ## ## The known suffix of the stack is as follows: ## type_id lcaret typs @@ -6621,8 +6647,8 @@ program: MODULE UIDENT EOL WASMI64 DOT LIDENT LPAREN UNDERSCORE ## ## Ends in an error in state: 468. ## -## app_expr -> record_get lparen . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## app_expr -> record_get lparen . lseparated_nonempty_list_inner(comma,expr) option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## app_expr -> record_get lparen . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## app_expr -> record_get lparen . lseparated_nonempty_list_inner(comma,expr) option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## record_get lparen @@ -6637,7 +6663,7 @@ program: MODULE UIDENT EOL LBRACKRCARET RBRACK LPAREN COMMA WHILE ## ## Ends in an error in state: 295. ## -## app_expr -> array_expr lparen option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## app_expr -> array_expr lparen option(comma) . rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## array_expr lparen option(comma) @@ -6656,7 +6682,7 @@ program: MODULE UIDENT EOL WASMI64 DOT LIDENT LPAREN WASMI64 THICKARROW ## ## Ends in an error in state: 471. ## -## app_expr -> record_get lparen lseparated_nonempty_list_inner(comma,expr) . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## app_expr -> record_get lparen lseparated_nonempty_list_inner(comma,expr) . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## lseparated_nonempty_list_inner(comma,expr) -> lseparated_nonempty_list_inner(comma,expr) . comma expr [ RPAREN EOL COMMA ] ## ## The known suffix of the stack is as follows: @@ -6680,8 +6706,8 @@ program: MODULE UIDENT EOL UIDENT LPAREN WHEN ## ## Ends in an error in state: 42. ## -## construct_expr -> type_id lparen . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] -## construct_expr -> type_id lparen . lseparated_nonempty_list_inner(comma,expr) option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ] +## construct_expr -> type_id lparen . option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] +## construct_expr -> type_id lparen . lseparated_nonempty_list_inner(comma,expr) option(comma) rparen [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## type_id lparen @@ -6741,7 +6767,7 @@ program: MODULE UIDENT EOL WHILE LPAREN UNDERSCORE ## ## Ends in an error in state: 7. ## -## while_expr -> WHILE lparen . expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## while_expr -> WHILE lparen . expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## WHILE lparen @@ -6759,7 +6785,7 @@ program: MODULE UIDENT EOL WHILE LPAREN WASMI64 THICKARROW ## ## Ends in an error in state: 788. ## -## while_expr -> WHILE lparen expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## while_expr -> WHILE lparen expr . rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## WHILE lparen expr @@ -6781,7 +6807,7 @@ program: MODULE UIDENT EOL WHILE WHILE ## ## Ends in an error in state: 1. ## -## while_expr -> WHILE . lparen expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASH COMMA COLON ] +## while_expr -> WHILE . lparen expr rparen block [ THICKARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LCARET INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 EOL EOF ELSE DASHNOWHITESPACE COMMA COLON ] ## ## The known suffix of the stack is as follows: ## WHILE diff --git a/compiler/src/parsing/parser.mly b/compiler/src/parsing/parser.mly index d9161f198f..8da946fc8b 100644 --- a/compiler/src/parsing/parser.mly +++ b/compiler/src/parsing/parser.mly @@ -40,7 +40,7 @@ module Grain_parsing = struct end %token ENUM RECORD TYPE MODULE INCLUDE USE PROVIDE ABSTRACT FOREIGN WASM PRIMITIVE %token AND %token EXCEPT FROM STAR -%token SLASH DASH PIPE +%token SLASH DASHNOWHITESPACE DASHWHITESPACE PIPE %token EOL EOF // reserved tokens @@ -62,7 +62,7 @@ module Grain_parsing = struct end %left INFIX_80 %left INFIX_90 LCARET RCARET %left INFIX_100 -%left INFIX_110 DASH +%left INFIX_110 DASHNOWHITESPACE DASHWHITESPACE %left INFIX_120 STAR SLASH %right SEMI EOL COMMA DOT COLON LPAREN EQUAL @@ -150,8 +150,8 @@ eols: | ioption(eols) {} eos: - | eols {} - | SEMI opt_eols {} + | eols { false } + | SEMI opt_eols { true } lbrack: | LBRACK opt_eols %prec EOL {} @@ -224,24 +224,24 @@ const: | RATIONAL { Constant.rational (mkstr $loc $1) } // The minus sign is not an optional non-terminal or inlined to allow propagation // of correct locations, as $sloc only applies to the current rule. - | DASH NUMBER_INT { Constant.number (PConstNumberInt (mkstr $loc ("-" ^ $2))) } - | DASH NUMBER_FLOAT { Constant.number (PConstNumberFloat (mkstr $loc ("-" ^ $2))) } - | DASH INT8 { Constant.int8 (mkstr $loc ("-" ^ $2)) } - | DASH INT16 { Constant.int16 (mkstr $loc ("-" ^ $2)) } - | DASH INT32 { Constant.int32 (mkstr $loc ("-" ^ $2)) } - | DASH INT64 { Constant.int64 (mkstr $loc ("-" ^ $2)) } - | DASH UINT8 { Constant.uint8 (mkstr $loc ("-" ^ $2)) } - | DASH UINT16 { Constant.uint16 (mkstr $loc ("-" ^ $2)) } - | DASH UINT32 { Constant.uint32 (mkstr $loc ("-" ^ $2)) } - | DASH UINT64 { Constant.uint64 (mkstr $loc ("-" ^ $2)) } - | DASH FLOAT32 { Constant.float32 (mkstr $loc ("-" ^ $2)) } - | DASH FLOAT64 { Constant.float64 (mkstr $loc ("-" ^ $2)) } - | DASH WASMI32 { Constant.wasmi32 (mkstr $loc ("-" ^ $2)) } - | DASH WASMI64 { Constant.wasmi64 (mkstr $loc ("-" ^ $2)) } - | DASH WASMF32 { Constant.wasmf32 (mkstr $loc ("-" ^ $2)) } - | DASH WASMF64 { Constant.wasmf64 (mkstr $loc ("-" ^ $2)) } - | DASH BIGINT { Constant.bigint (mkstr $loc ("-" ^ $2)) } - | DASH RATIONAL { Constant.rational (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE NUMBER_INT { Constant.number (PConstNumberInt (mkstr $loc ("-" ^ $2))) } + | DASHNOWHITESPACE NUMBER_FLOAT { Constant.number (PConstNumberFloat (mkstr $loc ("-" ^ $2))) } + | DASHNOWHITESPACE INT8 { Constant.int8 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE INT16 { Constant.int16 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE INT32 { Constant.int32 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE INT64 { Constant.int64 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE UINT8 { Constant.uint8 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE UINT16 { Constant.uint16 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE UINT32 { Constant.uint32 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE UINT64 { Constant.uint64 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE FLOAT32 { Constant.float32 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE FLOAT64 { Constant.float64 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE WASMI32 { Constant.wasmi32 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE WASMI64 { Constant.wasmi64 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE WASMF32 { Constant.wasmf32 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE WASMF64 { Constant.wasmf64 (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE BIGINT { Constant.bigint (mkstr $loc ("-" ^ $2)) } + | DASHNOWHITESPACE RATIONAL { Constant.rational (mkstr $loc ("-" ^ $2)) } | TRUE { Constant.bool true } | FALSE { Constant.bool false } | VOID { Constant.void } @@ -279,8 +279,8 @@ pattern: | UNDERSCORE { Pattern.any ~loc:(to_loc $loc) () } | const { Pattern.constant ~loc:(to_loc $loc) $1 } // Allow rational numbers in patterns - | NUMBER_INT SLASH DASH? NUMBER_INT { Pattern.constant ~loc:(to_loc $sloc) @@ Constant.number (Number.rational (mkstr $loc($1) $1) (to_loc($loc($2))) (if Option.is_some $3 then (mkstr (fst $loc($3), snd $loc($4)) ("-" ^ $4)) else mkstr $loc($4) $4)) } - | DASH NUMBER_INT SLASH DASH? NUMBER_INT { Pattern.constant ~loc:(to_loc $sloc) @@ Constant.number (Number.rational (mkstr (fst $loc($1), snd $loc($2)) ("-" ^ $2)) (to_loc($loc($3))) (if Option.is_some $4 then (mkstr (fst $loc($4), snd $loc($5)) ("-" ^ $5)) else mkstr $loc($5) $5)) } + | NUMBER_INT SLASH DASHNOWHITESPACE? NUMBER_INT { Pattern.constant ~loc:(to_loc $sloc) @@ Constant.number (Number.rational (mkstr $loc($1) $1) (to_loc($loc($2))) (if Option.is_some $3 then (mkstr (fst $loc($3), snd $loc($4)) ("-" ^ $4)) else mkstr $loc($4) $4)) } + | DASHNOWHITESPACE NUMBER_INT SLASH DASHNOWHITESPACE? NUMBER_INT { Pattern.constant ~loc:(to_loc $sloc) @@ Constant.number (Number.rational (mkstr (fst $loc($1), snd $loc($2)) ("-" ^ $2)) (to_loc($loc($3))) (if Option.is_some $4 then (mkstr (fst $loc($4), snd $loc($5)) ("-" ^ $5)) else mkstr $loc($5) $5)) } | LIDENT { Pattern.var ~loc:(to_loc $loc) (mkstr $loc $1) } | special_id { Pattern.var ~loc:(to_loc $loc) $1 } | primitive_ { Pattern.var ~loc:(to_loc $loc) (mkstr $loc $1) } @@ -450,7 +450,7 @@ unop_expr: | prefix_op non_assign_expr { Expression.apply ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) (mkid_expr $loc($1) [mkstr $loc($1) $1]) [{paa_label=Unlabeled; paa_expr=$2; paa_loc=(to_loc $loc($2))}] } paren_expr: - | lparen expr rparen { $2 } + | lparen expr rparen { {$2 with pexp_in_parens=true} } app_arg: | expr { {paa_label=Unlabeled; paa_expr=$1; paa_loc=to_loc $loc} } @@ -481,7 +481,8 @@ construct_expr: | INFIX_120 {$1} | STAR { "*" } | SLASH { "/" } - | DASH { "-" } + | DASHNOWHITESPACE + | DASHWHITESPACE { "-" } | PIPE { "|" } | LCARET { "<" } | RCARET { ">" } @@ -607,7 +608,7 @@ stmt_expr: | THROW expr { Expression.apply ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) (mkid_expr $loc($1) [mkstr $loc($1) "throw"]) [{paa_label=Unlabeled; paa_expr=$2; paa_loc=(to_loc $loc($2))}] } | ASSERT expr { Expression.apply ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) (mkid_expr $loc($1) [mkstr $loc($1) "assert"]) [{paa_label=Unlabeled; paa_expr=$2; paa_loc=(to_loc $loc($2))}] } | FAIL expr { Expression.apply ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) (mkid_expr $loc($1) [mkstr $loc($1) "fail"]) [{paa_label=Unlabeled; paa_expr=$2; paa_loc=(to_loc $loc($2))}] } - // allow DASH to cause a shift instead of the usual reduction of the left side for subtraction + // allow DASHNOWHITESPACE to cause a shift instead of the usual reduction of the left side for subtraction | RETURN ioption(expr) %prec _below_infix { Expression.return ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) $2 } | CONTINUE { Expression.continue ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) () } | BREAK { Expression.break ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) () } @@ -689,8 +690,12 @@ record_exprs: | punned_record_field comma { [$1] } | record_field comma lseparated_nonempty_list(comma, record_field) comma? { $1::$3 } +block_body_inner: + | block_body_inner eos block_body_expr { {pblk_expr=$3; pblk_ends_semi=false}::(apply_semicolon_block $1 $2) } + | block_body_expr { [{pblk_expr=$1; pblk_ends_semi=false}] } + block_body: - | lseparated_nonempty_list(eos, block_body_expr) ioption(eos) %prec SEMI { $1 } + | block_body_inner ioption(eos) %prec SEMI { List.rev (apply_semicolon_block $1 (Option.value ~default:false $2)) } file_path: | STRING { Location.mkloc $1 (to_loc $loc) } @@ -734,8 +739,12 @@ toplevel_stmt: | provide_stmt { $1 } | exception_stmt { Toplevel.grain_exception ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) NotProvided $1 } +toplevel_stmts_inner: + | toplevel_stmts_inner eos toplevel_stmt { $3::(apply_semicolon_toplevels $1 $2) } + | toplevel_stmt { [$1] } + toplevel_stmts: - | lseparated_nonempty_list(eos, toplevel_stmt) eos? { $1 } + | toplevel_stmts_inner ioption(eos) { List.rev (apply_semicolon_toplevels $1 (Option.value ~default:false $2)) } module_header: | MODULE UIDENT { mkstr $loc($2) $2 } diff --git a/compiler/src/parsing/parser_header.re b/compiler/src/parsing/parser_header.re index cfb3319836..d66d60fa8c 100644 --- a/compiler/src/parsing/parser_header.re +++ b/compiler/src/parsing/parser_header.re @@ -4,6 +4,20 @@ open Parsetree; open Ast_helper; open Grain_utils; +let apply_semicolon_block = (rev_block_exprs, has_semicolon) => { + switch (rev_block_exprs) { + | [first, ...rest] => [{...first, pblk_ends_semi: has_semicolon}, ...rest] + | [] => [] + }; +}; + +let apply_semicolon_toplevels = (rev_toplevel_exprs, has_semicolon) => { + switch (rev_toplevel_exprs) { + | [first, ...rest] => [{...first, ptop_ends_semi: has_semicolon}, ...rest] + | [] => [] + }; +}; + let make_line_comment = (source, loc) => { let content = String_utils.slice(~first=2, source) |> String.trim; Line({cmt_content: content, cmt_source: source, cmt_loc: loc}); diff --git a/compiler/src/parsing/parser_utils.re b/compiler/src/parsing/parser_utils.re new file mode 100644 index 0000000000..37075f90d6 --- /dev/null +++ b/compiler/src/parsing/parser_utils.re @@ -0,0 +1,87 @@ +open Parsetree; + +let infixop = op => { + switch (op.[0]) { + | '+' + | '-' + | '*' + | '/' + | '%' + | '=' + | '^' + | '<' + | '>' + | '&' + | '|' + | '?' => true + | _ when op == "is" => true + | _ when op == "isnt" => true + | _ when String.starts_with(~prefix="!=", op) => true + | _ + | exception _ => false + }; +}; + +let is_infix_op = expr => { + switch (expr.pexp_desc) { + | PExpId({txt: Identifier.IdentName({txt: op})}) => infixop(op) + | _ => false + }; +}; + +let prefixop = op => + switch (op.[0]) { + | '!' => true + | _ + | exception _ => false + }; + +let is_prefix_op = expr => { + switch (expr.pexp_desc) { + | PExpId({txt: Identifier.IdentName({txt: op})}) => prefixop(op) + | _ => false + }; +}; + +let rec starts_with_negative_value = (~bypass_parens, expr) => + if (bypass_parens && expr.pexp_in_parens) { + false; + } else { + switch (expr.pexp_desc) { + | PExpConstant(const) => + switch (const) { + | PConstNumber( + PConstNumberInt({txt}) | PConstNumberFloat({txt}) | + PConstNumberRational({numerator: {txt}}), + ) + | PConstInt8({txt}) + | PConstInt16({txt}) + | PConstInt32({txt}) + | PConstInt64({txt}) + | PConstUint8({txt}) + | PConstUint16({txt}) + | PConstUint32({txt}) + | PConstUint64({txt}) + | PConstFloat32({txt}) + | PConstFloat64({txt}) + | PConstWasmI32({txt}) + | PConstWasmI64({txt}) + | PConstWasmF32({txt}) + | PConstWasmF64({txt}) + | PConstBigInt({txt}) + | PConstRational({txt}) => String.starts_with(~prefix="-", txt) + | PConstBool(_) + | PConstVoid + | PConstBytes(_) + | PConstString(_) + | PConstChar(_) => false + } + | PExpApp( + func_expr, + [{paa_label: Unlabeled, paa_expr: arg1}, {paa_label: Unlabeled}], + ) + when is_infix_op(func_expr) => + starts_with_negative_value(~bypass_parens, arg1) + | _ => false + }; + }; diff --git a/compiler/src/parsing/parsetree.re b/compiler/src/parsing/parsetree.re index 4507eba8f6..baa558f7e2 100644 --- a/compiler/src/parsing/parsetree.re +++ b/compiler/src/parsing/parsetree.re @@ -507,6 +507,7 @@ type attributes = Asttypes.attributes; type expression = { pexp_desc: expression_desc, pexp_attributes: attributes, + pexp_in_parens: bool, [@sexp_drop_if sexp_locs_disabled] pexp_loc: Location.t, // The full location, including attributes [@sexp_drop_if sexp_locs_disabled] @@ -553,10 +554,16 @@ and expression_desc = | PExpLambda(list(lambda_argument), expression) | PExpApp(expression, list(application_argument)) | PExpConstruct(loc(Identifier.t), constructor_expression) - | PExpBlock(list(expression)) + | PExpBlock(list(block_expression)) | PExpBoxAssign(expression, expression) | PExpAssign(expression, expression) +[@deriving (sexp, yojson)] +and block_expression = { + pblk_expr: expression, + pblk_ends_semi: bool, +} + [@deriving (sexp, yojson)] and constructor_expression = | PExpConstrTuple(list(expression)) @@ -674,6 +681,7 @@ and toplevel_stmt_desc = and toplevel_stmt = { ptop_desc: toplevel_stmt_desc, ptop_attributes: attributes, + ptop_ends_semi: bool, [@sexp_drop_if sexp_locs_disabled] ptop_loc: Location.t, // The full location, including attributes [@sexp_drop_if sexp_locs_disabled] diff --git a/compiler/src/parsing/parsetree_iter.re b/compiler/src/parsing/parsetree_iter.re index bd79be2c29..f1f1ad76a5 100644 --- a/compiler/src/parsing/parsetree_iter.re +++ b/compiler/src/parsing/parsetree_iter.re @@ -372,7 +372,7 @@ and iter_expression = | PExpConstrRecord(es) => iter_record_fields(hooks, es) | PExpConstrSingleton => () }; - | PExpBlock(el) => iter_expressions(hooks, el) + | PExpBlock(el) => iter_expressions(hooks, List.map(e => e.pblk_expr, el)) }; hooks.leave_expression(expr); } diff --git a/compiler/src/parsing/well_formedness.re b/compiler/src/parsing/well_formedness.re index 103edf6550..6d7ef32177 100644 --- a/compiler/src/parsing/well_formedness.re +++ b/compiler/src/parsing/well_formedness.re @@ -474,7 +474,7 @@ let malformed_return_statements = (errs, super) => { let rec find = expressions => { switch (expressions) { | [] => false - | [expression] => has_returning_branch(expression) + | [expression] => has_returning_branch(expression.pblk_expr) | [_, ...rest] => find(rest) }; }; @@ -501,7 +501,8 @@ let malformed_return_statements = (errs, super) => { let rec collect = expressions => { switch (expressions) { | [] => acc - | [expression] => collect_non_returning_branches(expression, acc) + | [expression] => + collect_non_returning_branches(expression.pblk_expr, acc) | [_, ...rest] => collect(rest) }; }; @@ -877,6 +878,69 @@ let array_index_non_integer = (errs, super) => { }; }; +let line_starts_with_negative_value = (errs, super) => { + let rec report_lone_negative_value = expr => + if (Parser_utils.starts_with_negative_value(~bypass_parens=true, expr)) { + let warning = Warnings.NegativeNumberOnNewLine; + if (Warnings.is_active(warning)) { + Location.prerr_warning(expr.pexp_loc, warning); + }; + }; + + let rec check_block_exprs_lone_negative = block_exprs => { + switch (block_exprs) { + | [first, ...[second, ..._] as rest] => + if (!first.pblk_ends_semi) { + report_lone_negative_value(second.pblk_expr); + }; + + check_block_exprs_lone_negative(rest); + | _ => () + }; + }; + + let rec check_toplevel_stmts_lone_negative = stmts => { + switch (stmts) { + | [first, ...[{ptop_desc: PTopExpr(expr)}, ..._] as rest] => + switch (first) { + | {ptop_ends_semi: false, ptop_desc: PTopExpr(_) | PTopLet(_)} => + report_lone_negative_value(expr) + | _ => () + }; + check_toplevel_stmts_lone_negative(rest); + | _ => () + }; + }; + + let enter_expression = ({pexp_desc: desc} as e) => { + switch (desc) { + | PExpBlock(exprs) => check_block_exprs_lone_negative(exprs) + | _ => () + }; + super.enter_expression(e); + }; + + let enter_module = (provide_flag, decl) => { + check_toplevel_stmts_lone_negative(decl.pmod_stmts); + super.enter_module(provide_flag, decl); + }; + + let enter_parsed_program = prog => { + check_toplevel_stmts_lone_negative(prog.statements); + super.enter_parsed_program(prog); + }; + + { + errs, + iter_hooks: { + ...super, + enter_expression, + enter_module, + enter_parsed_program, + }, + }; +}; + let compose_well_formedness = ({errs, iter_hooks}, cur) => cur(errs, iter_hooks); @@ -893,6 +957,7 @@ let well_formedness_checks = [ provided_multiple_times, mutual_rec_type_improper_rec_keyword, array_index_non_integer, + line_starts_with_negative_value, ]; let well_formedness_checker = () => diff --git a/compiler/src/parsing/wrapped_lexer.re b/compiler/src/parsing/wrapped_lexer.re index dd26cf4b36..a4815be28b 100644 --- a/compiler/src/parsing/wrapped_lexer.re +++ b/compiler/src/parsing/wrapped_lexer.re @@ -114,7 +114,7 @@ let ignore_fns = state => { }; }; -let is_infix_op = (token) => { +let is_wrappable_infix_op = token => { switch (token) { | INFIX_30(_) | INFIX_40(_) @@ -128,13 +128,14 @@ let is_infix_op = (token) => { | INFIX_120(_) | STAR | SLASH - | DASH + // Note: no DASHNOWHITESPACE as that should be interpreted as a negative number on the next line + | DASHWHITESPACE | PIPE | LCARET | RCARET => true | _ => false - } -} + }; +}; let rec check_lparen_fn = (state, closing, acc) => { let rparen = @@ -421,7 +422,7 @@ let token = state => { | AND | ELSE | PIPE => next_triple^ - | x when is_infix_op(x) => next_triple^ + | x when is_wrappable_infix_op(x) => next_triple^ | _ => state.queued_tokens = List.tl( diff --git a/compiler/src/typed/typecore.re b/compiler/src/typed/typecore.re index 1e14d79a3d..46dfa44628 100644 --- a/compiler/src/typed/typecore.re +++ b/compiler/src/typed/typecore.re @@ -569,7 +569,7 @@ let rec final_subexpression = sexp => | PExpWhile(_, e) | PExpMatch(_, {txt: [{pmb_body: e}, ..._]}) => final_subexpression(e) | PExpBlock(es) => - try(final_subexpression(last(es))) { + try(final_subexpression(last(es).pblk_expr)) { | Not_found => sexp } | _ => sexp @@ -640,7 +640,7 @@ let rec type_approx = (env, sexp: Parsetree.expression) => TComOk, ), ) - | PExpBlock([_, ..._] as es) => type_approx(env, last(es)) + | PExpBlock([_, ..._] as es) => type_approx(env, last(es).pblk_expr) | _ => newvar() }; @@ -1365,7 +1365,10 @@ and type_expect_ = Expression.block( ~loc=body.pexp_loc, ~core_loc=body.pexp_core_loc, - prelude @ [body], + List.map( + expr => {pblk_expr: expr, pblk_ends_semi: false}, + prelude @ [body], + ), ) }; type_function( @@ -1741,7 +1744,7 @@ and type_expect_ = switch (rem) { | [] => failwith("Impossible: empty case in process_es") | [e] => - let expr = type_expect(env, e, ty_expected_explained); + let expr = type_expect(env, e.pblk_expr, ty_expected_explained); ([expr], expr.exp_type); | [e, ...es] => let expr = @@ -1749,7 +1752,7 @@ and type_expect_ = ~explanation=Sequence_left_hand_side, ~in_function?, env, - e, + e.pblk_expr, ); let (exprs, typ) = process_es(expr.exp_env, es); ([expr, ...exprs], typ); @@ -2088,6 +2091,7 @@ and type_construct = (env, loc, lid, sarg, ty_expected_explained, attrs) => { pexp_attributes: attrs, pexp_loc: loc, pexp_core_loc: loc, + pexp_in_parens: false, }, ], true, diff --git a/compiler/src/utils/warnings.re b/compiler/src/utils/warnings.re index fd513fddf2..e34fde7b43 100644 --- a/compiler/src/utils/warnings.re +++ b/compiler/src/utils/warnings.re @@ -42,9 +42,10 @@ type t = | UselessRecordSpread | PrintUnsafe(string) | ToStringUnsafe(string) - | ArrayIndexNonInteger(string); + | ArrayIndexNonInteger(string) + | NegativeNumberOnNewLine; -let last_warning_number = 22; +let last_warning_number = 23; let number = fun @@ -69,7 +70,8 @@ let number = | UselessRecordSpread => 19 | PrintUnsafe(_) => 20 | ToStringUnsafe(_) => 21 - | ArrayIndexNonInteger(_) => last_warning_number; + | ArrayIndexNonInteger(_) => 22 + | NegativeNumberOnNewLine => last_warning_number; let message = fun @@ -175,7 +177,8 @@ let message = ++ typ ++ " from the `runtime/debugPrint` module instead." | ArrayIndexNonInteger(idx) => - "Array index should be an integer, but found `" ++ idx ++ "`."; + "Array index should be an integer, but found `" ++ idx ++ "`." + | NegativeNumberOnNewLine => "this expression is ambiguous between the right side of a subtraction operation carrying over from the previous line and a negative number.\nIf this is meant to be a negative number please surround this expression with parentheses or add a semicolon to the end of the previous line.\nOtherwise if this is meant to be a subtraction operation please add whitespace between the `-` and the right operand."; let sub_locs = fun @@ -223,6 +226,7 @@ let defaults = [ PrintUnsafe(""), ToStringUnsafe(""), ArrayIndexNonInteger(""), + NegativeNumberOnNewLine, ]; let _ = List.iter(x => current^.active[number(x)] = true, defaults); diff --git a/compiler/src/utils/warnings.rei b/compiler/src/utils/warnings.rei index efe0167c7b..fdf723dedb 100644 --- a/compiler/src/utils/warnings.rei +++ b/compiler/src/utils/warnings.rei @@ -56,7 +56,8 @@ type t = | UselessRecordSpread | PrintUnsafe(string) | ToStringUnsafe(string) - | ArrayIndexNonInteger(string); + | ArrayIndexNonInteger(string) + | NegativeNumberOnNewLine; let is_active: t => bool; let is_error: t => bool; diff --git a/compiler/test/__snapshots__/basic_functionality.16eea1e9.0.snapshot b/compiler/test/__snapshots__/basic_functionality.16eea1e9.0.snapshot new file mode 100644 index 0000000000..1b32fbdc3e --- /dev/null +++ b/compiler/test/__snapshots__/basic_functionality.16eea1e9.0.snapshot @@ -0,0 +1,48 @@ +basic functionality › binop2.6 +(module + (type $none_=>_i32 (func (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (import \"_genv\" \"tbl\" (table $tbl 0 funcref)) + (import \"_genv\" \"relocBase\" (global $relocBase_0 i32)) + (import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32)) + (import \"_genv\" \"runtimeHeapStart\" (global $runtimeHeapStart_0 i32)) + (import \"_genv\" \"runtimeHeapNextPtr\" (global $runtimeHeapNextPtr_0 (mut i32))) + (import \"_genv\" \"metadataPtr\" (global $metadataPtr_0 i32)) + (import \"GRAIN$MODULE$runtime/gc.gr\" \"GRAIN$EXPORT$incRef\" (global $GRAIN$EXPORT$incRef_0 (mut i32))) + (import \"GRAIN$MODULE$pervasives.gr\" \"GRAIN$EXPORT$-\" (global $-_1113 (mut i32))) + (import \"GRAIN$MODULE$runtime/gc.gr\" \"incRef\" (func $incRef_0 (param i32 i32) (result i32))) + (import \"GRAIN$MODULE$pervasives.gr\" \"-\" (func $-_1113 (param i32 i32 i32) (result i32))) + (global $GRAIN$TABLE_SIZE i32 (i32.const 0)) + (memory $0 0) + (elem $elem (global.get $relocBase_0)) + (export \"memory\" (memory $0)) + (export \"_gmain\" (func $_gmain)) + (export \"_start\" (func $_start)) + (export \"GRAIN$TABLE_SIZE\" (global $GRAIN$TABLE_SIZE)) + (func $_gmain (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i64) + (local $4 f32) + (local $5 f64) + (block $compile_block.1 + (return_call $-_1113 + (call $incRef_0 + (global.get $GRAIN$EXPORT$incRef_0) + (global.get $-_1113) + ) + (i32.const 5) + (i32.const 5) + ) + ) + ) + (func $_start + (drop + (call $_gmain) + ) + ) + ;; custom section \"cmi\", size 368 +) diff --git a/compiler/test/__snapshots__/basic_functionality.7edbad66.0.snapshot b/compiler/test/__snapshots__/basic_functionality.7edbad66.0.snapshot new file mode 100644 index 0000000000..181dd08637 --- /dev/null +++ b/compiler/test/__snapshots__/basic_functionality.7edbad66.0.snapshot @@ -0,0 +1,48 @@ +basic functionality › binop2.5 +(module + (type $none_=>_i32 (func (result i32))) + (type $none_=>_none (func)) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (import \"_genv\" \"tbl\" (table $tbl 0 funcref)) + (import \"_genv\" \"relocBase\" (global $relocBase_0 i32)) + (import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32)) + (import \"_genv\" \"runtimeHeapStart\" (global $runtimeHeapStart_0 i32)) + (import \"_genv\" \"runtimeHeapNextPtr\" (global $runtimeHeapNextPtr_0 (mut i32))) + (import \"_genv\" \"metadataPtr\" (global $metadataPtr_0 i32)) + (import \"GRAIN$MODULE$runtime/gc.gr\" \"GRAIN$EXPORT$incRef\" (global $GRAIN$EXPORT$incRef_0 (mut i32))) + (import \"GRAIN$MODULE$pervasives.gr\" \"GRAIN$EXPORT$-\" (global $-_1113 (mut i32))) + (import \"GRAIN$MODULE$runtime/gc.gr\" \"incRef\" (func $incRef_0 (param i32 i32) (result i32))) + (import \"GRAIN$MODULE$pervasives.gr\" \"-\" (func $-_1113 (param i32 i32 i32) (result i32))) + (global $GRAIN$TABLE_SIZE i32 (i32.const 0)) + (memory $0 0) + (elem $elem (global.get $relocBase_0)) + (export \"memory\" (memory $0)) + (export \"_gmain\" (func $_gmain)) + (export \"_start\" (func $_start)) + (export \"GRAIN$TABLE_SIZE\" (global $GRAIN$TABLE_SIZE)) + (func $_gmain (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i64) + (local $4 f32) + (local $5 f64) + (block $compile_block.1 + (return_call $-_1113 + (call $incRef_0 + (global.get $GRAIN$EXPORT$incRef_0) + (global.get $-_1113) + ) + (i32.const 5) + (i32.const 5) + ) + ) + ) + (func $_start + (drop + (call $_gmain) + ) + ) + ;; custom section \"cmi\", size 368 +) diff --git a/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot b/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot index e71d05b682..69cf61785d 100644 --- a/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot +++ b/compiler/test/__snapshots__/basic_functionality.950b8fda.0.snapshot @@ -2,18 +2,12 @@ basic functionality › binop2.3 (module (type $none_=>_i32 (func (result i32))) (type $none_=>_none (func)) - (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (import \"_genv\" \"tbl\" (table $tbl 0 funcref)) (import \"_genv\" \"relocBase\" (global $relocBase_0 i32)) (import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32)) (import \"_genv\" \"runtimeHeapStart\" (global $runtimeHeapStart_0 i32)) (import \"_genv\" \"runtimeHeapNextPtr\" (global $runtimeHeapNextPtr_0 (mut i32))) (import \"_genv\" \"metadataPtr\" (global $metadataPtr_0 i32)) - (import \"GRAIN$MODULE$runtime/gc.gr\" \"GRAIN$EXPORT$incRef\" (global $GRAIN$EXPORT$incRef_0 (mut i32))) - (import \"GRAIN$MODULE$pervasives.gr\" \"GRAIN$EXPORT$-\" (global $-_1113 (mut i32))) - (import \"GRAIN$MODULE$runtime/gc.gr\" \"incRef\" (func $incRef_0 (param i32 i32) (result i32))) - (import \"GRAIN$MODULE$pervasives.gr\" \"-\" (func $-_1113 (param i32 i32 i32) (result i32))) (global $GRAIN$TABLE_SIZE i32 (i32.const 0)) (memory $0 0) (elem $elem (global.get $relocBase_0)) @@ -28,15 +22,8 @@ basic functionality › binop2.3 (local $3 i64) (local $4 f32) (local $5 f64) - (block $compile_block.1 - (return_call $-_1113 - (call $incRef_0 - (global.get $GRAIN$EXPORT$incRef_0) - (global.get $-_1113) - ) - (i32.const 5) - (i32.const 5) - ) + (block $compile_block.1 (result i32) + (i32.const -3) ) ) (func $_start diff --git a/compiler/test/grainfmt/application_indenting.expected.gr b/compiler/test/grainfmt/application_indenting.expected.gr index 9b5f189807..6374da8d16 100644 --- a/compiler/test/grainfmt/application_indenting.expected.gr +++ b/compiler/test/grainfmt/application_indenting.expected.gr @@ -3,10 +3,10 @@ module ApplicationIndenting let flagsToWasmVal = (flag, i) => { let riiiiiiightsInheriting = Module64.load(structPtr, 16n) ( - riiiiiiightsInheriting & - 1N << Module64.extendI32U(Module32.fromGrain(i) >> 1n) - ) > - 0N + riiiiiiightsInheriting + & 1N << Module64.extendI32U(Module32.fromGrain(i) >> 1n) + ) + > 0N } let grisuRound = (buffer, len, delta, rest, ten_kappa, wp_w) => { @@ -14,11 +14,11 @@ let grisuRound = (buffer, len, delta, rest, ten_kappa, wp_w) => { let mut digit = Module32.load8U(lastp, 0n) let mut rest = rest while ( - Module64.ltU(rest, wp_w) && - Module64.geU(Module64.sub(delta, rest), ten_kappa) && - ( - Module64.ltU(Module64.add(rest, ten_kappa), wp_w) || - Module64.gtU( + Module64.ltU(rest, wp_w) + && Module64.geU(Module64.sub(delta, rest), ten_kappa) + && ( + Module64.ltU(Module64.add(rest, ten_kappa), wp_w) + || Module64.gtU( Module64.sub(wp_w, rest), Module64.sub(Module64.add(rest, ten_kappa), wp_w) ) @@ -30,5 +30,5 @@ let grisuRound = (buffer, len, delta, rest, ten_kappa, wp_w) => { Module32.store8(lastp, digit, 0n) } -assert Hash.hash("grain > ore > wool > lumber > brick") == - Hash.hash("grain > ore > wool > lumber > brick") +assert Hash.hash("grain > ore > wool > lumber > brick") + == Hash.hash("grain > ore > wool > lumber > brick") diff --git a/compiler/test/grainfmt/binop_perf.expected.gr b/compiler/test/grainfmt/binop_perf.expected.gr index cf3a593c5f..60af207bcd 100644 --- a/compiler/test/grainfmt/binop_perf.expected.gr +++ b/compiler/test/grainfmt/binop_perf.expected.gr @@ -1,121 +1,121 @@ module BinopPerf // performance regression test—this will hang seemingly forever if not performant -val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') || - val == Mod.func('🌾') +val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') + || val == Mod.func('🌾') diff --git a/compiler/test/grainfmt/binops.expected.gr b/compiler/test/grainfmt/binops.expected.gr index 91a55d95bd..159be55387 100644 --- a/compiler/test/grainfmt/binops.expected.gr +++ b/compiler/test/grainfmt/binops.expected.gr @@ -1,17 +1,17 @@ module Binops -fofdfdfdfdfdfdfdfdfdfdfdo && - bafdfdfdfdfdfdddefdfdfdfdfdr && - badfdfdfdfdfdfdffdffdfdfdz +fofdfdfdfdfdfdfdfdfdfdfdo + && bafdfdfdfdfdfdddefdfdfdfdfdr + && badfdfdfdfdfdfdffdffdfdfdz -let x = fofdfdfdfdfdfdfdfdfdfdfdo && - bafdfdfdfdfdfdddefdfdfdfdfdr && - badfdfdfdfdfdfdffdffdfdfdz +let x = fofdfdfdfdfdfdfdfdfdfdfdo + && bafdfdfdfdfdfdddefdfdfdfdfdr + && badfdfdfdfdfdfdffdffdfdfdz if ( - fofdfdfdfdfdfdfdfdfdfdfdo && - bafdfdfdfdfdfdddefdfdfdfdfdr && - badfdfdfdfdfdfdffdffdfdfdz + fofdfdfdfdfdfdfdfdfdfdfdo + && bafdfdfdfdfdfdddefdfdfdfdfdr + && badfdfdfdfdfdfdffdffdfdfdz ) true diff --git a/compiler/test/grainfmt/infix.expected.gr b/compiler/test/grainfmt/infix.expected.gr index dcfa7ebecf..0adf723742 100644 --- a/compiler/test/grainfmt/infix.expected.gr +++ b/compiler/test/grainfmt/infix.expected.gr @@ -10,16 +10,35 @@ let trimString = (str: String, end: Bool) => { let currentChar = chars[i] if ( // Spacing - currentChar != '\u{0009}' && // Tab - currentChar != '\u{000B}' && // LINE TABULATION - currentChar != '\u{000C}' && // FORM FEED (FF) - currentChar != '\u{0020}' && // Space - currentChar != '\u{00A0}' && // No Break Space - currentChar != '\u{FEFF}' && // ZERO WIDTH NO-BREAK SPACE + currentChar != '\u{0009}' + && // Tab + currentChar != '\u{000B}' + && // LINE TABULATION + currentChar != '\u{000C}' + && // FORM FEED (FF) + currentChar != '\u{0020}' + && // Space + currentChar != '\u{00A0}' + && // No Break Space + currentChar != '\u{FEFF}' + && // ZERO WIDTH NO-BREAK SPACE // Line Terminators - currentChar != '\n' && // LF + currentChar != '\n' + && // LF currentChar != '\r' // CR ) break + if ( + // Spacing + currentChar != '\u{0009}' // Tab + && currentChar != '\u{000B}' // LINE TABULATION + && currentChar != '\u{000C}' // FORM FEED (FF) + && currentChar != '\u{0020}' // Space + && currentChar != '\u{00A0}' // No Break Space + && currentChar != '\u{FEFF}' // ZERO WIDTH NO-BREAK SPACE + // Line Terminators + && currentChar != '\n' // LF + && currentChar != '\r' // CR + ) break } if (end) slice(0, i + 1, str) else slice(i, charsLength, str) } diff --git a/compiler/test/grainfmt/infix.input.gr b/compiler/test/grainfmt/infix.input.gr index 543e603ba0..ecf131f485 100644 --- a/compiler/test/grainfmt/infix.input.gr +++ b/compiler/test/grainfmt/infix.input.gr @@ -18,6 +18,25 @@ let trimString = (str: String, end: Bool) => { currentChar != '\n' && // LF currentChar != '\r' // CR ) break + if ( + // Spacing + currentChar != '\u{0009}' // Tab + && + currentChar != '\u{000B}' // LINE TABULATION + && + currentChar != '\u{000C}' // FORM FEED (FF) + && + currentChar != '\u{0020}' // Space + && + currentChar != '\u{00A0}' // No Break Space + && + currentChar != '\u{FEFF}' // ZERO WIDTH NO-BREAK SPACE + // Line Terminators + && + currentChar != '\n' // LF + && + currentChar != '\r' // CR + ) break } if (end) slice(0, i+1, str) else slice(i, charsLength, str) diff --git a/compiler/test/grainfmt/lone_negative_numbers.expected.gr b/compiler/test/grainfmt/lone_negative_numbers.expected.gr new file mode 100644 index 0000000000..9ff6d95ee3 --- /dev/null +++ b/compiler/test/grainfmt/lone_negative_numbers.expected.gr @@ -0,0 +1,26 @@ +module LoneNegativeNumbers + +let a = 1 +(-1) +(-1) +(-1 + 2) +(-1 + 2) +print(a) + +let f = () => { + let a = 1 + (-1) + (-1) + (-1 + 2) + (-1 + 2) + print(a) +} + +module Mod { + let a = 1 + (-1) + (-1) + (-1 + 2) + (-1 + 2) + print(a) +} diff --git a/compiler/test/grainfmt/lone_negative_numbers.input.gr b/compiler/test/grainfmt/lone_negative_numbers.input.gr new file mode 100644 index 0000000000..641406386d --- /dev/null +++ b/compiler/test/grainfmt/lone_negative_numbers.input.gr @@ -0,0 +1,26 @@ +module LoneNegativeNumbers + +let a = 1; +-1 +-1 +(-1) + 2 +(-1 + 2) +print(a) + +let f = () => { + let a = 1; + -1 + -1 + (-1) + 2 + (-1 + 2) + print(a) +} + +module Mod { + let a = 1; + -1 + -1 + (-1) + 2 + (-1 + 2) + print(a) +} diff --git a/compiler/test/runner.re b/compiler/test/runner.re index de1b3d3c60..4286cdefab 100644 --- a/compiler/test/runner.re +++ b/compiler/test/runner.re @@ -218,7 +218,7 @@ let lsp = stdin_input => { let module_header = "module Test; "; let makeSnapshotRunner = - (~config_fn=?, test, ~module_header=module_header, name, prog) => { + (test, ~config_fn=?, ~module_header=module_header, name, prog) => { test(name, ({expect}) => { Config.preserve_all_configs(() => { ignore @@ diff --git a/compiler/test/stdlib/array.test.gr b/compiler/test/stdlib/array.test.gr index 9757f120f8..48287dcc37 100644 --- a/compiler/test/stdlib/array.test.gr +++ b/compiler/test/stdlib/array.test.gr @@ -232,8 +232,8 @@ let arrB = [> 2, 3, 4] let arrC = [> 1] let arrD = [> 2] -assert Array.product(arrA, arrB) == - [> (1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4)] +assert Array.product(arrA, arrB) + == [> (1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4)] assert Array.product(arrC, arrB) == [> (1, 2), (1, 3), (1, 4)] assert Array.product(arrC, arrD) == [> (1, 2)] assert Array.product([>], [>]) == [>] @@ -430,10 +430,10 @@ assert arr9 == [>] assert Array.chunk(2, [>]) == [>] assert Array.chunk(2, [> 1, 2, 3, 4]) == [> [> 1, 2], [> 3, 4]] assert Array.chunk(2, [> 1, 2, 3, 4, 5]) == [> [> 1, 2], [> 3, 4], [> 5]] -assert Array.chunk(3, [> 1, 2, 3, 4, 5, 6, 7, 8]) == - [> [> 1, 2, 3], [> 4, 5, 6], [> 7, 8]] -assert Array.chunk(3, [> 1, 2, 3, 4, 5, 6, 7, 8]) == - [> [> 1, 2, 3], [> 4, 5, 6], [> 7, 8]] +assert Array.chunk(3, [> 1, 2, 3, 4, 5, 6, 7, 8]) + == [> [> 1, 2, 3], [> 4, 5, 6], [> 7, 8]] +assert Array.chunk(3, [> 1, 2, 3, 4, 5, 6, 7, 8]) + == [> [> 1, 2, 3], [> 4, 5, 6], [> 7, 8]] assert Array.chunk(10, [> 1, 2, 3, 4, 5]) == [> [> 1, 2, 3, 4, 5]] module Immutable { @@ -496,11 +496,11 @@ module Immutable { // Array.init assert Array.init(5, identity) == fromList([0, 1, 2, 3, 4]) - assert Array.init(10, x => x * 2) == - fromList([0, 2, 4, 6, 8, 10, 12, 14, 16, 18]) + assert Array.init(10, x => x * 2) + == fromList([0, 2, 4, 6, 8, 10, 12, 14, 16, 18]) assert Array.init(0, x => fail "called init on 0 length") == fromList([]) - assert Array.init(branchingLongTailLen, identity) == - fromList(branchingLongTail) + assert Array.init(branchingLongTailLen, identity) + == fromList(branchingLongTail) assert Array.init(32, identity) == fromList(noTail) // Array.make @@ -518,21 +518,21 @@ module Immutable { assert Array.append(fromList([]), fromList([])) == fromList([]) assert Array.append(arr1, fromList([])) == arr1 assert Array.append(fromList([]), arr1) == arr1 - assert Array.append(abArr, fromList([almostBranchingLen])) == - fromList(List.append(almostBranching, [almostBranchingLen])) + assert Array.append(abArr, fromList([almostBranchingLen])) + == fromList(List.append(almostBranching, [almostBranchingLen])) let val = branchingLongTailLen - assert Array.append(bltArr, fromList([val, val + 1, val + 2])) == - fromList(List.append(branchingLongTail, [val, val + 1, val + 2])) - assert Array.append(fromList([-3, -2, -1]), bltArr) == - fromList([-3, -2, -1, ...branchingLongTail]) + assert Array.append(bltArr, fromList([val, val + 1, val + 2])) + == fromList(List.append(branchingLongTail, [val, val + 1, val + 2])) + assert Array.append(fromList([-3, -2, -1]), bltArr) + == fromList([-3, -2, -1, ...branchingLongTail]) let vals = Range.map(x => x + 32, { rangeStart: 0, rangeEnd: 128 }) - assert Array.append(noTailArr, fromList(vals)) == - fromList(List.append(noTail, vals)) + assert Array.append(noTailArr, fromList(vals)) + == fromList(List.append(noTail, vals)) let vals = Range.map(x => x + 32, { rangeStart: 0, rangeEnd: 128 + 31 }) - assert Array.append(noTailArr, fromList(vals)) == - fromList(List.append(noTail, vals)) - assert Array.append(noTailArr, noTailArr) == - fromList(List.append(noTail, noTail)) + assert Array.append(noTailArr, fromList(vals)) + == fromList(List.append(noTail, vals)) + assert Array.append(noTailArr, noTailArr) + == fromList(List.append(noTail, noTail)) // Array.concat @@ -545,8 +545,8 @@ module Immutable { assert Array.concat([fromList([])]) == fromList([]) assert Array.concat([fromList([]), fromList([])]) == fromList([]) assert Array.concat([arr3]) == fromList([3, 4, 5]) - assert Array.concat([arr1, arr2, arr3, arr4]) == - fromList([1, 2, 3, 4, 5, 6, 7, 8, 9]) + assert Array.concat([arr1, arr2, arr3, arr4]) + == fromList([1, 2, 3, 4, 5, 6, 7, 8, 9]) // Array.cycle @@ -633,8 +633,8 @@ module Immutable { assert Array.map( x => fail "Map iterator should not be called on 0-length array", fromList([]) - ) == - fromList([]) + ) + == fromList([]) assert Array.map(incr, fromList([2, 3, 4])) == fromList([3, 4, 5]) assert Array.map(incr, bltArr) == fromList(List.map(incr, branchingLongTail)) @@ -665,8 +665,8 @@ module Immutable { let arrC = fromList([1]) let arrD = fromList([2]) - assert Array.product(arrA, arrB) == - fromList([(1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4)]) + assert Array.product(arrA, arrB) + == fromList([(1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4)]) assert Array.product(arrC, arrB) == fromList([(1, 2), (1, 3), (1, 4)]) assert Array.product(arrC, arrD) == fromList([(1, 2)]) assert Array.product(fromList([]), fromList([])) == fromList([]) @@ -676,8 +676,8 @@ module Immutable { let arrA = fromList([1, 2, 3, 4, 5]) let arrB = fromList([5, 4, 3, 2, 1]) - assert Array.zip(arrA, arrB) == - fromList([(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]) + assert Array.zip(arrA, arrB) + == fromList([(1, 5), (2, 4), (3, 3), (4, 2), (5, 1)]) let arrA = fromList([1, 2, 3]) let arrB = fromList([5, 4, 3, 2, 1]) @@ -726,15 +726,15 @@ module Immutable { assert Array.count( x => fail "count iterator should not be called on empty array", fromList([]) - ) == - 0 + ) + == 0 assert Array.count(x => x == 3, arr) == 1 // Array.reduce assert Array.reduce((acc, x) => acc + x, 0, arr) == 6 - assert Array.reduce((acc, x) => fail "Shouldn't be called", 0, fromList([])) == - 0 + assert Array.reduce((acc, x) => fail "Shouldn't be called", 0, fromList([])) + == 0 assert Array.reduce((+), 0, bltArr) == List.reduce((+), 0, branchingLongTail) // Array.reduceRight @@ -744,17 +744,17 @@ module Immutable { (x, acc) => fail "Shouldn't be called", 0, fromList([]) - ) == - 0 - assert Array.reduceRight((x, acc) => [x, ...acc], [], bltArr) == - branchingLongTail + ) + == 0 + assert Array.reduceRight((x, acc) => [x, ...acc], [], bltArr) + == branchingLongTail // Array.flatMap - assert Array.flatMap(x => fromList([x, x * 2]), arr) == - fromList([1, 2, 2, 4, 3, 6]) - assert Array.flatMap(x => fail "Shouldn't be called", fromList([])) == - fromList([]) + assert Array.flatMap(x => fromList([x, x * 2]), arr) + == fromList([1, 2, 2, 4, 3, 6]) + assert Array.flatMap(x => fail "Shouldn't be called", fromList([])) + == fromList([]) // Array.every @@ -773,8 +773,8 @@ module Immutable { assert Array.filter(x => true, arr) == fromList([1, 2, 3]) assert Array.filter(x => x > 1, arr) == fromList([2, 3]) assert Array.filter(x => x % 2 == 0, arr) == fromList([2]) - assert Array.filter(x => fail "Shouldn't be called", fromList([])) == - fromList([]) + assert Array.filter(x => fail "Shouldn't be called", fromList([])) + == fromList([]) // Array.unique @@ -789,16 +789,16 @@ module Immutable { assert Array.join( " - ", fromList(["some text", "some more text", "even more text"]) - ) == - "some text - some more text - even more text" + ) + == "some text - some more text - even more text" assert Array.join(", ", fromList([])) == "" // Array.slice let testChars = fromList(['a', 'b', 'c']) assert Array.slice(0, end=1, testChars) == fromList(['a']) - assert Array.slice(1, end=Array.length(testChars), testChars) == - fromList(['b', 'c']) + assert Array.slice(1, end=Array.length(testChars), testChars) + == fromList(['b', 'c']) assert Array.slice(1, testChars) == fromList(['b', 'c']) assert Array.slice(0, end=0, testChars) == fromList([]) // Purposefully huge number diff --git a/compiler/test/stdlib/bigint.test.gr b/compiler/test/stdlib/bigint.test.gr index 139b33ec30..9ed0978036 100644 --- a/compiler/test/stdlib/bigint.test.gr +++ b/compiler/test/stdlib/bigint.test.gr @@ -53,12 +53,12 @@ assert incr(-5t) == -4t assert incr(0t) == 1t assert incr( 105283664383537698179048568639738324582407620177142255774517468458859582470144t -) == - 105283664383537698179048568639738324582407620177142255774517468458859582470145t +) + == 105283664383537698179048568639738324582407620177142255774517468458859582470145t assert incr( -105283664383537698179048568639738324582407620177142255774517468458859582470144t -) == - -105283664383537698179048568639738324582407620177142255774517468458859582470143t +) + == -105283664383537698179048568639738324582407620177142255774517468458859582470143t assert incr(0xfffffffffffffffft) == 0x10000000000000000t assert decr(5t) == 4t @@ -67,12 +67,12 @@ assert decr(0t) == -1t assert decr( 105283664383537698179048568639738324582407620177142255774517468458859582470144t -) == - 105283664383537698179048568639738324582407620177142255774517468458859582470143t +) + == 105283664383537698179048568639738324582407620177142255774517468458859582470143t assert decr( -105283664383537698179048568639738324582407620177142255774517468458859582470144t -) == - -105283664383537698179048568639738324582407620177142255774517468458859582470145t +) + == -105283664383537698179048568639738324582407620177142255774517468458859582470145t assert decr(0x10000000000000000t) == 0xfffffffffffffffft assert 5t + 10t == 15t @@ -98,13 +98,13 @@ assert gcd(54t, 24t) == 6t assert gcd( 0xe8c4713afbb863c16a214fb9fbee69d0610d131f2c55328b641d61eff9037848t, 0x16A214FB9FBEE69D061E8C4713AFBB863C16At -) == - 2t +) + == 2t assert gcd( 5704558769669675281228866566261368491987014224582267610t, 598289132109995549676372051049671203951095792466036217333671286884t -) == - 74874867975563321680244286567276594026t +) + == 74874867975563321680244286567276594026t assert -20t / 3t == -6t assert -20t / 5t == -4t @@ -149,17 +149,17 @@ assert 0xFFFFFFFFFFFFFFFFt + 0t == 0xFFFFFFFFFFFFFFFFt assert 0t + 0xFFFFFFFFFFFFFFFFt == 0xFFFFFFFFFFFFFFFFt assert 0xFFFFFFFFFFFFFFFFt + 0xFFFFFFFFFFFFFFFFt == 0x1fffffffffffffffet // mul -assert 0xFFFFFFFFFFFFFFFFt * 0xFFFFFFFFFFFFFFFFt == - 0xfffffffffffffffe0000000000000001t -assert 0xFFFFFFFFFFFFFFFFt * 0xFFFFFFFFFFFFFFFFt * 0xAAAt == - 0xaa9ffffffffffffeaac0000000000000aaat +assert 0xFFFFFFFFFFFFFFFFt * 0xFFFFFFFFFFFFFFFFt + == 0xfffffffffffffffe0000000000000001t +assert 0xFFFFFFFFFFFFFFFFt * 0xFFFFFFFFFFFFFFFFt * 0xAAAt + == 0xaa9ffffffffffffeaac0000000000000aaat // bitwise assert 24t << 1l == 48t assert 24t << 2l == 96t assert 0xf0f0f0f0f0f0f0f0t << 14l == 0x3c3c3c3c3c3c3c3c0000t -assert 0xf0f0f0f0f0f0f0f0t << 127l == - 0x787878787878787800000000000000000000000000000000t +assert 0xf0f0f0f0f0f0f0f0t << 127l + == 0x787878787878787800000000000000000000000000000000t assert 24t >> 0l == 24t assert 24t >> 1l == 12t @@ -182,14 +182,14 @@ assert (-341237t ^ 60597t) == -383042t assert (-341237t ^ -60597t) == 383040t assert ( - 0xe8c4713afbb863c16a214fb9fbee69d0610d131f2c55328b641d61eff9037848t & - 0x16A214FB9FBEE69D061E8C4713AFBB863C16At -) == - 9059764183839950850606742203634691510321224t + 0xe8c4713afbb863c16a214fb9fbee69d0610d131f2c55328b641d61eff9037848t + & 0x16A214FB9FBEE69D061E8C4713AFBB863C16At +) + == 9059764183839950850606742203634691510321224t assert lnot(5t) == -6t -assert lnot(0xe8c4713afbb863c16a214fb9fbee69d0610d131f2c55328b641d61eff9037848t) == - -0xe8c4713afbb863c16a214fb9fbee69d0610d131f2c55328b641d61eff9037849t +assert lnot(0xe8c4713afbb863c16a214fb9fbee69d0610d131f2c55328b641d61eff9037848t) + == -0xe8c4713afbb863c16a214fb9fbee69d0610d131f2c55328b641d61eff9037849t // Regression #1339 let arr = [> 1, 2, 3] diff --git a/compiler/test/stdlib/hash.test.gr b/compiler/test/stdlib/hash.test.gr index b8e4d56982..4e38c48999 100644 --- a/compiler/test/stdlib/hash.test.gr +++ b/compiler/test/stdlib/hash.test.gr @@ -98,8 +98,8 @@ let strings = [ assert uniq(List.map(n => Hash.hash(n), strings)) assert Hash.hash("") == Hash.hash("") -assert Hash.hash("grain > ore > wool > lumber > brick") == - Hash.hash("grain > ore > wool > lumber > brick") +assert Hash.hash("grain > ore > wool > lumber > brick") + == Hash.hash("grain > ore > wool > lumber > brick") let chars = String.explode("!@#$%^&*()1234567890-qwertyuiop🌾💯🔥😈😤💪🏼") let charList = Array.toList(chars) @@ -163,10 +163,10 @@ let recs = [ ] assert uniq(List.map(n => Hash.hash(n), recs)) -assert Hash.hash({ num: 12, var: E("wasm"), str: "gr" }) == - Hash.hash({ num: 12, var: E("wasm"), str: "gr" }) -assert Hash.hash({ num: 0, var: A, str: "" }) == - Hash.hash({ num: 0, var: A, str: "" }) +assert Hash.hash({ num: 12, var: E("wasm"), str: "gr" }) + == Hash.hash({ num: 12, var: E("wasm"), str: "gr" }) +assert Hash.hash({ num: 0, var: A, str: "" }) + == Hash.hash({ num: 0, var: A, str: "" }) assert Hash.hash(Bytes.fromString("foo")) == Hash.hash(Bytes.fromString("foo")) assert Hash.hash(Bytes.fromString("foo")) != Hash.hash(Bytes.fromString("bar")) diff --git a/compiler/test/stdlib/json.test.gr b/compiler/test/stdlib/json.test.gr index 9dd0dbf770..e4c2042ece 100644 --- a/compiler/test/stdlib/json.test.gr +++ b/compiler/test/stdlib/json.test.gr @@ -191,10 +191,12 @@ module Parse { assert parse("3.141592653589793") == Ok(JsonNumber(3.141592653589793)) assert parse("0.05") == Ok(JsonNumber(0.05)) // These tests are not testing accuracy, grain uses f64 which these exhaust its just checking that we can handle parsing correctly and equivalently to grain - assert parse("2.22507385850720113605740979670913197593481954635164564e-308") == - Ok(JsonNumber(2.22507385850720113605740979670913197593481954635164564e-308)) - assert parse("1e999999999999999999999999999999999999999999999999999999999999") == - Ok( + assert parse("2.22507385850720113605740979670913197593481954635164564e-308") + == Ok( + JsonNumber(2.22507385850720113605740979670913197593481954635164564e-308), + ) + assert parse("1e999999999999999999999999999999999999999999999999999999999999") + == Ok( JsonNumber(1e999999999999999999999999999999999999999999999999999999999999), ) assert parse("42") == Ok(JsonNumber(42)) @@ -232,38 +234,38 @@ module Parse { assert parse("1.23e-4") == Ok(JsonNumber(0.000123)) assert parse("1E200") == Ok(JsonNumber(1E200)) assert parse("1E-200") == Ok(JsonNumber(1E-200)) - assert parse("85070591730234615884290395931651604481") == - Ok(JsonNumber(85070591730234615884290395931651604481)) - assert parse("1.797693134862315708145274237317043567981e+308") == - Ok(JsonNumber(1.797693134862315708145274237317043567981e+308)) + assert parse("85070591730234615884290395931651604481") + == Ok(JsonNumber(85070591730234615884290395931651604481)) + assert parse("1.797693134862315708145274237317043567981e+308") + == Ok(JsonNumber(1.797693134862315708145274237317043567981e+308)) assert parse("1.121333") == Ok(JsonNumber(1.121333)) assert parse("1.001") == Ok(JsonNumber(1.001)) // Strings assert parse("\"\"") == Ok(JsonString("")) - assert parse("\"\\r\\n\\t\\b\\f\\\\\\/\\\"\"") == - Ok(JsonString("\r\n\t\u{8}\u{c}\\/\"")) + assert parse("\"\\r\\n\\t\\b\\f\\\\\\/\\\"\"") + == Ok(JsonString("\r\n\t\u{8}\u{c}\\/\"")) assert parse("\"\\u2764\\ufe0f\"") == Ok(JsonString("❤️")) assert parse("\"\\uD834\\uDD1E\"") == Ok(JsonString("𝄞")) assert parse("\"ASCII Hello world!\"") == Ok(JsonString("ASCII Hello world!")) - assert parse("\"Unicode こんにちは世界!\"") == - Ok(JsonString("Unicode こんにちは世界!")) - assert parse("\"A \\\"quoted\\\" string\"") == - Ok(JsonString("A \"quoted\" string")) + assert parse("\"Unicode こんにちは世界!\"") + == Ok(JsonString("Unicode こんにちは世界!")) + assert parse("\"A \\\"quoted\\\" string\"") + == Ok(JsonString("A \"quoted\" string")) assert parse("\"\\uD801\\uDC37\"") == Ok(JsonString("𐐷")) assert parse("\"🤘🏻\"") == Ok(JsonString("🤘🏻")) assert parse("\"🤘🏻\"") == Ok(JsonString("🤘🏻")) assert parse("\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\"") == Ok(JsonString("🏴󠁧󠁢󠁷󠁬󠁳󠁿")) assert parse( "\"\\u6000 \\ud800\\udc82 \\ud83e\\udd18\\ud83c\\udffb \\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f\"" - ) == - Ok(JsonString("怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿")) + ) + == Ok(JsonString("怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿")) // Array assert parse("[]") == Ok(JsonArray([])) assert parse("[[]]") == Ok(JsonArray([JsonArray([])])) assert parse("[ ]") == Ok(JsonArray([])) assert parse("[1]") == Ok(JsonArray([JsonNumber(1)])) - assert parse("[10, \"foo\", true, null]") == - Ok( + assert parse("[10, \"foo\", true, null]") + == Ok( JsonArray( [JsonNumber(10), JsonString("foo"), JsonBoolean(true), JsonNull], ), @@ -275,8 +277,8 @@ module Parse { \"foo\": \"bar\", \"num\": 10 } - ") == - Ok(JsonObject([("foo", JsonString("bar")), ("num", JsonNumber(10))])) + ") + == Ok(JsonObject([("foo", JsonString("bar")), ("num", JsonNumber(10))])) // Note: Grain-json does not worry about duplicate keys assert parse( " @@ -286,8 +288,8 @@ module Parse { \"foo\": 1 } " - ) == - Ok( + ) + == Ok( JsonObject( [ ("foo", JsonString("bar")), @@ -297,8 +299,8 @@ module Parse { ), ) // Nesting - assert parse("{\"foo\": [1, 2, 3]}") == - Ok( + assert parse("{\"foo\": [1, 2, 3]}") + == Ok( JsonObject( [("foo", JsonArray([JsonNumber(1), JsonNumber(2), JsonNumber(3)]))], ), @@ -314,8 +316,8 @@ module Parse { } } ] }" - ) == - Ok( + ) + == Ok( JsonObject( [ ( @@ -353,8 +355,8 @@ module Parse { ), ) assert parse("{ \"pi\": 3.14 }") == Ok(JsonObject([("pi", JsonNumber(3.14))])) - assert parse("[100, 200, false, null, \"foo\"]") == - Ok( + assert parse("[100, 200, false, null, \"foo\"]") + == Ok( JsonArray( [ JsonNumber(100), @@ -365,16 +367,16 @@ module Parse { ], ), ) - assert parse("{ \"Hello\" : \"World!\" }") == - Ok(JsonObject([("Hello", JsonString("World!"))])) + assert parse("{ \"Hello\" : \"World!\" }") + == Ok(JsonObject([("Hello", JsonString("World!"))])) - assert parse("{\"a\":\"A\",\"b\":\"B\"}") == - Ok(JsonObject([("a", JsonString("A")), ("b", JsonString("B"))])) + assert parse("{\"a\":\"A\",\"b\":\"B\"}") + == Ok(JsonObject([("a", JsonString("A")), ("b", JsonString("B"))])) assert parse( "{ \"a\" : { \"0\": false, \"1\":true }, \"b\" : [\"A\",\"B\",\"C\"] }" - ) == - Ok( + ) + == Ok( JsonObject( [ ( @@ -386,8 +388,8 @@ module Parse { ), ) - assert parse("[1,\"2\",true,false,null]") == - Ok( + assert parse("[1,\"2\",true,false,null]") + == Ok( JsonArray( [ JsonNumber(1), @@ -399,8 +401,8 @@ module Parse { ), ) - assert parse("[[[[[[[[[[]]]]]]]]]]") == - Ok( + assert parse("[[[[[[[[[[]]]]]]]]]]") + == Ok( JsonArray( [ JsonArray( @@ -432,8 +434,8 @@ module Parse { assert parse( "{\"1\":{\"2\":{\"3\":{\"4\":{\"5\":{\"6\":{\"7\":{\"8\":{\"9\":{\"10\":{}}}}}}}}}}}" - ) == - Ok( + ) + == Ok( JsonObject( [ ( @@ -507,17 +509,17 @@ module Parse { ), ) - assert parse("[1,2,3]") == - Ok(JsonArray([JsonNumber(1), JsonNumber(2), JsonNumber(3)])) - assert parse("[\"a\",\"b\",\"c\"]") == - Ok(JsonArray([JsonString("a"), JsonString("b"), JsonString("c")])) + assert parse("[1,2,3]") + == Ok(JsonArray([JsonNumber(1), JsonNumber(2), JsonNumber(3)])) + assert parse("[\"a\",\"b\",\"c\"]") + == Ok(JsonArray([JsonString("a"), JsonString("b"), JsonString("c")])) // White spaces assert parse("\tnull \r\n") == Ok(JsonNull) assert parse(" {\r}") == Ok(JsonObject([])) - assert parse("[1,\n2\n,3\n]\n") == - Ok(JsonArray([JsonNumber(1), JsonNumber(2), JsonNumber(3)])) - assert parse("{ \"a\" : \"A\" , \"b\" : \"B\" }") == - Ok(JsonObject([("a", JsonString("A")), ("b", JsonString("B"))])) + assert parse("[1,\n2\n,3\n]\n") + == Ok(JsonArray([JsonNumber(1), JsonNumber(2), JsonNumber(3)])) + assert parse("{ \"a\" : \"A\" , \"b\" : \"B\" }") + == Ok(JsonObject([("a", JsonString("A")), ("b", JsonString("B"))])) } module ToString { @@ -533,10 +535,10 @@ module ToString { assert toString(JsonObject([]), format=Compact) == Ok("{}") assert toString(JsonNull) == toString(JsonNull, format=Compact) - assert toString(JsonBoolean(true)) == - toString(JsonBoolean(true), format=Compact) - assert toString(JsonBoolean(false)) == - toString(JsonBoolean(false), format=Compact) + assert toString(JsonBoolean(true)) + == toString(JsonBoolean(true), format=Compact) + assert toString(JsonBoolean(false)) + == toString(JsonBoolean(false), format=Compact) assert toString(JsonString("")) == toString(JsonString(""), format=Compact) assert toString(JsonNumber(0)) == toString(JsonNumber(0), format=Compact) assert toString(JsonArray([])) == toString(JsonArray([]), format=Compact) @@ -551,53 +553,53 @@ module ToString { assert toString(JsonObject([]), format=Pretty) == Ok("{}\n") // Various strings. Escapes, emojis etc. - assert toString(JsonString("ASCII Hello world!")) == - Ok("\"ASCII Hello world!\"") + assert toString(JsonString("ASCII Hello world!")) + == Ok("\"ASCII Hello world!\"") - assert toString(JsonString("Unicode こんにちは世界!")) == - Ok("\"Unicode こんにちは世界!\"") - assert toString(JsonString("A \"quoted\" string")) == - Ok("\"A \\\"quoted\\\" string\"") + assert toString(JsonString("Unicode こんにちは世界!")) + == Ok("\"Unicode こんにちは世界!\"") + assert toString(JsonString("A \"quoted\" string")) + == Ok("\"A \\\"quoted\\\" string\"") assert toString(JsonString("🤘🏻")) == Ok("\"🤘🏻\"") assert toString(JsonString("🤘🏻")) == Ok("\"🤘🏻\"") assert toString(JsonString("🏴󠁧󠁢󠁷󠁬󠁳󠁿")) == Ok("\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\"") assert toString(JsonString("怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿")) == Ok("\"怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿\"") - assert toString(JsonString("ASCII Hello world!")) == - Ok("\"ASCII Hello world!\"") + assert toString(JsonString("ASCII Hello world!")) + == Ok("\"ASCII Hello world!\"") - assert toString(JsonString("Unicode こんにちは世界!")) == - Ok("\"Unicode こんにちは世界!\"") - assert toString(JsonString("A \"quoted\" string")) == - Ok("\"A \\\"quoted\\\" string\"") + assert toString(JsonString("Unicode こんにちは世界!")) + == Ok("\"Unicode こんにちは世界!\"") + assert toString(JsonString("A \"quoted\" string")) + == Ok("\"A \\\"quoted\\\" string\"") assert toString(JsonString("🤘🏻")) == Ok("\"🤘🏻\"") assert toString(JsonString("🤘🏻")) == Ok("\"🤘🏻\"") assert toString(JsonString("🏴󠁧󠁢󠁷󠁬󠁳󠁿")) == Ok("\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\"") assert toString(JsonString("怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿")) == Ok("\"怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿\"") - assert toString(JsonString("ASCII Hello world!"), format=Pretty) == - Ok("\"ASCII Hello world!\"\n") + assert toString(JsonString("ASCII Hello world!"), format=Pretty) + == Ok("\"ASCII Hello world!\"\n") - assert toString(JsonString("Unicode こんにちは世界!"), format=Pretty) == - Ok("\"Unicode こんにちは世界!\"\n") - assert toString(JsonString("A \"quoted\" string"), format=Pretty) == - Ok("\"A \\\"quoted\\\" string\"\n") + assert toString(JsonString("Unicode こんにちは世界!"), format=Pretty) + == Ok("\"Unicode こんにちは世界!\"\n") + assert toString(JsonString("A \"quoted\" string"), format=Pretty) + == Ok("\"A \\\"quoted\\\" string\"\n") assert toString(JsonString("🤘🏻"), format=Pretty) == Ok("\"🤘🏻\"\n") assert toString(JsonString("🤘🏻"), format=Pretty) == Ok("\"🤘🏻\"\n") assert toString(JsonString("🏴󠁧󠁢󠁷󠁬󠁳󠁿"), format=Pretty) == Ok("\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\"\n") - assert toString(JsonString("怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿"), format=Pretty) == - Ok("\"怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿\"\n") - assert toString(JsonString("ASCII Hello world!"), format=PrettyAndSafe) == - Ok("\"ASCII Hello world!\"\n") + assert toString(JsonString("怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿"), format=Pretty) + == Ok("\"怀 𐂂 🤘🏻 🏴󠁧󠁢󠁷󠁬󠁳󠁿\"\n") + assert toString(JsonString("ASCII Hello world!"), format=PrettyAndSafe) + == Ok("\"ASCII Hello world!\"\n") assert toString( JsonString("Unicode こんにちは世界!"), format=PrettyAndSafe - ) == - Ok("\"Unicode \\u3053\\u3093\\u306b\\u3061\\u306f\\u4e16\\u754c!\"\n") - assert toString(JsonString("A \"quoted\" string"), format=PrettyAndSafe) == - Ok("\"A \\\"quoted\\\" string\"\n") - assert toString(JsonString("🤘🏻"), format=PrettyAndSafe) == - Ok("\"\\ud83e\\udd18\\ud83c\\udffb\"\n") - assert toString(JsonString("🏴󠁧󠁢󠁷󠁬󠁳󠁿"), format=PrettyAndSafe) == - Ok( + ) + == Ok("\"Unicode \\u3053\\u3093\\u306b\\u3061\\u306f\\u4e16\\u754c!\"\n") + assert toString(JsonString("A \"quoted\" string"), format=PrettyAndSafe) + == Ok("\"A \\\"quoted\\\" string\"\n") + assert toString(JsonString("🤘🏻"), format=PrettyAndSafe) + == Ok("\"\\ud83e\\udd18\\ud83c\\udffb\"\n") + assert toString(JsonString("🏴󠁧󠁢󠁷󠁬󠁳󠁿"), format=PrettyAndSafe) + == Ok( "\"\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f\"\n", ) @@ -636,8 +638,8 @@ module ToString { // Big numbers assert toString(JsonNumber(1152921504606846976)) == Ok("1152921504606846976") - assert toString(JsonNumber(1152921504606847000.0)) == - Ok("1152921504606847000.0") + assert toString(JsonNumber(1152921504606847000.0)) + == Ok("1152921504606847000.0") // Invalid numbers assert match (toString(JsonNumber(NaN))) { @@ -735,8 +737,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\n 1\n]") + ) + == Ok("[\n 1\n]") assert toString( JsonArray([JsonArray([JsonNumber(1)])]), format=Custom{ @@ -749,8 +751,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\n [\n 1\n ]\n]") + ) + == Ok("[\n [\n 1\n ]\n]") assert toString( JsonArray([JsonArray([JsonNumber(1)])]), format=Custom{ @@ -763,8 +765,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\n[\n1\n]\n]") + ) + == Ok("[\n[\n1\n]\n]") // Formatting - line endings assert toString( @@ -779,8 +781,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\n1\n]") + ) + == Ok("[\n1\n]") assert toString( JsonArray([JsonNumber(1)]), format=Custom{ @@ -793,8 +795,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[1]") + ) + == Ok("[1]") assert toString( JsonArray([JsonNumber(1)]), format=Custom{ @@ -807,8 +809,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\r\n1\r\n]") + ) + == Ok("[\r\n1\r\n]") assert toString( JsonArray([JsonNumber(1)]), format=Custom{ @@ -821,8 +823,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\r1\r]") + ) + == Ok("[\r1\r]") // Formatting - finish with new line assert toString( @@ -837,8 +839,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\n1\n]") + ) + == Ok("[\n1\n]") assert toString( JsonArray([JsonNumber(1)]), format=Custom{ @@ -851,8 +853,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\n1\n]\n") + ) + == Ok("[\n1\n]\n") // Formatting - array format assert toString( @@ -867,8 +869,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[1,2,3]") + ) + == Ok("[1,2,3]") assert toString( JsonArray([JsonNumber(1), JsonNumber(2), JsonNumber(3)]), format=Custom{ @@ -881,8 +883,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[1, 2, 3]") + ) + == Ok("[1, 2, 3]") assert toString( JsonArray([JsonNumber(1), JsonNumber(2), JsonNumber(3)]), format=Custom{ @@ -895,8 +897,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("[\n 1,\n 2,\n 3\n]") + ) + == Ok("[\n 1,\n 2,\n 3\n]") // Formatting - object format assert toString( @@ -913,8 +915,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("{\"one\":1,\"two\":2,\"three\":3}") + ) + == Ok("{\"one\":1,\"two\":2,\"three\":3}") assert toString( JsonObject( [("one", JsonNumber(1)), ("two", JsonNumber(2)), ("three", JsonNumber(3))], @@ -929,8 +931,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("{\"one\": 1, \"two\": 2, \"three\": 3}") + ) + == Ok("{\"one\": 1, \"two\": 2, \"three\": 3}") assert toString( JsonObject( [("one", JsonNumber(1)), ("two", JsonNumber(2)), ("three", JsonNumber(3))], @@ -945,8 +947,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: false } - ) == - Ok("{\n \"one\": 1,\n \"two\": 2,\n \"three\": 3\n}") + ) + == Ok("{\n \"one\": 1,\n \"two\": 2,\n \"three\": 3\n}") // Formatting - escaping assert toString( JsonString("\nr🌾"), @@ -960,8 +962,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: true } - ) == - Ok("\"\\nr\\ud83c\\udf3e\"") + ) + == Ok("\"\\nr\\ud83c\\udf3e\"") assert toString( JsonString("\nr🌾€"), format=Custom{ @@ -974,8 +976,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: true } - ) == - Ok("\"\\nr\\ud83c\\udf3e\\u0080\"") + ) + == Ok("\"\\nr\\ud83c\\udf3e\\u0080\"") assert toString( JsonString("r🌾€"), format=Custom{ @@ -988,8 +990,8 @@ module ToString { escapeHTMLUnsafeSequences: false, escapeNonASCII: true } - ) == - Ok("\"r\\ud83c\\udf3e\\u0080\"") + ) + == Ok("\"r\\ud83c\\udf3e\\u0080\"") assert toString( JsonString(" { } } let list = ["a", "abcde", "abc", "ab", "abcd", "a"] -assert sort(compare=compareLengths, list) == - ["a", "a", "ab", "abc", "abcd", "abcde"] -assert sort(compare=compareLengths, ["a", "a", "a", "a"]) == - ["a", "a", "a", "a"] +assert sort(compare=compareLengths, list) + == ["a", "a", "ab", "abc", "abcd", "abcde"] +assert sort(compare=compareLengths, ["a", "a", "a", "a"]) + == ["a", "a", "a", "a"] diff --git a/compiler/test/stdlib/number.test.gr b/compiler/test/stdlib/number.test.gr index 79ecf756e9..40c421b76a 100644 --- a/compiler/test/stdlib/number.test.gr +++ b/compiler/test/stdlib/number.test.gr @@ -47,8 +47,8 @@ assert 4.0 - 2/3 == 3.3333333333333335 // mul assert 5 * 5 == 25 assert 9223372036854775809 * 5 == 46116860184273879045 -assert 9223372036854775809 * 9223372036854775809 == - 85070591730234615884290395931651604481 +assert 9223372036854775809 * 9223372036854775809 + == 85070591730234615884290395931651604481 assert Infinity * 10 == Infinity assert Infinity * Infinity == Infinity assert Number.isNaN(Infinity * NaN) @@ -200,8 +200,8 @@ let denom = 85070591730234615884290395931651604481 assert 9223372036854775809 ** -2 == 1 / denom // 1.1754943508222875e-38 assert pow(9223372036854775809, 1/5) == 6208.375056426594 assert pow(9223372036854775809, 2/3) == 4398046511103.9927 -assert 10223372036854775809 ** 10 == - 12472159440978016923768615307032788210916694000775261660538874886865415760948494778813645195039710006678013364969179502650466497057008288260604039903029954443675868581729857084924132550246401 +assert 10223372036854775809 ** 10 + == 12472159440978016923768615307032788210916694000775261660538874886865415760948494778813645195039710006678013364969179502650466497057008288260604039903029954443675868581729857084924132550246401 assert 1 ** 9223372036854775809 == 1 assert 2.0 ** 9223372036854775809 == Infinity assert 2.0 ** 99223372036854775809 == Infinity @@ -249,8 +249,8 @@ assert Number.max(5, 6) == 6 assert Number.max(1/2, 1/4) == 1/2 assert Number.max(0.5, 0.25) == 0.5 assert Number.max(BI.toNumber(1234t), BI.toNumber(12t)) == BI.toNumber(1234t) -assert Number.max(355894508425808343204914141312, 6) == - 355894508425808343204914141312 +assert Number.max(355894508425808343204914141312, 6) + == 355894508425808343204914141312 assert Number.max(Infinity, 10) == Infinity assert Number.max(NaN, 10) == 10 assert Number.max(NaN, Infinity) == Infinity @@ -427,14 +427,14 @@ assert Number.parseFloat("100000000000000000000000") == Ok(1e+23) assert Number.parseFloat("1e-100") == Ok(1e-100) assert Number.parseFloat("123456700") == Ok(1.234567e+08) assert Number.parseFloat("99999999999999974834176") == Ok(9.999999999999997e+22) -assert Number.parseFloat("100000000000000000000001") == - Ok(1.0000000000000001e+23) -assert Number.parseFloat("100000000000000008388608") == - Ok(1.0000000000000001e+23) -assert Number.parseFloat("100000000000000016777215") == - Ok(1.0000000000000001e+23) -assert Number.parseFloat("100000000000000016777216") == - Ok(1.0000000000000003e+23) +assert Number.parseFloat("100000000000000000000001") + == Ok(1.0000000000000001e+23) +assert Number.parseFloat("100000000000000008388608") + == Ok(1.0000000000000001e+23) +assert Number.parseFloat("100000000000000016777215") + == Ok(1.0000000000000001e+23) +assert Number.parseFloat("100000000000000016777216") + == Ok(1.0000000000000003e+23) assert Number.parseFloat("-1") == Ok(-1.0) assert Number.parseFloat("-0.1") == Ok(-0.1) assert Number.parseFloat("-0") == Ok(-0.0) @@ -477,19 +477,19 @@ assert Number.parseFloat("-Infinity") == Ok(-Infinity) assert Number.parseFloat("+INFINITY") == Ok(Infinity) assert Number.parseFloat("Infinity") == Ok(Infinity) // largest float64 -assert Number.parseFloat("1.7976931348623157e308") == - Ok(1.7976931348623157e+308) -assert Number.parseFloat("-1.7976931348623157e308") == - Ok(-1.7976931348623157e+308) +assert Number.parseFloat("1.7976931348623157e308") + == Ok(1.7976931348623157e+308) +assert Number.parseFloat("-1.7976931348623157e308") + == Ok(-1.7976931348623157e+308) // next float64 - too large assert Number.parseFloat("1.7976931348623159e308") == Ok(Infinity) assert Number.parseFloat("-1.7976931348623159e308") == Ok(-Infinity) // the border is ...158079 // borderline - okay -assert Number.parseFloat("1.7976931348623158079e308") == - Ok(1.7976931348623157e+308) -assert Number.parseFloat("-1.7976931348623158079e308") == - Ok(-1.7976931348623157e+308) +assert Number.parseFloat("1.7976931348623158079e308") + == Ok(1.7976931348623157e+308) +assert Number.parseFloat("-1.7976931348623158079e308") + == Ok(-1.7976931348623157e+308) // borderline - too large assert Number.parseFloat("1.797693134862315808e308") == Ok(Infinity) assert Number.parseFloat("-1.797693134862315808e308") == Ok(-Infinity) @@ -531,50 +531,50 @@ assert Number.parseFloat("1e") == Err("Invalid exponent") assert Number.parseFloat("1e-") == Err("Invalid exponent") assert Number.parseFloat(".e-1") == Err("Invalid float") // https://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/ -assert Number.parseFloat("2.2250738585072012e-308") == - Ok(2.2250738585072014e-308) +assert Number.parseFloat("2.2250738585072012e-308") + == Ok(2.2250738585072014e-308) // https://www.exploringbinary.com/php-hangs-on-numeric-value-2-2250738585072011e-308/ -assert Number.parseFloat("2.2250738585072011e-308") == - Ok(2.225073858507201e-308) +assert Number.parseFloat("2.2250738585072011e-308") + == Ok(2.225073858507201e-308) // A different kind of very large number. assert Number.parseFloat("22.222222222222222") == Ok(22.22222222222222) assert Number.parseFloat( "2.222222222222222222222222222222222222222222222222222222222222222222222222222e+1" -) == - Ok(22.22222222222222) +) + == Ok(22.22222222222222) // Exactly halfway between 1 and math.Nextafter(1, 2). // Round to even (down). assert Number.parseFloat( "1.00000000000000011102230246251565404236316680908203125" -) == - Ok(1.0) +) + == Ok(1.0) // Slightly lower; still round down. assert Number.parseFloat( "1.00000000000000011102230246251565404236316680908203124" -) == - Ok(1.0) +) + == Ok(1.0) // Slightly higher; round up. assert Number.parseFloat( "1.00000000000000011102230246251565404236316680908203126" -) == - Ok(1.0000000000000002) +) + == Ok(1.0000000000000002) // Slightly higher, but you have to read all the way to the end. assert Number.parseFloat( "1.0000000000000001110223024625156540423631668090820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001" -) == - Ok(1.0000000000000002) +) + == Ok(1.0000000000000002) // Halfway between x := math.Nextafter(1, 2) and math.Nextafter(x, 2) // Round to even (up). assert Number.parseFloat( "1.00000000000000033306690738754696212708950042724609375" -) == - Ok(1.0000000000000004) +) + == Ok(1.0000000000000004) // Halfway between 1090544144181609278303144771584 and 1090544144181609419040633126912 -assert Number.parseFloat("1090544144181609348671888949248") == - Ok(1.0905441441816093e+30) +assert Number.parseFloat("1090544144181609348671888949248") + == Ok(1.0905441441816093e+30) // slightly above, rounds up -assert Number.parseFloat("1090544144181609348835077142190") == - Ok(1.0905441441816094e+30) +assert Number.parseFloat("1090544144181609348835077142190") + == Ok(1.0905441441816094e+30) // underscores assert Number.parseFloat("1__") == Ok(1.0) assert Number.parseFloat("1_e2_3_") == Ok(1e+23) @@ -586,8 +586,8 @@ assert Number.parseFloat("1_e400_000") == Ok(Infinity) assert Number.parseFloat("-1_e400_000") == Ok(-Infinity) assert Number.parseFloat( "1.000_000_000_000_000_111_022_302_462_515_654_042_363_166_809_082_031_250_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_000_1" -) == - Ok(1.0000000000000002) +) + == Ok(1.0000000000000002) // parseInt assert Number.parseInt("42", 10) == Ok(42) @@ -821,26 +821,26 @@ assert Number.isClose( assert Number.isNaN(Number.atan(NaN)) // Number.atan2 -assert Number.atan2(-8.06684839057968084, 4.53566256067686879) == - -1.0585895402489023 -assert Number.atan2(4.34523984933830487, -8.88799136300345083) == - 2.6868734126013065 -assert Number.atan2(-8.38143342755524934, -2.76360733737958819) == - -1.88930009184952796 -assert Number.atan2(-6.53167358191348413, 4.56753527684274374) == - -0.960546902111148904 -assert Number.atan2(9.26705696697258574, 4.81139208435979615) == - 1.09191239461421086 -assert Number.atan2(-6.45004555606023633, 0.662071792337673881) == - -1.4685085006164239 -assert Number.atan2(7.85889025304169664, 0.0521545267500622481) == - 1.5641600512601266 -assert Number.atan2(-0.792054511984895959, 7.67640268511753998) == - -0.102816589106785081 -assert Number.atan2(0.615702673197924044, 2.01190257903248026) == - 0.2969797400449351 -assert Number.atan2(-0.558758682360915193, 0.0322398306026380407) == - -1.51316120533039156 +assert Number.atan2(-8.06684839057968084, 4.53566256067686879) + == -1.0585895402489023 +assert Number.atan2(4.34523984933830487, -8.88799136300345083) + == 2.6868734126013065 +assert Number.atan2(-8.38143342755524934, -2.76360733737958819) + == -1.88930009184952796 +assert Number.atan2(-6.53167358191348413, 4.56753527684274374) + == -0.960546902111148904 +assert Number.atan2(9.26705696697258574, 4.81139208435979615) + == 1.09191239461421086 +assert Number.atan2(-6.45004555606023633, 0.662071792337673881) + == -1.4685085006164239 +assert Number.atan2(7.85889025304169664, 0.0521545267500622481) + == 1.5641600512601266 +assert Number.atan2(-0.792054511984895959, 7.67640268511753998) + == -0.102816589106785081 +assert Number.atan2(0.615702673197924044, 2.01190257903248026) + == 0.2969797400449351 +assert Number.atan2(-0.558758682360915193, 0.0322398306026380407) + == -1.51316120533039156 assert Number.atan2(1, 0) == Number.pi / 2 assert Number.atan2(-1, 0) == Number.pi / -2 assert Number.atan2(0, 0) == 0 @@ -892,8 +892,8 @@ assert Number.clamp({ rangeStart: -1, rangeEnd: -2 }, -2) == -2 assert Number.clamp({ rangeStart: -1, rangeEnd: -2 }, -2) == -2 assert Number.clamp({ rangeStart: Infinity, rangeEnd: -Infinity }, 2) == 2 assert Number.clamp({ rangeStart: -Infinity, rangeEnd: Infinity }, 2) == 2 -assert Number.clamp({ rangeStart: Infinity, rangeEnd: -Infinity }, Infinity) == - Infinity +assert Number.clamp({ rangeStart: Infinity, rangeEnd: -Infinity }, Infinity) + == Infinity assert Number.isNaN( Number.clamp({ rangeStart: -Infinity, rangeEnd: Infinity }, NaN) ) @@ -917,35 +917,35 @@ assert Number.linearMap( { rangeStart: 0, rangeEnd: 1 }, { rangeStart: 0, rangeEnd: 100 }, 1/2 -) == - 50 +) + == 50 assert Number.linearMap( { rangeStart: 0, rangeEnd: 1 }, { rangeStart: 0, rangeEnd: 50 }, 1/2 -) == - 25 +) + == 25 assert Number.linearMap( { rangeStart: -1, rangeEnd: 1 }, { rangeStart: 0, rangeEnd: 50 }, 0 -) == - 25 +) + == 25 assert Number.linearMap( { rangeStart: -1, rangeEnd: 1 }, { rangeStart: 0, rangeEnd: 50 }, 2 -) == - 50 +) + == 50 assert Number.linearMap( { rangeStart: -1, rangeEnd: 1 }, { rangeStart: 0, rangeEnd: 50 }, -2 -) == - 0 +) + == 0 assert Number.linearMap( { rangeStart: -1, rangeEnd: 1 }, { rangeStart: 0, rangeEnd: 200 }, 0.5 -) == - 150 +) + == 150 diff --git a/compiler/test/stdlib/option.test.gr b/compiler/test/stdlib/option.test.gr index 845eb92a24..379e55896a 100644 --- a/compiler/test/stdlib/option.test.gr +++ b/compiler/test/stdlib/option.test.gr @@ -53,8 +53,8 @@ assert Option.map(x => fail "Shouldn't be called", None) == None // Option.mapWithDefault assert Option.mapWithDefault(x => x * 2, 1, Some(2)) == 4 -assert Option.mapWithDefault(x => String.concat("hello ", x), "🐑", Some("🌾")) == - "hello 🌾" +assert Option.mapWithDefault(x => String.concat("hello ", x), "🐑", Some("🌾")) + == "hello 🌾" assert Option.mapWithDefault(x => x * 2, 1, None) == 1 assert Option.mapWithDefault(x => String.concat("hello ", x), "🐑", None) == "🐑" @@ -64,24 +64,24 @@ assert Option.mapWithDefaultFn( x => x * 2, () => fail "Shouldn't be called", Some(2) -) == - 4 +) + == 4 assert Option.mapWithDefaultFn( x => String.concat("hello ", x), () => fail "Shouldn't be called", Some("🌾") -) == - "hello 🌾" -assert Option.mapWithDefaultFn(x => fail "Shouldn't be called", () => 1, None) == - 1 -assert Option.mapWithDefaultFn(x => fail "Shouldn't be called", () => "🐑", None) == - "🐑" +) + == "hello 🌾" +assert Option.mapWithDefaultFn(x => fail "Shouldn't be called", () => 1, None) + == 1 +assert Option.mapWithDefaultFn(x => fail "Shouldn't be called", () => "🐑", None) + == "🐑" // Option.flatMap assert Option.flatMap(x => Some(x * 2), Some(2)) == Some(4) -assert Option.flatMap(x => Some(String.concat("hello ", x)), Some("🌾")) == - Some("hello 🌾") +assert Option.flatMap(x => Some(String.concat("hello ", x)), Some("🌾")) + == Some("hello 🌾") assert Option.flatMap(x => None, Some("🌾")) == None assert Option.flatMap(x => fail "Shouldn't be called", None) == None @@ -102,10 +102,10 @@ assert Option.zip(None, Some("🌾")) == None assert Option.zipWith((a, b) => a + b, Some(1), Some(2)) == Some(3) assert Option.zipWith((a, b) => (a, b), Some(1), Some("🌾")) == Some((1, "🌾")) -assert Option.zipWith((a, b) => fail "Shouldn't be called", Some(1), None) == - None -assert Option.zipWith((a, b) => fail "Shouldn't be called", None, Some("🌾")) == - None +assert Option.zipWith((a, b) => fail "Shouldn't be called", Some(1), None) + == None +assert Option.zipWith((a, b) => fail "Shouldn't be called", None, Some("🌾")) + == None // Option.flatten diff --git a/compiler/test/stdlib/path.test.gr b/compiler/test/stdlib/path.test.gr index 99ae147694..73f45a096c 100644 --- a/compiler/test/stdlib/path.test.gr +++ b/compiler/test/stdlib/path.test.gr @@ -144,18 +144,18 @@ List.forEach( assert fs("") == fs(".") assert fs(".") == fs("./") assert fs("dir") != fs("dir/") -assert Path.toString(fs("C:/Users/me/"), platform=Path.Windows) == - "C:\\Users\\me\\" +assert Path.toString(fs("C:/Users/me/"), platform=Path.Windows) + == "C:\\Users\\me\\" assert Path.toString( Path.fromString("C:\\Users/me\\", platform=Path.Windows), platform=Path.Windows -) == - "C:\\Users\\me\\" +) + == "C:\\Users\\me\\" assert Path.toString( Path.fromString(".\\dir/me\\", platform=Path.Windows), platform=Path.Posix -) == - "./dir/me/" +) + == "./dir/me/" assert Path.stem(fs("dir/")) == Err(Path.IncompatiblePathType) assert Path.extension(fs("dir/")) == Err(Path.IncompatiblePathType) diff --git a/compiler/test/stdlib/priorityqueue.test.gr b/compiler/test/stdlib/priorityqueue.test.gr index 77f142310f..e84e2105b6 100644 --- a/compiler/test/stdlib/priorityqueue.test.gr +++ b/compiler/test/stdlib/priorityqueue.test.gr @@ -72,15 +72,15 @@ assert PriorityQueue.size(pq) == 0 assert PriorityQueue.peek(pq) == None let sortedList = Array.toList(sortedVals) -assert PriorityQueue.drain(PriorityQueue.fromList(Array.toList(lotsOfVals))) == - sortedList +assert PriorityQueue.drain(PriorityQueue.fromList(Array.toList(lotsOfVals))) + == sortedList assert PriorityQueue.drain( PriorityQueue.fromList(Array.toList(lotsOfVals), compare=(a, b) => b - a) -) == - List.reverse(sortedList) +) + == List.reverse(sortedList) -assert PriorityQueue.fromList(Array.toList(lotsOfVals), compare=compare) == - PriorityQueue.fromArray(lotsOfVals) +assert PriorityQueue.fromList(Array.toList(lotsOfVals), compare=compare) + == PriorityQueue.fromArray(lotsOfVals) module Immutable { use PriorityQueue.{ module Immutable as PriorityQueue } @@ -163,13 +163,13 @@ module Immutable { let sortedList = Array.toList(sortedVals) assert PriorityQueue.drain(pqWithAll) == sortedList assert PriorityQueue.drain(maxPqWithAll) == List.reverse(sortedList) - assert PriorityQueue.drain(PriorityQueue.fromList(Array.toList(lotsOfVals))) == - sortedList + assert PriorityQueue.drain(PriorityQueue.fromList(Array.toList(lotsOfVals))) + == sortedList assert PriorityQueue.drain( PriorityQueue.fromList(Array.toList(lotsOfVals), compare=(a, b) => b - a) - ) == - List.reverse(sortedList) + ) + == List.reverse(sortedList) - assert PriorityQueue.fromList(Array.toList(lotsOfVals), compare=compare) == - PriorityQueue.fromArray(lotsOfVals) + assert PriorityQueue.fromList(Array.toList(lotsOfVals), compare=compare) + == PriorityQueue.fromArray(lotsOfVals) } diff --git a/compiler/test/stdlib/queue.test.gr b/compiler/test/stdlib/queue.test.gr index d31a914828..a79824a9a2 100644 --- a/compiler/test/stdlib/queue.test.gr +++ b/compiler/test/stdlib/queue.test.gr @@ -141,8 +141,8 @@ Queue.push(16, queue2) Queue.push(17, queue2) Queue.push(18, queue2) Queue.push(19, queue2) -assert Queue.toArray(queue2) == - [> 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] +assert Queue.toArray(queue2) + == [> 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] let queue3 = Queue.make() Queue.push(1, queue3) Queue.push(2, queue3) diff --git a/compiler/test/stdlib/range.test.gr b/compiler/test/stdlib/range.test.gr index 891778ac26..87ab4668c0 100644 --- a/compiler/test/stdlib/range.test.gr +++ b/compiler/test/stdlib/range.test.gr @@ -87,9 +87,9 @@ module Inclusive { }, inclusiveSameRange) assert results == [1] - assert Range.map(toString, inclusiveAscendingRange) == - ["1", "2", "3", "4", "5"] - assert Range.map(toString, inclusiveDescendingRange) == - ["5", "4", "3", "2", "1"] + assert Range.map(toString, inclusiveAscendingRange) + == ["1", "2", "3", "4", "5"] + assert Range.map(toString, inclusiveDescendingRange) + == ["5", "4", "3", "2", "1"] assert Range.map(toString, inclusiveSameRange) == ["1"] } diff --git a/compiler/test/stdlib/regex.test.gr b/compiler/test/stdlib/regex.test.gr index 605e06eccf..bf7f4315ae 100644 --- a/compiler/test/stdlib/regex.test.gr +++ b/compiler/test/stdlib/regex.test.gr @@ -83,8 +83,8 @@ assert testRegex("ca{2}", "caaat") == Ok(Some(("caa", [>]))) assert testRegex("ca{2,}t", "catcaat") == Ok(Some(("caat", [>]))) assert testRegex("ca{,2}t", "caaatcat") == Ok(Some(("cat", [>]))) assert testRegex("ca{1,2}t", "caaatcat") == Ok(Some(("cat", [>]))) -assert testRegex("(c*)(a*)", "caat") == - Ok(Some(("caa", [> Some("c"), Some("aa")]))) +assert testRegex("(c*)(a*)", "caat") + == Ok(Some(("caa", [> Some("c"), Some("aa")]))) assert testRegex("[^ca]", "caat") == Ok(Some(("t", [>]))) assert testRegex(".(.).", "cat") == Ok(Some(("cat", [> Some("a")]))) assert testRegex("^a|^c", "cat") == Ok(Some(("c", [>]))) @@ -202,8 +202,8 @@ assert testRegex("a\\(b", "a(b") == Ok(Some(("a(b", [>]))) assert testRegex("a\\(*b", "ab") == Ok(Some(("ab", [>]))) assert testRegex("a\\\\b", "a\\b") == Ok(Some(("a\\b", [>]))) assert testRegex("((a))", "abc") == Ok(Some(("a", [> Some("a"), Some("a")]))) -assert testRegex("(a)b(c)", "abc") == - Ok(Some(("abc", [> Some("a"), Some("c")]))) +assert testRegex("(a)b(c)", "abc") + == Ok(Some(("abc", [> Some("a"), Some("c")]))) assert testRegex("a+b+c", "aabbabc") == Ok(Some(("abc", [>]))) assert testRegex("(a+|b)*", "ab") == Ok(Some(("ab", [> Some("b")]))) assert testRegex("(a+|b)+", "ab") == Ok(Some(("ab", [> Some("b")]))) @@ -225,30 +225,30 @@ assert testRegex("(abc|)ef", "abcdef") == Ok(Some(("ef", [> Some("")]))) assert testRegex("(a|b)c*d", "abcd") == Ok(Some(("bcd", [> Some("b")]))) assert testRegex("(ab|ab*)bc", "abc") == Ok(Some(("abc", [> Some("a")]))) assert testRegex("a([bc]*)c*", "abc") == Ok(Some(("abc", [> Some("bc")]))) -assert testRegex("a([bc]*)(c*d)", "abcd") == - Ok(Some(("abcd", [> Some("bc"), Some("d")]))) -assert testRegex("a([bc]+)(c*d)", "abcd") == - Ok(Some(("abcd", [> Some("bc"), Some("d")]))) -assert testRegex("a([bc]*)(c+d)", "abcd") == - Ok(Some(("abcd", [> Some("b"), Some("cd")]))) +assert testRegex("a([bc]*)(c*d)", "abcd") + == Ok(Some(("abcd", [> Some("bc"), Some("d")]))) +assert testRegex("a([bc]+)(c*d)", "abcd") + == Ok(Some(("abcd", [> Some("bc"), Some("d")]))) +assert testRegex("a([bc]*)(c+d)", "abcd") + == Ok(Some(("abcd", [> Some("b"), Some("cd")]))) assert testRegex("a[bcd]*dcdcde", "adcdcde") == Ok(Some(("adcdcde", [>]))) assert testRegex("a[bcd]+dcdcde", "adcdcde") == Ok(None) assert testRegex("(ab|a)b*c", "abc") == Ok(Some(("abc", [> Some("ab")]))) -assert testRegex("((a)(b)c)(d)", "abcd") == - Ok(Some(("abcd", [> Some("abc"), Some("a"), Some("b"), Some("d")]))) +assert testRegex("((a)(b)c)(d)", "abcd") + == Ok(Some(("abcd", [> Some("abc"), Some("a"), Some("b"), Some("d")]))) assert testRegex("[a-zA-Z_][a-zA-Z0-9_]*", "alpha") == Ok(Some(("alpha", [>]))) assert testRegex("^a(bc+|b[eh])g|.h$", "abh") == Ok(Some(("bh", [> None]))) -assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "effgz") == - Ok(Some(("effgz", [> Some("effgz"), None]))) -assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "ij") == - Ok(Some(("ij", [> Some("ij"), Some("j")]))) +assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "effgz") + == Ok(Some(("effgz", [> Some("effgz"), None]))) +assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "ij") + == Ok(Some(("ij", [> Some("ij"), Some("j")]))) assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "effg") == Ok(None) assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "bcdd") == Ok(None) -assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "reffgz") == - Ok(Some(("effgz", [> Some("effgz"), None]))) -assert testRegex("(((((((((a)))))))))", "a") == - Ok( +assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "reffgz") + == Ok(Some(("effgz", [> Some("effgz"), None]))) +assert testRegex("(((((((((a)))))))))", "a") + == Ok( Some( ( "a", @@ -267,23 +267,23 @@ assert testRegex("(((((((((a)))))))))", "a") == ), ) assert testRegex("multiple words of text", "uh-uh") == Ok(None) -assert testRegex("multiple words", "multiple words, yeah") == - Ok(Some(("multiple words", [>]))) -assert testRegex("(.*)c(.*)", "abcde") == - Ok(Some(("abcde", [> Some("ab"), Some("de")]))) -assert testRegex("\\((.*), (.*)\\)", "(a, b)") == - Ok(Some(("(a, b)", [> Some("a"), Some("b")]))) +assert testRegex("multiple words", "multiple words, yeah") + == Ok(Some(("multiple words", [>]))) +assert testRegex("(.*)c(.*)", "abcde") + == Ok(Some(("abcde", [> Some("ab"), Some("de")]))) +assert testRegex("\\((.*), (.*)\\)", "(a, b)") + == Ok(Some(("(a, b)", [> Some("a"), Some("b")]))) assert testRegex("[k]", "ab") == Ok(None) assert testRegex("a[-]?c", "ac") == Ok(Some(("ac", [>]))) assert testRegex("(abc)\\1", "abcabc") == Ok(Some(("abcabc", [> Some("abc")]))) -assert testRegex("([a-c]*)\\1", "abcabc") == - Ok(Some(("abcabc", [> Some("abc")]))) +assert testRegex("([a-c]*)\\1", "abcabc") + == Ok(Some(("abcabc", [> Some("abc")]))) assert testRegex("^(.+)?B", "AB") == Ok(Some(("AB", [> Some("A")]))) assert testRegex("(a+).\\1$", "aaaaa") == Ok(Some(("aaaaa", [> Some("aa")]))) assert testRegex("^(a+).\\1$", "aaaa") == Ok(None) assert testRegex("(abc)\\1", "abcabc") == Ok(Some(("abcabc", [> Some("abc")]))) -assert testRegex("([a-c]+)\\1", "abcabc") == - Ok(Some(("abcabc", [> Some("abc")]))) +assert testRegex("([a-c]+)\\1", "abcabc") + == Ok(Some(("abcabc", [> Some("abc")]))) assert testRegex("(a)\\1", "aa") == Ok(Some(("aa", [> Some("a")]))) assert testRegex("(a+)\\1", "aa") == Ok(Some(("aa", [> Some("a")]))) assert testRegex("(a+)+\\1", "aa") == Ok(Some(("aa", [> Some("a")]))) @@ -292,15 +292,15 @@ assert testRegex("(a)ba*\\1", "aba") == Ok(Some(("aba", [> Some("a")]))) assert testRegex("(aa|a)a\\1$", "aaa") == Ok(Some(("aaa", [> Some("a")]))) assert testRegex("(a|aa)a\\1$", "aaa") == Ok(Some(("aaa", [> Some("a")]))) assert testRegex("(a+)a\\1$", "aaa") == Ok(Some(("aaa", [> Some("a")]))) -assert testRegex("([abc]*)\\1", "abcabc") == - Ok(Some(("abcabc", [> Some("abc")]))) +assert testRegex("([abc]*)\\1", "abcabc") + == Ok(Some(("abcabc", [> Some("abc")]))) assert testRegex("(a)(b)c|ab", "ab") == Ok(Some(("ab", [> None, None]))) assert testRegex("(a)+x", "aaax") == Ok(Some(("aaax", [> Some("a")]))) assert testRegex("([ac])+x", "aacx") == Ok(Some(("aacx", [> Some("c")]))) -assert testRegex("([^/]*/)*sub1/", "d:msgs/tdir/sub1/trial/away.cpp") == - Ok(Some(("d:msgs/tdir/sub1/", [> Some("tdir/")]))) -assert testRegex("([^.]*)\\.([^:]*):[T ]+(.*)", "track1.title:TBlah blah blah") == - Ok( +assert testRegex("([^/]*/)*sub1/", "d:msgs/tdir/sub1/trial/away.cpp") + == Ok(Some(("d:msgs/tdir/sub1/", [> Some("tdir/")]))) +assert testRegex("([^.]*)\\.([^:]*):[T ]+(.*)", "track1.title:TBlah blah blah") + == Ok( Some( ( "track1.title:TBlah blah blah", @@ -308,8 +308,8 @@ assert testRegex("([^.]*)\\.([^:]*):[T ]+(.*)", "track1.title:TBlah blah blah") ), ), ) -assert testRegex("([^N]*N)+", "abNNxyzN") == - Ok(Some(("abNNxyzN", [> Some("xyzN")]))) +assert testRegex("([^N]*N)+", "abNNxyzN") + == Ok(Some(("abNNxyzN", [> Some("xyzN")]))) assert testRegex("([^N]*N)+", "abNNxyz") == Ok(Some(("abNN", [> Some("N")]))) assert testRegex("([abc]*)x", "abcx") == Ok(Some(("abcx", [> Some("abc")]))) assert testRegex("([abc]*)x", "abc") == Ok(None) @@ -390,8 +390,8 @@ assert testRegex("a\\\\b", "a\\b") == Ok(Some(("a\\b", [>]))) assert Result.isErr(testRegex("abc)", "-")) assert Result.isErr(testRegex("(abc", "-")) assert testRegex("((a))", "abc") == Ok(Some(("a", [> Some("a"), Some("a")]))) -assert testRegex("(a)b(c)", "abc") == - Ok(Some(("abc", [> Some("a"), Some("c")]))) +assert testRegex("(a)b(c)", "abc") + == Ok(Some(("abc", [> Some("a"), Some("c")]))) assert testRegex("a+b+c", "aabbabc") == Ok(Some(("abc", [>]))) assert testRegex("a{1,}b{1,}c", "aabbabc") == Ok(Some(("abc", [>]))) assert Result.isErr(testRegex("a**", "-")) @@ -420,29 +420,29 @@ assert testRegex("(abc|)ef", "abcdef") == Ok(Some(("ef", [> Some("")]))) assert testRegex("(a|b)c*d", "abcd") == Ok(Some(("bcd", [> Some("b")]))) assert testRegex("(ab|ab*)bc", "abc") == Ok(Some(("abc", [> Some("a")]))) assert testRegex("a([bc]*)c*", "abc") == Ok(Some(("abc", [> Some("bc")]))) -assert testRegex("a([bc]*)(c*d)", "abcd") == - Ok(Some(("abcd", [> Some("bc"), Some("d")]))) -assert testRegex("a([bc]+)(c*d)", "abcd") == - Ok(Some(("abcd", [> Some("bc"), Some("d")]))) -assert testRegex("a([bc]*)(c+d)", "abcd") == - Ok(Some(("abcd", [> Some("b"), Some("cd")]))) +assert testRegex("a([bc]*)(c*d)", "abcd") + == Ok(Some(("abcd", [> Some("bc"), Some("d")]))) +assert testRegex("a([bc]+)(c*d)", "abcd") + == Ok(Some(("abcd", [> Some("bc"), Some("d")]))) +assert testRegex("a([bc]*)(c+d)", "abcd") + == Ok(Some(("abcd", [> Some("b"), Some("cd")]))) assert testRegex("a[bcd]*dcdcde", "adcdcde") == Ok(Some(("adcdcde", [>]))) assert testRegex("a[bcd]+dcdcde", "adcdcde") == Ok(None) assert testRegex("(ab|a)b*c", "abc") == Ok(Some(("abc", [> Some("ab")]))) -assert testRegex("((a)(b)c)(d)", "abcd") == - Ok(Some(("abcd", [> Some("abc"), Some("a"), Some("b"), Some("d")]))) +assert testRegex("((a)(b)c)(d)", "abcd") + == Ok(Some(("abcd", [> Some("abc"), Some("a"), Some("b"), Some("d")]))) assert testRegex("[a-zA-Z_][a-zA-Z0-9_]*", "alpha") == Ok(Some(("alpha", [>]))) assert testRegex("^a(bc+|b[eh])g|.h$", "abh") == Ok(Some(("bh", [> None]))) -assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "effgz") == - Ok(Some(("effgz", [> Some("effgz"), None]))) -assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "ij") == - Ok(Some(("ij", [> Some("ij"), Some("j")]))) +assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "effgz") + == Ok(Some(("effgz", [> Some("effgz"), None]))) +assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "ij") + == Ok(Some(("ij", [> Some("ij"), Some("j")]))) assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "effg") == Ok(None) assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "bcdd") == Ok(None) -assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "reffgz") == - Ok(Some(("effgz", [> Some("effgz"), None]))) -assert testRegex("((((((((((a))))))))))", "a") == - Ok( +assert testRegex("(bc+d$|ef*g.|h?i(j|k))", "reffgz") + == Ok(Some(("effgz", [> Some("effgz"), None]))) +assert testRegex("((((((((((a))))))))))", "a") + == Ok( Some( ( "a", @@ -461,8 +461,8 @@ assert testRegex("((((((((((a))))))))))", "a") == ), ), ) -assert testRegex("((((((((((a))))))))))\\10", "aa") == - Ok( +assert testRegex("((((((((((a))))))))))\\10", "aa") + == Ok( Some( ( "aa", @@ -484,8 +484,8 @@ assert testRegex("((((((((((a))))))))))\\10", "aa") == assert Result.isErr(testRegex("((((((((((a))))))))))\\41", "")) // NYI (case-insensitive): // assert Result.isErr(testRegex("(?i:((((((((((a))))))))))\\41)", "")) -assert testRegex("(((((((((a)))))))))", "a") == - Ok( +assert testRegex("(((((((((a)))))))))", "a") + == Ok( Some( ( "a", @@ -504,17 +504,17 @@ assert testRegex("(((((((((a)))))))))", "a") == ), ) assert testRegex("multiple words of text", "uh-uh") == Ok(None) -assert testRegex("multiple words", "multiple words, yeah") == - Ok(Some(("multiple words", [>]))) -assert testRegex("(.*)c(.*)", "abcde") == - Ok(Some(("abcde", [> Some("ab"), Some("de")]))) -assert testRegex("\\((.*), (.*)\\)", "(a, b)") == - Ok(Some(("(a, b)", [> Some("a"), Some("b")]))) +assert testRegex("multiple words", "multiple words, yeah") + == Ok(Some(("multiple words", [>]))) +assert testRegex("(.*)c(.*)", "abcde") + == Ok(Some(("abcde", [> Some("ab"), Some("de")]))) +assert testRegex("\\((.*), (.*)\\)", "(a, b)") + == Ok(Some(("(a, b)", [> Some("a"), Some("b")]))) assert testRegex("[k]", "ab") == Ok(None) assert testRegex("a[-]?c", "ac") == Ok(Some(("ac", [>]))) assert testRegex("(abc)\\1", "abcabc") == Ok(Some(("abcabc", [> Some("abc")]))) -assert testRegex("([a-c]*)\\1", "abcabc") == - Ok(Some(("abcabc", [> Some("abc")]))) +assert testRegex("([a-c]*)\\1", "abcabc") + == Ok(Some(("abcabc", [> Some("abc")]))) // NYI (case-insensitive): // assert testRegex("(?i:abc)", "ABC") == Ok(Some(("ABC", [> ]))) // assert testRegex("(?i:abc)", "XBC") == Ok(None) @@ -650,15 +650,15 @@ assert testRegex("a(?=c|d).", "abad") == Ok(Some(("ad", [>]))) assert testRegex("a(?:b|c|d)(.)", "ace") == Ok(Some(("ace", [> Some("e")]))) assert testRegex("a(?:b|c|d)*(.)", "ace") == Ok(Some(("ace", [> Some("e")]))) assert testRegex("a(?:b|c|d)+?(.)", "ace") == Ok(Some(("ace", [> Some("e")]))) -assert testRegex("a(?:b|(c|e){1,2}?|d)+?(.)", "ace") == - Ok(Some(("ace", [> Some("c"), Some("e")]))) +assert testRegex("a(?:b|(c|e){1,2}?|d)+?(.)", "ace") + == Ok(Some(("ace", [> Some("c"), Some("e")]))) assert testRegex("^(.+)?B", "AB") == Ok(Some(("AB", [> Some("A")]))) -assert testRegex("(? Some("bc-:de")]))) -assert testRegex("(? Some("bc\\:de")]))) -assert testRegex("(? Some("bc?'de")]))) +assert testRegex("(? Some("bc-:de")]))) +assert testRegex("(? Some("bc\\:de")]))) +assert testRegex("(? Some("bc?'de")]))) assert testRegex("^abc", "jkl\nabc\nxyz") == Ok(None) assert testRegex("(?m:^abc)", "jkl\nabc\nxyz") == Ok(Some(("abc", [>]))) assert testRegex("(?m:abc$)", "jkl\nxyzabc\n123") == Ok(Some(("abc", [>]))) @@ -670,12 +670,12 @@ assert testRegex("[\\w]+", "--ab_cd0123--") == Ok(Some(("ab_cd0123", [>]))) assert testRegex("\\D+", "1234abc5678") == Ok(Some(("abc", [>]))) assert testRegex("[\\D]+", "1234abc5678") == Ok(Some(("abc", [>]))) assert testRegex("[\\da-fA-F]+", "123abc") == Ok(Some(("123abc", [>]))) -assert testRegex("([\\s]*)([\\S]*)([\\s]*)", " testing!1972") == - Ok(Some((" testing!1972", [> Some(" "), Some("testing!1972"), Some("")]))) -assert testRegex("(\\s*)(\\S*)(\\s*)", " testing!1972") == - Ok(Some((" testing!1972", [> Some(" "), Some("testing!1972"), Some("")]))) -assert testRegex("(([a-z]+):)?([a-z]+)$", "smil") == - Ok(Some(("smil", [> None, None, Some("smil")]))) +assert testRegex("([\\s]*)([\\S]*)([\\s]*)", " testing!1972") + == Ok(Some((" testing!1972", [> Some(" "), Some("testing!1972"), Some("")]))) +assert testRegex("(\\s*)(\\S*)(\\s*)", " testing!1972") + == Ok(Some((" testing!1972", [> Some(" "), Some("testing!1972"), Some("")]))) +assert testRegex("(([a-z]+):)?([a-z]+)$", "smil") + == Ok(Some(("smil", [> None, None, Some("smil")]))) // We handle this the same as Racket (returning None instead of an error); is that a mistake? // This isn't a well-defined regexp, so maybe we should error in the parser... // assert Result.isErr(testRegex("((.)\\1+)", "")) @@ -684,49 +684,49 @@ assert testRegex(".*d", "abc\nabd") == Ok(Some(("abc\nabd", [>]))) assert testRegex("(?m:.*d)", "abc\nabd") == Ok(Some(("abd", [>]))) assert Result.isErr(testRegex("(", "")) assert testRegex("(x?)?", "x") == Ok(Some(("x", [> Some("x")]))) -assert testRegex("(? Some("dof")]))) +assert testRegex("(? Some("dof")]))) assert testRegex("[\\w-]+", "laser_beam") == Ok(Some(("laser_beam", [>]))) assert testRegex(".*?\\S *:", "xx:") == Ok(Some(("xx:", [>]))) -assert testRegex("a[ ]*?\\ (\\d+).*", "a 10") == - Ok(Some(("a 10", [> Some("10")]))) -assert testRegex("a[ ]*?\\ (\\d+).*", "a 10") == - Ok(Some(("a 10", [> Some("10")]))) +assert testRegex("a[ ]*?\\ (\\d+).*", "a 10") + == Ok(Some(("a 10", [> Some("10")]))) +assert testRegex("a[ ]*?\\ (\\d+).*", "a 10") + == Ok(Some(("a 10", [> Some("10")]))) // NYI (case-insensitive): // assert testRegex("(?i:M+)", "MMM") == Ok(Some(("MMM", [> ]))) // assert testRegex("(?i:m+)", "MMM") == Ok(Some(("MMM", [> ]))) // assert testRegex("(?i:[M]+)", "MMM") == Ok(Some(("MMM", [> ]))) // assert testRegex("(?i:[m]+)", "MMM") == Ok(Some(("MMM", [> ]))) assert Result.isErr(testRegex("^*", "")) -assert testRegex("\"(?:\\\\\"|[^\"])*?\"", "\"\\\"\"") == - Ok(Some(("\"\\\"\"", [>]))) +assert testRegex("\"(?:\\\\\"|[^\"])*?\"", "\"\\\"\"") + == Ok(Some(("\"\\\"\"", [>]))) assert testRegex("(?m:^.*?$)", "one\ntwo\nthree\n") == Ok(Some(("one", [>]))) assert testRegex("a[^>]*?b", "a>b") == Ok(None) assert testRegex("^a*?$", "foo") == Ok(None) -assert testRegex("^((a)c)?(ab)$", "ab") == - Ok(Some(("ab", [> None, None, Some("ab")]))) -assert testRegex("^([ab]*?)(?=(b)?)c", "abc") == - Ok(Some(("abc", [> Some("ab"), None]))) -assert testRegex("^([ab]*?)(?!(b))c", "abc") == - Ok(Some(("abc", [> Some("ab"), None]))) -assert testRegex("^([ab]*?)(? Some("ab"), None]))) +assert testRegex("^((a)c)?(ab)$", "ab") + == Ok(Some(("ab", [> None, None, Some("ab")]))) +assert testRegex("^([ab]*?)(?=(b)?)c", "abc") + == Ok(Some(("abc", [> Some("ab"), None]))) +assert testRegex("^([ab]*?)(?!(b))c", "abc") + == Ok(Some(("abc", [> Some("ab"), None]))) +assert testRegex("^([ab]*?)(? Some("ab"), None]))) // Delimited versions -assert testRegex("(-[0-9]*)+", "a-12--345b") == - Ok(Some(("-12--345", [> Some("-345")]))) -assert testRegexRange("(-[0-9]*)+", "a-12--345b", 2, 10) == - Ok(Some(("--345", [> Some("-345")]))) -assert testRegexRange("(-[0-9]*)+", "a-12--345b", 2, 8) == - Ok(Some(("--34", [> Some("-34")]))) +assert testRegex("(-[0-9]*)+", "a-12--345b") + == Ok(Some(("-12--345", [> Some("-345")]))) +assert testRegexRange("(-[0-9]*)+", "a-12--345b", 2, 10) + == Ok(Some(("--345", [> Some("-345")]))) +assert testRegexRange("(-[0-9]*)+", "a-12--345b", 2, 8) + == Ok(Some(("--34", [> Some("-34")]))) // Positions -assert testRegexPositions("(-[0-9]*)+", "a-12--345b") == - Ok(Some(((1, 9), [> Some((5, 9))]))) -assert testRegexPositionsRange("(-[0-9]*)+", "a-12--345b", 2, 10) == - Ok(Some(((4, 9), [> Some((5, 9))]))) -assert testRegexPositionsRange("(-[0-9]*)+", "a-12--345b", 2, 8) == - Ok(Some(((4, 8), [> Some((5, 8))]))) +assert testRegexPositions("(-[0-9]*)+", "a-12--345b") + == Ok(Some(((1, 9), [> Some((5, 9))]))) +assert testRegexPositionsRange("(-[0-9]*)+", "a-12--345b", 2, 10) + == Ok(Some(((4, 9), [> Some((5, 9))]))) +assert testRegexPositionsRange("(-[0-9]*)+", "a-12--345b", 2, 8) + == Ok(Some(((4, 8), [> Some((5, 8))]))) let unwrapResult = r => { match (r) { @@ -737,31 +737,31 @@ let unwrapResult = r => { // Replacement tests (mostly testing replacement string syntax) assert replace(unwrapResult(make("b(ar)")), "foo bar", "baza$1") == "foo bazaar" -assert replace(unwrapResult(make("b(ar)")), "foo bar", "baza$1_$1") == - "foo bazaar_ar" +assert replace(unwrapResult(make("b(ar)")), "foo bar", "baza$1_$1") + == "foo bazaar_ar" assert replace(unwrapResult(make("b(ar)")), "foo bar", "baza$2") == "foo baza" -assert replace(unwrapResult(make("b(ar)")), "foo bar bar", "baza$1$$") == - "foo bazaar$ bar" +assert replace(unwrapResult(make("b(ar)")), "foo bar bar", "baza$1$$") + == "foo bazaar$ bar" // *All variants assert List.map( mr => flattenResult(mr), findAll(unwrapResult(make("x.")), "12x4x6") -) == - [("x4", [>]), ("x6", [>])] +) + == [("x4", [>]), ("x6", [>])] assert List.map( mr => flattenResultPositions(mr), findAll(unwrapResult(make("x.")), "12x4x6") -) == - [((2, 4), [>]), ((4, 6), [>])] +) + == [((2, 4), [>]), ((4, 6), [>])] -assert replaceAll(unwrapResult(make("b(ar)")), "foo bar bar", "baza$1") == - "foo bazaar bazaar" +assert replaceAll(unwrapResult(make("b(ar)")), "foo bar bar", "baza$1") + == "foo bazaar bazaar" assert replaceAll(unwrapResult(make("mi")), "mi casa", "su") == "su casa" assert replaceAll(unwrapResult(make("a(.)")), "xabcyawz", "&") == "x&cy&z" assert replaceAll(unwrapResult(make("a(.)")), "xabcyawz", "\\") == "x\\cy\\z" -assert replaceAll(unwrapResult(make("a(.)")), "xabcyawz", "&$1\\$&$99=") == - "x&b\\ab=cy&w\\aw=z" +assert replaceAll(unwrapResult(make("a(.)")), "xabcyawz", "&$1\\$&$99=") + == "x&b\\ab=cy&w\\aw=z" assert replaceAll(unwrapResult(make("p")), "apple", "$0$.0") == "ap0p0le" assert replaceAll(unwrapResult(make("b(ar)")), "bazbarfoo", "$`") == "bazbazfoo" assert replaceAll(unwrapResult(make("b(ar)")), "bazbarfoo", "$'") == "bazfoofoo" @@ -771,33 +771,33 @@ assert replaceAll(unwrapResult(make("^.")), "asdf", "-") == "-sdf" // Regex.split assert split(unwrapResult(make(",")), "a,b,c,d") == ["a", "b,c,d"] assert split(unwrapResult(make("|")), "a,b,c,d") == ["a,b,c,d"] -assert split(unwrapResult(make("\n|\r")), "a\nb\nc\rd\n\re") == - ["a", "b\nc\rd\n\re"] +assert split(unwrapResult(make("\n|\r")), "a\nb\nc\rd\n\re") + == ["a", "b\nc\rd\n\re"] assert split(unwrapResult(make(".")), "abcd") == ["", "bcd"] assert split(unwrapResult(make("d$")), "abcd") == ["abc", ""] assert split(unwrapResult(make("b(ar)")), "foo bar") == ["foo ", "ar", ""] -assert split(unwrapResult(make("b(ar)")), "foo bar bar") == - ["foo ", "ar", " bar"] -assert split(unwrapResult(make("b(ar)b(az)")), "foo barbaz bar") == - ["foo ", "ar", "az", " bar"] +assert split(unwrapResult(make("b(ar)")), "foo bar bar") + == ["foo ", "ar", " bar"] +assert split(unwrapResult(make("b(ar)b(az)")), "foo barbaz bar") + == ["foo ", "ar", "az", " bar"] assert split(unwrapResult(make("b((a)r)")), "bar") == ["", "ar", "a", ""] -assert split(unwrapResult(make("b(((((a))))r)")), "bar") == - ["", "ar", "a", "a", "a", "a", ""] -assert split(unwrapResult(make("b(((((a))))r)")), "bar bar") == - ["", "ar", "a", "a", "a", "a", " bar"] +assert split(unwrapResult(make("b(((((a))))r)")), "bar") + == ["", "ar", "a", "a", "a", "a", ""] +assert split(unwrapResult(make("b(((((a))))r)")), "bar bar") + == ["", "ar", "a", "a", "a", "a", " bar"] // Regex.splitAll assert splitAll(unwrapResult(make(",")), "a,b,c,d") == ["a", "b", "c", "d"] assert splitAll(unwrapResult(make("|")), "a,b,c,d") == ["a,b,c,d"] -assert splitAll(unwrapResult(make("\n|\r")), "a\nb\nc\rd\n\re") == - ["a", "b", "c", "d", "", "e"] +assert splitAll(unwrapResult(make("\n|\r")), "a\nb\nc\rd\n\re") + == ["a", "b", "c", "d", "", "e"] assert splitAll(unwrapResult(make(".")), "abcd") == ["", "", "", "", ""] assert splitAll(unwrapResult(make("d$")), "abcd") == ["abc", ""] -assert splitAll(unwrapResult(make("b(ar)(ar)")), "foo barar test") == - ["foo ", "ar", "ar", " test"] -assert splitAll(unwrapResult(make("b(ar)(ar)")), "foo barar test barar test2") == - ["foo ", "ar", "ar", " test ", "ar", "ar", " test2"] +assert splitAll(unwrapResult(make("b(ar)(ar)")), "foo barar test") + == ["foo ", "ar", "ar", " test"] +assert splitAll(unwrapResult(make("b(ar)(ar)")), "foo barar test barar test2") + == ["foo ", "ar", "ar", " test ", "ar", "ar", " test2"] assert splitAll(unwrapResult(make("b((a)r)")), "bar") == ["", "ar", "a", ""] -assert splitAll(unwrapResult(make("b(((((a))))r)")), "bar") == - ["", "ar", "a", "a", "a", "a", ""] -assert splitAll(unwrapResult(make("b(((((a))))r)")), "bar bar") == - ["", "ar", "a", "a", "a", "a", " ", "ar", "a", "a", "a", "a", ""] +assert splitAll(unwrapResult(make("b(((((a))))r)")), "bar") + == ["", "ar", "a", "a", "a", "a", ""] +assert splitAll(unwrapResult(make("b(((((a))))r)")), "bar bar") + == ["", "ar", "a", "a", "a", "a", " ", "ar", "a", "a", "a", "a", ""] diff --git a/compiler/test/stdlib/result.test.gr b/compiler/test/stdlib/result.test.gr index fae24758f2..455aa937e1 100644 --- a/compiler/test/stdlib/result.test.gr +++ b/compiler/test/stdlib/result.test.gr @@ -23,10 +23,10 @@ assert Result.mapErr(x => fail "Shouldn't run", Ok(1)) == Ok(1) assert Result.mapErr(incr, Err(1)) == Err(2) // flatMap -assert Result.flatMap(a => Ok("some other type"), Ok(1)) == - Ok("some other type") -assert Result.flatMap(a => Err("some other type"), Ok(1)) == - Err("some other type") +assert Result.flatMap(a => Ok("some other type"), Ok(1)) + == Ok("some other type") +assert Result.flatMap(a => Err("some other type"), Ok(1)) + == Err("some other type") assert Result.flatMap(x => fail "Shouldn't run", Err("Ooops")) == Err("Ooops") // flatMapErr @@ -39,14 +39,14 @@ assert Result.mapWithDefault(toString, "Nope!", Ok(1)) == "1" assert Result.mapWithDefault(toString, "Nope!", Err(1)) == "Nope!" // mapWithDefaultFn -assert Result.mapWithDefaultFn(toString, x => fail "Shouldn't run", Ok(1)) == - "1" +assert Result.mapWithDefaultFn(toString, x => fail "Shouldn't run", Ok(1)) + == "1" assert Result.mapWithDefaultFn( x => fail "Shouldn't run", x => "7", Err("Awesome") -) == - "7" +) + == "7" use Result.{ (||), (&&) } diff --git a/compiler/test/stdlib/string.test.gr b/compiler/test/stdlib/string.test.gr index 90e83e5c8a..09051f689e 100644 --- a/compiler/test/stdlib/string.test.gr +++ b/compiler/test/stdlib/string.test.gr @@ -118,18 +118,18 @@ assert String.reverse("") == "" assert String.reverse("even") == "neve" assert String.reverse("odd") == "ddo" assert String.reverse("olleH") == "Hello" -assert String.reverse(emojis) == - String.implode(Array.reverse(String.explode(emojis))) +assert String.reverse(emojis) + == String.implode(Array.reverse(String.explode(emojis))) // split tests assert String.split(empty, empty) == [>] assert String.split(empty, short) == [> "f", "o", "x"] -assert String.split(" ", fox) == - [> "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."] -assert String.split("brown fox", fox) == - [> "The quick ", " jumps over the lazy dog."] -assert String.split("🚀 ", emojis) == - [> +assert String.split(" ", fox) + == [> "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."] +assert String.split("brown fox", fox) + == [> "The quick ", " jumps over the lazy dog."] +assert String.split("🚀 ", emojis) + == [> "we found a path", "to greatness🏅but the grind never quits😤💪🏼 keep milling💯🔥😈", ] @@ -239,8 +239,8 @@ assert String.replaceAll("🌾", "Grain", "Hello") == "Hello" assert String.replaceAll("🌾", "Hello", "Hello Grain") == "Hello Grain" assert String.replaceAll("Grain", "🌾", "Hello Grain") == "Hello 🌾" assert String.replaceAll("🚀", "🌾", "🚀🚀🚀🌾🌾🌾") == "🌾🌾🌾🌾🌾🌾" -assert String.replaceAll("/", "\/", "/test/test/test/") == - "\/test\/test\/test\/" +assert String.replaceAll("/", "\/", "/test/test/test/") + == "\/test\/test\/test\/" assert String.replaceAll(",", "|", "test,test,test") == "test|test|test" assert String.replaceAll("MeowMeow", "Meow", "MeowMeowMeowMeow") == "MeowMeow" @@ -302,24 +302,24 @@ assert processBytes(String.encode(emojis, String.UTF32_LE)) == [> 0x77us, 0x00us // round-trip tests assert String.decode(String.encode("foo", String.UTF8), String.UTF8) == "foo" -assert String.decode(String.encode("foo", String.UTF16_BE), String.UTF16_BE) == - "foo" -assert String.decode(String.encode("foo", String.UTF16_LE), String.UTF16_LE) == - "foo" -assert String.decode(String.encode("foo", String.UTF32_BE), String.UTF32_BE) == - "foo" -assert String.decode(String.encode("foo", String.UTF32_LE), String.UTF32_LE) == - "foo" +assert String.decode(String.encode("foo", String.UTF16_BE), String.UTF16_BE) + == "foo" +assert String.decode(String.encode("foo", String.UTF16_LE), String.UTF16_LE) + == "foo" +assert String.decode(String.encode("foo", String.UTF32_BE), String.UTF32_BE) + == "foo" +assert String.decode(String.encode("foo", String.UTF32_LE), String.UTF32_LE) + == "foo" assert String.decode(String.encode(emojis, String.UTF8), String.UTF8) == emojis -assert String.decode(String.encode(emojis, String.UTF16_BE), String.UTF16_BE) == - emojis -assert String.decode(String.encode(emojis, String.UTF16_LE), String.UTF16_LE) == - emojis -assert String.decode(String.encode(emojis, String.UTF32_BE), String.UTF32_BE) == - emojis -assert String.decode(String.encode(emojis, String.UTF32_LE), String.UTF32_LE) == - emojis +assert String.decode(String.encode(emojis, String.UTF16_BE), String.UTF16_BE) + == emojis +assert String.decode(String.encode(emojis, String.UTF16_LE), String.UTF16_LE) + == emojis +assert String.decode(String.encode(emojis, String.UTF32_BE), String.UTF32_BE) + == emojis +assert String.decode(String.encode(emojis, String.UTF32_LE), String.UTF32_LE) + == emojis // decodeRange // 51 is chosen to stress-test these functions, since it's not an aligned offset @@ -328,36 +328,36 @@ assert String.decodeRange( String.UTF8, 51, 98 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF16_LE, Bytes.make(500), 51), String.UTF16_LE, 51, 164 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF16_BE, Bytes.make(500), 51), String.UTF16_BE, 51, 164 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF32_LE, Bytes.make(500), 51), String.UTF32_LE, 51, 296 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF32_BE, Bytes.make(500), 51), String.UTF32_BE, 51, 296 -) == - emojis +) + == emojis // keepBom should be no-op, since there is no BOM assert String.decodeRange( @@ -366,40 +366,40 @@ assert String.decodeRange( 51, 98, keepBom=true -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF16_LE, Bytes.make(500), 51), String.UTF16_LE, 51, 164, keepBom=true -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF16_BE, Bytes.make(500), 51), String.UTF16_BE, 51, 164, keepBom=true -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF32_LE, Bytes.make(500), 51), String.UTF32_LE, 51, 296, keepBom=true -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF32_BE, Bytes.make(500), 51), String.UTF32_BE, 51, 296, keepBom=true -) == - emojis +) + == emojis // but, when we include it, it should preserve it: assert String.decodeRange( String.encodeAt(emojis, String.UTF16_LE, Bytes.make(500), 51, includeBom=true), @@ -407,50 +407,50 @@ assert String.decodeRange( 51, 166, keepBom=true -) != - emojis +) + != emojis // BOM-skipping should be default: assert String.decodeRange( String.encodeAt(emojis, String.UTF8, Bytes.make(500), 51, includeBom=true), String.UTF8, 51, 101 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF16_LE, Bytes.make(500), 51, includeBom=true), String.UTF16_LE, 51, 166 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF16_BE, Bytes.make(500), 51, includeBom=true), String.UTF16_BE, 51, 166 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF32_BE, Bytes.make(500), 51, includeBom=true), String.UTF32_BE, 51, 300 -) == - emojis +) + == emojis assert String.decodeRange( String.encodeAt(emojis, String.UTF32_LE, Bytes.make(500), 51, includeBom=true), String.UTF32_LE, 51, 300 -) == - emojis +) + == emojis // BOM stripping -assert String.decode(String.encode(emojis, String.UTF32_LE), String.UTF32_LE) == - emojis -assert String.decode(String.encode(emojis, String.UTF32_BE), String.UTF32_BE) == - emojis +assert String.decode(String.encode(emojis, String.UTF32_LE), String.UTF32_LE) + == emojis +assert String.decode(String.encode(emojis, String.UTF32_BE), String.UTF32_BE) + == emojis // Tests for (#786) let bytes = Bytes.make(2) @@ -473,8 +473,8 @@ assert String.decode(bytes, String.UTF16_LE) == "¢" String.forEachCodePointi((codePoint, idx) => { tmp = [(codePoint, idx), ...tmp] }, emojis) - assert Array.reverse(Array.fromList(tmp)) == - Array.mapi((c, i) => (c, i), codes) + assert Array.reverse(Array.fromList(tmp)) + == Array.mapi((c, i) => (c, i), codes) } // char iteration tests @@ -492,8 +492,8 @@ assert String.decode(bytes, String.UTF16_LE) == "¢" String.forEachChari((char, idx) => { tmp = [(char, idx), ...tmp] }, emojis) - assert Array.reverse(Array.fromList(tmp)) == - Array.mapi((c, i) => (c, i), String.explode(emojis)) + assert Array.reverse(Array.fromList(tmp)) + == Array.mapi((c, i) => (c, i), String.explode(emojis)) } // String.map @@ -506,8 +506,8 @@ assert String.mapi((char, index) => String.charAt(0, toString(index)), "") == "" assert String.mapi( (char, index) => String.charAt(0, toString(index)), "Hello world" -) == - "01234567891" +) + == "01234567891" assert String.mapi((char, index) => char, "Hello world") == "Hello world" // String.trimStart diff --git a/compiler/test/stdlib/uri.test.gr b/compiler/test/stdlib/uri.test.gr index a5535974ad..f836009cd2 100644 --- a/compiler/test/stdlib/uri.test.gr +++ b/compiler/test/stdlib/uri.test.gr @@ -34,8 +34,10 @@ let testValid = (uriString, expected) => { assert uri.path == expected.expectedPath assert uri.query == expected.expectedQuery assert uri.fragment == expected.expectedFragment - assert Uri.toString(uri) == - (if (expected.expectedString == "") uriString else expected.expectedString) + assert Uri.toString(uri) + == ( + if (expected.expectedString == "") uriString else expected.expectedString + ) } testValid( @@ -164,8 +166,8 @@ testValid( } ) -assert Uri.parse("example://a/b/c/%7Bfoo%7D") == - Uri.parse("eXAMPLE://a/./b/../b/%63/%7bfoo%7d") +assert Uri.parse("example://a/b/c/%7Bfoo%7D") + == Uri.parse("eXAMPLE://a/./b/../b/%63/%7bfoo%7d") let testInvalid = uriString => { assert Uri.parse(uriString) == Err(Uri.ParseError) @@ -281,19 +283,19 @@ testResolve("a://a.com?a#a", "", "a://a.com?a") // make -assert Uri.make(scheme=Some("+"), encodeComponents=false) == - Err(Uri.InvalidSchemeError) -assert Uri.make(userinfo=Some("%"), host=Some("a"), encodeComponents=false) == - Err(Uri.InvalidUserinfoError) -assert Uri.make(host=Some("#"), encodeComponents=false) == - Err(Uri.InvalidHostError) -assert Uri.make(port=Some(-1), host=Some("a"), encodeComponents=false) == - Err(Uri.InvalidPortError) +assert Uri.make(scheme=Some("+"), encodeComponents=false) + == Err(Uri.InvalidSchemeError) +assert Uri.make(userinfo=Some("%"), host=Some("a"), encodeComponents=false) + == Err(Uri.InvalidUserinfoError) +assert Uri.make(host=Some("#"), encodeComponents=false) + == Err(Uri.InvalidHostError) +assert Uri.make(port=Some(-1), host=Some("a"), encodeComponents=false) + == Err(Uri.InvalidPortError) assert Uri.make(path="%2", encodeComponents=false) == Err(Uri.InvalidPathError) -assert Uri.make(query=Some("#"), encodeComponents=false) == - Err(Uri.InvalidQueryError) -assert Uri.make(fragment=Some("%"), encodeComponents=false) == - Err(Uri.InvalidFragmentError) +assert Uri.make(query=Some("#"), encodeComponents=false) + == Err(Uri.InvalidQueryError) +assert Uri.make(fragment=Some("%"), encodeComponents=false) + == Err(Uri.InvalidFragmentError) assert Uri.make(userinfo=Some("me")) == Err(Uri.UserinfoWithNoHost) assert Uri.make(port=Some(80)) == Err(Uri.PortWithNoHost) assert Result.map( @@ -307,8 +309,8 @@ assert Result.map( query=Some("abc=def"), fragment=Some("Uri-make") ) -) == - Ok("https://me:pw@grain-lang.org:80/docs?abc=def#Uri-make") +) + == Ok("https://me:pw@grain-lang.org:80/docs?abc=def#Uri-make") assert Result.map( Uri.toString, Uri.make( @@ -321,43 +323,43 @@ assert Result.map( fragment=Some("Ur#i-m/ake"), encodeComponents=true ) -) == - Ok( +) + == Ok( "ht+1-tp://me%40pw@g+r%2Fa*in%3A80:80/%2520d:o'c%23s!?/a?b%23c=d:ef#Ur%23i-m/ake", ) assert Result.map( Uri.toString, Uri.make(scheme=Some("http"), host=Some("[1::1]"), encodeComponents=true) -) == - Ok("http://[1::1]") +) + == Ok("http://[1::1]") // update let orig = Result.unwrap(Uri.make()) -assert Uri.update(orig, scheme=Some(Some("+")), encodeComponents=false) == - Err(Uri.InvalidSchemeError) +assert Uri.update(orig, scheme=Some(Some("+")), encodeComponents=false) + == Err(Uri.InvalidSchemeError) assert Uri.update( orig, userinfo=Some(Some("%")), host=Some(Some("a")), encodeComponents=false -) == - Err(Uri.InvalidUserinfoError) -assert Uri.update(orig, host=Some(Some("#")), encodeComponents=false) == - Err(Uri.InvalidHostError) +) + == Err(Uri.InvalidUserinfoError) +assert Uri.update(orig, host=Some(Some("#")), encodeComponents=false) + == Err(Uri.InvalidHostError) assert Uri.update( orig, port=Some(Some(1.1)), host=Some(Some("a")), encodeComponents=false -) == - Err(Uri.InvalidPortError) -assert Uri.update(orig, path=Some("%2"), encodeComponents=false) == - Err(Uri.InvalidPathError) -assert Uri.update(orig, query=Some(Some("#")), encodeComponents=false) == - Err(Uri.InvalidQueryError) -assert Uri.update(orig, fragment=Some(Some("%")), encodeComponents=false) == - Err(Uri.InvalidFragmentError) +) + == Err(Uri.InvalidPortError) +assert Uri.update(orig, path=Some("%2"), encodeComponents=false) + == Err(Uri.InvalidPathError) +assert Uri.update(orig, query=Some(Some("#")), encodeComponents=false) + == Err(Uri.InvalidQueryError) +assert Uri.update(orig, fragment=Some(Some("%")), encodeComponents=false) + == Err(Uri.InvalidFragmentError) assert Uri.update(orig, port=Some(Some(80))) == Err(Uri.PortWithNoHost) let orig = Result.unwrap( @@ -376,8 +378,8 @@ assert Result.map( query=Some(None), fragment=Some(None) ) -) == - Ok("") +) + == Ok("") assert Result.map( Uri.toString, Uri.update( @@ -391,15 +393,15 @@ assert Result.map( fragment=Some(Some("Ur#i-m/ake")), encodeComponents=true ) -) == - Ok( +) + == Ok( "ht+1-tp://me%40pw@g+r%2Fa*in%3A80:80/%2520d:o'c%23s!?/a?b%23c=d:ef#Ur%23i-m/ake", ) assert Result.map( Uri.toString, Uri.update(orig, host=Some(Some("[1::1]")), encodeComponents=true) -) == - Ok("https://me:pw@[1::1]:80/docs?k=v#frag") +) + == Ok("https://me:pw@[1::1]:80/docs?k=v#frag") let orig = Result.unwrap(Uri.parse("ftp:path")) assert Uri.update(orig, host=Some(Some("domain"))) == Err(Uri.InvalidPathError) diff --git a/compiler/test/suites/basic_functionality.re b/compiler/test/suites/basic_functionality.re index 4607d39675..e7e821c0fb 100644 --- a/compiler/test/suites/basic_functionality.re +++ b/compiler/test/suites/basic_functionality.re @@ -69,9 +69,18 @@ describe("basic functionality", ({test, testSkip}) => { assertSnapshot("binop2.1", "2-2"); assertSnapshot("binop2.2", "2 - 2"); - assertSnapshot("binop2.3", "2 - - 2"); - assertSnapshot("binop2.4", "- 2"); + assertSnapshot( + ~config_fn=() => {Grain_utils.Config.print_warnings := false}, + "binop2.3", + "2 + -2", + ); + assertSnapshot("binop2.4", "-2"); + assertSnapshot("binop2.5", "2 + - 2"); + assertSnapshot("binop2.6", "2 + - + 2"); assertSnapshot("binop3", "2 - 4"); assertSnapshot("binop4", "2 * 3"); assertSnapshot("binop5", "10 / 5"); @@ -209,6 +218,11 @@ describe("basic functionality", ({test, testSkip}) => { {|provide let f = box(x => 0)|}, "type variables that cannot be generalized", ); + assertCompileError( + "negative_number_space", + {|let x = - 1|}, + "Syntax error after '=' and before '- '.\nExpected an expression.", + ); assertSnapshot("int32_1", "42l"); assertSnapshot("int64_1", "99999999999999999L"); assertSnapshot("uint32_1", "42ul"); diff --git a/compiler/test/suites/blocks.re b/compiler/test/suites/blocks.re index 84b5b0fd26..fb0986a01a 100644 --- a/compiler/test/suites/blocks.re +++ b/compiler/test/suites/blocks.re @@ -22,13 +22,17 @@ describe("blocks", ({test}) => { ~loc=Location.dummy_loc, ~core_loc=Location.dummy_loc, [ - Expression.singleton_construct( - ~loc=Location.dummy_loc, - ~core_loc=Location.dummy_loc, - Location.mknoloc( - Identifier.IdentName(Location.mknoloc("Foo")), - ), - ), + { + pblk_expr: + Expression.singleton_construct( + ~loc=Location.dummy_loc, + ~core_loc=Location.dummy_loc, + Location.mknoloc( + Identifier.IdentName(Location.mknoloc("Foo")), + ), + ), + pblk_ends_semi: false, + }, ], ), ), diff --git a/compiler/test/suites/formatter.re b/compiler/test/suites/formatter.re index 955b8cccd3..733269a07f 100644 --- a/compiler/test/suites/formatter.re +++ b/compiler/test/suites/formatter.re @@ -57,4 +57,5 @@ describe("formatter", ({test, testSkip}) => { assertFormatOutput("grouped_expr", "grouped_expr"); assertFormatOutput("early_return", "early_return"); assertFormatOutput("empty", "empty"); + assertFormatOutput("lone_negative_numbers", "lone_negative_numbers"); }); diff --git a/compiler/test/suites/functions.re b/compiler/test/suites/functions.re index c65ba3c6e1..6369a5add3 100644 --- a/compiler/test/suites/functions.re +++ b/compiler/test/suites/functions.re @@ -1,6 +1,9 @@ open Grain_tests.TestFramework; open Grain_tests.Runner; +let {describe} = + describeConfig |> withCustomMatchers(customMatchers) |> build; + describe("functions", ({test, testSkip}) => { let test_or_skip = Sys.backend_type == Other("js_of_ocaml") ? testSkip : test; @@ -9,6 +12,8 @@ describe("functions", ({test, testSkip}) => { let assertCompileError = makeCompileErrorRunner(test); let assertRun = makeRunner(test_or_skip); let assertFileRun = makeFileRunner(test_or_skip); + let assertWarning = makeWarningRunner(test); + let assertNoWarning = makeNoWarningRunner(test); assertFileRun("fib1", "fib", "55\n"); assertFileRun("fib2", "fib-better", "75025\n"); @@ -387,7 +392,8 @@ truc()|}, ); assertRun( - "infix_op1", + ~config_fn=() => Grain_utils.Config.print_warnings := false, + "infix_op_newline1", {| let a = 1 +2 @@ -395,11 +401,31 @@ truc()|}, -1 print(a) |}, - "2\n", + "3\n", ); + assertRun( + "infix_op_newline2", + {| + let a = 1 + +2 + - 1 + print(a) + |}, + "2\n", + ); + assertRun( + "infix_op_newline3", + {| + let a = 1 + - + 1 + print(a) + |}, + "0\n", + ); assertRun( - "infix_op2", + "infix_op_newline4", {| let (|>) = (x, f) => f(x) let double = x => x * 2 @@ -410,4 +436,100 @@ truc()|}, |}, "6\n", ); + assertWarning( + "infix_op_newline_warning1", + {| + let a = 1 + -1 + |}, + Grain_utils.Warnings.NegativeNumberOnNewLine, + ); + assertWarning( + "infix_op_newline_warning2", + {| + let f = () => { + let a = 1 + -1 + } + |}, + Grain_utils.Warnings.NegativeNumberOnNewLine, + ); + assertWarning( + "infix_op_newline_warning3", + {| + module Mod { + let a = 1 + -1 + } + |}, + Grain_utils.Warnings.NegativeNumberOnNewLine, + ); + assertWarning( + "infix_op_newline_warning4", + {| + let a = 1; + -1 + -1 + |}, + Grain_utils.Warnings.NegativeNumberOnNewLine, + ); + assertWarning( + "infix_op_newline_warning5", + {| + let a = 1 + -1 + 2 + |}, + Grain_utils.Warnings.NegativeNumberOnNewLine, + ); + assertNoWarning( + "infix_op_newline_no_warning1", + {| + let a = 1 + - 1 + |}, + ); + assertNoWarning( + "infix_op_newline_no_warning2", + {| + let f = () => { + -1 + let a = 1 + } + |}, + ); + assertNoWarning( + "infix_op_newline_no_warning3", + {| + -1 + let a = 1 + |}, + ); + assertNoWarning( + "infix_op_newline_no_warning4", + {| + let a = 1; + -1 + |}, + ); + assertNoWarning( + "infix_op_newline_no_warning5", + {| + let a = 1; + -1 + 2 + |}, + ); + assertNoWarning( + "infix_op_newline_no_warning6", + {| + let a = 1 + (-1) + |}, + ); + assertNoWarning( + "infix_op_newline_no_warning7", + {| + let a = 1 + (-1) + 2 + |}, + ); }); diff --git a/stdlib/char.gr b/stdlib/char.gr index 5b699c138c..f75288f46f 100644 --- a/stdlib/char.gr +++ b/stdlib/char.gr @@ -44,9 +44,9 @@ provide let max = 0x10FFFF * @since v0.3.0 */ provide let isValid = charCode => { - charCode >= min && - (charCode <= 0xD7FF || charCode >= 0xE000) && - charCode <= max + charCode >= min + && (charCode <= 0xD7FF || charCode >= 0xE000) + && charCode <= max } /** diff --git a/stdlib/hash.gr b/stdlib/hash.gr index 0ff4e8edd8..8d3bf59996 100644 --- a/stdlib/hash.gr +++ b/stdlib/hash.gr @@ -121,8 +121,8 @@ let rec hashOne = (val, depth) => { } else if ((val & Tags._GRAIN_NUMBER_TAG_MASK) != 0n) { hash32(val) } else if ( - (val & Tags._GRAIN_GENERIC_TAG_MASK) == - Tags._GRAIN_GENERIC_HEAP_TAG_TYPE + (val & Tags._GRAIN_GENERIC_TAG_MASK) + == Tags._GRAIN_GENERIC_HEAP_TAG_TYPE ) { let heapPtr = val match (WasmI32.load(heapPtr, 0n)) { @@ -221,9 +221,9 @@ let rec hashOne = (val, depth) => { }, } }, - t when t == Tags._GRAIN_INT32_HEAP_TAG || - t == Tags._GRAIN_FLOAT32_HEAP_TAG || - t == Tags._GRAIN_UINT32_HEAP_TAG => { + t when t == Tags._GRAIN_INT32_HEAP_TAG + || t == Tags._GRAIN_FLOAT32_HEAP_TAG + || t == Tags._GRAIN_UINT32_HEAP_TAG => { hash32(WasmI32.load(heapPtr, 4n)) }, t when t == Tags._GRAIN_UINT64_HEAP_TAG => { diff --git a/stdlib/json.gr b/stdlib/json.gr index ad6d40a5cc..a889dc58be 100644 --- a/stdlib/json.gr +++ b/stdlib/json.gr @@ -1026,8 +1026,8 @@ let makeJsonWriter = (format: FormattingSettings, buffer: Buffer.Buffer) => { // escapes it when needed, but requires to keep track of the previous code // point in the iteration so it's more complicated and handled separately. let emitCodePoint = if ( - !format.escapeAllControlPoints && - !format.escapeNonASCII + !format.escapeAllControlPoints + && !format.escapeNonASCII ) { (codePoint: Number) => { if (codePoint > 31 && codePoint != 0x0022 && codePoint != 0x005C) { @@ -1042,10 +1042,10 @@ let makeJsonWriter = (format: FormattingSettings, buffer: Buffer.Buffer) => { // from 31 to 127. (codePoint: Number) => { if ( - codePoint > 31 && - codePoint != 0x0022 && - codePoint != 0x005C && - codePoint < 128 + codePoint > 31 + && codePoint != 0x0022 + && codePoint != 0x005C + && codePoint < 128 ) { Buffer.addCharFromCodePoint(codePoint, buffer) } else { @@ -1059,11 +1059,11 @@ let makeJsonWriter = (format: FormattingSettings, buffer: Buffer.Buffer) => { // codepoints, but covering that would be overkill. (codePoint: Number) => { if ( - codePoint > 31 && - codePoint != 0x0022 && - codePoint != 0x005C && - codePoint < 127 || - codePoint > 159 + codePoint > 31 + && codePoint != 0x0022 + && codePoint != 0x005C + && codePoint < 127 + || codePoint > 159 ) { Buffer.addCharFromCodePoint(codePoint, buffer) } else { @@ -1077,10 +1077,10 @@ let makeJsonWriter = (format: FormattingSettings, buffer: Buffer.Buffer) => { // 127 (Delete). (codePoint: Number) => { if ( - codePoint > 31 && - codePoint != 0x0022 && - codePoint != 0x005C && - codePoint < 127 + codePoint > 31 + && codePoint != 0x0022 + && codePoint != 0x005C + && codePoint < 127 ) { // fast path for chars that never need any escaping Buffer.addCharFromCodePoint(codePoint, buffer) @@ -1364,8 +1364,8 @@ let skipWhiteSpace = (parserState: JsonParserState) => { // isAtEndOfInput is not strictly necessary here // could remove as an optimization while ( - isInterTokenWhiteSpace(parserState.currentCodePoint) && - !isAtEndOfInput(parserState) + isInterTokenWhiteSpace(parserState.currentCodePoint) + && !isAtEndOfInput(parserState) ) { next(parserState) void @@ -1426,10 +1426,10 @@ let expectCodePointAndAdvance = ( next(parserState) None } else { - let detail = "expected " ++ - formatCodePointOrEOF(expectedCodePoint) ++ - ", found " ++ - formatCodePointOrEOF(c) + let detail = "expected " + ++ formatCodePointOrEOF(expectedCodePoint) + ++ ", found " + ++ formatCodePointOrEOF(c) Some(buildUnexpectedTokenError(parserState, detail)) } } @@ -1438,9 +1438,9 @@ let atoiFast = buffer => { let mut result = 0 for (let mut i = 0; i < bufLen; i += 1) { use Uint8.{ (-) } - result = (result << 1) + - (result << 3) + - Uint8.toNumber(Buffer.getUint8(i, buffer) - 48us) + result = (result << 1) + + (result << 3) + + Uint8.toNumber(Buffer.getUint8(i, buffer) - 48us) } result } @@ -1467,8 +1467,8 @@ let rec parseValue = (parserState: JsonParserState) => { 0x39 => parseNumberValue(parserState), // '9' 0x2D => parseNumberValue(parserState), // '-' c => { - let detail = "expected start of a JSON value, found " ++ - formatCodePointOrEOF(c) + let detail = "expected start of a JSON value, found " + ++ formatCodePointOrEOF(c) Err(buildUnexpectedTokenError(parserState, detail)) }, } @@ -1655,20 +1655,20 @@ and parseString = (parserState: JsonParserState) => { if (hexDigitCodePoint >= 48 && hexDigitCodePoint <= 57) { // 0..9 digit -= 48 } else if ( - hexDigitCodePoint >= 65 && - hexDigitCodePoint <= 70 + hexDigitCodePoint >= 65 + && hexDigitCodePoint <= 70 ) { // A..F digit -= 55 // (65 - 10) } else if ( - hexDigitCodePoint >= 97 && - hexDigitCodePoint <= 102 + hexDigitCodePoint >= 97 + && hexDigitCodePoint <= 102 ) { // a..f digit -= 87 // (97 - 10) } else { let digitsSoFar = 3 - digitIndex let detail = - "expected exactly 4 hexadecimal digits in the UTF-16 escape sequence, found only " ++ - runtimeToString(digitsSoFar) + "expected exactly 4 hexadecimal digits in the UTF-16 escape sequence, found only " + ++ runtimeToString(digitsSoFar) return Err(buildUnexpectedTokenError(parserState, detail)) } @@ -1700,19 +1700,19 @@ and parseString = (parserState: JsonParserState) => { // iteration of the loop. highSurrogate = codeUnit } else if ( - isCodePointInBasicMultilingualPlane(codeUnit) && - !isLowSurrogate(codeUnit) + isCodePointInBasicMultilingualPlane(codeUnit) + && !isLowSurrogate(codeUnit) ) { let codePoint = codeUnit Buffer.addCharFromCodePoint(codePoint, buffer) break } else { let message = - "Invalid character escape sequence at position " ++ - runtimeToString(escapeStartPos) ++ - ": expected a Unicode code point in Basic Multilingual Plane (U+0000..U+FFFF) or a high surrogate (0xD800..0xDBFF) of a UTF-16 surrogate pair, found " ++ - "0x" ++ - toHexWithZeroPadding(codeUnit, 4) + "Invalid character escape sequence at position " + ++ runtimeToString(escapeStartPos) + ++ ": expected a Unicode code point in Basic Multilingual Plane (U+0000..U+FFFF) or a high surrogate (0xD800..0xDBFF) of a UTF-16 surrogate pair, found " + ++ "0x" + ++ toHexWithZeroPadding(codeUnit, 4) return Err(InvalidUTF16SurrogatePair(message)) } } else { @@ -1728,11 +1728,11 @@ and parseString = (parserState: JsonParserState) => { break } else { let message = - "Invalid character escape sequence at position " ++ - runtimeToString(escapeStartPos) ++ - ": expected a low surrogate (0xDC00..0xDFFF) in the second code unit of the UTF-16 sequence, found " ++ - "0x" ++ - toHexWithZeroPadding(codeUnit, 4) + "Invalid character escape sequence at position " + ++ runtimeToString(escapeStartPos) + ++ ": expected a low surrogate (0xDC00..0xDFFF) in the second code unit of the UTF-16 sequence, found " + ++ "0x" + ++ toHexWithZeroPadding(codeUnit, 4) return Err(InvalidUTF16SurrogatePair(message)) } } @@ -1742,8 +1742,8 @@ and parseString = (parserState: JsonParserState) => { // JSON doesn't allow arbitrary characters to be preceded by backslash escape. // Only the ones above. let detail = - "expected a valid escape sequence or the end of string, found " ++ - formatCodePointOrEOF(unexpectedCodePoint) + "expected a valid escape sequence or the end of string, found " + ++ formatCodePointOrEOF(unexpectedCodePoint) return Err(buildUnexpectedTokenError(parserState, detail)) }, } @@ -1816,8 +1816,8 @@ and parseNumberValue = (parserState: JsonParserState) => { unexpectedCodePoint => { // The integer part of the number has to have at least one digit. // JSON doesn't allow numbers starting with decimal separator like ".1". - let detail = "expected a decimal digit, found " ++ - formatCodePointOrEOF(unexpectedCodePoint) + let detail = "expected a decimal digit, found " + ++ formatCodePointOrEOF(unexpectedCodePoint) return Err(buildUnexpectedTokenError(parserState, detail)) }, } @@ -2061,8 +2061,8 @@ provide let parse: (str: String) => Result = (str: String) } else { match (root) { Ok(_) => { - let detail = "expected end of input, found " ++ - formatCodePointOrEOF(parserState.currentCodePoint) + let detail = "expected end of input, found " + ++ formatCodePointOrEOF(parserState.currentCodePoint) Err(buildUnexpectedTokenError(parserState, detail)) }, e => e, diff --git a/stdlib/marshal.gr b/stdlib/marshal.gr index 2873bcfc83..7066182654 100644 --- a/stdlib/marshal.gr +++ b/stdlib/marshal.gr @@ -75,8 +75,8 @@ let rec size = (value, acc, valuesSeen, toplevel) => { } let heapPtr = value match (load(heapPtr, 0n)) { - t when t == Tags._GRAIN_STRING_HEAP_TAG || - t == Tags._GRAIN_BYTES_HEAP_TAG => { + t when t == Tags._GRAIN_STRING_HEAP_TAG + || t == Tags._GRAIN_BYTES_HEAP_TAG => { acc + roundTo8(8n + load(heapPtr, 4n)) }, t when t == Tags._GRAIN_ADT_HEAP_TAG => { @@ -142,27 +142,27 @@ let rec size = (value, acc, valuesSeen, toplevel) => { t when t == Tags._GRAIN_BOXED_NUM_HEAP_TAG => { let tag = load(heapPtr, 4n) match (tag) { - t when t == Tags._GRAIN_INT64_BOXED_NUM_TAG || - t == Tags._GRAIN_FLOAT64_BOXED_NUM_TAG => { + t when t == Tags._GRAIN_INT64_BOXED_NUM_TAG + || t == Tags._GRAIN_FLOAT64_BOXED_NUM_TAG => { acc + 16n }, t when t == Tags._GRAIN_BIGINT_BOXED_NUM_TAG => { acc + 16n + load(heapPtr, 8n) * 8n }, t when t == Tags._GRAIN_RATIONAL_BOXED_NUM_TAG => { - acc + - 16n + - size(load(value, 8n), 0n, valuesSeen, false) + - size(load(value, 12n), 0n, valuesSeen, false) + acc + + 16n + + size(load(value, 8n), 0n, valuesSeen, false) + + size(load(value, 12n), 0n, valuesSeen, false) }, _ => { fail "Unknown number type" }, } }, - t when t == Tags._GRAIN_INT32_HEAP_TAG || - t == Tags._GRAIN_FLOAT32_HEAP_TAG || - t == Tags._GRAIN_UINT32_HEAP_TAG => { + t when t == Tags._GRAIN_INT32_HEAP_TAG + || t == Tags._GRAIN_FLOAT32_HEAP_TAG + || t == Tags._GRAIN_UINT32_HEAP_TAG => { acc + 8n }, t when t == Tags._GRAIN_UINT64_HEAP_TAG => { @@ -386,9 +386,9 @@ let rec marshalHeap = (heapPtr, buf, offset, valuesSeen) => { }, } }, - t when t == Tags._GRAIN_INT32_HEAP_TAG || - t == Tags._GRAIN_FLOAT32_HEAP_TAG || - t == Tags._GRAIN_UINT32_HEAP_TAG => { + t when t == Tags._GRAIN_INT32_HEAP_TAG + || t == Tags._GRAIN_FLOAT32_HEAP_TAG + || t == Tags._GRAIN_UINT32_HEAP_TAG => { Memory.copy(buf + offset, heapPtr, 8n) offset + 8n }, @@ -449,11 +449,11 @@ let reportError = (message, offset) => { @unsafe let validateStack = (value, offset) => { match (value) { - _ when value == fromGrain(true) || - value == fromGrain(false) || - value == fromGrain(void) || - (value & Tags._GRAIN_NUMBER_TAG_MASK) == Tags._GRAIN_NUMBER_TAG_TYPE || - (value & Tags._GRAIN_GENERIC_TAG_MASK) == Tags._GRAIN_SHORTVAL_TAG_TYPE => + _ when value == fromGrain(true) + || value == fromGrain(false) + || value == fromGrain(void) + || (value & Tags._GRAIN_NUMBER_TAG_MASK) == Tags._GRAIN_NUMBER_TAG_TYPE + || (value & Tags._GRAIN_GENERIC_TAG_MASK) == Tags._GRAIN_SHORTVAL_TAG_TYPE => None, _ => reportError("Unknown value", offset), } @@ -658,9 +658,9 @@ let rec validateHeap = (buf, bufSize, offset, valuesChecked) => { None => void, } if ( - load(buf, numeratorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG && - load(buf, numeratorOffset + 4n) != - Tags._GRAIN_BIGINT_BOXED_NUM_TAG + load(buf, numeratorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG + && load(buf, numeratorOffset + 4n) + != Tags._GRAIN_BIGINT_BOXED_NUM_TAG ) { return reportError( "Rational/Number numerator was not in the expected format", @@ -668,9 +668,9 @@ let rec validateHeap = (buf, bufSize, offset, valuesChecked) => { ) } if ( - load(buf, denominatorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG && - load(buf, denominatorOffset + 4n) != - Tags._GRAIN_BIGINT_BOXED_NUM_TAG + load(buf, denominatorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG + && load(buf, denominatorOffset + 4n) + != Tags._GRAIN_BIGINT_BOXED_NUM_TAG ) { return reportError( "Rational/Number denominator was not in the expected format", @@ -682,9 +682,9 @@ let rec validateHeap = (buf, bufSize, offset, valuesChecked) => { None => void, } if ( - load(buf, numeratorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG && - load(buf, numeratorOffset + 4n) != - Tags._GRAIN_BIGINT_BOXED_NUM_TAG + load(buf, numeratorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG + && load(buf, numeratorOffset + 4n) + != Tags._GRAIN_BIGINT_BOXED_NUM_TAG ) { return reportError( "Rational/Number numerator was not in the expected format", @@ -692,9 +692,9 @@ let rec validateHeap = (buf, bufSize, offset, valuesChecked) => { ) } let denominatorError = if ( - load(buf, denominatorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG && - load(buf, denominatorOffset + 4n) != - Tags._GRAIN_BIGINT_BOXED_NUM_TAG + load(buf, denominatorOffset) != Tags._GRAIN_BOXED_NUM_HEAP_TAG + && load(buf, denominatorOffset + 4n) + != Tags._GRAIN_BIGINT_BOXED_NUM_TAG ) { return reportError( "Rational/Number denominator was not in the expected format", @@ -754,12 +754,13 @@ let validate = (buf, bufSize) => { } else { // Handle non-heap values: booleans, chars, void, etc. match (value) { - _ when value == fromGrain(true) || - value == fromGrain(false) || - value == fromGrain(void) || - (value & Tags._GRAIN_NUMBER_TAG_MASK) == Tags._GRAIN_NUMBER_TAG_TYPE || - (value & Tags._GRAIN_GENERIC_TAG_MASK) == - Tags._GRAIN_SHORTVAL_TAG_TYPE => None, + _ when value == fromGrain(true) + || value == fromGrain(false) + || value == fromGrain(void) + || (value & Tags._GRAIN_NUMBER_TAG_MASK) + == Tags._GRAIN_NUMBER_TAG_TYPE + || (value & Tags._GRAIN_GENERIC_TAG_MASK) + == Tags._GRAIN_SHORTVAL_TAG_TYPE => None, _ => reportError("Unknown value", 0n), } } @@ -1006,9 +1007,9 @@ let rec unmarshalHeap = (buf, offset, valuesUnmarshaled) => { }, } }, - t when t == Tags._GRAIN_INT32_HEAP_TAG || - t == Tags._GRAIN_FLOAT32_HEAP_TAG || - t == Tags._GRAIN_UINT32_HEAP_TAG => { + t when t == Tags._GRAIN_INT32_HEAP_TAG + || t == Tags._GRAIN_FLOAT32_HEAP_TAG + || t == Tags._GRAIN_UINT32_HEAP_TAG => { let value = Memory.malloc(8n) Memory.copy(value, valuePtr, 8n) diff --git a/stdlib/number.gr b/stdlib/number.gr index 7ffe2ffb02..7b3df32abd 100644 --- a/stdlib/number.gr +++ b/stdlib/number.gr @@ -551,8 +551,8 @@ provide let isClose = (a, b, relativeTolerance=1e-9, absoluteTolerance=0.0) => { if (a == b) { true } else if (isFinite(a) && isFinite(b)) { - abs(a - b) <= - max(relativeTolerance * max(abs(a), abs(b)), absoluteTolerance) + abs(a - b) + <= max(relativeTolerance * max(abs(a), abs(b)), absoluteTolerance) } else { // NaN and infinities which were not equal false @@ -761,8 +761,8 @@ provide let asin = angle => { WasmI64.reinterpretF64(s) & 0xFFFFFFFF00000000N ) let c = (z - f * f) / (s + f) - x = 0.5W * pio2_hi - - (2.0W * s * r - (pio2_lo - 2.0W * c) - (0.5W * pio2_hi - 2.0W * f)) + x = 0.5W * pio2_hi + - (2.0W * s * r - (pio2_lo - 2.0W * c) - (0.5W * pio2_hi - 2.0W * f)) } x = WasmF64.copySign(x, origAngle) return WasmI32.toGrain(newFloat64(x)): Number @@ -1065,10 +1065,10 @@ provide let linearMap = (inputRange, outputRange, current) => { throw Exception.InvalidArgument("The outputRange must be finite") if (isNaN(outputRange.rangeStart) || isNaN(outputRange.rangeEnd)) throw Exception.InvalidArgument("The outputRange must not include NaN") - let mapped = (current - inputRange.rangeStart) * - (outputRange.rangeEnd - outputRange.rangeStart) / - (inputRange.rangeEnd - inputRange.rangeStart) + - outputRange.rangeStart + let mapped = (current - inputRange.rangeStart) + * (outputRange.rangeEnd - outputRange.rangeStart) + / (inputRange.rangeEnd - inputRange.rangeStart) + + outputRange.rangeStart clamp(outputRange, mapped) } } diff --git a/stdlib/priorityqueue.gr b/stdlib/priorityqueue.gr index 50e6927e4a..54f065a6c0 100644 --- a/stdlib/priorityqueue.gr +++ b/stdlib/priorityqueue.gr @@ -31,9 +31,9 @@ let swap = (i1, i2, array) => { let get = (array, i) => Option.expect( - "Impossible: " ++ - toString(i) ++ - " in PriorityQueue's inner storage array is None", + "Impossible: " + ++ toString(i) + ++ " in PriorityQueue's inner storage array is None", array[i] ) @@ -47,8 +47,8 @@ let rec siftDown = (i, pq) => { swapWithI = leftI } if ( - rightI < pq.size && - pq.comp(get(pq.array, rightI), get(pq.array, swapWithI)) < 0 + rightI < pq.size + && pq.comp(get(pq.array, rightI), get(pq.array, swapWithI)) < 0 ) { swapWithI = rightI } @@ -340,8 +340,8 @@ provide module Immutable { children: [newNode, node2, ...node1.children], } } else if ( - comp(node2.val, newNode.val) <= 0 && - comp(node2.val, node1.val) <= 0 + comp(node2.val, newNode.val) <= 0 + && comp(node2.val, node1.val) <= 0 ) { { val: node2.val, diff --git a/stdlib/range.gr b/stdlib/range.gr index 15c8530746..abdb300b5f 100644 --- a/stdlib/range.gr +++ b/stdlib/range.gr @@ -123,10 +123,10 @@ provide module Inclusive { */ provide let inRange = (value, range) => { match (range) { - { rangeStart: lower, rangeEnd: upper } when value >= lower && - value <= upper => true, - { rangeStart: upper, rangeEnd: lower } when value >= lower && - value <= upper => true, + { rangeStart: lower, rangeEnd: upper } when value >= lower + && value <= upper => true, + { rangeStart: upper, rangeEnd: lower } when value >= lower + && value <= upper => true, _ => false, } } diff --git a/stdlib/regex.gr b/stdlib/regex.gr index a722b7d282..fefcc3cb68 100644 --- a/stdlib/regex.gr +++ b/stdlib/regex.gr @@ -118,11 +118,11 @@ let withConfig = (buf: RegExBuf, config: RegExParserConfig) => { // Parsing internals for recursive descent let parseErr = (buf: RegExBuf, msg: String, posShift) => { - "Invalid Regular Expression: " ++ - msg ++ - " (position " ++ - toString(unbox(buf.cursor) + posShift) ++ - ")" + "Invalid Regular Expression: " + ++ msg + ++ " (position " + ++ toString(unbox(buf.cursor) + posShift) + ++ ")" } let next = (buf: RegExBuf) => { @@ -167,11 +167,11 @@ let eat = (buf: RegExBuf, char: Char) => { Err( parseErr( buf, - "Expected character '" ++ - Char.toString(char) ++ - ", but found character '" ++ - Char.toString(ret) ++ - "'", + "Expected character '" + ++ Char.toString(char) + ++ ", but found character '" + ++ Char.toString(ret) + ++ "'", 0 ), ) @@ -244,8 +244,8 @@ and rangeUnion = (rng1, rng2) => { match ((rng1, rng2)) { ([], _) => rng2, (_, []) => rng1, - ([(r1start, r1end), ...r1tl], [(r2start, r2end), ...r2tl]) when r1start <= - r2start => { + ([(r1start, r1end), ...r1tl], [(r2start, r2end), ...r2tl]) when r1start + <= r2start => { if (r1end + 1 >= r2start) { if (r1end <= r2end) { rangeUnion([(r1start, r2end), ...r2tl], r1tl) @@ -687,8 +687,8 @@ and parsePosixCharClass = (buf: RegExBuf) => { Ok(_) => Ok(List.join("", List.reverse(acc))), } }, - Ok(c) when Char.code('a') <= Char.code(c) && - Char.code(c) <= Char.code('z') => { + Ok(c) when Char.code('a') <= Char.code(c) + && Char.code(c) <= Char.code('z') => { ignore(eat(buf, c)) loop([Char.toString(c), ...acc]) }, @@ -857,9 +857,10 @@ and parseRangeRest = ( } else { match (peek(buf)) { Err(e) => Err(e), - Ok(c) when Char.code('a') <= Char.code(c) && - Char.code(c) <= Char.code('z') || - Char.code('A') <= Char.code(c) && Char.code(c) <= Char.code('Z') => { + Ok(c) when Char.code('a') <= Char.code(c) + && Char.code(c) <= Char.code('z') + || Char.code('A') <= Char.code(c) + && Char.code(c) <= Char.code('Z') => { match (mustSpanFrom) { Some(_) => Err( @@ -874,9 +875,9 @@ and parseRangeRest = ( match (parseClass(buf)) { Err(e) => Err( - "Invalid Regular Expression: illegal alphebetic escape (position " ++ - toString(curPos) ++ - ")", + "Invalid Regular Expression: illegal alphebetic escape (position " + ++ toString(curPos) + ++ ")", ), Ok(range1) => { match (rangeAddCaseAware(rng, spanFrom, buf.config)) { @@ -1011,8 +1012,8 @@ let rec parseAtom = (buf: RegExBuf) => { match (parseTest(buf)) { Err(e) => Err(e), Ok(test) => { - let tstSpanNumGroups = unbox(buf.config.groupNumber) - - tstPreNumGroups + let tstSpanNumGroups = unbox(buf.config.groupNumber) + - tstPreNumGroups match (parsePCEs(buf, false)) { Err(e) => Err(e), Ok(pces) => { @@ -1252,8 +1253,8 @@ and parseTest = (buf: RegExBuf) => { ignore(eat(buf, '?')) parseLook(buf) }, - Ok(c) when Char.code(c) >= Char.code('0') && - Char.code(c) <= Char.code('9') => { + Ok(c) when Char.code(c) >= Char.code('0') + && Char.code(c) <= Char.code('9') => { buf.config.references := true let curPos = unbox(buf.cursor) match (parseInteger(buf, 0)) { @@ -1285,8 +1286,8 @@ and parseInteger = (buf: RegExBuf, n) => { } else { match (peek(buf)) { Err(c) => Err(c), - Ok(c) when Char.code(c) >= Char.code('0') && - Char.code(c) <= Char.code('9') => { + Ok(c) when Char.code(c) >= Char.code('0') + && Char.code(c) <= Char.code('9') => { ignore(next(buf)) parseInteger(buf, 10 * n + (Char.code(c) - Char.code('0'))) }, @@ -1503,11 +1504,11 @@ and parseUnicodeCategories = (buf: RegExBuf, pC: String) => { Err( parseErr( buf, - "Unrecognized property name in `\\" ++ - pC ++ - "`: `" ++ - s ++ - "`", + "Unrecognized property name in `\\" + ++ pC + ++ "`: `" + ++ s + ++ "`", 0 ), ), @@ -1566,8 +1567,8 @@ and parseBackslashLiteral = (buf: RegExBuf) => { match (peek(buf)) { Err(e) => Err(e), // pregexp: - Ok(c) when buf.config.isPerlRegExp && - (Char.code(c) >= Char.code('0') && Char.code(c) <= Char.code('9')) => { + Ok(c) when buf.config.isPerlRegExp + && (Char.code(c) >= Char.code('0') && Char.code(c) <= Char.code('9')) => { buf.config.references := true match (parseInteger(buf, 0)) { Err(e) => Err(e), @@ -1576,10 +1577,10 @@ and parseBackslashLiteral = (buf: RegExBuf) => { }, } }, - Ok(c) when buf.config.isPerlRegExp && - ( - Char.code(c) >= Char.code('a') && Char.code(c) <= Char.code('z') || - Char.code(c) >= Char.code('A') && Char.code(c) <= Char.code('Z') + Ok(c) when buf.config.isPerlRegExp + && ( + Char.code(c) >= Char.code('a') && Char.code(c) <= Char.code('z') + || Char.code(c) >= Char.code('A') && Char.code(c) <= Char.code('Z') ) => { match (c) { 'p' => { @@ -2304,8 +2305,8 @@ let charMatcherIterated = (toMatch, max) => let subArraysEqual = (arr1, start1, arr2, start2, length) => { if ( - Array.length(arr1) - start1 < length || - Array.length(arr2) - start2 < length + Array.length(arr1) - start1 < length + || Array.length(arr2) - start2 < length ) { return false } @@ -2328,8 +2329,8 @@ let stringMatcher = (toMatch, len, next_m) => stack, ) => { if ({ - pos + len <= limit && - subArraysEqual( + pos + len <= limit + && subArraysEqual( buf.matchInputExploded, pos, String.explode(toMatch), @@ -2350,8 +2351,8 @@ let stringTailMatcher = (toMatch, len) => stack, ) => { if ({ - pos + len <= limit && - subArraysEqual( + pos + len <= limit + && subArraysEqual( buf.matchInputExploded, pos, String.explode(toMatch), @@ -2584,8 +2585,8 @@ let isWordChar = c => { let isWordBoundary = (buf, pos, start, limit, end) => { !( - (pos == start || !isWordChar(matchBufChar(buf, pos - 1))) == - (pos == end || !isWordChar(matchBufChar(buf, pos))) + (pos == start || !isWordChar(matchBufChar(buf, pos - 1))) + == (pos == end || !isWordChar(matchBufChar(buf, pos))) ) } @@ -2922,8 +2923,8 @@ let makeReferenceMatcher = eq => Some((refStart, refEnd)) => { let len = refEnd - refStart if ( - pos + len <= limit && - subArraysEqual( + pos + len <= limit + && subArraysEqual( buf.matchInputExploded, refStart, buf.matchInputExploded, @@ -3448,8 +3449,8 @@ let checkMustString = (ms, buf: MatchBuf, pos, endPos) => { None => true, Some(ms) => { let toCheck = if ( - pos == 0 && - endPos == Array.length(buf.matchInputExploded) + pos == 0 + && endPos == Array.length(buf.matchInputExploded) ) { buf.matchInput } else { @@ -3819,8 +3820,8 @@ let computeReplacement = ( } else { let c = replacementExploded[pos] if ( - Char.code('0') <= Char.code(c) && - Char.code(c) <= Char.code('9') + Char.code('0') <= Char.code(c) + && Char.code(c) <= Char.code('9') ) { dLoop(pos + 1, 10 * accum + (Char.code(c) - Char.code('0'))) } else { diff --git a/stdlib/runtime/atof/decimal.gr b/stdlib/runtime/atof/decimal.gr index 7e1c0882b6..038ea474ae 100644 --- a/stdlib/runtime/atof/decimal.gr +++ b/stdlib/runtime/atof/decimal.gr @@ -140,8 +140,8 @@ let trim = d => { let digits = WasmI32.fromGrain(d.digits) let mut numDigits = WasmI32.load(WasmI32.fromGrain(d.numDigits), 4n) while ( - numDigits != 0n && - WasmI32.eqz(WasmI32.load8U(digits + (numDigits - 1n), 8n)) + numDigits != 0n + && WasmI32.eqz(WasmI32.load8U(digits + (numDigits - 1n), 8n)) ) { numDigits -= 1n } @@ -173,8 +173,8 @@ provide let round = d => { let dpDigit = WasmI32.load8U(digits + dp, 8n) roundUp = dpDigit >= 5n if (dpDigit == 5n && dp + 1n == numDigits) { - roundUp = d.truncated || - dp != 0n && (1n & WasmI32.load8U(digits + dp - 1n, 8n)) != 0n + roundUp = d.truncated + || dp != 0n && (1n & WasmI32.load8U(digits + dp - 1n, 8n)) != 0n } } if (roundUp) { @@ -381,8 +381,8 @@ provide let leftShift = (d, shift) => { writeIndex -= 1n n = addWasmI64( n, - WasmI64.extendI32U(WasmI32.load8U(digits + readIndex, 8n)) << - WasmI64.extendI32U(shift) + WasmI64.extendI32U(WasmI32.load8U(digits + readIndex, 8n)) + << WasmI64.extendI32U(shift) ) let quotient = n / 10N let remainder = subWasmI64(n, 10N * quotient) diff --git a/stdlib/runtime/atof/lemire.gr b/stdlib/runtime/atof/lemire.gr index 6349da2ec0..ea9539ed58 100644 --- a/stdlib/runtime/atof/lemire.gr +++ b/stdlib/runtime/atof/lemire.gr @@ -203,11 +203,11 @@ provide let computeFloat = (exponent: WasmI64, mantissa: WasmI64) => { // // Or, we may fall between two floats: we are exactly halfway. if ( - WasmI64.leU(lo, 1N) && - q >= _MIN_EXPONENT_ROUND_TO_EVEN && - q <= _MAX_EXPONENT_ROUND_TO_EVEN && - (mantissa & 3N) == 1N && - mantissa << WasmI64.extendI32S({ + WasmI64.leU(lo, 1N) + && q >= _MIN_EXPONENT_ROUND_TO_EVEN + && q <= _MAX_EXPONENT_ROUND_TO_EVEN + && (mantissa & 3N) == 1N + && mantissa << WasmI64.extendI32S({ use WasmI32.{ (+), (-) } upperbit + 64n - _MANTISSA_EXPLICIT_BITS_32 - 3n }) == hi diff --git a/stdlib/runtime/atof/parse.gr b/stdlib/runtime/atof/parse.gr index 8f91f01194..580bbe2f83 100644 --- a/stdlib/runtime/atof/parse.gr +++ b/stdlib/runtime/atof/parse.gr @@ -419,16 +419,16 @@ let parseInfNan = s => { } if ( - len - i == 3n && - c1 == _CHAR_CODE_n && - c2 == _CHAR_CODE_a && - c3 == _CHAR_CODE_n + len - i == 3n + && c1 == _CHAR_CODE_n + && c2 == _CHAR_CODE_a + && c3 == _CHAR_CODE_n ) { Ok((fpNan(), negative)) } else if ( - c1 == _CHAR_CODE_i && - c2 == _CHAR_CODE_n && - c3 == _CHAR_CODE_f + c1 == _CHAR_CODE_i + && c2 == _CHAR_CODE_n + && c3 == _CHAR_CODE_f ) { if (len - i == 3n) { Ok((fpInf(), negative)) @@ -455,11 +455,11 @@ let parseInfNan = s => { } if ( - c4 == _CHAR_CODE_i && - c5 == _CHAR_CODE_n && - c6 == _CHAR_CODE_i && - c7 == _CHAR_CODE_t && - c8 == _CHAR_CODE_y + c4 == _CHAR_CODE_i + && c5 == _CHAR_CODE_n + && c6 == _CHAR_CODE_i + && c7 == _CHAR_CODE_t + && c8 == _CHAR_CODE_y ) { Ok((fpInf(), negative)) } else { @@ -486,10 +486,10 @@ provide let isFastPath = ( use WasmI32.{ (<=) } use WasmI64.{ (<<) } - _MIN_EXPONENT_FAST_PATH <= exponent && - exponent <= _MAX_EXPONENT_DISGUISED_FAST_PATH && - WasmI64.leU(mantissa, _MAX_MANTISSA_FAST_PATH) && - !manyDigits + _MIN_EXPONENT_FAST_PATH <= exponent + && exponent <= _MAX_EXPONENT_DISGUISED_FAST_PATH + && WasmI64.leU(mantissa, _MAX_MANTISSA_FAST_PATH) + && !manyDigits } @unsafe diff --git a/stdlib/runtime/atoi/parse.gr b/stdlib/runtime/atoi/parse.gr index fd5f057816..10c419488b 100644 --- a/stdlib/runtime/atoi/parse.gr +++ b/stdlib/runtime/atoi/parse.gr @@ -74,9 +74,9 @@ provide let parseInt = (string: String, radix: Number) => { let radix = WasmI32.fromGrain(radix) if ( - WasmI32.eqz(radix & Tags._GRAIN_NUMBER_TAG_MASK) || - radix < WasmI32.fromGrain(2) || - radix > WasmI32.fromGrain(36) + WasmI32.eqz(radix & Tags._GRAIN_NUMBER_TAG_MASK) + || radix < WasmI32.fromGrain(2) + || radix > WasmI32.fromGrain(36) ) { return Err(ParseIntInvalidRadix) } diff --git a/stdlib/runtime/bigint.gr b/stdlib/runtime/bigint.gr index bc2d94b29c..adc7aad4b3 100644 --- a/stdlib/runtime/bigint.gr +++ b/stdlib/runtime/bigint.gr @@ -222,8 +222,8 @@ let getHalfSize = ptr => { use WasmI32.{ (-), (<<), gtU as (>) } use WasmI64.{ (>>>) } if ( - size > 0n && - WasmI32.eqz(WasmI32.wrapI64(getLimb(ptr, size - 1n) >>> 32N)) + size > 0n + && WasmI32.eqz(WasmI32.wrapI64(getLimb(ptr, size - 1n) >>> 32N)) ) { // last half-limb is trailing zeros (size << 1n) - 1n @@ -798,8 +798,8 @@ provide let bigIntToString = (num: WasmI32, base: WasmI32) => { let bits = WasmI64.extendI32U(WasmI32.ctz(base)) let mask = (1N << bits) - 1N let numLimbs = getSize(num) - let totalBits = 64N * WasmI64.extendI32U(numLimbs) - - WasmI64.clz(getLimb(num, subWasmI32(numLimbs, 1n))) + let totalBits = 64N * WasmI64.extendI32U(numLimbs) + - WasmI64.clz(getLimb(num, subWasmI32(numLimbs, 1n))) let mut acc = 0N let mut accBits = 0N for (let mut i = 0n; i < numLimbs; i += 1n) { @@ -1230,8 +1230,8 @@ let unsignedMul = (num1: WasmI32, num2: WasmI32) => { let curHalfLimb = getHalfLimb(dest, j + i) let halfLimb1 = getHalfLimb(num1, i) use WasmI64.{ (+) } - tmp += WasmI64.extendI32U(curHalfLimb) + - WasmI64.extendI32U(halfLimb1) * WasmI64.extendI32U(halfLimb2) + tmp += WasmI64.extendI32U(curHalfLimb) + + WasmI64.extendI32U(halfLimb1) * WasmI64.extendI32U(halfLimb2) use WasmI32.{ (+) } setHalfLimb(dest, j + i, WasmI32.wrapI64(tmp)) tmp = tmp >>> 32N @@ -1285,8 +1285,8 @@ provide let shl = (num: WasmI32, places: WasmI32) => { let mut carry = 0N let a = places / 32n let b = places % 32n - let mask = ((1N << WasmI64.extendI32U(b)) - 1N) << - (64N - WasmI64.extendI32U(b)) + let mask = ((1N << WasmI64.extendI32U(b)) - 1N) + << (64N - WasmI64.extendI32U(b)) let result = init(numLimbs + a) setFlag(result, _IS_NEGATIVE, getFlag(num, _IS_NEGATIVE)) use WasmI32.{ (<<) } @@ -1855,8 +1855,8 @@ let division = ( r = WasmI32.load(result, 4n) Memory.free(result) if ( - flagIsSet(num1, _IS_NEGATIVE) && !flagIsSet(num2, _IS_NEGATIVE) || - !flagIsSet(num1, _IS_NEGATIVE) && flagIsSet(num2, _IS_NEGATIVE) + flagIsSet(num1, _IS_NEGATIVE) && !flagIsSet(num2, _IS_NEGATIVE) + || !flagIsSet(num1, _IS_NEGATIVE) && flagIsSet(num2, _IS_NEGATIVE) ) { // fix sign for negative div by positive & vice versa q = negateInPlace(q) @@ -1873,10 +1873,10 @@ let division = ( // convert truncated division to floor division // https://en.wikipedia.org/wiki/Modulo_operation if ( - divMod && - ( - flagIsSet(r, _IS_NEGATIVE) && !flagIsSet(num2, _IS_NEGATIVE) || - !flagIsSet(r, _IS_NEGATIVE) && flagIsSet(num2, _IS_NEGATIVE) + divMod + && ( + flagIsSet(r, _IS_NEGATIVE) && !flagIsSet(num2, _IS_NEGATIVE) + || !flagIsSet(r, _IS_NEGATIVE) && flagIsSet(num2, _IS_NEGATIVE) ) ) { let newr = add(r, num2) diff --git a/stdlib/runtime/compare.gr b/stdlib/runtime/compare.gr index 74af2b795b..030ec35a10 100644 --- a/stdlib/runtime/compare.gr +++ b/stdlib/runtime/compare.gr @@ -188,8 +188,8 @@ and compareHelp = (x, y) => { } else if (xtag == Tags._GRAIN_SHORTVAL_TAG_TYPE) { let shortValTag = x & Tags._GRAIN_GENERIC_SHORTVAL_TAG_MASK if ( - shortValTag == Tags._GRAIN_INT8_TAG_MASK || - shortValTag == Tags._GRAIN_INT16_TAG_MASK + shortValTag == Tags._GRAIN_INT8_TAG_MASK + || shortValTag == Tags._GRAIN_INT16_TAG_MASK ) { if (x < y) { -1 diff --git a/stdlib/runtime/equal.gr b/stdlib/runtime/equal.gr index f1c2869d56..66baedd218 100644 --- a/stdlib/runtime/equal.gr +++ b/stdlib/runtime/equal.gr @@ -174,8 +174,8 @@ let rec heapEqualHelp = (heapTag, xptr, yptr) => { } and equalHelp = (x, y) => { if ( - (x & Tags._GRAIN_GENERIC_TAG_MASK) != 0n && - (y & Tags._GRAIN_GENERIC_TAG_MASK) != 0n + (x & Tags._GRAIN_GENERIC_TAG_MASK) != 0n + && (y & Tags._GRAIN_GENERIC_TAG_MASK) != 0n ) { // Short circuit for non-pointer values x == y diff --git a/stdlib/runtime/numberUtils.gr b/stdlib/runtime/numberUtils.gr index 554678d4de..248645e230 100644 --- a/stdlib/runtime/numberUtils.gr +++ b/stdlib/runtime/numberUtils.gr @@ -730,17 +730,17 @@ provide let decimalCount32 = value => { if (WasmI32.ltU(value, 100n)) { 1n + (if (WasmI32.geU(value, 10n)) 1n else 0n) } else { - 3n + - (if (WasmI32.geU(value, 10000n)) 1n else 0n) + - (if (WasmI32.geU(value, 1000n)) 1n else 0n) + 3n + + (if (WasmI32.geU(value, 10000n)) 1n else 0n) + + (if (WasmI32.geU(value, 1000n)) 1n else 0n) } } else { if (WasmI32.ltU(value, 10000000n)) { 6n + (if (WasmI32.geU(value, 1000000n)) 1n else 0n) } else { - 8n + - (if (WasmI32.geU(value, 1000000000n)) 1n else 0n) + - (if (WasmI32.geU(value, 100000000n)) 1n else 0n) + 8n + + (if (WasmI32.geU(value, 1000000000n)) 1n else 0n) + + (if (WasmI32.geU(value, 100000000n)) 1n else 0n) } } } @@ -751,21 +751,21 @@ provide let decimalCount32 = value => { let decimalCount64High = value => { if (WasmI64.ltU(value, 1000000000000000N)) { if (WasmI64.ltU(value, 1000000000000N)) { - 10n + - (if (WasmI64.geU(value, 100000000000N)) 1n else 0n) + - (if (WasmI64.geU(value, 10000000000N)) 1n else 0n) + 10n + + (if (WasmI64.geU(value, 100000000000N)) 1n else 0n) + + (if (WasmI64.geU(value, 10000000000N)) 1n else 0n) } else { - 13n + - (if (WasmI64.geU(value, 100000000000000N)) 1n else 0n) + - (if (WasmI64.geU(value, 10000000000000N)) 1n else 0n) + 13n + + (if (WasmI64.geU(value, 100000000000000N)) 1n else 0n) + + (if (WasmI64.geU(value, 10000000000000N)) 1n else 0n) } } else { if (WasmI64.ltU(value, 100000000000000000N)) { 16n + (if (WasmI64.geU(value, 10000000000000000N)) 1n else 0n) } else { - 18n + - (if (WasmI64.geU(value, 0x8AC7230489E80000N)) 1n else 0n) + - (if (WasmI64.geU(value, 1000000000000000000N)) 1n else 0n) + 18n + + (if (WasmI64.geU(value, 0x8AC7230489E80000N)) 1n else 0n) + + (if (WasmI64.geU(value, 1000000000000000000N)) 1n else 0n) } } } @@ -778,8 +778,8 @@ let ulog_base = (num, base) => { WasmI32.divU( 63n - WasmI32.wrapI64(WasmI64.clz(num)), 31n - WasmI32.clz(base) - ) + - 1n + ) + + 1n } else { let b64 = WasmI64.extendI32U(base) let mut b = b64 @@ -1113,9 +1113,9 @@ provide let itoa64 = (value, radix) => { WasmI32.toGrain(out): String } } else if (radix == 16n) { - let decimals = ((63n - WasmI32.wrapI64(WasmI64.clz(value))) >>> 2n) + - 1n + - sign + let decimals = ((63n - WasmI32.wrapI64(WasmI64.clz(value))) >>> 2n) + + 1n + + sign let out = allocateString(decimals) utoa64_hex_core(out + 8n, value, decimals) WasmI32.toGrain(out): String @@ -1166,11 +1166,11 @@ let grisuRound = (buffer, len, delta, rest, ten_kappa, wp_w) => { let mut rest = rest use WasmI64.{ (+), (-) } while ( - WasmI64.ltU(rest, wp_w) && - WasmI64.geU(delta - rest, ten_kappa) && - ( - WasmI64.ltU(rest + ten_kappa, wp_w) || - WasmI64.gtU(wp_w - rest, rest + ten_kappa - wp_w) + WasmI64.ltU(rest, wp_w) + && WasmI64.geU(delta - rest, ten_kappa) + && ( + WasmI64.ltU(rest + ten_kappa, wp_w) + || WasmI64.gtU(wp_w - rest, rest + ten_kappa - wp_w) ) ) { use WasmI32.{ (-) } @@ -1273,8 +1273,8 @@ let genDigits = (buffer, w_frc, mp_frc, mp_exp, delta, sign) => { tmp, WasmI64.extendI32U( WasmI32.load(get_POWERS10() + shlWasmI32(kappa, 2n), 0n) - ) << - WasmI64.extendI32U(one_exp), + ) + << WasmI64.extendI32U(one_exp), wp_w_frc ) done = true @@ -1344,8 +1344,8 @@ let grisu2 = (value, buffer, sign) => { let m_norm = 1n + (if (frc == 0x0010000000000000N) 1n else 0n) let _frc_plus = frc_norm - let _frc_minus = subWasmI64(frc << WasmI64.extendI32U(m_norm), 1N) << - WasmI64.extendI32U(exp - m_norm - exp_norm) + let _frc_minus = subWasmI64(frc << WasmI64.extendI32U(m_norm), 1N) + << WasmI64.extendI32U(exp - m_norm - exp_norm) let _exp = exp_norm // get cached power diff --git a/stdlib/runtime/numbers.gr b/stdlib/runtime/numbers.gr index c6e45c632d..d9837b45b2 100644 --- a/stdlib/runtime/numbers.gr +++ b/stdlib/runtime/numbers.gr @@ -109,8 +109,8 @@ provide let isFloat = x => { provide let isInteger = x => { if (isBoxedNumber(x)) { let tag = WasmI32.load(x, 4n) - tag == Tags._GRAIN_INT64_BOXED_NUM_TAG || - tag == Tags._GRAIN_BIGINT_BOXED_NUM_TAG + tag == Tags._GRAIN_INT64_BOXED_NUM_TAG + || tag == Tags._GRAIN_BIGINT_BOXED_NUM_TAG } else { true } @@ -416,8 +416,8 @@ provide let coerceNumberToWasmF32 = (x: Number) => { }, t when t == Tags._GRAIN_RATIONAL_BOXED_NUM_TAG => { use WasmF32.{ (/) } - BI.toFloat32(boxedRationalNumerator(xVal)) / - BI.toFloat32(boxedRationalDenominator(xVal)) + BI.toFloat32(boxedRationalNumerator(xVal)) + / BI.toFloat32(boxedRationalDenominator(xVal)) }, t when t == Tags._GRAIN_FLOAT64_BOXED_NUM_TAG => { use WasmF64.{ (<), (>) } @@ -454,8 +454,8 @@ provide let coerceNumberToWasmF64 = (x: Number) => { }, t when t == Tags._GRAIN_RATIONAL_BOXED_NUM_TAG => { use WasmF64.{ (/) } - BI.toFloat64(boxedRationalNumerator(xVal)) / - BI.toFloat64(boxedRationalDenominator(xVal)) + BI.toFloat64(boxedRationalNumerator(xVal)) + / BI.toFloat64(boxedRationalDenominator(xVal)) }, t when t == Tags._GRAIN_FLOAT64_BOXED_NUM_TAG => { boxedFloat64Number(xVal) @@ -879,8 +879,8 @@ let numberAddSubSimpleHelp = (x, y, isSub) => { let xval64 = WasmI64.extendI32S(xval) let result = if (isSub) xval64 - yBoxedVal else xval64 + yBoxedVal if ( - yBoxedVal >= 0N && result < xval64 || - yBoxedVal < 0N && result > xval64 + yBoxedVal >= 0N && result < xval64 + || yBoxedVal < 0N && result > xval64 ) { // Overflow. Promote to BigInt let xBig = BI.makeWrappedInt32(xval) @@ -962,8 +962,8 @@ let numberAddSubInt64Help = (xval, y, isSub) => { let xval64 = xval let result = if (isSub) xval64 - yBoxedVal else xval64 + yBoxedVal if ( - yBoxedVal >= 0N && result < xval64 || - yBoxedVal < 0N && result > xval64 + yBoxedVal >= 0N && result < xval64 + || yBoxedVal < 0N && result > xval64 ) { // Overflow. Promote to BigInt let xBig = BI.makeWrappedInt64(xval64) @@ -1157,8 +1157,8 @@ provide let cmpRationals = (x, y) => { let yDenominator = boxedRationalDenominator(y) if ( - BI.cmp(xNumerator, yNumerator) == 0n && - BI.cmp(xDenominator, yDenominator) == 0n + BI.cmp(xNumerator, yNumerator) == 0n + && BI.cmp(xDenominator, yDenominator) == 0n ) { 0n } else { @@ -1739,8 +1739,8 @@ let cmpFloat = (x: WasmI32, y: WasmI32) => { throw InvariantViolation }, t when t == Tags._GRAIN_RATIONAL_BOXED_NUM_TAG => { - BI.toFloat64(boxedRationalNumerator(y)) / - BI.toFloat64(boxedRationalDenominator(y)) + BI.toFloat64(boxedRationalNumerator(y)) + / BI.toFloat64(boxedRationalDenominator(y)) }, t when t == Tags._GRAIN_FLOAT64_BOXED_NUM_TAG => { boxedFloat64Number(y) @@ -1809,9 +1809,9 @@ let cmpSmallInt = (x: WasmI32, y: WasmI32) => { use WasmF64.{ (<), (/) } // Rationals and ints are never considered equal if ( - WasmF64.convertI64S(xi) < - BI.toFloat64(boxedRationalNumerator(y)) / - BI.toFloat64(boxedRationalDenominator(y)) + WasmF64.convertI64S(xi) + < BI.toFloat64(boxedRationalNumerator(y)) + / BI.toFloat64(boxedRationalDenominator(y)) ) -1n else @@ -1832,8 +1832,8 @@ let cmpRational = (x: WasmI32, y: WasmI32) => { use WasmI32.{ (-) } if (isSimpleNumber(y)) { use WasmF64.{ (/), (<) } - let xf = BI.toFloat64(boxedRationalNumerator(x)) / - BI.toFloat64(boxedRationalDenominator(x)) + let xf = BI.toFloat64(boxedRationalNumerator(x)) + / BI.toFloat64(boxedRationalDenominator(x)) // Rationals and ints are never considered equal if (xf < WasmF64.convertI32S(untagSimple(y))) -1n else 1n } else { @@ -2426,8 +2426,8 @@ provide let coerceNumberToInt32 = (number: Number) => { provide let coerceNumberToInt64 = (number: Number) => { let x = WasmI32.fromGrain(number) let result = if ( - !isSimpleNumber(x) && - boxedNumberTag(x) == Tags._GRAIN_INT64_BOXED_NUM_TAG + !isSimpleNumber(x) + && boxedNumberTag(x) == Tags._GRAIN_INT64_BOXED_NUM_TAG ) { // avoid extra malloc and prevent x from being freed Memory.incRef(x) @@ -2514,8 +2514,8 @@ provide let coerceNumberToFloat32 = (number: Number) => { provide let coerceNumberToFloat64 = (number: Number) => { let x = WasmI32.fromGrain(number) let result = if ( - !isSimpleNumber(x) && - boxedNumberTag(x) == Tags._GRAIN_FLOAT64_BOXED_NUM_TAG + !isSimpleNumber(x) + && boxedNumberTag(x) == Tags._GRAIN_FLOAT64_BOXED_NUM_TAG ) { // avoid extra malloc and prevent x from being freed Memory.incRef(x) @@ -2709,9 +2709,9 @@ let convertInexactToExactHelp = x => { } else { let tag = boxedNumberTag(x) if ( - tag == Tags._GRAIN_INT64_BOXED_NUM_TAG || - tag == Tags._GRAIN_BIGINT_BOXED_NUM_TAG || - tag == Tags._GRAIN_RATIONAL_BOXED_NUM_TAG + tag == Tags._GRAIN_INT64_BOXED_NUM_TAG + || tag == Tags._GRAIN_BIGINT_BOXED_NUM_TAG + || tag == Tags._GRAIN_RATIONAL_BOXED_NUM_TAG ) { Memory.incRef(x) x @@ -3054,10 +3054,10 @@ provide let (**) = (base, power) => { return 1 } else if ( // Either Argument is Nan - ix > 0x7FF00000n || - ix == 0x7FF00000n && lx != 0n || - iy > 0x7FF00000n || - iy == 0x7FF00000n && ly != 0n + ix > 0x7FF00000n + || ix == 0x7FF00000n && lx != 0n + || iy > 0x7FF00000n + || iy == 0x7FF00000n && ly != 0n ) { use WasmF64.{ (+) } return WasmI32.toGrain(newFloat64(x + y)): Number @@ -3223,8 +3223,8 @@ provide let (**) = (base, power) => { t_h = WasmF64.reinterpretI64( WasmI64.extendI32S( (ix >> 1n | 0x20000000n) + 0x00080000n + shlWasmI64(k, 18n) - ) << - 32N + ) + << 32N ) use WasmF64.{ (+) } t_l = ax - (t_h - bp) @@ -3313,8 +3313,8 @@ provide let (**) = (base, power) => { r = z * t1 / (t1 - 2.0W) - (w + z * w) z = 1.0W - (r - z) use WasmI32.{ (+) } - let j = WasmI32.wrapI64(shrSWasmI64(WasmI64.reinterpretF64(z), 32N)) + - (n << 20n) + let j = WasmI32.wrapI64(shrSWasmI64(WasmI64.reinterpretF64(z), 32N)) + + (n << 20n) if (j >> 20n <= 0n) { z = scalbn(z, n) } else { diff --git a/stdlib/runtime/string.gr b/stdlib/runtime/string.gr index 630df21284..9d6c759608 100644 --- a/stdlib/runtime/string.gr +++ b/stdlib/runtime/string.gr @@ -333,9 +333,10 @@ let escape = (ptr, isString) => { for (let mut i = 0n; i < size; i += 1n) { let byte = WasmI32.load8U(ptr + i, startOffset) if ( - byte >= _SEQ_B && byte <= _SEQ_R || /* b, f, n, r, t, v */ - byte == _SEQ_SLASH || - byte == _SEQ_QUOTE + byte >= _SEQ_B && byte <= _SEQ_R + || /* b, f, n, r, t, v */ + byte == _SEQ_SLASH + || byte == _SEQ_QUOTE ) { newSize += 2n } else { @@ -351,9 +352,10 @@ let escape = (ptr, isString) => { for (let mut i = 0n; i < size; i += 1n) { let byte = WasmI32.load8U(ptr + i, startOffset) if ( - byte >= _SEQ_B && byte <= _SEQ_R || /* b, f, n, r, t, v */ - byte == _SEQ_SLASH || - byte == _SEQ_QUOTE + byte >= _SEQ_B && byte <= _SEQ_R + || /* b, f, n, r, t, v */ + byte == _SEQ_SLASH + || byte == _SEQ_QUOTE ) { WasmI32.store8(escapedString + j, _SEQ_SLASH, stringOffset) j += 1n @@ -700,13 +702,13 @@ and toStringHelp = (grainValue, extraIndents, toplevel, cycles) => { escapeChar(string) } } else if ( - shortValTag == Tags._GRAIN_INT8_SHORTVAL_TAG || - shortValTag == Tags._GRAIN_INT16_SHORTVAL_TAG + shortValTag == Tags._GRAIN_INT8_SHORTVAL_TAG + || shortValTag == Tags._GRAIN_INT16_SHORTVAL_TAG ) { NumberUtils.itoa32(shortVal, 10n) } else if ( - shortValTag == Tags._GRAIN_UINT8_SHORTVAL_TAG || - shortValTag == Tags._GRAIN_UINT16_SHORTVAL_TAG + shortValTag == Tags._GRAIN_UINT8_SHORTVAL_TAG + || shortValTag == Tags._GRAIN_UINT16_SHORTVAL_TAG ) { NumberUtils.utoa32(shortVal, 10n) } else { diff --git a/stdlib/string.gr b/stdlib/string.gr index f829b357ae..29e44be36c 100644 --- a/stdlib/string.gr +++ b/stdlib/string.gr @@ -770,8 +770,8 @@ provide let contains = (search: String, string: String) => { j += k } else { if ( - Memory.compare(searchPtr + 2n, stringPtr + j + 2n, m - 2n) == 0n && - WasmI32.load8U(searchPtr, 0n) == WasmI32.load8U(stringPtr + j, 0n) + Memory.compare(searchPtr + 2n, stringPtr + j + 2n, m - 2n) == 0n + && WasmI32.load8U(searchPtr, 0n) == WasmI32.load8U(stringPtr + j, 0n) ) { return true } @@ -1516,34 +1516,34 @@ let bytesHaveBom = (bytes: Bytes, encoding: Encoding, start: WasmI32) => { let ptr = ptr + start let result = match (encoding) { UTF8 => { - bytesSize >= 3n && - WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xEFn && - WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xBBn && - WasmI32.load8U(ptr + 2n, _BYTES_OFFSET) == 0xBFn + bytesSize >= 3n + && WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xEFn + && WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xBBn + && WasmI32.load8U(ptr + 2n, _BYTES_OFFSET) == 0xBFn }, UTF16_BE => { - bytesSize >= 2n && - WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xFEn && - WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xFFn + bytesSize >= 2n + && WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xFEn + && WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xFFn }, UTF16_LE => { - bytesSize >= 2n && - WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xFFn && - WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xFEn + bytesSize >= 2n + && WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xFFn + && WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xFEn }, UTF32_BE => { - bytesSize >= 4n && - WasmI32.load8U(ptr, _BYTES_OFFSET) == 0x00n && - WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0x00n && - WasmI32.load8U(ptr + 2n, _BYTES_OFFSET) == 0xFEn && - WasmI32.load8U(ptr + 3n, _BYTES_OFFSET) == 0xFFn + bytesSize >= 4n + && WasmI32.load8U(ptr, _BYTES_OFFSET) == 0x00n + && WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0x00n + && WasmI32.load8U(ptr + 2n, _BYTES_OFFSET) == 0xFEn + && WasmI32.load8U(ptr + 3n, _BYTES_OFFSET) == 0xFFn }, UTF32_LE => { - bytesSize >= 4n && - WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xFFn && - WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xFEn && - WasmI32.load8U(ptr + 2n, _BYTES_OFFSET) == 0x00n && - WasmI32.load8U(ptr + 3n, _BYTES_OFFSET) == 0x00n + bytesSize >= 4n + && WasmI32.load8U(ptr, _BYTES_OFFSET) == 0xFFn + && WasmI32.load8U(ptr + 1n, _BYTES_OFFSET) == 0xFEn + && WasmI32.load8U(ptr + 2n, _BYTES_OFFSET) == 0x00n + && WasmI32.load8U(ptr + 3n, _BYTES_OFFSET) == 0x00n }, } @@ -1596,8 +1596,8 @@ let decodedLength = ( let ret = if (ptr + 2n >= end) { throw MalformedUnicode } else { - let nextCodeWord = WasmI32.load8U(ptr, 2n) << 8n | - WasmI32.load8U(ptr, 3n) + let nextCodeWord = WasmI32.load8U(ptr, 2n) << 8n + | WasmI32.load8U(ptr, 3n) if (nextCodeWord < 0xDC00n || nextCodeWord > 0xDFFFn) { // high surrogate without low surrogate throw MalformedUnicode @@ -1637,8 +1637,8 @@ let decodedLength = ( let ret = if (ptr + 2n >= end) { throw MalformedUnicode } else { - let nextCodeWord = WasmI32.load8U(ptr, 3n) << 8n | - WasmI32.load8U(ptr, 2n) + let nextCodeWord = WasmI32.load8U(ptr, 3n) << 8n + | WasmI32.load8U(ptr, 2n) if (nextCodeWord < 0xDC00n || nextCodeWord > 0xDFFFn) { // high surrogate without low surrogate throw MalformedUnicode @@ -1676,10 +1676,10 @@ let decodedLength = ( let mut ptr = start let mut count = 0n while (ptr < end) { - let codeWord = WasmI32.load8U(ptr, 0n) << 24n | - WasmI32.load8U(ptr, 1n) << 16n | - WasmI32.load8U(ptr, 2n) << 8n | - WasmI32.load8U(ptr, 3n) + let codeWord = WasmI32.load8U(ptr, 0n) << 24n + | WasmI32.load8U(ptr, 1n) << 16n + | WasmI32.load8U(ptr, 2n) << 8n + | WasmI32.load8U(ptr, 3n) ptr += 4n if (codeWord <= 0x007Fn) { count += 1n @@ -1702,10 +1702,10 @@ let decodedLength = ( let mut ptr = start let mut count = 0n while (ptr < end) { - let codeWord = WasmI32.load8U(ptr, 3n) << 24n | - WasmI32.load8U(ptr, 2n) << 16n | - WasmI32.load8U(ptr, 1n) << 8n | - WasmI32.load8U(ptr, 0n) + let codeWord = WasmI32.load8U(ptr, 3n) << 24n + | WasmI32.load8U(ptr, 2n) << 16n + | WasmI32.load8U(ptr, 1n) << 8n + | WasmI32.load8U(ptr, 0n) ptr += 4n if (codeWord <= 0x007Fn) { count += 1n @@ -1784,16 +1784,16 @@ let decodeRangeHelp = ( // NOTE: Because the size check passed, we know the string is well-formed let end = bytesPtr + bytesSize while (bytesPtr < end) { - let w1 = WasmI32.load8U(bytesPtr, 0n) << 8n | - WasmI32.load8U(bytesPtr, 1n) + let w1 = WasmI32.load8U(bytesPtr, 0n) << 8n + | WasmI32.load8U(bytesPtr, 1n) let codeWord = if (w1 >= 0xD800n && w1 <= 0xDBFFn) { // high surrogate. next character is low srurrogate let w1 = (w1 & 0x03FFn) << 10n let w2 = ( - WasmI32.load8U(bytesPtr, 2n) << 8n | - WasmI32.load8U(bytesPtr, 3n) - ) & - 0x03FFn + WasmI32.load8U(bytesPtr, 2n) << 8n + | WasmI32.load8U(bytesPtr, 3n) + ) + & 0x03FFn let codeWord = w1 + w2 + 0x10000n // no problems, so go past both code words bytesPtr += 4n @@ -1809,16 +1809,16 @@ let decodeRangeHelp = ( // NOTE: Because the size check passed, we know the string is well-formed let end = bytesPtr + bytesSize while (bytesPtr < end) { - let w1 = WasmI32.load8U(bytesPtr, 1n) << 8n | - WasmI32.load8U(bytesPtr, 0n) + let w1 = WasmI32.load8U(bytesPtr, 1n) << 8n + | WasmI32.load8U(bytesPtr, 0n) let codeWord = if (w1 >= 0xD800n && w1 <= 0xDBFFn) { // high surrogate. next character is low srurrogate let w1 = (w1 & 0x03FFn) << 10n let w2 = ( - WasmI32.load8U(bytesPtr, 3n) << 8n | - WasmI32.load8U(bytesPtr, 2n) - ) & - 0x03FFn + WasmI32.load8U(bytesPtr, 3n) << 8n + | WasmI32.load8U(bytesPtr, 2n) + ) + & 0x03FFn //let uPrime = codePoint - 0x10000n //let w1 = ((uPrime & 0b11111111110000000000n) >>> 10n) + 0xD800n // High surrogate //let w2 = (uPrime & 0b00000000001111111111n) + 0xDC00n // Low surrogate @@ -1836,10 +1836,10 @@ let decodeRangeHelp = ( UTF32_BE => { let end = bytesPtr + bytesSize while (bytesPtr < end) { - let codeWord = WasmI32.load8U(bytesPtr, 0n) << 24n | - WasmI32.load8U(bytesPtr, 1n) << 16n | - WasmI32.load8U(bytesPtr, 2n) << 8n | - WasmI32.load8U(bytesPtr, 3n) + let codeWord = WasmI32.load8U(bytesPtr, 0n) << 24n + | WasmI32.load8U(bytesPtr, 1n) << 16n + | WasmI32.load8U(bytesPtr, 2n) << 8n + | WasmI32.load8U(bytesPtr, 3n) bytesPtr += 4n strPtr += writeUtf8CodePoint(strPtr, codeWord) } @@ -1847,10 +1847,10 @@ let decodeRangeHelp = ( UTF32_LE => { let end = bytesPtr + bytesSize while (bytesPtr < end) { - let codeWord = WasmI32.load8U(bytesPtr, 3n) << 24n | - WasmI32.load8U(bytesPtr, 2n) << 16n | - WasmI32.load8U(bytesPtr, 1n) << 8n | - WasmI32.load8U(bytesPtr, 0n) + let codeWord = WasmI32.load8U(bytesPtr, 3n) << 24n + | WasmI32.load8U(bytesPtr, 2n) << 16n + | WasmI32.load8U(bytesPtr, 1n) << 8n + | WasmI32.load8U(bytesPtr, 0n) bytesPtr += 4n strPtr += writeUtf8CodePoint(strPtr, codeWord) } @@ -2184,7 +2184,8 @@ let trimString = (stringPtr: WasmI32, byteLength: WasmI32, fromEnd: Bool) => { // TODO(#661): Use unicode whitespace property and unicode line terminator if (!fromEnd) { if ( - byte == 0xEFn && // Check for the first BOM byte + byte == 0xEFn + && // Check for the first BOM byte // Check for the full BOM codepoint, 0xEFBBBF. Bytes are reversed because wasm is little-endian WasmI32.load(stringPtr, i - 1n) >>> 8n == 0xBFBBEFn ) { @@ -2194,7 +2195,8 @@ let trimString = (stringPtr: WasmI32, byteLength: WasmI32, fromEnd: Bool) => { } } else { if ( - byte == 0xBFn && // Check for the last BOM byte + byte == 0xBFn + && // Check for the last BOM byte // Check for the full BOM codepoint, 0xEFBBBF. Bytes are reversed because wasm is little-endian WasmI32.load(stringPtr, i - 3n) >>> 8n == 0xBFBBEFn ) { @@ -2204,12 +2206,18 @@ let trimString = (stringPtr: WasmI32, byteLength: WasmI32, fromEnd: Bool) => { } } if ( - byte != 0x20n && // Space - byte != 0x0Dn && // LF - byte != 0x0An && // CR - byte != 0x09n && // Tab - byte != 0x0Bn && // LINE TABULATION - byte != 0x0Cn && // FORM FEED (FF) + byte != 0x20n + && // Space + byte != 0x0Dn + && // LF + byte != 0x0An + && // CR + byte != 0x09n + && // Tab + byte != 0x0Bn + && // LINE TABULATION + byte != 0x0Cn + && // FORM FEED (FF) byte != 0xA0n // No Break Space ) { break diff --git a/stdlib/uri.gr b/stdlib/uri.gr index 5f198e9979..962bcb686a 100644 --- a/stdlib/uri.gr +++ b/stdlib/uri.gr @@ -82,18 +82,18 @@ provide enum EncodeSet { let isHexDigit = char => { use Char.{ (<=), (>=) } - Char.isAsciiDigit(char) || - char >= 'A' && char <= 'F' || - char >= 'a' && char <= 'f' + Char.isAsciiDigit(char) + || char >= 'A' && char <= 'F' + || char >= 'a' && char <= 'f' } let isUnreservedChar = char => { - Char.isAsciiDigit(char) || - Char.isAsciiAlpha(char) || - char == '-' || - char == '.' || - char == '_' || - char == '~' + Char.isAsciiDigit(char) + || Char.isAsciiAlpha(char) + || char == '-' + || char == '.' + || char == '_' + || char == '~' } let isSubDelim = char => { @@ -189,8 +189,12 @@ let isValidEncoding = str => { let len = Array.length(chars) for (let mut i = 0; i < len; i += 1) { if ( - chars[i] == '%' && - (i >= len - 2 || !isHexDigit(chars[i + 1]) || !isHexDigit(chars[i + 2])) + chars[i] == '%' + && ( + i >= len - 2 + || !isHexDigit(chars[i + 1]) + || !isHexDigit(chars[i + 2]) + ) ) { return false } @@ -1082,12 +1086,12 @@ provide let isAbsolute = uri => uri.scheme != None provide let toString = uri => { let optStr = (opt, display) => Option.mapWithDefault(display, "", opt) - optStr(uri.scheme, s => s ++ ":") ++ - optStr(uri.host, (_) => "//") ++ - optStr(uri.userinfo, u => u ++ "@") ++ - optStr(uri.host, identity) ++ - optStr(uri.port, p => ":" ++ toString(p)) ++ - uri.path ++ - optStr(uri.query, q => "?" ++ q) ++ - optStr(uri.fragment, f => "#" ++ f) + optStr(uri.scheme, s => s ++ ":") + ++ optStr(uri.host, (_) => "//") + ++ optStr(uri.userinfo, u => u ++ "@") + ++ optStr(uri.host, identity) + ++ optStr(uri.port, p => ":" ++ toString(p)) + ++ uri.path + ++ optStr(uri.query, q => "?" ++ q) + ++ optStr(uri.fragment, f => "#" ++ f) } diff --git a/stdlib/wasi/file.gr b/stdlib/wasi/file.gr index 53536b2433..88a6116068 100644 --- a/stdlib/wasi/file.gr +++ b/stdlib/wasi/file.gr @@ -718,8 +718,8 @@ provide let fdPrestatGet = (fd: FileDescriptor) => { } if ( - prefixLen > 0n && - WasmI32.eqz(WasmI32.load8U(prefix + prefixLen - 1n, 8n)) + prefixLen > 0n + && WasmI32.eqz(WasmI32.load8U(prefix + prefixLen - 1n, 8n)) ) { // in uvwasi environments the string is null-terminated and the size is reported including it // https://github.com/grain-lang/grain/issues/1818 @@ -1890,8 +1890,8 @@ let stripPrefixes = (path: String) => { pathPtr += 1n pathLen -= 1n } else if ( - WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT && - WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH + WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT + && WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH ) { pathPtr += 2n pathLen -= 2n @@ -1974,8 +1974,8 @@ let rec findPath = (path, pathLen, preopens, bestMatch) => { } let bestMatch = if ( - (!hasBestMatch || pathLen > untagSimpleNumber(matchLen)) && - prefixMatches(prefix, prefixLen, path, pathLen) + (!hasBestMatch || pathLen > untagSimpleNumber(matchLen)) + && prefixMatches(prefix, prefixLen, path, pathLen) ) { Some(preopen) } else { @@ -2047,19 +2047,19 @@ let makeAbsolute = (path: String) => { // pointing at the current dirextory if ( - pathLen == 0n || - pathLen == 1n && WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT || - pathLen == 2n && - WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT && - WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH + pathLen == 0n + || pathLen == 1n && WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT + || pathLen == 2n + && WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT + && WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH ) { return cwd } // strip leading ./ if ( - WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT && - WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH + WasmI32.load8U(pathPtr, 0n) == _CHAR_DOT + && WasmI32.load8U(pathPtr, 1n) == _CHAR_SLASH ) { pathPtr += 2n pathLen -= 2n