From 72fa03badad2e5837f639359a63a75abaa99a479 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 22 Jan 2016 16:05:29 -0700 Subject: [PATCH] add undefined reserved word --- doc/langref.md | 19 ++++++++++++++++--- doc/vim/syntax/zig.vim | 2 +- src/tokenizer.cpp | 3 +++ src/tokenizer.hpp | 1 + 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/doc/langref.md b/doc/langref.md index f1092631ee..f5a338e0cc 100644 --- a/doc/langref.md +++ b/doc/langref.md @@ -143,7 +143,7 @@ GotoExpression: "goto" "Symbol" GroupedExpression : "(" Expression ")" -KeywordLiteral : "true" | "false" | "null" | "break" | "continue" +KeywordLiteral : "true" | "false" | "null" | "break" | "continue" | "undefined" ``` ## Operator Precedence @@ -216,10 +216,23 @@ A slice can be obtained with the slicing syntax: `array[start...end]` Example: `"aoeu"[0...2]` has type `[]u8`. -### Struct Types +### Struct Type TODO -### Pointer Types +### Enum Type + +TODO + +### Maybe Type + +TODO + +### Error Type + +TODO + +### Pointer Type + TODO ### Unreachable Type diff --git a/doc/vim/syntax/zig.vim b/doc/vim/syntax/zig.vim index 83e0ad4a34..ce054a5cb6 100644 --- a/doc/vim/syntax/zig.vim +++ b/doc/vim/syntax/zig.vim @@ -13,7 +13,7 @@ syn keyword zigStatement goto break return continue asm syn keyword zigConditional if else switch syn keyword zigRepeat while for -syn keyword zigConstant null +syn keyword zigConstant null undefined syn keyword zigKeyword fn import syn keyword zigType bool i8 u8 i16 u16 i32 u32 i64 u64 isize usize f32 f64 f128 void unreachable type diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 432b079503..bb4a59fc79 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -245,6 +245,8 @@ static void end_token(Tokenize *t) { t->cur_tok->id = TokenIdKeywordNoAlias; } else if (mem_eql_str(token_mem, token_len, "switch")) { t->cur_tok->id = TokenIdKeywordSwitch; + } else if (mem_eql_str(token_mem, token_len, "undefined")) { + t->cur_tok->id = TokenIdKeywordUndefined; } t->cur_tok = nullptr; @@ -1043,6 +1045,7 @@ const char * token_name(TokenId id) { case TokenIdKeywordNull: return "null"; case TokenIdKeywordNoAlias: return "noalias"; case TokenIdKeywordSwitch: return "switch"; + case TokenIdKeywordUndefined: return "undefined"; case TokenIdLParen: return "("; case TokenIdRParen: return ")"; case TokenIdComma: return ","; diff --git a/src/tokenizer.hpp b/src/tokenizer.hpp index ac71f25a19..be0c562a3a 100644 --- a/src/tokenizer.hpp +++ b/src/tokenizer.hpp @@ -37,6 +37,7 @@ enum TokenId { TokenIdKeywordNull, TokenIdKeywordNoAlias, TokenIdKeywordSwitch, + TokenIdKeywordUndefined, TokenIdLParen, TokenIdRParen, TokenIdComma,