Rewriting field.accesses that evaluate to constants

This commit is contained in:
Krzosa Karol
2022-05-31 13:39:34 +02:00
parent 1168965ba4
commit 369418b042
3 changed files with 28 additions and 30 deletions

View File

@@ -78,20 +78,7 @@ function void
gen_expr(Ast_Expr *ast){
switch(ast->kind){
CASE(IDENT, Atom){
Sym *sym = resolved_get(node);
if(sym){
if(sym->kind == SYM_CONST){
if(sym->type == type_int){
gen("%lld", sym->int_val);
}
else if(sym->type == type_string){
gen("LIT(\"%s\")", sym->intern_val.str);
}
else gen("%s", node->intern_val.str);
}
else gen("%s", node->intern_val.str);
}
else gen("%s", node->intern_val.str);
gen("%s", node->intern_val.str);
BREAK();
}
@@ -116,15 +103,10 @@ gen_expr(Ast_Expr *ast){
CASE(BINARY, Binary){
if(node->op == TK_Dot){
Sym *sym = resolved_get(node->left);
if(sym->kind == SYM_CONST){
gen("%lld", sym->int_val);
}
else{
gen_expr(node->left);
if(sym->type->kind == TYPE_POINTER) gen("->");
else gen(".");
gen_expr(node->right);
}
gen_expr(node->left);
if(sym->type->kind == TYPE_POINTER) gen("->");
else gen(".");
gen_expr(node->right);
}
else{
gen("(");