From ecd2eacd7589fd3eea5082f9b28ac548c39fd8ff Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 31 Mar 2019 22:35:05 +0100 Subject: [PATCH] Remove dead keywords; Fix `min` and `max` for enum types --- src/check_type.cpp | 16 ++++++++++++++-- src/parser.cpp | 1 - src/tokenizer.cpp | 3 --- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/check_type.cpp b/src/check_type.cpp index 22cd409ee..445b93fb8 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -759,6 +759,8 @@ void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *named_type, Ast ExactValue iota = exact_value_i64(-1); ExactValue min_value = exact_value_i64(0); ExactValue max_value = exact_value_i64(0); + bool min_value_set = false; + bool max_value_set = false; scope_reserve(ctx->scope, et->fields.count); @@ -810,11 +812,21 @@ void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *named_type, Ast continue; } - if (compare_exact_values(Token_Gt, min_value, iota)) { + if (min_value_set) { + if (compare_exact_values(Token_Gt, min_value, iota)) { + min_value = iota; + } + } else { min_value = iota; + min_value_set = true; } - if (compare_exact_values(Token_Lt, max_value, iota)) { + if (max_value_set) { + if (compare_exact_values(Token_Lt, max_value, iota)) { + max_value = iota; + } + } else { max_value = iota; + max_value_set = true; } Entity *e = alloc_entity_constant(ctx->scope, ident->Ident.token, constant_type, iota); diff --git a/src/parser.cpp b/src/parser.cpp index 12b7edb01..821c699c2 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1223,7 +1223,6 @@ void fix_advance_to_next_stmt(AstFile *f) { case Token_return: case Token_switch: case Token_defer: - case Token_asm: case Token_using: case Token_break: diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 1537b8139..6fed6d97d 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -122,9 +122,6 @@ TOKEN_KIND(Token__KeywordBegin, ""), \ TOKEN_KIND(Token_type_of, "type_of"), \ TOKEN_KIND(Token_macro, "macro"), \ TOKEN_KIND(Token_const, "const"), \ - TOKEN_KIND(Token_asm, "asm"), \ - TOKEN_KIND(Token_yield, "yield"), \ - TOKEN_KIND(Token_await, "await"), \ TOKEN_KIND(Token__KeywordEnd, ""), \ TOKEN_KIND(Token_Count, "")