Enum members have const syntax, enum members gen S64 type by default,
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
2
enums.kl
2
enums.kl
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user