Fix parsing for comments; add global ODIN_* string constants

This commit is contained in:
Ginger Bill
2016-11-24 23:22:16 +00:00
parent 5aa0ef54c8
commit cbb70c7873
5 changed files with 12 additions and 57 deletions
+5
View File
@@ -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;
+4 -7
View File
@@ -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);
+1 -7
View File
@@ -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 <size_t N> gb_inline bool operator ==(char const (&a)[N], String b) { return make_string(cast(u8 *)a, N-1) == b; }
// template <size_t N> 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; }