Initial enums working

This commit is contained in:
Krzosa Karol
2022-05-31 11:50:36 +02:00
parent 5e0aabb1cb
commit 627e2bad88
8 changed files with 168 additions and 17 deletions

View File

@@ -28,6 +28,7 @@ gen_simple_decl_prefix(Ast_Resolved_Type *ast){
case TYPE_POINTER:{gen_simple_decl_prefix(ast->base); gen("*");} break;
case TYPE_ARRAY: gen_simple_decl_prefix(ast->base); break;
case TYPE_LAMBDA:break;
case TYPE_ENUM:
case TYPE_STRUCT: {
auto constant = (Ast_Const *)ast->ast->parent;
auto name = constant->name;
@@ -48,7 +49,7 @@ gen_simple_decl_postfix(Ast_Resolved_Type *ast){
case TYPE_POINTER: gen_simple_decl_postfix(ast->base); break;
case TYPE_ARRAY: gen("[%d]", (int)ast->arr.size); gen_simple_decl_postfix(ast->arr.base); break;
case TYPE_LAMBDA:break;
case TYPE_STRUCT:break;
case TYPE_ENUM: case TYPE_STRUCT:break;
invalid_default_case;
}
}
@@ -323,7 +324,28 @@ gen_ast(Ast *ast){
genln("};");
}
else{
// type alias
// Type alias
}
}
else if(sym->type_val->kind == TYPE_ENUM){
Ast_Enum *enu = (Ast_Enum *)sym->type_val->ast;
assert(enu->kind == AST_ENUM);
if(node->value->kind == AST_ENUM){
gen("enum %s{", node->name.str);
// @todo add typespec
global_indent++;
For(enu->members){
genln("%s", it->name.str);
gen(" = ");
Sym *value_sym = resolved_get(it);
gen("%d", value_sym->int_val);
gen(",");
}
global_indent--;
genln("};");
}
else{
// Type alias
}
}
else{