diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-02-11 21:20:57 +0000 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-02-11 21:20:57 +0000 |
| commit | e1fdd675cebc6e6dad50a359d8908c779a6d69b5 (patch) | |
| tree | 76c5d3a0c34e2ea3c2100545a683ef3b2e797425 /src/check_expr.c | |
| parent | 4306345ff10e9f8225b156633aa986fee3f97987 (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.c | 28 |
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 - } } } |