diff --git a/ccodegen.cpp b/ccodegen.cpp index 7ec6e00..ea7797c 100644 --- a/ccodegen.cpp +++ b/ccodegen.cpp @@ -116,29 +116,20 @@ gen_expr(Ast_Expr *ast){ } CASE(BINARY, Binary){ - // if(node->op == TK_Dot){ - // Sym *sym = resolved_get(node->left); - // gen_expr(node->left); - // if(sym->type->kind == TYPE_POINTER) gen("->"); - // else gen("."); - // gen_expr(node->right); - // } - // else if(node->op == TK_ColonAssign){ + if(node->op == TK_Dot){ + gen_expr(node->left); + if(node->type->kind == TYPE_POINTER) gen("->"); + else gen("."); + gen_expr(node->right); + return; + } - // Sym *sym = resolved_get(node); - // Ast_Atom *atom = (Ast_Atom *)node->left; - // assert(is_atom(atom)); - // gen_simple_decl(sym->type, atom->intern_val); - // if(node->right){ - // gen(" = "); - // gen_expr(node->right); - // } - // } if(!token_is_assign(node->op)) gen("("); gen_expr(node->left); gen("%s", name(node->op)); gen_expr(node->right); if(!token_is_assign(node->op)) gen(")"); + BREAK(); } diff --git a/lambdas.kl b/lambdas.kl index f6f2724..3f3e09a 100644 --- a/lambdas.kl +++ b/lambdas.kl @@ -7,6 +7,7 @@ test: Test member := test.len enum_val: Memory.Allocator_Kind = Memory.Allocator_Kind.Heap +other_enum_val: S64 = cast(enum_val: S64) a_type :: S64 pointer_type :: *S64 diff --git a/order2.kl b/order2.kl index 455091f..0a5d575 100644 --- a/order2.kl +++ b/order2.kl @@ -16,6 +16,7 @@ String16 :: struct data: *void len : S64 +thing := arena_pointer.len with_type: Arena = order2_arena test_dot := with_type.len pointer := &with_type diff --git a/typechecking.cpp b/typechecking.cpp index 204baf5..be33e43 100644 --- a/typechecking.cpp +++ b/typechecking.cpp @@ -504,6 +504,11 @@ resolve_cast(Ast_Cast *node){ node->before_type = expr.type; switch(expr.type->kind){ + case TYPE_ENUM:{ + if(is_int(type)) + expr.type = type; + else goto failure; + }break; case TYPE_POINTER:{ if(is_pointer(type)) expr = operand_rvalue(type);