aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.c
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-02-11 21:20:57 +0000
committerGinger Bill <bill@gingerbill.org>2017-02-11 21:20:57 +0000
commite1fdd675cebc6e6dad50a359d8908c779a6d69b5 (patch)
tree76c5d3a0c34e2ea3c2100545a683ef3b2e797425 /src/check_expr.c
parent4306345ff10e9f8225b156633aa986fee3f97987 (diff)
v0.1.0v0.1.0
Added: * Dynamic Arrays `[...]Type` * Dynamic Maps `map[Key]Value` * Dynamic array and map literals * Custom struct alignemnt `struct #align 8 { bar: i8 }` * Allow `_` in numbers * Variadic `append` * fmt.sprint* * Entities prefixes with an underscore do not get exported on imports * Overloaded `free` for pointers, slices, strings, dynamic arrays, and dynamic maps * enum types have an implict `names` field, a []string of all the names in that enum Removed: * Maybe/option types * immutable variables * Remove `type` keyword and other "reserved" keywords * `compile_assert` and `assert`return the value of the condition for semantic reasons Changed: * thread_local -> #thread_local * #include -> #load * Files only get checked if they are actually used * match x in y {} // For type match statements * Version numbering now starts from 0.1.0 and uses the convention: - major.minor.patch Fixes: * Many fmt.* fixes To come very Soon™: * Linux and OS X builds (unofficial ones do exist already)
Diffstat (limited to 'src/check_expr.c')
-rw-r--r--src/check_expr.c28
1 files changed, 8 insertions, 20 deletions
diff --git a/src/check_expr.c b/src/check_expr.c
index a6a07b140..de494a9cd 100644
--- a/src/check_expr.c
+++ b/src/check_expr.c
@@ -2532,7 +2532,6 @@ Entity *check_selector(Checker *c, Operand *operand, AstNode *node, Type *type_h
}
if (op_expr->kind == AstNode_Ident) {
- b32 is_not_exported = true;
String name = op_expr->Ident.string;
Entity *e = scope_lookup_entity(c->context.scope, name);
@@ -2576,14 +2575,19 @@ Entity *check_selector(Checker *c, Operand *operand, AstNode *node, Type *type_h
}
}
-
- is_not_exported = !is_entity_name_exported(entity);
+ bool implicit_is_found = map_bool_get(&e->ImportName.scope->implicit, hash_pointer(entity)) != NULL;
+ bool is_not_exported = !is_entity_exported(entity);
+ if (!implicit_is_found) {
+ is_not_exported = false;
+ } else if (entity->kind == Entity_ImportName) {
+ is_not_exported = true;
+ }
if (is_not_exported) {
gbString sel_str = expr_to_string(selector);
error_node(op_expr, "`%s` is not exported by `%.*s`", sel_str, LIT(name));
gb_string_free(sel_str);
- // NOTE(bill): We will have to cause an error his even though it exists
+ // NOTE(bill): Not really an error so don't goto error
goto error;
}
@@ -2629,22 +2633,6 @@ Entity *check_selector(Checker *c, Operand *operand, AstNode *node, Type *type_h
return procs[0];
}
}
-
- bool *found = map_bool_get(&e->ImportName.scope->implicit, hash_pointer(entity));
- if (!found) {
- is_not_exported = false;
- } else {
- if (entity->kind == Entity_ImportName) {
- is_not_exported = true;
- }
- }
-
- if (is_not_exported) {
- gbString sel_str = expr_to_string(selector);
- error_node(op_expr, "`%s` is not exported by `%.*s`", sel_str, LIT(name));
- gb_string_free(sel_str);
- // NOTE(bill): Not really an error so don't goto error
- }
}
}