Folding constant enum access into constant int value
This commit is contained in:
16
ccodegen.cpp
16
ccodegen.cpp
@@ -103,10 +103,15 @@ 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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
else{
|
||||
gen("(");
|
||||
@@ -305,6 +310,9 @@ gen_ast(Ast *ast){
|
||||
else if(sym->type == type_string){
|
||||
gen("String %s = LIT(\"%s\");", node->name.str, sym->intern_val.str);
|
||||
}
|
||||
else if(sym->type->kind == TYPE_ENUM){
|
||||
gen("enum { %s = %lld };", node->name.str, sym->int_val);
|
||||
}
|
||||
else if(sym->type == type_type){
|
||||
if(sym->type_val->kind == TYPE_STRUCT){
|
||||
Ast_Struct *agg = (Ast_Struct *)sym->type_val->ast;
|
||||
|
||||
Reference in New Issue
Block a user