Commit 0b859831ad

Veikka Tuominen <git@vexu.eu>
2022-12-26 15:35:24
update grammar in langref
Closes #14072
1 parent 3535c4b
Changed files (2)
doc
lib
std
doc/langref.html.in
@@ -12062,24 +12062,24 @@ ContainerMembers <- ContainerDeclarations (ContainerField COMMA)* (ContainerFiel
 
 ContainerDeclarations
     <- TestDecl ContainerDeclarations
-     / TopLevelComptime ContainerDeclarations
-     / doc_comment? KEYWORD_pub? TopLevelDecl ContainerDeclarations
+     / ComptimeDecl ContainerDeclarations
+     / doc_comment? KEYWORD_pub? Decl ContainerDeclarations
      /
 
-TestDecl <- doc_comment? KEYWORD_test STRINGLITERALSINGLE? Block
+TestDecl <- KEYWORD_test STRINGLITERALSINGLE? Block
 
-TopLevelComptime <- doc_comment? KEYWORD_comptime BlockExpr
+ComptimeDecl <- KEYWORD_comptime Block
 
-TopLevelDecl
+Decl
     <- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block)
      / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
      / KEYWORD_usingnamespace Expr SEMICOLON
 
-FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr
+FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? AddrSpace? LinkSection? CallConv? EXCLAMATIONMARK? TypeExpr
 
-VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON
+VarDecl <- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? AddrSpace? LinkSection? (EQUAL Expr)? SEMICOLON
 
-ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON (KEYWORD_anytype / TypeExpr) ByteAlign?)? (EQUAL Expr)?
+ContainerField <- doc_comment? KEYWORD_comptime? IDENTIFIER (COLON TypeExpr ByteAlign?)? (EQUAL Expr)?
 
 # *** Block Level ***
 Statement
@@ -12240,6 +12240,8 @@ WhileContinueExpr <- COLON LPAREN AssignExpr RPAREN
 
 LinkSection <- KEYWORD_linksection LPAREN Expr RPAREN
 
+AddrSpace <- KEYWORD_addrspace LPAREN Expr RPAREN
+
 # Fn specific
 CallConv <- KEYWORD_callconv LPAREN Expr RPAREN
 
@@ -12267,7 +12269,7 @@ PtrIndexPayload <- PIPE ASTERISK? IDENTIFIER (COMMA IDENTIFIER)? PIPE
 
 
 # Switch specific
-SwitchProng <- SwitchCase EQUALRARROW PtrPayload? AssignExpr
+SwitchProng <- KEYWORD_inline? SwitchCase EQUALRARROW PtrIndexPayload? AssignExpr
 
 SwitchCase
     <- SwitchItem (COMMA SwitchItem)* COMMA?
@@ -12278,11 +12280,15 @@ SwitchItem <- Expr (DOT3 Expr)?
 # Operators
 AssignOp
     <- ASTERISKEQUAL
+     / ASTERISKPIPEEQUAL
      / SLASHEQUAL
      / PERCENTEQUAL
      / PLUSEQUAL
+     / PLUSPIPEEQUAL
      / MINUSEQUAL
+     / MINUSPIPEEQUAL
      / LARROW2EQUAL
+     / LARROW2PIPEEQUAL
      / RARROW2EQUAL
      / AMPERSANDEQUAL
      / CARETEQUAL
@@ -12310,6 +12316,7 @@ BitwiseOp
 BitShiftOp
     <- LARROW2
      / RARROW2
+     / LARROW2PIPE
 
 AdditionOp
     <- PLUS
@@ -12317,6 +12324,8 @@ AdditionOp
      / PLUS2
      / PLUSPERCENT
      / MINUSPERCENT
+     / PLUSPIPE
+     / MINUSPIPE
 
 MultiplyOp
     <- PIPE2
@@ -12325,6 +12334,7 @@ MultiplyOp
      / PERCENT
      / ASTERISK2
      / ASTERISKPERCENT
+     / ASTERISKPIPE
 
 PrefixOp
     <- EXCLAMATIONMARK
@@ -12338,8 +12348,8 @@ PrefixOp
 PrefixTypeOp
     <- QUESTIONMARK
      / KEYWORD_anyframe MINUSRARROW
-     / SliceTypeStart (ByteAlign / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
-     / PtrTypeStart (KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
+     / SliceTypeStart (ByteAlign / AddrSpace / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
+     / PtrTypeStart (AddrSpace / KEYWORD_align LPAREN Expr (COLON INTEGER COLON INTEGER)? RPAREN / KEYWORD_const / KEYWORD_volatile / KEYWORD_allowzero)*
      / ArrayTypeStart
 
 SuffixOp
@@ -12364,7 +12374,7 @@ ArrayTypeStart <- LBRACKET Expr (COLON Expr)? RBRACKET
 ContainerDeclAuto <- ContainerDeclType LBRACE container_doc_comment? ContainerMembers RBRACE
 
 ContainerDeclType
-    <- KEYWORD_struct
+    <- KEYWORD_struct (LPAREN Expr RPAREN)?
      / KEYWORD_opaque
      / KEYWORD_enum (LPAREN Expr RPAREN)?
      / KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?
@@ -12455,7 +12465,7 @@ string_char
      / [^\\"\n]
 
 container_doc_comment <- ('//!' [^\n]* [ \n]*)+
-doc_comment <- ('///' [^\n]* [ \n]*)+
+doc_comment <- ('///' [^\n]* [ \n]*)+ skip
 line_comment <- '//' ![!/][^\n]* / '////' [^\n]*
 line_string <- ("\\\\" [^\n]* [ \n]*)+
 skip <- ([ \n] / line_comment)*
@@ -12483,11 +12493,13 @@ BUILTINIDENTIFIER <- "@"[A-Za-z_][A-Za-z0-9_]* skip
 
 AMPERSAND            <- '&'      ![=]      skip
 AMPERSANDEQUAL       <- '&='               skip
-ASTERISK             <- '*'      ![*%=]    skip
+ASTERISK             <- '*'      ![*%=|]   skip
 ASTERISK2            <- '**'               skip
 ASTERISKEQUAL        <- '*='               skip
 ASTERISKPERCENT      <- '*%'     ![=]      skip
 ASTERISKPERCENTEQUAL <- '*%='              skip
+ASTERISKPIPE         <- '*|'     ![=]      skip
+ASTERISKPIPEEQUAL    <- '*|='              skip
 CARET                <- '^'      ![=]      skip
 CARETEQUAL           <- '^='               skip
 COLON                <- ':'                skip
@@ -12503,27 +12515,33 @@ EQUALRARROW          <- '=>'               skip
 EXCLAMATIONMARK      <- '!'      ![=]      skip
 EXCLAMATIONMARKEQUAL <- '!='               skip
 LARROW               <- '<'      ![<=]     skip
-LARROW2              <- '<<'     ![=]      skip
+LARROW2              <- '<<'     ![=|]     skip
 LARROW2EQUAL         <- '<<='              skip
+LARROW2PIPE          <- '<<|'    ![=]      skip
+LARROW2PIPEEQUAL     <- '<<|='             skip
 LARROWEQUAL          <- '<='               skip
 LBRACE               <- '{'                skip
 LBRACKET             <- '['                skip
 LPAREN               <- '('                skip
-MINUS                <- '-'      ![%=>]    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
+PLUS                 <- '+'      ![%+=|]   skip
 PLUS2                <- '++'               skip
 PLUSEQUAL            <- '+='               skip
 PLUSPERCENT          <- '+%'     ![=]      skip
 PLUSPERCENTEQUAL     <- '+%='              skip
+PLUSPIPE             <- '+|'     ![=]      skip
+PLUSPIPEEQUAL        <- '+|='              skip
 LETTERC              <- 'c'                skip
 QUESTIONMARK         <- '?'                skip
 RARROW               <- '>'      ![>=]     skip
@@ -12539,6 +12557,7 @@ 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
@@ -12588,11 +12607,11 @@ KEYWORD_var         <- 'var'         end_of_word
 KEYWORD_volatile    <- 'volatile'    end_of_word
 KEYWORD_while       <- 'while'       end_of_word
 
-keyword <- KEYWORD_align / KEYWORD_allowzero / KEYWORD_and / KEYWORD_anyframe
-         / KEYWORD_anytype / KEYWORD_asm / KEYWORD_async / KEYWORD_await
-         / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch / KEYWORD_comptime
-         / KEYWORD_const / KEYWORD_continue / KEYWORD_defer / KEYWORD_else
-         / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export
+keyword <- KEYWORD_addrspace / KEYWORD_align / KEYWORD_allowzero / KEYWORD_and
+         / KEYWORD_anyframe / KEYWORD_anytype / KEYWORD_asm / KEYWORD_async
+         / KEYWORD_await / KEYWORD_break / KEYWORD_callconv / KEYWORD_catch
+         / KEYWORD_comptime / KEYWORD_const / KEYWORD_continue / KEYWORD_defer
+         / KEYWORD_else / KEYWORD_enum / KEYWORD_errdefer / KEYWORD_error / KEYWORD_export
          / KEYWORD_extern / KEYWORD_fn / KEYWORD_for / KEYWORD_if
          / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline
          / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed
lib/std/zig/parse.zig
@@ -240,10 +240,10 @@ const Parser = struct {
     /// ContainerMembers <- ContainerDeclarations (ContainerField COMMA)* (ContainerField / ContainerDeclarations)
     /// ContainerDeclarations
     ///     <- TestDecl ContainerDeclarations
-    ///      / TopLevelComptime ContainerDeclarations
-    ///      / KEYWORD_pub? TopLevelDecl ContainerDeclarations
+    ///      / ComptimeDecl ContainerDeclarations
+    ///      / doc_comment? KEYWORD_pub? Decl ContainerDeclarations
     ///      /
-    /// TopLevelComptime <- KEYWORD_comptime Block
+    /// ComptimeDecl <- KEYWORD_comptime Block
     fn parseContainerMembers(p: *Parser) !Members {
         const scratch_top = p.scratch.items.len;
         defer p.scratch.shrinkRetainingCapacity(scratch_top);
@@ -622,7 +622,7 @@ const Parser = struct {
         };
     }
 
-    /// TopLevelDecl
+    /// Decl
     ///     <- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / (KEYWORD_inline / KEYWORD_noinline))? FnProto (SEMICOLON / Block)
     ///      / (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE?)? KEYWORD_threadlocal? VarDecl
     ///      / KEYWORD_usingnamespace Expr SEMICOLON