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 f1092631eec0a3fa413f81e6ed11bb58f8e03de4..f5a338e0cc51ccfb43ab6d27b4f68750ed79f964 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 83e0ad4a347244d9261563493e61ea47f3c53a96..ce054a5cb63635a9df0b758266ce66b10e2577cb 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 432b0795038d5e3c6e9e95af7c541428f8b346cd..bb4a59fc79d46a3f61314ccc623d811ecd9fdd34 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 ac71f25a194841b88ed60ef2748d92aa69c38c8f..be0c562a3a5a450499022cfd2266f586b5014b64 100644 --- a/src/tokenizer.hpp +++ b/src/tokenizer.hpp @@ -37,6 +37,7 @@ enum TokenId { TokenIdKeywordNull, TokenIdKeywordNoAlias, TokenIdKeywordSwitch, + TokenIdKeywordUndefined, TokenIdLParen, TokenIdRParen, TokenIdComma, -- 2.54.0