From cbb70c78731b9d928508a52180a186b178d30a5e Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Thu, 24 Nov 2016 23:22:16 +0000 Subject: [PATCH] Fix parsing for comments; add global ODIN_* string constants --- build.bat | 2 +- code/demo.odin | 43 +------------------------------------------ src/checker/checker.c | 5 +++++ src/parser.c | 11 ++++------- src/string.c | 8 +------- 5 files changed, 12 insertions(+), 57 deletions(-) diff --git a/build.bat b/build.bat index c5a84c5ef..0b11f4dc2 100644 --- a/build.bat +++ b/build.bat @@ -4,7 +4,7 @@ set exe_name=odin.exe :: Debug = 0, Release = 1 -set release_mode=1 +set release_mode=0 set compiler_flags= -nologo -Oi -TC -W4 -fp:fast -fp:except- -Gm- -MP -FC -GS- -EHsc- -GR- diff --git a/code/demo.odin b/code/demo.odin index bd3067037..a1916e589 100644 --- a/code/demo.odin +++ b/code/demo.odin @@ -1,46 +1,5 @@ #import "fmt.odin" -variadic :: proc(args: ..any) { - for i := 0; i < args.count; i++ { - match type a : args[i] { - case u128: fmt.println("u128", a) - case i128: fmt.println("i128", a) - } - } - - fmt.println(..args) -} - main :: proc() { - fmt.println("Hellope, everybody!") - - variadic(1 as u128, 1 as i128) - - // x: i128 = 321312321 - // y: i128 = 123123123 - // z: i128 - // x *= x; x *= x - // y *= y; y *= y - // fmt.println("x =", x) - // fmt.println("y =", y) - // z = x + y; fmt.println("x + y", z) - // z = x - y; fmt.println("x - y", z) - // z = x * y; fmt.println("x * y", z) - // z = x / y; fmt.println("x / y", z) - // z = x % y; fmt.println("x % y", z) - // z = x & y; fmt.println("x & y", z) - // z = x ~ y; fmt.println("x ~ y", z) - // z = x | y; fmt.println("x | y", z) - // z = x &~ y; fmt.println("x &~ y", z) - - // z = -x - // z = ~x - - // b: bool - // b = x == y; fmt.println("x == y", b) - // b = x != y; fmt.println("x != y", b) - // b = x < y; fmt.println("x < y", b) - // b = x <= y; fmt.println("x <= y", b) - // b = x > y; fmt.println("x > y", b) - // b = x >= y; fmt.println("x >= y", b) + fmt.println("Hellope, World!") } diff --git a/src/checker/checker.c b/src/checker/checker.c index 889efa1d3..ccd97cad3 100644 --- a/src/checker/checker.c +++ b/src/checker/checker.c @@ -528,6 +528,11 @@ void init_universal_scope(void) { add_global_entity(make_entity_nil(a, str_lit("nil"), t_untyped_nil)); + add_global_constant(a, str_lit("ODIN_OS"), t_untyped_string, make_exact_value_string(str_lit("windows"))); + add_global_constant(a, str_lit("ODIN_ARCH"), t_untyped_string, make_exact_value_string(str_lit("amd64"))); + add_global_constant(a, str_lit("ODIN_VERSION"), t_untyped_string, make_exact_value_string(str_lit(VERSION_STRING))); + + // Builtin Procedures for (isize i = 0; i < gb_count_of(builtin_procs); i++) { BuiltinProcId id = cast(BuiltinProcId)i; diff --git a/src/parser.c b/src/parser.c index 1ea8ba430..c5eae58b0 100644 --- a/src/parser.c +++ b/src/parser.c @@ -100,6 +100,7 @@ AstNodeArray make_ast_node_array(AstFile *f) { } + #define AST_NODE_KINDS \ AST_NODE_KIND(BasicLit, "basic literal", Token) \ AST_NODE_KIND(Ident, "identifier", Token) \ @@ -2656,10 +2657,6 @@ AstNode *parse_stmt(AstFile *f) { AstNode *s = NULL; Token token = f->curr_token; switch (token.kind) { - case Token_Comment: - next_token(f); - return parse_stmt(f); - // Operands case Token_Identifier: case Token_Integer: @@ -2886,9 +2883,6 @@ ParseFileError init_ast_file(AstFile *f, String fullpath) { if (token.kind == Token_Invalid) { return ParseFile_InvalidToken; } - if (token.kind == Token_Comment) { - continue; - } array_add(&f->tokens, token); if (token.kind == Token_EOF) { @@ -3097,6 +3091,9 @@ void parse_file(Parser *p, AstFile *f) { base_dir.len--; } + while (f->curr_token.kind == Token_Comment) { + next_token(f); + } f->decls = parse_stmt_list(f); diff --git a/src/string.c b/src/string.c index b52b8886e..b54b1d24f 100644 --- a/src/string.c +++ b/src/string.c @@ -49,12 +49,6 @@ gb_inline String make_string_c(char *text) { #define str_lit(c_str) make_string(cast(u8 *)c_str, gb_size_of(c_str)-1) -gb_inline bool are_strings_equal(String a, String b) { - if (a.len == b.len) { - return gb_memcompare(a.text, b.text, a.len) == 0; - } - return false; -} gb_inline bool str_eq_ignore_case(String a, String b) { if (a.len == b.len) { @@ -125,7 +119,7 @@ GB_COMPARE_PROC(string_cmp_proc) { // template gb_inline bool operator ==(char const (&a)[N], String b) { return make_string(cast(u8 *)a, N-1) == b; } // template gb_inline bool operator !=(char const (&a)[N], String b) { return make_string(cast(u8 *)a, N-1) != b; } -gb_inline bool str_eq(String a, String b) { return are_strings_equal(a, b) != 0; } +gb_inline bool str_eq(String a, String b) { return a.len == b.len ? gb_memcompare(a.text, b.text, a.len) == 0 : false; } gb_inline bool str_ne(String a, String b) { return !str_eq(a, b); } gb_inline bool str_lt(String a, String b) { return string_compare(a, b) < 0; } gb_inline bool str_gt(String a, String b) { return string_compare(a, b) > 0; }