diff options
| author | Ginger Bill <bill@gingerbill.org> | 2016-09-21 23:26:31 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2016-09-21 23:26:31 +0100 |
| commit | 664c2cd7a587feb18f02378506bdade2503343d3 (patch) | |
| tree | 2c0b5e972eaa2cc74ec67c377a9bd8f6e284b24e /src | |
| parent | 33bd3f635f9d98636ab4631fac9cff4e9d7fdb4d (diff) | |
Fix enum type comparison; Start demo 003 code
Diffstat (limited to 'src')
| -rw-r--r-- | src/checker/checker.cpp | 2 | ||||
| -rw-r--r-- | src/checker/type.cpp | 8 | ||||
| -rw-r--r-- | src/codegen/ssa.cpp | 3 | ||||
| -rw-r--r-- | src/main.cpp | 2 | ||||
| -rw-r--r-- | src/parser.cpp | 32 |
5 files changed, 30 insertions, 17 deletions
diff --git a/src/checker/checker.cpp b/src/checker/checker.cpp index 6a209cf08..bb093de0d 100644 --- a/src/checker/checker.cpp +++ b/src/checker/checker.cpp @@ -418,7 +418,7 @@ Entity *scope_insert_entity(Scope *s, Entity *entity) { void check_scope_usage(Checker *c, Scope *scope) { // TODO(bill): Use this? -#if 1 +#if 0 gb_for_array(i, scope->elements.entries) { auto *entry = scope->elements.entries + i; Entity *e = entry->value; diff --git a/src/checker/type.cpp b/src/checker/type.cpp index c8fe672f7..ae415b3d5 100644 --- a/src/checker/type.cpp +++ b/src/checker/type.cpp @@ -599,12 +599,8 @@ b32 are_types_identical(Type *x, Type *y) { break; case TypeRecord_Enum: - if (are_types_identical(x->Record.enum_base, y->Record.enum_base)) { - if (x->Record.field_count == y->Record.field_count) { - return x->Record.fields == y->Record.fields; - } - } - return false; + // NOTE(bill): Each enum is unique + return x == y; } } } diff --git a/src/codegen/ssa.cpp b/src/codegen/ssa.cpp index b45bbe5d5..959e3faf8 100644 --- a/src/codegen/ssa.cpp +++ b/src/codegen/ssa.cpp @@ -1348,9 +1348,8 @@ isize ssa_type_info_index(CheckerInfo *info, Type *type) { } } if (entry_index < 0) { - gb_printf_err("%s\n", type_to_string(type)); + compiler_error("Type_Info for `%s` could not be found", type_to_string(type)); } - GB_ASSERT(entry_index >= 0); return entry_index; } diff --git a/src/main.cpp b/src/main.cpp index e4bf5fb7d..1e0528863 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,7 +22,7 @@ i32 win32_exec_command_line_app(char *fmt, ...) { va_end(va); if (CreateProcessA(NULL, cmd_line, - NULL, NULL, true, 0, NULL, NULL, + NULL, NULL, true, 0, NULL, NULL, &start_info, &pi)) { WaitForSingleObject(pi.hProcess, INFINITE); diff --git a/src/parser.cpp b/src/parser.cpp index 2ae1dd2aa..0fcb7110a 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1499,7 +1499,14 @@ AstNode *parse_atom_expr(AstFile *f, b32 lhs) { case Token_OpenBrace: { if (!lhs && is_literal_type(operand) && f->expr_level >= 0) { - operand = parse_literal_value(f, operand); + if (f->cursor[0].pos.line == f->cursor[-1].pos.line) { + // TODO(bill): This is a hack due to optional semicolons + // TODO(bill): It's probably much better to solve this by changing + // the syntax for struct literals and array literals + operand = parse_literal_value(f, operand); + } else { + loop = false; + } } else { loop = false; } @@ -1553,13 +1560,24 @@ AstNode *parse_binary_expr(AstFile *f, b32 lhs, i32 prec_in) { switch (op.kind) { case Token_DoublePrime: { + // TODO(bill): Properly define semantic for in-fix and post-fix calls AstNode *proc = parse_identifier(f); - AstNode *right = parse_binary_expr(f, false, prec+1); - gbArray(AstNode *) args; - gb_array_init_reserve(args, gb_arena_allocator(&f->arena), 2); - gb_array_append(args, expression); - gb_array_append(args, right); - expression = make_call_expr(f, proc, args, op, ast_node_token(right), empty_token); + /* if (f->cursor[0].kind == Token_OpenParen) { + AstNode *call = parse_call_expr(f, proc); + gb_array_append(call->CallExpr.args, expression); + for (isize i = gb_array_count(call->CallExpr.args)-1; i > 0; i--) { + gb_swap(AstNode *, call->CallExpr.args[i], call->CallExpr.args[i-1]); + } + + expression = call; + } else */{ + AstNode *right = parse_binary_expr(f, false, prec+1); + gbArray(AstNode *) args; + gb_array_init_reserve(args, gb_arena_allocator(&f->arena), 2); + gb_array_append(args, expression); + gb_array_append(args, right); + expression = make_call_expr(f, proc, args, op, ast_node_token(right), empty_token); + } continue; } break; |