aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2016-09-21 23:26:31 +0100
committerGinger Bill <bill@gingerbill.org>2016-09-21 23:26:31 +0100
commit664c2cd7a587feb18f02378506bdade2503343d3 (patch)
tree2c0b5e972eaa2cc74ec67c377a9bd8f6e284b24e /src
parent33bd3f635f9d98636ab4631fac9cff4e9d7fdb4d (diff)
Fix enum type comparison; Start demo 003 code
Diffstat (limited to 'src')
-rw-r--r--src/checker/checker.cpp2
-rw-r--r--src/checker/type.cpp8
-rw-r--r--src/codegen/ssa.cpp3
-rw-r--r--src/main.cpp2
-rw-r--r--src/parser.cpp32
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;