Initial enums working
This commit is contained in:
26
ccodegen.cpp
26
ccodegen.cpp
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user