From d233706a2d3c5f1d68622eada8e62823c7d992b1 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Wed, 19 Jul 2017 22:17:57 +0100 Subject: [PATCH] Fix minor parsing bug with procedure return types --- code/demo.odin | 4 ++-- core/_preload.odin | 8 ++++---- src/parser.cpp | 9 ++++++++- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/code/demo.odin b/code/demo.odin index ce2a160a1..4d87bbfec 100644 --- a/code/demo.odin +++ b/code/demo.odin @@ -1,6 +1,6 @@ import "fmt.odin"; main :: proc() { - v, ok := fmt.string_to_enum_value(Allocator.Mode, "FreeAll"); - if ok do assert(v == Allocator.Mode.FreeAll); + fmt.println("Hellope!"); } + diff --git a/core/_preload.odin b/core/_preload.odin index 99f6a828f..1d04a3be5 100644 --- a/core/_preload.odin +++ b/core/_preload.odin @@ -236,10 +236,10 @@ type_info_base_without_enum :: proc(info: ^TypeInfo) -> ^TypeInfo { foreign __llvm_core { - assume :: proc(cond: bool) #link_name "llvm.assume" ---; - __debug_trap :: proc() #link_name "llvm.debugtrap" ---; - __trap :: proc() #link_name "llvm.trap" ---; - read_cycle_counter :: proc() -> u64 #link_name "llvm.readcyclecounter" ---; + assume :: proc(cond: bool) #cc_c #link_name "llvm.assume" ---; + __debug_trap :: proc() #cc_c #link_name "llvm.debugtrap" ---; + __trap :: proc() #cc_c #link_name "llvm.trap" ---; + read_cycle_counter :: proc() -> u64 #cc_c #link_name "llvm.readcyclecounter" ---; } diff --git a/src/parser.cpp b/src/parser.cpp index 4b8c597db..0fbe160cb 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -3391,6 +3391,10 @@ AstNode *parse_results(AstFile *f) { return nullptr; } + isize prev_level = f->expr_level; + defer (f->expr_level = prev_level); + // f->expr_level = -1; + if (f->curr_token.kind != Token_OpenParen) { CommentGroup empty_group = {}; Token begin_token = f->curr_token; @@ -3790,10 +3794,13 @@ AstNode *parse_field_list(AstFile *f, isize *name_count_, u32 allowed_flags, Tok AstNode *parse_type_or_ident(AstFile *f) { #if 1 bool prev_allow_type = f->allow_type; + isize prev_expr_level = f->expr_level; + defer (f->allow_type = prev_allow_type); + defer (f->expr_level = prev_expr_level); f->allow_type = true; + f->expr_level = -1; AstNode *operand = parse_operand(f, true); AstNode *type = parse_atom_expr(f, operand, true); - f->allow_type = prev_allow_type; return type; #else switch (f->curr_token.kind) {