From 39023329229279b6eb0ddfd4879d15ad9644375e Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Mon, 15 Jun 2026 11:28:11 +0200 Subject: [PATCH] grammar: rework whitespace handling The grammar needs to be fixed to match Parse.zig's "operator has whitespace on one side but not the other" error, which is implemented in Parse.zig using a constant lookbehind of 1. However, standard PEG does not support lookbehind, which means our approach to handling whitespace needs to be reworked. Moving the `skip` non-terminal to be processed before each "token" in the grammar rather than afterwards makes it possible to cleanly match the Parse.zig operator whitespace handling, which will be implemented in the next commit. This commit is purely a refactor, no functional changes are intended. --- doc/langref/grammar.peg | 242 +++++++------- lib/std/zig/parser_generated_oracle.zig | 418 +++++++++++++----------- 2 files changed, 347 insertions(+), 313 deletions(-) diff --git a/doc/langref/grammar.peg b/doc/langref/grammar.peg index 570da9b37ee869770ee5bc3a8ce856f2cc782949..b356bee35cf543efe127e80fc6fb79da53e08d84 100644 --- a/doc/langref/grammar.peg +++ b/doc/langref/grammar.peg @@ -1,4 +1,4 @@ -Root <- skip ContainerMembers eof +Root <- ContainerMembers skip eof # *** Top level *** ContainerMembers <- container_doc_comment? ContainerDeclaration* (ContainerField COMMA)* (ContainerField / ContainerDeclaration*) @@ -430,8 +430,8 @@ string_char <- '\\"' / !["] non_control_utf8 -container_doc_comment <- ('//!' non_control_utf8* newline skip)+ -doc_comment <- ('///' non_control_utf8* newline skip)+ +container_doc_comment <- (skip '//!' non_control_utf8* newline)+ +doc_comment <- (skip '///' non_control_utf8* newline)+ line_comment <- '//' ![!/] non_control_utf8* newline / '////' non_control_utf8* newline @@ -439,137 +439,137 @@ line_string <- '\\\\' non_control_utf8* newline newline <- "\n" / "\r\n" / eof skip <- ([ \n\t\r] / line_comment)* -CHAR_LITERAL <- ['] char_char* ['] skip +CHAR_LITERAL <- skip ['] char_char* ['] digit <- [_0-9A-DF-OQ-Za-df-oq-z] digit_int <- digit / [eEpP] digit_float <- digit / [eEpP] [-+]? NUMBERLITERAL - <- [0-9] digit_int* '.' digit_float+ skip - / [0-9] digit_float* skip + <- skip [0-9] digit_int* '.' digit_float+ + / skip [0-9] digit_float* -STRINGLITERALSINGLE <- ["] string_char* ["] skip +STRINGLITERALSINGLE <- skip ["] string_char* ["] STRINGLITERAL <- STRINGLITERALSINGLE - / (line_string skip)+ + / (skip line_string)+ IDENTIFIER - <- !keyword [A-Za-z_] [A-Za-z0-9_]* skip - / '@' STRINGLITERALSINGLE -BUILTINIDENTIFIER <- '@'[A-Za-z_][A-Za-z0-9_]* skip + <- skip !keyword [A-Za-z_] [A-Za-z0-9_]* + / skip '@' STRINGLITERALSINGLE +BUILTINIDENTIFIER <- skip '@'[A-Za-z_][A-Za-z0-9_]* -AMPERSAND <- '&' ![=] skip -AMPERSANDEQUAL <- '&=' skip -ASTERISK <- '*' ![%=|] skip -ASTERISKEQUAL <- '*=' skip -ASTERISKPERCENT <- '*%' ![=] skip -ASTERISKPERCENTEQUAL <- '*%=' skip -ASTERISKPIPE <- '*|' ![=] skip -ASTERISKPIPEEQUAL <- '*|=' skip -CARET <- '^' ![=] skip -CARETEQUAL <- '^=' skip -COLON <- ':' skip -COMMA <- ',' skip -DOT <- '.' ![*.?] skip -DOT2 <- '..' ![.] skip -DOT3 <- '...' skip -DOTASTERISK <- '.*' skip -DOTQUESTIONMARK <- '.?' skip -EQUAL <- '=' ![>=] skip -EQUALEQUAL <- '==' skip -EQUALRARROW <- '=>' skip -EXCLAMATIONMARK <- '!' ![=] skip -EXCLAMATIONMARKEQUAL <- '!=' skip -LARROW <- '<' ![<=] skip -LARROW2 <- '<<' ![=|] skip -LARROW2EQUAL <- '<<=' skip -LARROW2PIPE <- '<<|' ![=] skip -LARROW2PIPEEQUAL <- '<<|=' skip -LARROWEQUAL <- '<=' skip -LBRACE <- '{' skip -LBRACKET <- '[' skip -LPAREN <- '(' skip -MINUS <- '-' ![%=>|] skip -MINUSEQUAL <- '-=' skip -MINUSPERCENT <- '-%' ![=] skip -MINUSPERCENTEQUAL <- '-%=' skip -MINUSPIPE <- '-|' ![=] skip -MINUSPIPEEQUAL <- '-|=' skip -MINUSRARROW <- '->' skip -PERCENT <- '%' ![=] skip -PERCENTEQUAL <- '%=' skip -PIPE <- '|' ![|=] skip -PIPE2 <- '||' skip -PIPEEQUAL <- '|=' skip -PLUS <- '+' ![%+=|] skip -PLUS2 <- '++' skip -PLUSEQUAL <- '+=' skip -PLUSPERCENT <- '+%' ![=] skip -PLUSPERCENTEQUAL <- '+%=' skip -PLUSPIPE <- '+|' ![=] skip -PLUSPIPEEQUAL <- '+|=' skip -LETTERC <- 'c' skip -QUESTIONMARK <- '?' skip -RARROW <- '>' ![>=] skip -RARROW2 <- '>>' ![=] skip -RARROW2EQUAL <- '>>=' skip -RARROWEQUAL <- '>=' skip -RBRACE <- '}' skip -RBRACKET <- ']' skip -RPAREN <- ')' skip -SEMICOLON <- ';' skip -SLASH <- '/' ![=] skip -SLASHEQUAL <- '/=' skip -TILDE <- '~' skip +AMPERSAND <- skip '&' ![=] +AMPERSANDEQUAL <- skip '&=' +ASTERISK <- skip '*' ![%=|] +ASTERISKEQUAL <- skip '*=' +ASTERISKPERCENT <- skip '*%' ![=] +ASTERISKPERCENTEQUAL <- skip '*%=' +ASTERISKPIPE <- skip '*|' ![=] +ASTERISKPIPEEQUAL <- skip '*|=' +CARET <- skip '^' ![=] +CARETEQUAL <- skip '^=' +COLON <- skip ':' +COMMA <- skip ',' +DOT <- skip '.' ![*.?] +DOT2 <- skip '..' ![.] +DOT3 <- skip '...' +DOTASTERISK <- skip '.*' +DOTQUESTIONMARK <- skip '.?' +EQUAL <- skip '=' ![>=] +EQUALEQUAL <- skip '==' +EQUALRARROW <- skip '=>' +EXCLAMATIONMARK <- skip '!' ![=] +EXCLAMATIONMARKEQUAL <- skip '!=' +LARROW <- skip '<' ![<=] +LARROW2 <- skip '<<' ![=|] +LARROW2EQUAL <- skip '<<=' +LARROW2PIPE <- skip '<<|' ![=] +LARROW2PIPEEQUAL <- skip '<<|=' +LARROWEQUAL <- skip '<=' +LBRACE <- skip '{' +LBRACKET <- skip '[' +LPAREN <- skip '(' +MINUS <- skip '-' ![%=>|] +MINUSEQUAL <- skip '-=' +MINUSPERCENT <- skip '-%' ![=] +MINUSPERCENTEQUAL <- skip '-%=' +MINUSPIPE <- skip '-|' ![=] +MINUSPIPEEQUAL <- skip '-|=' +MINUSRARROW <- skip '->' +PERCENT <- skip '%' ![=] +PERCENTEQUAL <- skip '%=' +PIPE <- skip '|' ![|=] +PIPE2 <- skip '||' +PIPEEQUAL <- skip '|=' +PLUS <- skip '+' ![%+=|] +PLUS2 <- skip '++' +PLUSEQUAL <- skip '+=' +PLUSPERCENT <- skip '+%' ![=] +PLUSPERCENTEQUAL <- skip '+%=' +PLUSPIPE <- skip '+|' ![=] +PLUSPIPEEQUAL <- skip '+|=' +LETTERC <- skip 'c' +QUESTIONMARK <- skip '?' +RARROW <- skip '>' ![>=] +RARROW2 <- skip '>>' ![=] +RARROW2EQUAL <- skip '>>=' +RARROWEQUAL <- skip '>=' +RBRACE <- skip '}' +RBRACKET <- skip ']' +RPAREN <- skip ')' +SEMICOLON <- skip ';' +SLASH <- skip '/' ![=] +SLASHEQUAL <- skip '/=' +TILDE <- skip '~' -end_of_word <- ![a-zA-Z0-9_] skip -KEYWORD_addrspace <- 'addrspace' end_of_word -KEYWORD_align <- 'align' end_of_word -KEYWORD_allowzero <- 'allowzero' end_of_word -KEYWORD_and <- 'and' end_of_word -KEYWORD_anyframe <- 'anyframe' end_of_word -KEYWORD_anytype <- 'anytype' end_of_word -KEYWORD_asm <- 'asm' end_of_word -KEYWORD_break <- 'break' end_of_word -KEYWORD_callconv <- 'callconv' end_of_word -KEYWORD_catch <- 'catch' end_of_word -KEYWORD_comptime <- 'comptime' end_of_word -KEYWORD_const <- 'const' end_of_word -KEYWORD_continue <- 'continue' end_of_word -KEYWORD_defer <- 'defer' end_of_word -KEYWORD_else <- 'else' end_of_word -KEYWORD_enum <- 'enum' end_of_word -KEYWORD_errdefer <- 'errdefer' end_of_word -KEYWORD_error <- 'error' end_of_word -KEYWORD_export <- 'export' end_of_word -KEYWORD_extern <- 'extern' end_of_word -KEYWORD_fn <- 'fn' end_of_word -KEYWORD_for <- 'for' end_of_word -KEYWORD_if <- 'if' end_of_word -KEYWORD_inline <- 'inline' end_of_word -KEYWORD_noalias <- 'noalias' end_of_word -KEYWORD_nosuspend <- 'nosuspend' end_of_word -KEYWORD_noinline <- 'noinline' end_of_word -KEYWORD_opaque <- 'opaque' end_of_word -KEYWORD_or <- 'or' end_of_word -KEYWORD_orelse <- 'orelse' end_of_word -KEYWORD_packed <- 'packed' end_of_word -KEYWORD_pub <- 'pub' end_of_word -KEYWORD_resume <- 'resume' end_of_word -KEYWORD_return <- 'return' end_of_word -KEYWORD_linksection <- 'linksection' end_of_word -KEYWORD_struct <- 'struct' end_of_word -KEYWORD_suspend <- 'suspend' end_of_word -KEYWORD_switch <- 'switch' end_of_word -KEYWORD_test <- 'test' end_of_word -KEYWORD_threadlocal <- 'threadlocal' end_of_word -KEYWORD_try <- 'try' end_of_word -KEYWORD_union <- 'union' end_of_word -KEYWORD_unreachable <- 'unreachable' end_of_word -KEYWORD_var <- 'var' end_of_word -KEYWORD_volatile <- 'volatile' end_of_word -KEYWORD_while <- 'while' end_of_word +end_of_word <- ![a-zA-Z0-9_] +KEYWORD_addrspace <- skip 'addrspace' end_of_word +KEYWORD_align <- skip 'align' end_of_word +KEYWORD_allowzero <- skip 'allowzero' end_of_word +KEYWORD_and <- skip 'and' end_of_word +KEYWORD_anyframe <- skip 'anyframe' end_of_word +KEYWORD_anytype <- skip 'anytype' end_of_word +KEYWORD_asm <- skip 'asm' end_of_word +KEYWORD_break <- skip 'break' end_of_word +KEYWORD_callconv <- skip 'callconv' end_of_word +KEYWORD_catch <- skip 'catch' end_of_word +KEYWORD_comptime <- skip 'comptime' end_of_word +KEYWORD_const <- skip 'const' end_of_word +KEYWORD_continue <- skip 'continue' end_of_word +KEYWORD_defer <- skip 'defer' end_of_word +KEYWORD_else <- skip 'else' end_of_word +KEYWORD_enum <- skip 'enum' end_of_word +KEYWORD_errdefer <- skip 'errdefer' end_of_word +KEYWORD_error <- skip 'error' end_of_word +KEYWORD_export <- skip 'export' end_of_word +KEYWORD_extern <- skip 'extern' end_of_word +KEYWORD_fn <- skip 'fn' end_of_word +KEYWORD_for <- skip 'for' end_of_word +KEYWORD_if <- skip 'if' end_of_word +KEYWORD_inline <- skip 'inline' end_of_word +KEYWORD_noalias <- skip 'noalias' end_of_word +KEYWORD_nosuspend <- skip 'nosuspend' end_of_word +KEYWORD_noinline <- skip 'noinline' end_of_word +KEYWORD_opaque <- skip 'opaque' end_of_word +KEYWORD_or <- skip 'or' end_of_word +KEYWORD_orelse <- skip 'orelse' end_of_word +KEYWORD_packed <- skip 'packed' end_of_word +KEYWORD_pub <- skip 'pub' end_of_word +KEYWORD_resume <- skip 'resume' end_of_word +KEYWORD_return <- skip 'return' end_of_word +KEYWORD_linksection <- skip 'linksection' end_of_word +KEYWORD_struct <- skip 'struct' end_of_word +KEYWORD_suspend <- skip 'suspend' end_of_word +KEYWORD_switch <- skip 'switch' end_of_word +KEYWORD_test <- skip 'test' end_of_word +KEYWORD_threadlocal <- skip 'threadlocal' end_of_word +KEYWORD_try <- skip 'try' end_of_word +KEYWORD_union <- skip 'union' end_of_word +KEYWORD_unreachable <- skip 'unreachable' end_of_word +KEYWORD_var <- skip 'var' end_of_word +KEYWORD_volatile <- skip 'volatile' end_of_word +KEYWORD_while <- skip 'while' end_of_word keyword <- KEYWORD_addrspace / KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe / KEYWORD_anytype / KEYWORD_asm diff --git a/lib/std/zig/parser_generated_oracle.zig b/lib/std/zig/parser_generated_oracle.zig index 669c7a4a35fa1aefc350ec570306176e043bf7fe..6e1b59019dd8dd2b78c925a4bde5e11bf3bf512a 100644 --- a/lib/std/zig/parser_generated_oracle.zig +++ b/lib/std/zig/parser_generated_oracle.zig @@ -16,7 +16,7 @@ const Parser = struct { pub fn parseRoot(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (p.parseskip() and p.parseContainerMembers() and p.parseeof()) break :blk_0 true; + if (p.parseContainerMembers() and p.parseskip() and p.parseeof()) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -612,6 +612,40 @@ const Parser = struct { break :blk_0 false; }; } + pub fn parseBinOp(p: *Parser) bool { + return blk_0: { + const pos_0 = p.i; + if (p.parseExpr() and blk_1: { + while (blk_3: { + const pos_3 = p.i; + if (blk_4: { + var match_4 = false; + while (p.parsewhite()) { + match_4 = true; + } + break :blk_4 match_4; + } and blk_4: { + if (std.mem.startsWith(u8, p.source[p.i..], "or")) { + p.i += 2; + break :blk_4 true; + } + break :blk_4 false; + } and blk_4: { + var match_4 = false; + while (p.parsewhite()) { + match_4 = true; + } + break :blk_4 match_4; + } and p.parseBoolAndExpr()) break :blk_3 true; + p.i = pos_3; + break :blk_3 false; + }) {} + break :blk_1 true; + }) break :blk_0 true; + p.i = pos_0; + break :blk_0 false; + }; + } pub fn parsePrefixExpr(p: *Parser) bool { return blk_0: { const pos_0 = p.i; @@ -2185,7 +2219,7 @@ const Parser = struct { var match_1 = false; while (blk_3: { const pos_3 = p.i; - if (blk_4: { + if (p.parseskip() and blk_4: { if (std.mem.startsWith(u8, p.source[p.i..], "//!")) { p.i += 3; break :blk_4 true; @@ -2194,7 +2228,7 @@ const Parser = struct { } and blk_4: { while (p.parsenon_control_utf8()) {} break :blk_4 true; - } and p.parsenewline() and p.parseskip()) break :blk_3 true; + } and p.parsenewline()) break :blk_3 true; p.i = pos_3; break :blk_3 false; }) { @@ -2213,7 +2247,7 @@ const Parser = struct { var match_1 = false; while (blk_3: { const pos_3 = p.i; - if (blk_4: { + if (p.parseskip() and blk_4: { if (std.mem.startsWith(u8, p.source[p.i..], "///")) { p.i += 3; break :blk_4 true; @@ -2222,7 +2256,7 @@ const Parser = struct { } and blk_4: { while (p.parsenon_control_utf8()) {} break :blk_4 true; - } and p.parsenewline() and p.parseskip()) break :blk_3 true; + } and p.parsenewline()) break :blk_3 true; p.i = pos_3; break :blk_3 false; }) { @@ -2347,7 +2381,7 @@ const Parser = struct { pub fn parseCHAR_LITERAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if ((p.i < p.source.len and switch (p.source[p.i]) { + if (p.parseskip() and (p.i < p.source.len and switch (p.source[p.i]) { '\''...'\'', => blk_1: { p.i += 1; @@ -2364,7 +2398,7 @@ const Parser = struct { break :blk_1 true; }, else => false, - }) and p.parseskip()) break :blk_0 true; + })) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2442,7 +2476,7 @@ const Parser = struct { pub fn parseNUMBERLITERAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if ((p.i < p.source.len and switch (p.source[p.i]) { + if (p.parseskip() and (p.i < p.source.len and switch (p.source[p.i]) { '0'...'9', => blk_1: { p.i += 1; @@ -2464,9 +2498,9 @@ const Parser = struct { match_1 = true; } break :blk_1 match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; - if ((p.i < p.source.len and switch (p.source[p.i]) { + if (p.parseskip() and (p.i < p.source.len and switch (p.source[p.i]) { '0'...'9', => blk_1: { p.i += 1; @@ -2476,7 +2510,7 @@ const Parser = struct { }) and blk_1: { while (p.parsedigit_float()) {} break :blk_1 true; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2484,7 +2518,7 @@ const Parser = struct { pub fn parseSTRINGLITERALSINGLE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if ((p.i < p.source.len and switch (p.source[p.i]) { + if (p.parseskip() and (p.i < p.source.len and switch (p.source[p.i]) { '"'...'"', => blk_1: { p.i += 1; @@ -2501,7 +2535,7 @@ const Parser = struct { break :blk_1 true; }, else => false, - }) and p.parseskip()) break :blk_0 true; + })) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2515,7 +2549,7 @@ const Parser = struct { var match_1 = false; while (blk_3: { const pos_3 = p.i; - if (p.parseline_string() and p.parseskip()) break :blk_3 true; + if (p.parseskip() and p.parseline_string()) break :blk_3 true; p.i = pos_3; break :blk_3 false; }) { @@ -2530,7 +2564,7 @@ const Parser = struct { pub fn parseIDENTIFIER(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { const pos_1 = p.i; const match_1 = p.parsekeyword(); p.i = pos_1; @@ -2557,9 +2591,9 @@ const Parser = struct { else => false, })) {} break :blk_1 true; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "@")) { p.i += 1; break :blk_1 true; @@ -2573,7 +2607,7 @@ const Parser = struct { pub fn parseBUILTINIDENTIFIER(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "@")) { p.i += 1; break :blk_1 true; @@ -2601,7 +2635,7 @@ const Parser = struct { else => false, })) {} break :blk_1 true; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2609,7 +2643,7 @@ const Parser = struct { pub fn parseAMPERSAND(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "&")) { p.i += 1; break :blk_1 true; @@ -2627,7 +2661,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2635,13 +2669,13 @@ const Parser = struct { pub fn parseAMPERSANDEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "&=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2649,7 +2683,7 @@ const Parser = struct { pub fn parseASTERISK(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "*")) { p.i += 1; break :blk_1 true; @@ -2669,7 +2703,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2677,13 +2711,13 @@ const Parser = struct { pub fn parseASTERISKEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "*=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2691,7 +2725,7 @@ const Parser = struct { pub fn parseASTERISKPERCENT(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "*%")) { p.i += 2; break :blk_1 true; @@ -2709,7 +2743,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2717,13 +2751,13 @@ const Parser = struct { pub fn parseASTERISKPERCENTEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "*%=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2731,7 +2765,7 @@ const Parser = struct { pub fn parseASTERISKPIPE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "*|")) { p.i += 2; break :blk_1 true; @@ -2749,7 +2783,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2757,13 +2791,13 @@ const Parser = struct { pub fn parseASTERISKPIPEEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "*|=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2771,7 +2805,7 @@ const Parser = struct { pub fn parseCARET(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "^")) { p.i += 1; break :blk_1 true; @@ -2789,7 +2823,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2797,13 +2831,13 @@ const Parser = struct { pub fn parseCARETEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "^=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2811,13 +2845,13 @@ const Parser = struct { pub fn parseCOLON(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ":")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2825,13 +2859,13 @@ const Parser = struct { pub fn parseCOMMA(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ",")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2839,7 +2873,7 @@ const Parser = struct { pub fn parseDOT(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ".")) { p.i += 1; break :blk_1 true; @@ -2859,7 +2893,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2867,7 +2901,7 @@ const Parser = struct { pub fn parseDOT2(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "..")) { p.i += 2; break :blk_1 true; @@ -2885,7 +2919,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2893,13 +2927,13 @@ const Parser = struct { pub fn parseDOT3(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "...")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2907,13 +2941,13 @@ const Parser = struct { pub fn parseDOTASTERISK(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ".*")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2921,13 +2955,13 @@ const Parser = struct { pub fn parseDOTQUESTIONMARK(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ".?")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2935,7 +2969,7 @@ const Parser = struct { pub fn parseEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "=")) { p.i += 1; break :blk_1 true; @@ -2954,7 +2988,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2962,13 +2996,13 @@ const Parser = struct { pub fn parseEQUALEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "==")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2976,13 +3010,13 @@ const Parser = struct { pub fn parseEQUALRARROW(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "=>")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -2990,7 +3024,7 @@ const Parser = struct { pub fn parseEXCLAMATIONMARK(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "!")) { p.i += 1; break :blk_1 true; @@ -3008,7 +3042,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3016,13 +3050,13 @@ const Parser = struct { pub fn parseEXCLAMATIONMARKEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "!=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3030,7 +3064,7 @@ const Parser = struct { pub fn parseLARROW(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "<")) { p.i += 1; break :blk_1 true; @@ -3049,7 +3083,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3057,7 +3091,7 @@ const Parser = struct { pub fn parseLARROW2(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "<<")) { p.i += 2; break :blk_1 true; @@ -3076,7 +3110,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3084,13 +3118,13 @@ const Parser = struct { pub fn parseLARROW2EQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "<<=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3098,7 +3132,7 @@ const Parser = struct { pub fn parseLARROW2PIPE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "<<|")) { p.i += 3; break :blk_1 true; @@ -3116,7 +3150,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3124,13 +3158,13 @@ const Parser = struct { pub fn parseLARROW2PIPEEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "<<|=")) { p.i += 4; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3138,13 +3172,13 @@ const Parser = struct { pub fn parseLARROWEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "<=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3152,13 +3186,13 @@ const Parser = struct { pub fn parseLBRACE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "{")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3166,13 +3200,13 @@ const Parser = struct { pub fn parseLBRACKET(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "[")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3180,13 +3214,13 @@ const Parser = struct { pub fn parseLPAREN(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "(")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3194,7 +3228,7 @@ const Parser = struct { pub fn parseMINUS(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "-")) { p.i += 1; break :blk_1 true; @@ -3215,7 +3249,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3223,13 +3257,13 @@ const Parser = struct { pub fn parseMINUSEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "-=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3237,7 +3271,7 @@ const Parser = struct { pub fn parseMINUSPERCENT(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "-%")) { p.i += 2; break :blk_1 true; @@ -3255,7 +3289,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3263,13 +3297,13 @@ const Parser = struct { pub fn parseMINUSPERCENTEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "-%=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3277,7 +3311,7 @@ const Parser = struct { pub fn parseMINUSPIPE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "-|")) { p.i += 2; break :blk_1 true; @@ -3295,7 +3329,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3303,13 +3337,13 @@ const Parser = struct { pub fn parseMINUSPIPEEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "-|=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3317,13 +3351,13 @@ const Parser = struct { pub fn parseMINUSRARROW(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "->")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3331,7 +3365,7 @@ const Parser = struct { pub fn parsePERCENT(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "%")) { p.i += 1; break :blk_1 true; @@ -3349,7 +3383,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3357,13 +3391,13 @@ const Parser = struct { pub fn parsePERCENTEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "%=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3371,7 +3405,7 @@ const Parser = struct { pub fn parsePIPE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "|")) { p.i += 1; break :blk_1 true; @@ -3390,7 +3424,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3398,13 +3432,13 @@ const Parser = struct { pub fn parsePIPE2(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "||")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3412,13 +3446,13 @@ const Parser = struct { pub fn parsePIPEEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "|=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3426,7 +3460,7 @@ const Parser = struct { pub fn parsePLUS(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "+")) { p.i += 1; break :blk_1 true; @@ -3447,7 +3481,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3455,13 +3489,13 @@ const Parser = struct { pub fn parsePLUS2(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "++")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3469,13 +3503,13 @@ const Parser = struct { pub fn parsePLUSEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "+=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3483,7 +3517,7 @@ const Parser = struct { pub fn parsePLUSPERCENT(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "+%")) { p.i += 2; break :blk_1 true; @@ -3501,7 +3535,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3509,13 +3543,13 @@ const Parser = struct { pub fn parsePLUSPERCENTEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "+%=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3523,7 +3557,7 @@ const Parser = struct { pub fn parsePLUSPIPE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "+|")) { p.i += 2; break :blk_1 true; @@ -3541,7 +3575,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3549,13 +3583,13 @@ const Parser = struct { pub fn parsePLUSPIPEEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "+|=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3563,13 +3597,13 @@ const Parser = struct { pub fn parseLETTERC(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "c")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3577,13 +3611,13 @@ const Parser = struct { pub fn parseQUESTIONMARK(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "?")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3591,7 +3625,7 @@ const Parser = struct { pub fn parseRARROW(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ">")) { p.i += 1; break :blk_1 true; @@ -3610,7 +3644,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3618,7 +3652,7 @@ const Parser = struct { pub fn parseRARROW2(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ">>")) { p.i += 2; break :blk_1 true; @@ -3636,7 +3670,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3644,13 +3678,13 @@ const Parser = struct { pub fn parseRARROW2EQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ">>=")) { p.i += 3; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3658,13 +3692,13 @@ const Parser = struct { pub fn parseRARROWEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ">=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3672,13 +3706,13 @@ const Parser = struct { pub fn parseRBRACE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "}")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3686,13 +3720,13 @@ const Parser = struct { pub fn parseRBRACKET(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "]")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3700,13 +3734,13 @@ const Parser = struct { pub fn parseRPAREN(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ")")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3714,13 +3748,13 @@ const Parser = struct { pub fn parseSEMICOLON(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], ";")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3728,7 +3762,7 @@ const Parser = struct { pub fn parseSLASH(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "/")) { p.i += 1; break :blk_1 true; @@ -3746,7 +3780,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3754,13 +3788,13 @@ const Parser = struct { pub fn parseSLASHEQUAL(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "/=")) { p.i += 2; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3768,13 +3802,13 @@ const Parser = struct { pub fn parseTILDE(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "~")) { p.i += 1; break :blk_1 true; } break :blk_1 false; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3797,7 +3831,7 @@ const Parser = struct { }); p.i = pos_1; break :blk_1 !match_1; - } and p.parseskip()) break :blk_0 true; + }) break :blk_0 true; p.i = pos_0; break :blk_0 false; }; @@ -3805,7 +3839,7 @@ const Parser = struct { pub fn parseKEYWORD_addrspace(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "addrspace")) { p.i += 9; break :blk_1 true; @@ -3819,7 +3853,7 @@ const Parser = struct { pub fn parseKEYWORD_align(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "align")) { p.i += 5; break :blk_1 true; @@ -3833,7 +3867,7 @@ const Parser = struct { pub fn parseKEYWORD_allowzero(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "allowzero")) { p.i += 9; break :blk_1 true; @@ -3847,7 +3881,7 @@ const Parser = struct { pub fn parseKEYWORD_and(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "and")) { p.i += 3; break :blk_1 true; @@ -3861,7 +3895,7 @@ const Parser = struct { pub fn parseKEYWORD_anyframe(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "anyframe")) { p.i += 8; break :blk_1 true; @@ -3875,7 +3909,7 @@ const Parser = struct { pub fn parseKEYWORD_anytype(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "anytype")) { p.i += 7; break :blk_1 true; @@ -3889,7 +3923,7 @@ const Parser = struct { pub fn parseKEYWORD_asm(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "asm")) { p.i += 3; break :blk_1 true; @@ -3903,7 +3937,7 @@ const Parser = struct { pub fn parseKEYWORD_break(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "break")) { p.i += 5; break :blk_1 true; @@ -3917,7 +3951,7 @@ const Parser = struct { pub fn parseKEYWORD_callconv(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "callconv")) { p.i += 8; break :blk_1 true; @@ -3931,7 +3965,7 @@ const Parser = struct { pub fn parseKEYWORD_catch(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "catch")) { p.i += 5; break :blk_1 true; @@ -3945,7 +3979,7 @@ const Parser = struct { pub fn parseKEYWORD_comptime(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "comptime")) { p.i += 8; break :blk_1 true; @@ -3959,7 +3993,7 @@ const Parser = struct { pub fn parseKEYWORD_const(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "const")) { p.i += 5; break :blk_1 true; @@ -3973,7 +4007,7 @@ const Parser = struct { pub fn parseKEYWORD_continue(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "continue")) { p.i += 8; break :blk_1 true; @@ -3987,7 +4021,7 @@ const Parser = struct { pub fn parseKEYWORD_defer(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "defer")) { p.i += 5; break :blk_1 true; @@ -4001,7 +4035,7 @@ const Parser = struct { pub fn parseKEYWORD_else(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "else")) { p.i += 4; break :blk_1 true; @@ -4015,7 +4049,7 @@ const Parser = struct { pub fn parseKEYWORD_enum(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "enum")) { p.i += 4; break :blk_1 true; @@ -4029,7 +4063,7 @@ const Parser = struct { pub fn parseKEYWORD_errdefer(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "errdefer")) { p.i += 8; break :blk_1 true; @@ -4043,7 +4077,7 @@ const Parser = struct { pub fn parseKEYWORD_error(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "error")) { p.i += 5; break :blk_1 true; @@ -4057,7 +4091,7 @@ const Parser = struct { pub fn parseKEYWORD_export(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "export")) { p.i += 6; break :blk_1 true; @@ -4071,7 +4105,7 @@ const Parser = struct { pub fn parseKEYWORD_extern(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "extern")) { p.i += 6; break :blk_1 true; @@ -4085,7 +4119,7 @@ const Parser = struct { pub fn parseKEYWORD_fn(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "fn")) { p.i += 2; break :blk_1 true; @@ -4099,7 +4133,7 @@ const Parser = struct { pub fn parseKEYWORD_for(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "for")) { p.i += 3; break :blk_1 true; @@ -4113,7 +4147,7 @@ const Parser = struct { pub fn parseKEYWORD_if(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "if")) { p.i += 2; break :blk_1 true; @@ -4127,7 +4161,7 @@ const Parser = struct { pub fn parseKEYWORD_inline(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "inline")) { p.i += 6; break :blk_1 true; @@ -4141,7 +4175,7 @@ const Parser = struct { pub fn parseKEYWORD_noalias(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "noalias")) { p.i += 7; break :blk_1 true; @@ -4155,7 +4189,7 @@ const Parser = struct { pub fn parseKEYWORD_nosuspend(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "nosuspend")) { p.i += 9; break :blk_1 true; @@ -4169,7 +4203,7 @@ const Parser = struct { pub fn parseKEYWORD_noinline(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "noinline")) { p.i += 8; break :blk_1 true; @@ -4183,7 +4217,7 @@ const Parser = struct { pub fn parseKEYWORD_opaque(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "opaque")) { p.i += 6; break :blk_1 true; @@ -4197,7 +4231,7 @@ const Parser = struct { pub fn parseKEYWORD_or(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "or")) { p.i += 2; break :blk_1 true; @@ -4211,7 +4245,7 @@ const Parser = struct { pub fn parseKEYWORD_orelse(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "orelse")) { p.i += 6; break :blk_1 true; @@ -4225,7 +4259,7 @@ const Parser = struct { pub fn parseKEYWORD_packed(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "packed")) { p.i += 6; break :blk_1 true; @@ -4239,7 +4273,7 @@ const Parser = struct { pub fn parseKEYWORD_pub(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "pub")) { p.i += 3; break :blk_1 true; @@ -4253,7 +4287,7 @@ const Parser = struct { pub fn parseKEYWORD_resume(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "resume")) { p.i += 6; break :blk_1 true; @@ -4267,7 +4301,7 @@ const Parser = struct { pub fn parseKEYWORD_return(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "return")) { p.i += 6; break :blk_1 true; @@ -4281,7 +4315,7 @@ const Parser = struct { pub fn parseKEYWORD_linksection(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "linksection")) { p.i += 11; break :blk_1 true; @@ -4295,7 +4329,7 @@ const Parser = struct { pub fn parseKEYWORD_struct(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "struct")) { p.i += 6; break :blk_1 true; @@ -4309,7 +4343,7 @@ const Parser = struct { pub fn parseKEYWORD_suspend(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "suspend")) { p.i += 7; break :blk_1 true; @@ -4323,7 +4357,7 @@ const Parser = struct { pub fn parseKEYWORD_switch(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "switch")) { p.i += 6; break :blk_1 true; @@ -4337,7 +4371,7 @@ const Parser = struct { pub fn parseKEYWORD_test(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "test")) { p.i += 4; break :blk_1 true; @@ -4351,7 +4385,7 @@ const Parser = struct { pub fn parseKEYWORD_threadlocal(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "threadlocal")) { p.i += 11; break :blk_1 true; @@ -4365,7 +4399,7 @@ const Parser = struct { pub fn parseKEYWORD_try(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "try")) { p.i += 3; break :blk_1 true; @@ -4379,7 +4413,7 @@ const Parser = struct { pub fn parseKEYWORD_union(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "union")) { p.i += 5; break :blk_1 true; @@ -4393,7 +4427,7 @@ const Parser = struct { pub fn parseKEYWORD_unreachable(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "unreachable")) { p.i += 11; break :blk_1 true; @@ -4407,7 +4441,7 @@ const Parser = struct { pub fn parseKEYWORD_var(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "var")) { p.i += 3; break :blk_1 true; @@ -4421,7 +4455,7 @@ const Parser = struct { pub fn parseKEYWORD_volatile(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "volatile")) { p.i += 8; break :blk_1 true; @@ -4435,7 +4469,7 @@ const Parser = struct { pub fn parseKEYWORD_while(p: *Parser) bool { return blk_0: { const pos_0 = p.i; - if (blk_1: { + if (p.parseskip() and blk_1: { if (std.mem.startsWith(u8, p.source[p.i..], "while")) { p.i += 5; break :blk_1 true; -- 2.54.0