Field access codegen works, properly converts to arrows

This commit is contained in:
Krzosa Karol
2022-06-10 21:46:14 +02:00
parent db7303a2c1
commit 2db6722406
4 changed files with 15 additions and 17 deletions

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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

View File

@@ -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);