Enum members have const syntax, enum members gen S64 type by default,

This commit is contained in:
Krzosa Karol
2022-06-10 21:36:36 +02:00
parent 862a820ec7
commit 9b03147099
6 changed files with 10 additions and 5 deletions

View File

@@ -26,7 +26,9 @@ gen_simple_decl_prefix(Ast_Resolved_Type *ast){
case TYPE_POINTER: gen_simple_decl_prefix(ast->base); gen("*"); break; case TYPE_POINTER: gen_simple_decl_prefix(ast->base); gen("*"); break;
case TYPE_ARRAY: gen_simple_decl_prefix(ast->base); break; case TYPE_ARRAY: gen_simple_decl_prefix(ast->base); break;
case TYPE_LAMBDA:break; case TYPE_LAMBDA:break;
case TYPE_ENUM: case TYPE_ENUM:{
gen_simple_decl_prefix(ast->base); break;
}break;
case TYPE_STRUCT: { case TYPE_STRUCT: {
auto constant = (Ast_Decl *)ast->ast; auto constant = (Ast_Decl *)ast->ast;
auto name = constant->name; auto name = constant->name;

View File

@@ -3,7 +3,7 @@ package Memory
Allocator_Kind :: enum Allocator_Kind :: enum
Null Null
Arena Arena
Heap Heap :: 4
kind := Allocator_Kind.Heap kind := Allocator_Kind.Heap

View File

@@ -6,7 +6,7 @@ Test :: struct
test: Test test: Test
member := test.len member := test.len
thing: Memory.Allocator_Kind = Memory.Allocator_Kind.Heap enum_val: Memory.Allocator_Kind = Memory.Allocator_Kind.Heap
a_type :: S64 a_type :: S64
pointer_type :: *S64 pointer_type :: *S64

View File

@@ -537,7 +537,8 @@ parse_enum(Token *pos){
Ast_Scope *scope = begin_decl_scope(scratch, token_get()); Ast_Scope *scope = begin_decl_scope(scratch, token_get());
do{ do{
Token *name = token_expect(TK_Identifier); Token *name = token_expect(TK_Identifier);
Ast_Expr *value = parse_assign_expr(); Ast_Expr *value = 0;
if(token_match(TK_DoubleColon)) value = parse_expr();
Ast_Decl *member = ast_const(name, name->intern_val, value); Ast_Decl *member = ast_const(name, name->intern_val, value);
member->flags = set_flag(member->flags, AST_AGGREGATE_CHILD); member->flags = set_flag(member->flags, AST_AGGREGATE_CHILD);
scope->decls.add(member); scope->decls.add(member);

View File

@@ -23,6 +23,8 @@ convert_untyped_to_typed(Token *pos, Value a, Ast_Resolved_Type *new_type){
if(is_int(a.type) && is_int(new_type)) if(is_int(a.type) && is_int(new_type))
assert(a.type == untyped_int); assert(a.type == untyped_int);
else if(is_int(a.type) && is_enum(new_type))
;
else if(is_int(a.type) && is_float(new_type)) else if(is_int(a.type) && is_float(new_type))
a.f64_val = bigint_as_float(&a.big_int_val); // @leak bigint a.f64_val = bigint_as_float(&a.big_int_val); // @leak bigint
else if(is_int(a.type) && is_pointer(new_type)) else if(is_int(a.type) && is_pointer(new_type))

View File

@@ -181,7 +181,7 @@ function Ast_Resolved_Type *
type_enum(Ast_Decl *ast){ type_enum(Ast_Decl *ast){
Ast_Resolved_Type *type = resolve_typespec(ast->typespec, AST_CAN_BE_NULL); Ast_Resolved_Type *type = resolve_typespec(ast->typespec, AST_CAN_BE_NULL);
if(!type){ if(!type){
type = untyped_int; type = type_s64;
} }
Ast_Resolved_Type *result = type_new(pctx->perm, TYPE_ENUM, type->size, type->align); Ast_Resolved_Type *result = type_new(pctx->perm, TYPE_ENUM, type->size, type->align);