Field access codegen works, properly converts to arrows
This commit is contained in:
25
ccodegen.cpp
25
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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user