aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVexu <git@vexu.eu>2020-11-22 21:15:12 +0200
committerVexu <git@vexu.eu>2020-11-22 21:30:09 +0200
commit98d5bfbd4d21e99363a0a68ef5a0d0104c302ecb (patch)
tree72054da66b60a355470f2d5d50f4a8cd5f522cfc
parent2fbe9519acec0d7b9c9dcc41a877fec912337124 (diff)
downloadzig-98d5bfbd4d21e99363a0a68ef5a0d0104c302ecb.tar.gz
zig-98d5bfbd4d21e99363a0a68ef5a0d0104c302ecb.zip
update grammar in langref
-rw-r--r--doc/langref.html.in96
-rw-r--r--lib/std/zig/parse.zig9
2 files changed, 58 insertions, 47 deletions
diff --git a/doc/langref.html.in b/doc/langref.html.in
index 3b9e403a58..a76dd7361b 100644
--- a/doc/langref.html.in
+++ b/doc/langref.html.in
@@ -11042,15 +11042,15 @@ TestDecl &lt;- KEYWORD_test STRINGLITERALSINGLE Block
TopLevelComptime &lt;- KEYWORD_comptime BlockExpr
TopLevelDecl
- &lt;- (KEYWORD_export / KEYWORD_extern STRINGLITERALSINGLE? / KEYWORD_inline)? FnProto (SEMICOLON / Block)
+ &lt;- (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 &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr)
+FnProto &lt;- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (KEYWORD_anytype / TypeExpr)
VarDecl &lt;- (KEYWORD_const / KEYWORD_var) IDENTIFIER (COLON TypeExpr)? ByteAlign? LinkSection? (EQUAL Expr)? SEMICOLON
-ContainerField &lt;- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr)? (EQUAL Expr)?
+ContainerField &lt;- KEYWORD_comptime? IDENTIFIER (COLON TypeExpr ByteAlign?)? (EQUAL Expr)?
# *** Block Level ***
Statement
@@ -11090,7 +11090,7 @@ BlockExpr &lt;- BlockLabel? Block
# *** Expression Level ***
AssignExpr &lt;- Expr (AssignOp Expr)?
-Expr &lt;- KEYWORD_try* BoolOrExpr
+Expr &lt;- BoolOrExpr
BoolOrExpr &lt;- BoolAndExpr (KEYWORD_or BoolAndExpr)*
@@ -11215,6 +11215,8 @@ WhileContinueExpr &lt;- COLON LPAREN AssignExpr RPAREN
LinkSection &lt;- KEYWORD_linksection LPAREN Expr RPAREN
+CallConv &lt;- KEYWORD_callconv LPAREN Expr RPAREN
+
ParamDecl &lt;- (KEYWORD_noalias / KEYWORD_comptime)? (IDENTIFIER COLON)? ParamType
ParamType
@@ -11321,19 +11323,20 @@ SuffixOp
FnCallArguments &lt;- LPAREN ExprList RPAREN
# Ptr specific
-ArrayTypeStart &lt;- LBRACKET Expr? RBRACKET
+ArrayTypeStart &lt;- LBRACKET Expr? (COLON Expr)? RBRACKET
PtrTypeStart
&lt;- ASTERISK
/ ASTERISK2
- / PTRUNKNOWN
- / PTRC
+ / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
# ContainerDecl specific
ContainerDeclAuto &lt;- ContainerDeclType LBRACE ContainerMembers RBRACE
ContainerDeclType
- &lt;- (KEYWORD_struct / KEYWORD_enum / KEYWORD_opaque) (LPAREN Expr RPAREN)?
+ &lt;- KEYWORD_struct
+ / KEYWORD_opaque
+ / KEYWORD_enum (LPAREN Expr RPAREN)?
/ KEYWORD_union (LPAREN (KEYWORD_enum (LPAREN Expr RPAREN)? / Expr) RPAREN)?
# Alignment
@@ -11357,44 +11360,51 @@ ExprList &lt;- (Expr COMMA)* Expr?
# *** Tokens ***
eof &lt;- !.
hex &lt;- [0-9a-fA-F]
+hex_ &lt;- ('_'/hex)
+dec &lt;- [0-9]
+dec_ &lt;- ('_'/dec)
+
+dec_int &lt;- dec (dec_* dec)?
+hex_int &lt;- hex (hex_* dec)?
+
char_escape
- &lt;- "\\x" hex hex
- / "\\u{" hex+ "}"
- / "\\" [nr\\t'"]
+ &lt;- &quot;\\x&quot; hex hex
+ / &quot;\\u{&quot; hex+ &quot;}&quot;
+ / &quot;\\&quot; [nr\\t'&quot;]
char_char
&lt;- char_escape
/ [^\\'\n]
string_char
&lt;- char_escape
- / [^\\"\n]
+ / [^\\&quot;\n]
line_comment &lt;- '//'[^\n]*
-line_string &lt;- ("\\\\" [^\n]* [ \n]*)+
+line_string &lt;- (&quot;\\\\&quot; [^\n]* [ \n]*)+
skip &lt;- ([ \n] / line_comment)*
-CHAR_LITERAL &lt;- "'" char_char "'" skip
+CHAR_LITERAL &lt;- &quot;'&quot; char_char &quot;'&quot; skip
FLOAT
- &lt;- "0x" hex+ "." hex+ ([pP] [-+]? hex+)? skip
- / [0-9]+ "." [0-9]+ ([eE] [-+]? [0-9]+)? skip
- / "0x" hex+ "."? [pP] [-+]? hex+ skip
- / [0-9]+ "."? [eE] [-+]? [0-9]+ skip
+ &lt;- &quot;0x&quot; hex_* hex &quot;.&quot; hex_int ([pP] [-+]? hex_int)? skip
+ / dec_int &quot;.&quot; dec_int ([eE] [-+]? dec_int)? skip
+ / &quot;0x&quot; hex_* hex &quot;.&quot;? [pP] [-+]? hex_int skip
+ / dec_int &quot;.&quot;? [eE] [-+]? dec_int skip
INTEGER
- &lt;- "0b" [01]+ skip
- / "0o" [0-7]+ skip
- / "0x" hex+ skip
- / [0-9]+ skip
-STRINGLITERALSINGLE &lt;- "\"" string_char* "\"" skip
+ &lt;- &quot;0b&quot; [_01]* [01] skip
+ / &quot;0o&quot; [_0-7]* [0-7] skip
+ / &quot;0x&quot; hex_* hex skip
+ / dec_int skip
+STRINGLITERALSINGLE &lt;- &quot;\&quot;&quot; string_char* &quot;\&quot;&quot; skip
STRINGLITERAL
&lt;- STRINGLITERALSINGLE
/ line_string skip
IDENTIFIER
&lt;- !keyword [A-Za-z_] [A-Za-z0-9_]* skip
- / "@\"" string_char* "\"" skip
-BUILTINIDENTIFIER &lt;- "@"[A-Za-z_][A-Za-z0-9_]* skip
+ / &quot;@\&quot;&quot; string_char* &quot;\&quot;&quot; skip
+BUILTINIDENTIFIER &lt;- &quot;@&quot;[A-Za-z_][A-Za-z0-9_]* skip
-AMPERSAND &lt;- '&' ![=] skip
-AMPERSANDEQUAL &lt;- '&=' skip
+AMPERSAND &lt;- '&amp;' ![=] skip
+AMPERSANDEQUAL &lt;- '&amp;=' skip
ASTERISK &lt;- '*' ![*%=] skip
ASTERISK2 &lt;- '**' skip
ASTERISKEQUAL &lt;- '*=' skip
@@ -11419,7 +11429,7 @@ LARROW2 &lt;- '&lt;&lt;' ![=] skip
LARROW2EQUAL &lt;- '&lt;&lt;=' skip
LARROWEQUAL &lt;- '&lt;=' skip
LBRACE &lt;- '{' skip
-LBRACKET &lt;- '[' ![*] skip
+LBRACKET &lt;- '[' skip
LPAREN &lt;- '(' skip
MINUS &lt;- '-' ![%=&gt;] skip
MINUSEQUAL &lt;- '-=' skip
@@ -11436,8 +11446,7 @@ PLUS2 &lt;- '++' skip
PLUSEQUAL &lt;- '+=' skip
PLUSPERCENT &lt;- '+%' ![=] skip
PLUSPERCENTEQUAL &lt;- '+%=' skip
-PTRC &lt;- '[*c]' skip
-PTRUNKNOWN &lt;- '[*]' skip
+LETTERC &lt;- 'c' skip
QUESTIONMARK &lt;- '?' skip
RARROW &lt;- '&gt;' ![&gt;=] skip
RARROW2 &lt;- '&gt;&gt;' ![=] skip
@@ -11461,6 +11470,7 @@ KEYWORD_asm &lt;- 'asm' end_of_word
KEYWORD_async &lt;- 'async' end_of_word
KEYWORD_await &lt;- 'await' end_of_word
KEYWORD_break &lt;- 'break' end_of_word
+KEYWORD_callconv &lt;- 'callconv' end_of_word
KEYWORD_catch &lt;- 'catch' end_of_word
KEYWORD_comptime &lt;- 'comptime' end_of_word
KEYWORD_const &lt;- 'const' end_of_word
@@ -11479,6 +11489,7 @@ KEYWORD_if &lt;- 'if' end_of_word
KEYWORD_inline &lt;- 'inline' end_of_word
KEYWORD_noalias &lt;- 'noalias' end_of_word
KEYWORD_nosuspend &lt;- 'nosuspend' end_of_word
+KEYWORD_noinline &lt;- 'noinline' end_of_word
KEYWORD_null &lt;- 'null' end_of_word
KEYWORD_opaque &lt;- 'opaque' end_of_word
KEYWORD_or &lt;- 'or' end_of_word
@@ -11503,19 +11514,20 @@ KEYWORD_var &lt;- 'var' end_of_word
KEYWORD_volatile &lt;- 'volatile' end_of_word
KEYWORD_while &lt;- 'while' end_of_word
-keyword &lt;- KEYWORD_align / KEYWORD_and / KEYWORD_anyframe / KEYWORD_anytype
- / KEYWORD_allowzero / KEYWORD_asm / KEYWORD_async / KEYWORD_await / KEYWORD_break
- / KEYWORD_catch / KEYWORD_comptime / KEYWORD_const / KEYWORD_continue
- / KEYWORD_defer / KEYWORD_else / KEYWORD_enum / KEYWORD_errdefer
- / KEYWORD_error / KEYWORD_export / KEYWORD_extern / KEYWORD_false
- / KEYWORD_fn / KEYWORD_for / KEYWORD_if / KEYWORD_inline
- / KEYWORD_noalias / KEYWORD_null / KEYWORD_opaque / KEYWORD_or
- / KEYWORD_orelse / KEYWORD_packed / KEYWORD_pub
- / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection
- / KEYWORD_struct / KEYWORD_suspend
- / KEYWORD_switch / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try
+keyword &lt;- 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_false / KEYWORD_fn / KEYWORD_for / KEYWORD_if
+ / KEYWORD_inline / KEYWORD_noalias / KEYWORD_nosuspend / KEYWORD_noinline
+ / KEYWORD_null / KEYWORD_opaque / KEYWORD_or / KEYWORD_orelse / KEYWORD_packed
+ / KEYWORD_pub / KEYWORD_resume / KEYWORD_return / KEYWORD_linksection
+ / KEYWORD_struct / KEYWORD_suspend / KEYWORD_switch
+ / KEYWORD_test / KEYWORD_threadlocal / KEYWORD_true / KEYWORD_try
/ KEYWORD_undefined / KEYWORD_union / KEYWORD_unreachable
- / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while</code></pre>
+ / KEYWORD_usingnamespace / KEYWORD_var / KEYWORD_volatile / KEYWORD_while
+</code></pre>
{#header_close#}
{#header_open|Zen#}
<ul>
diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig
index d36bf55ecd..411273b149 100644
--- a/lib/std/zig/parse.zig
+++ b/lib/std/zig/parse.zig
@@ -488,7 +488,7 @@ const Parser = struct {
return &node.base;
}
- /// FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? EXCLAMATIONMARK? (Keyword_anytype / TypeExpr)
+ /// FnProto <- KEYWORD_fn IDENTIFIER? LPAREN ParamDeclList RPAREN ByteAlign? LinkSection? CallConv? EXCLAMATIONMARK? (Keyword_anytype / TypeExpr)
fn parseFnProto(p: *Parser, level: enum { top_level, as_type }, fields: struct {
doc_comments: ?*Node.DocComment = null,
visib_token: ?TokenIndex = null,
@@ -1023,7 +1023,7 @@ const Parser = struct {
return p.parseBinOpExpr(parseAssignOp, parseExpr, .Once);
}
- /// Expr <- KEYWORD_try* BoolOrExpr
+ /// Expr <- BoolOrExpr
fn parseExpr(p: *Parser) Error!?*Node {
return p.parsePrefixOpExpr(parseTry, parseBoolOrExpr);
}
@@ -2758,7 +2758,7 @@ const Parser = struct {
rparen: TokenIndex,
};
- /// ArrayTypeStart <- LBRACKET Expr? RBRACKET
+ /// ArrayTypeStart <- LBRACKET Expr? (COLON Expr)? RBRACKET
fn parseArrayTypeStart(p: *Parser) !?*Node {
const lbracket = p.eatToken(.LBracket) orelse return null;
const expr = try p.parseExpr();
@@ -2803,8 +2803,7 @@ const Parser = struct {
/// PtrTypeStart
/// <- ASTERISK
/// / ASTERISK2
- /// / PTRUNKNOWN
- /// / PTRC
+ /// / LBRACKET ASTERISK (LETTERC / COLON Expr)? RBRACKET
fn parsePtrTypeStart(p: *Parser) !?*Node {
if (p.eatToken(.Asterisk)) |asterisk| {
const sentinel = if (p.eatToken(.Colon)) |_|