diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-01-01 16:58:38 +0000 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-01-01 16:58:38 +0000 |
| commit | 311b5cb6e211aa49d8dc0e081173204d7271964f (patch) | |
| tree | 34e46ebf224736b737f72b2873d5afcaab8d5f17 | |
| parent | 6fef74317cdd0e403fb913ebe965dc08b3dfb22d (diff) | |
Add enum type info and fix enum casting
| -rw-r--r-- | code/demo.odin | 7 | ||||
| -rw-r--r-- | core/_preload.odin | 9 | ||||
| -rw-r--r-- | core/sys/windows.odin | 301 | ||||
| -rw-r--r-- | src/checker/checker.c | 3 | ||||
| -rw-r--r-- | src/checker/decl.c | 6 | ||||
| -rw-r--r-- | src/checker/entity.c | 12 | ||||
| -rw-r--r-- | src/checker/expr.c | 14 | ||||
| -rw-r--r-- | src/checker/stmt.c | 5 | ||||
| -rw-r--r-- | src/parser.c | 13 | ||||
| -rw-r--r-- | src/ssa.c | 14 | ||||
| -rw-r--r-- | src/tokenizer.c | 1 |
11 files changed, 185 insertions, 200 deletions
diff --git a/code/demo.odin b/code/demo.odin index bd4ab5dcd..1106b1295 100644 --- a/code/demo.odin +++ b/code/demo.odin @@ -11,13 +11,14 @@ import { win32 "sys/windows.odin"; } + type Thing enum f64 { _, // Ignore first value A = 1<<(10*iota), B, C, D, -} +}; proc main() { var ti = type_info(Thing); @@ -32,6 +33,8 @@ proc main() { fmt.println(); } - fmt.println(Thing.A, Thing.B, Thing.C, Thing.D); + var x Thing = Thing.A; + + fmt.println(x, Thing.B, Thing.C, Thing.D); } diff --git a/core/_preload.odin b/core/_preload.odin index 2fafc408a..e37c36a7c 100644 --- a/core/_preload.odin +++ b/core/_preload.odin @@ -1,10 +1,8 @@ #shared_global_scope; -import { - "os.odin"; - "fmt.odin"; - "mem.odin"; -} +import "os.odin"; +import "fmt.odin"; +import "mem.odin"; // IMPORTANT NOTE(bill): `type_info` & `type_info_val` cannot be used within a // #shared_global_scope due to the internals of the compiler. @@ -76,6 +74,7 @@ type { Enum struct #ordered { base ^Type_Info; names []string; + // TODO(bill): store values some how. Maybe using a raw_union }; } } diff --git a/core/sys/windows.odin b/core/sys/windows.odin index 3e22e1c40..ca0a36467 100644 --- a/core/sys/windows.odin +++ b/core/sys/windows.odin @@ -424,159 +424,152 @@ proc wglDeleteContext (hglrc HGLRC) -> BOOL #foreign #dll_import proc GetKeyState (v_key i32) -> i16 #foreign #dll_import proc GetAsyncKeyState(v_key i32) -> i16 #foreign #dll_import -proc is_key_down(key i32) -> bool #inline { return GetAsyncKeyState(key) < 0; } - -const { - KEY_LBUTTON = 0x01; - KEY_RBUTTON = 0x02; - KEY_CANCEL = 0x03; - KEY_MBUTTON = 0x04; - - KEY_BACK = 0x08; - KEY_TAB = 0x09; - - KEY_CLEAR = 0x0C; - KEY_RETURN = 0x0D; - - KEY_SHIFT = 0x10; - KEY_CONTROL = 0x11; - KEY_MENU = 0x12; - KEY_PAUSE = 0x13; - KEY_CAPITAL = 0x14; - - KEY_KANA = 0x15; - KEY_HANGEUL = 0x15; - KEY_HANGUL = 0x15; - KEY_JUNJA = 0x17; - KEY_FINAL = 0x18; - KEY_HANJA = 0x19; - KEY_KANJI = 0x19; - - KEY_ESCAPE = 0x1B; - - KEY_CONVERT = 0x1C; - KEY_NONCONVERT = 0x1D; - KEY_ACCEPT = 0x1E; - KEY_MODECHANGE = 0x1F; - - KEY_SPACE = 0x20; - KEY_PRIOR = 0x21; - KEY_NEXT = 0x22; - KEY_END = 0x23; - KEY_HOME = 0x24; - KEY_LEFT = 0x25; - KEY_UP = 0x26; - KEY_RIGHT = 0x27; - KEY_DOWN = 0x28; - KEY_SELECT = 0x29; - KEY_PRINT = 0x2A; - KEY_EXECUTE = 0x2B; - KEY_SNAPSHOT = 0x2C; - KEY_INSERT = 0x2D; - KEY_DELETE = 0x2E; - KEY_HELP = 0x2F; - - KEY_NUM0 = '0'; - KEY_NUM1 = '1'; - KEY_NUM2 = '2'; - KEY_NUM3 = '3'; - KEY_NUM4 = '4'; - KEY_NUM5 = '5'; - KEY_NUM6 = '6'; - KEY_NUM7 = '7'; - KEY_NUM8 = '8'; - KEY_NUM9 = '9'; - - KEY_A = 'A'; - KEY_B = 'B'; - KEY_C = 'C'; - KEY_D = 'D'; - KEY_E = 'E'; - KEY_F = 'F'; - KEY_G = 'G'; - KEY_H = 'H'; - KEY_I = 'I'; - KEY_J = 'J'; - KEY_K = 'K'; - KEY_L = 'L'; - KEY_M = 'M'; - KEY_N = 'N'; - KEY_O = 'O'; - KEY_P = 'P'; - KEY_Q = 'Q'; - KEY_R = 'R'; - KEY_S = 'S'; - KEY_T = 'T'; - KEY_U = 'U'; - KEY_V = 'V'; - KEY_W = 'W'; - KEY_X = 'X'; - KEY_Y = 'Y'; - KEY_Z = 'Z'; - - KEY_LWIN = 0x5B; - KEY_RWIN = 0x5C; - KEY_APPS = 0x5D; - - KEY_NUMPAD0 = 0x60; - KEY_NUMPAD1 = 0x61; - KEY_NUMPAD2 = 0x62; - KEY_NUMPAD3 = 0x63; - KEY_NUMPAD4 = 0x64; - KEY_NUMPAD5 = 0x65; - KEY_NUMPAD6 = 0x66; - KEY_NUMPAD7 = 0x67; - KEY_NUMPAD8 = 0x68; - KEY_NUMPAD9 = 0x69; - KEY_MULTIPLY = 0x6A; - KEY_ADD = 0x6B; - KEY_SEPARATOR = 0x6C; - KEY_SUBTRACT = 0x6D; - KEY_DECIMAL = 0x6E; - KEY_DIVIDE = 0x6F; - KEY_F1 = 0x70; - KEY_F2 = 0x71; - KEY_F3 = 0x72; - KEY_F4 = 0x73; - KEY_F5 = 0x74; - KEY_F6 = 0x75; - KEY_F7 = 0x76; - KEY_F8 = 0x77; - KEY_F9 = 0x78; - KEY_F10 = 0x79; - KEY_F11 = 0x7A; - KEY_F12 = 0x7B; - KEY_F13 = 0x7C; - KEY_F14 = 0x7D; - KEY_F15 = 0x7E; - KEY_F16 = 0x7F; - KEY_F17 = 0x80; - KEY_F18 = 0x81; - KEY_F19 = 0x82; - KEY_F20 = 0x83; - KEY_F21 = 0x84; - KEY_F22 = 0x85; - KEY_F23 = 0x86; - KEY_F24 = 0x87; - - KEY_NUMLOCK = 0x90; - KEY_SCROLL = 0x91; - - KEY_LSHIFT = 0xA0; - KEY_RSHIFT = 0xA1; - KEY_LCONTROL = 0xA2; - KEY_RCONTROL = 0xA3; - KEY_LMENU = 0xA4; - KEY_RMENU = 0xA5; - KEY_PROCESSKEY = 0xE5; - KEY_ATTN = 0xF6; - KEY_CRSEL = 0xF7; - KEY_EXSEL = 0xF8; - KEY_EREOF = 0xF9; - KEY_PLAY = 0xFA; - KEY_ZOOM = 0xFB; - KEY_NONAME = 0xFC; - KEY_PA1 = 0xFD; - KEY_OEM_CLEAR = 0xFE; +proc is_key_down(key Key_Code) -> bool #inline { return GetAsyncKeyState(key as i32) < 0; } + +type Key_Code enum i32 { + LBUTTON = 0x01, + RBUTTON = 0x02, + CANCEL = 0x03, + MBUTTON = 0x04, + BACK = 0x08, + TAB = 0x09, + CLEAR = 0x0C, + RETURN = 0x0D, + + SHIFT = 0x10, + CONTROL = 0x11, + MENU = 0x12, + PAUSE = 0x13, + CAPITAL = 0x14, + KANA = 0x15, + HANGEUL = 0x15, + HANGUL = 0x15, + JUNJA = 0x17, + FINAL = 0x18, + HANJA = 0x19, + KANJI = 0x19, + ESCAPE = 0x1B, + CONVERT = 0x1C, + NONCONVERT = 0x1D, + ACCEPT = 0x1E, + MODECHANGE = 0x1F, + SPACE = 0x20, + PRIOR = 0x21, + NEXT = 0x22, + END = 0x23, + HOME = 0x24, + LEFT = 0x25, + UP = 0x26, + RIGHT = 0x27, + DOWN = 0x28, + SELECT = 0x29, + PRINT = 0x2A, + EXECUTE = 0x2B, + SNAPSHOT = 0x2C, + INSERT = 0x2D, + DELETE = 0x2E, + HELP = 0x2F, + + NUM0 = '0', + NUM1 = '1', + NUM2 = '2', + NUM3 = '3', + NUM4 = '4', + NUM5 = '5', + NUM6 = '6', + NUM7 = '7', + NUM8 = '8', + NUM9 = '9', + A = 'A', + B = 'B', + C = 'C', + D = 'D', + E = 'E', + F = 'F', + G = 'G', + H = 'H', + I = 'I', + J = 'J', + K = 'K', + L = 'L', + M = 'M', + N = 'N', + O = 'O', + P = 'P', + Q = 'Q', + R = 'R', + S = 'S', + T = 'T', + U = 'U', + V = 'V', + W = 'W', + X = 'X', + Y = 'Y', + Z = 'Z', + + LWIN = 0x5B, + RWIN = 0x5C, + APPS = 0x5D, + + NUMPAD0 = 0x60, + NUMPAD1 = 0x61, + NUMPAD2 = 0x62, + NUMPAD3 = 0x63, + NUMPAD4 = 0x64, + NUMPAD5 = 0x65, + NUMPAD6 = 0x66, + NUMPAD7 = 0x67, + NUMPAD8 = 0x68, + NUMPAD9 = 0x69, + MULTIPLY = 0x6A, + ADD = 0x6B, + SEPARATOR = 0x6C, + SUBTRACT = 0x6D, + DECIMAL = 0x6E, + DIVIDE = 0x6F, + + F1 = 0x70, + F2 = 0x71, + F3 = 0x72, + F4 = 0x73, + F5 = 0x74, + F6 = 0x75, + F7 = 0x76, + F8 = 0x77, + F9 = 0x78, + F10 = 0x79, + F11 = 0x7A, + F12 = 0x7B, + F13 = 0x7C, + F14 = 0x7D, + F15 = 0x7E, + F16 = 0x7F, + F17 = 0x80, + F18 = 0x81, + F19 = 0x82, + F20 = 0x83, + F21 = 0x84, + F22 = 0x85, + F23 = 0x86, + F24 = 0x87, + + NUMLOCK = 0x90, + SCROLL = 0x91, + LSHIFT = 0xA0, + RSHIFT = 0xA1, + LCONTROL = 0xA2, + RCONTROL = 0xA3, + LMENU = 0xA4, + RMENU = 0xA5, + PROCESSKEY = 0xE5, + ATTN = 0xF6, + CRSEL = 0xF7, + EXSEL = 0xF8, + EREOF = 0xF9, + PLAY = 0xFA, + ZOOM = 0xFB, + NONAME = 0xFC, + PA1 = 0xFD, + OEM_CLEAR = 0xFE, } diff --git a/src/checker/checker.c b/src/checker/checker.c index 79ca9eef6..98107c9d0 100644 --- a/src/checker/checker.c +++ b/src/checker/checker.c @@ -1177,7 +1177,6 @@ void check_global_collect_entities_from_file(Checker *c, Scope *parent_scope, As case_end; case_ast_node(vs, ValueSpec, spec); switch (vs->keyword) { - case Token_let: case Token_var: { // NOTE(bill): You need to store the entity information here unline a constant declaration isize entity_count = vs->names.count; @@ -1202,7 +1201,7 @@ void check_global_collect_entities_from_file(Checker *c, Scope *parent_scope, As error_node(name, "A declaration's name must be an identifier, got %.*s", LIT(ast_node_strings[name->kind])); continue; } - Entity *e = make_entity_variable(c->allocator, parent_scope, name->Ident, NULL, vs->keyword == Token_let); + Entity *e = make_entity_variable(c->allocator, parent_scope, name->Ident, NULL); e->identifier = name; entities[entity_index++] = e; diff --git a/src/checker/decl.c b/src/checker/decl.c index 0c4d3f075..d73c79e35 100644 --- a/src/checker/decl.c +++ b/src/checker/decl.c @@ -95,18 +95,20 @@ void check_init_variables(Checker *c, Entity **lhs, isize lhs_count, AstNodeArra error(lhs[0]->token, "Assignment count mismatch `%td` = `%td`", lhs_count, rhs_count); } +#if 0 if (lhs[0]->kind == Entity_Variable && lhs[0]->Variable.is_let) { if (lhs_count != rhs_count) { error(lhs[0]->token, "`let` variables must be initialized, `%td` = `%td`", lhs_count, rhs_count); } } +#endif gb_temp_arena_memory_end(tmp); } void check_var_spec_node(Checker *c, AstNodeValueSpec *vs) { - GB_ASSERT(vs->keyword == Token_var || vs->keyword == Token_let); + GB_ASSERT(vs->keyword == Token_var); isize entity_count = vs->names.count; isize entity_index = 0; Entity **entities = gb_alloc_array(c->allocator, Entity *, entity_count); @@ -123,7 +125,7 @@ void check_var_spec_node(Checker *c, AstNodeValueSpec *vs) { found = current_scope_lookup_entity(c->context.scope, str); } if (found == NULL) { - entity = make_entity_variable(c->allocator, c->context.scope, token, NULL, vs->keyword == Token_let); + entity = make_entity_variable(c->allocator, c->context.scope, token, NULL); add_entity_definition(&c->info, name, entity); } else { TokenPos pos = found->token.pos; diff --git a/src/checker/entity.c b/src/checker/entity.c index 7dcee62d0..85e4c5d8d 100644 --- a/src/checker/entity.c +++ b/src/checker/entity.c @@ -57,7 +57,6 @@ struct Entity { struct { i32 field_index; i32 field_src_index; - bool is_let; } Variable; i32 TypeName; struct { @@ -97,9 +96,8 @@ Entity *alloc_entity(gbAllocator a, EntityKind kind, Scope *scope, Token token, return entity; } -Entity *make_entity_variable(gbAllocator a, Scope *scope, Token token, Type *type, bool is_let) { +Entity *make_entity_variable(gbAllocator a, Scope *scope, Token token, Type *type) { Entity *entity = alloc_entity(a, Entity_Variable, scope, token, type); - entity->Variable.is_let = is_let; return entity; } @@ -124,7 +122,7 @@ Entity *make_entity_type_name(gbAllocator a, Scope *scope, Token token, Type *ty } Entity *make_entity_param(gbAllocator a, Scope *scope, Token token, Type *type, bool anonymous) { - Entity *entity = make_entity_variable(a, scope, token, type, false); + Entity *entity = make_entity_variable(a, scope, token, type); entity->flags |= EntityFlag_Used; entity->flags |= EntityFlag_Anonymous*(anonymous != 0); entity->flags |= EntityFlag_Param; @@ -132,7 +130,7 @@ Entity *make_entity_param(gbAllocator a, Scope *scope, Token token, Type *type, } Entity *make_entity_field(gbAllocator a, Scope *scope, Token token, Type *type, bool anonymous, i32 field_src_index) { - Entity *entity = make_entity_variable(a, scope, token, type, false); + Entity *entity = make_entity_variable(a, scope, token, type); entity->Variable.field_src_index = field_src_index; entity->Variable.field_index = field_src_index; entity->flags |= EntityFlag_Field; @@ -141,7 +139,7 @@ Entity *make_entity_field(gbAllocator a, Scope *scope, Token token, Type *type, } Entity *make_entity_vector_elem(gbAllocator a, Scope *scope, Token token, Type *type, i32 field_src_index) { - Entity *entity = make_entity_variable(a, scope, token, type, false); + Entity *entity = make_entity_variable(a, scope, token, type); entity->Variable.field_src_index = field_src_index; entity->Variable.field_index = field_src_index; entity->flags |= EntityFlag_Field; @@ -186,6 +184,6 @@ Entity *make_entity_implicit_value(gbAllocator a, String name, Type *type, Impli Entity *make_entity_dummy_variable(gbAllocator a, Scope *file_scope, Token token) { token.string = str_lit("_"); - return make_entity_variable(a, file_scope, token, NULL, false); + return make_entity_variable(a, file_scope, token, NULL); } diff --git a/src/checker/expr.c b/src/checker/expr.c index 7b9b0db52..d0116e8b2 100644 --- a/src/checker/expr.c +++ b/src/checker/expr.c @@ -791,7 +791,7 @@ void check_enum_type(Checker *c, Type *enum_type, Type *named_type, AstNode *nod continue; } - GB_ASSERT(c->context.iota.kind == ExactValue_Invalid); + ExactValue context_iota = c->context.iota; c->context.iota = e->Constant.value; e->Constant.value = (ExactValue){0}; @@ -799,7 +799,7 @@ void check_enum_type(Checker *c, Type *enum_type, Type *named_type, AstNode *nod check_expr(c, &operand, init); check_init_constant(c, e, &operand); - c->context.iota = (ExactValue){0}; + c->context.iota = context_iota; if (operand.mode == Addressing_Constant) { HashKey key = hash_string(name); @@ -1001,9 +1001,9 @@ void check_identifier(Checker *c, Operand *o, AstNode *n, Type *named_type) { } #else o->mode = Addressing_Variable; - if (e->Variable.is_let) { - o->mode = Addressing_Value; - } + // if (e->Variable.is_let) { + // o->mode = Addressing_Value; + // } #endif break; @@ -1770,8 +1770,8 @@ bool check_is_castable_to(Checker *c, Operand *operand, Type *y) { } Type *x = operand->type; - Type *xb = base_type(x); - Type *yb = base_type(y); + Type *xb = base_type(base_enum_type(x)); + Type *yb = base_type(base_enum_type(y)); if (are_types_identical(xb, yb)) { return true; } diff --git a/src/checker/stmt.c b/src/checker/stmt.c index 5b7d7887f..4c82267fc 100644 --- a/src/checker/stmt.c +++ b/src/checker/stmt.c @@ -848,7 +848,7 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) { tt = make_type_pointer(c->allocator, case_type); add_type_info_type(c, tt); } - Entity *tag_var = make_entity_variable(c->allocator, c->context.scope, ms->var->Ident, tt, false); + Entity *tag_var = make_entity_variable(c->allocator, c->context.scope, ms->var->Ident, tt); tag_var->flags |= EntityFlag_Used; add_entity(c, c->context.scope, ms->var, tag_var); add_entity_use(c, ms->var, tag_var); @@ -1106,7 +1106,6 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) { case_end; case_ast_node(vs, ValueSpec, spec); switch (vs->keyword) { - case Token_let: case Token_var: { isize entity_count = vs->names.count; isize entity_index = 0; @@ -1124,7 +1123,7 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) { found = current_scope_lookup_entity(c->context.scope, str); } if (found == NULL) { - entity = make_entity_variable(c->allocator, c->context.scope, token, NULL, vs->keyword == Token_let); + entity = make_entity_variable(c->allocator, c->context.scope, token, NULL); add_entity_definition(&c->info, name, entity); } else { TokenPos pos = found->token.pos; diff --git a/src/parser.c b/src/parser.c index a7d9b4282..2d61c9e92 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1211,7 +1211,6 @@ void fix_advance_to_next_stmt(AstFile *f) { return; case Token_var: - case Token_let: case Token_const: case Token_type: case Token_proc: @@ -2154,7 +2153,6 @@ PARSE_SPEC_PROC(parse_value_spec) { switch (keyword) { case Token_var: - case Token_let: if (type == NULL && values.count == 0 && names.count > 0) { syntax_error(f->curr_token, "Missing type or initialization"); return make_bad_decl(f, f->curr_token, f->curr_token); @@ -2240,7 +2238,6 @@ PARSE_SPEC_PROC(parse_include_spec) { AstNode *parse_decl(AstFile *f) { switch (f->curr_token.kind) { case Token_var: - case Token_let: case Token_const: return parse_generic_decl(f, f->curr_token.kind, parse_value_spec); @@ -2269,7 +2266,6 @@ AstNode *parse_decl(AstFile *f) { AstNode *parse_simple_stmt(AstFile *f) { switch (f->curr_token.kind) { case Token_var: - case Token_let: case Token_const: return parse_decl(f); } @@ -2555,9 +2551,11 @@ AstNode *parse_identifier_or_type(AstFile *f) { base_type = parse_type(f); } Token open = expect_token(f, Token_OpenBrace); - AstNodeArray fields = parse_element_list(f); + + AstNodeArray values = parse_element_list(f); Token close = expect_token(f, Token_CloseBrace); - return make_enum_type(f, token, base_type, fields); + + return make_enum_type(f, token, base_type, values); } case Token_proc: { @@ -3026,7 +3024,6 @@ AstNode *parse_stmt(AstFile *f) { return s; case Token_var: - case Token_let: case Token_const: case Token_proc: case Token_type: @@ -3071,8 +3068,6 @@ AstNode *parse_stmt(AstFile *f) { case AstNode_GenericDecl: if (node->GenericDecl.token.kind == Token_var) { valid = true; - } else if (node->GenericDecl.token.kind == Token_let) { - valid = true; } break; } @@ -1233,8 +1233,7 @@ ssaValue *ssa_add_local_generated(ssaProcedure *proc, Type *type) { Entity *e = make_entity_variable(proc->module->allocator, scope, empty_token, - type, - false); + type); return ssa_add_local(proc, e); } @@ -1920,8 +1919,8 @@ ssaValue *ssa_emit_conv(ssaProcedure *proc, ssaValue *value, Type *t) { return value; } - Type *src = base_type(src_type); - Type *dst = base_type(t); + Type *src = base_type(base_enum_type(src_type)); + Type *dst = base_type(base_enum_type(t)); if (value->kind == ssaValue_Constant) { if (is_type_any(dst)) { @@ -3934,7 +3933,6 @@ void ssa_build_stmt_internal(ssaProcedure *proc, AstNode *node) { switch (vs->keyword) { case Token_const: break; - case Token_let: case Token_var: { ssaModule *m = proc->module; gbTempArenaMemory tmp = gb_temp_arena_memory_begin(&m->tmp_arena); @@ -4784,7 +4782,7 @@ void ssa_init_module(ssaModule *m, Checker *c, BuildContext *build_context) { { String name = str_lit(SSA_TYPE_INFO_DATA_NAME); isize count = c->info.type_info_map.entries.count; - Entity *e = make_entity_variable(m->allocator, NULL, make_token_ident(name), make_type_array(m->allocator, t_type_info, count), false); + Entity *e = make_entity_variable(m->allocator, NULL, make_token_ident(name), make_type_array(m->allocator, t_type_info, count)); ssaValue *g = ssa_make_value_global(m->allocator, e, NULL); g->Global.is_private = true; ssa_module_add_value(m, e, g); @@ -4816,7 +4814,7 @@ void ssa_init_module(ssaModule *m, Checker *c, BuildContext *build_context) { String name = str_lit(SSA_TYPE_INFO_DATA_MEMBER_NAME); Entity *e = make_entity_variable(m->allocator, NULL, make_token_ident(name), - make_type_array(m->allocator, t_type_info_member, count), false); + make_type_array(m->allocator, t_type_info_member, count)); ssaValue *g = ssa_make_value_global(m->allocator, e, NULL); ssa_module_add_value(m, e, g); map_ssa_value_set(&m->members, hash_string(name), g); @@ -5504,7 +5502,7 @@ void ssa_gen_tree(ssaGen *s) { token.string.text = gb_alloc_array(a, u8, name_len); token.string.len = gb_snprintf(cast(char *)token.string.text, name_len, "%s-%d", name_base, id)-1; - Entity *e = make_entity_variable(a, NULL, token, make_type_array(a, t_string, count), false); + Entity *e = make_entity_variable(a, NULL, token, make_type_array(a, t_string, count)); name_array = ssa_make_value_global(a, e, NULL); name_array->Global.is_private = true; ssa_module_add_value(m, e, name_array); diff --git a/src/tokenizer.c b/src/tokenizer.c index a35ed070e..c80f7bf2a 100644 --- a/src/tokenizer.c +++ b/src/tokenizer.c @@ -85,7 +85,6 @@ TOKEN_KIND(Token__KeywordBegin, "_KeywordBegin"), \ TOKEN_KIND(Token_type, "type"), \ TOKEN_KIND(Token_proc, "proc"), \ TOKEN_KIND(Token_var, "var"), \ - TOKEN_KIND(Token_let, "let"), \ TOKEN_KIND(Token_const, "const"), \ TOKEN_KIND(Token_import, "import"), \ TOKEN_KIND(Token_include, "include"), \ |