Cleanup + little polymorph + ast_copy

This commit is contained in:
Krzosa Karol
2023-03-31 08:19:26 +02:00
parent 21c8ceff03
commit aaf1b2f2d9
11 changed files with 406 additions and 15 deletions

View File

@@ -211,6 +211,8 @@ enum Ast_Type_Kind {
TYPE_COMPLETING,
TYPE_INCOMPLETE,
TYPE_POLYMORPH,
TYPE_UNTYPED_BOOL, // FIRST_TYPED_NUMERIC, FIRST_NUMERIC
TYPE_UNTYPED_INT,
TYPE_UNTYPED_FLOAT, // LAST_TYPED_NUMERIC
@@ -306,7 +308,6 @@ enum Ast_Kind : uint32_t {
AST_FILE,
AST_SCOPE,
AST_VALUE,
AST_CAST,
AST_IDENT,
AST_INDEX,
AST_UNARY,
@@ -329,19 +330,15 @@ enum Ast_Kind : uint32_t {
AST_TYPE,
AST_VAR,
AST_CONST,
AST_POINTER,
AST_ARRAY,
AST_FOR,
AST_IF,
AST_IF_NODE,
AST_RETURN,
AST_BLOCK,
AST_PASS,
AST_LAMBDA,
AST_LAMBDA_EXPR,
AST_LAMBDA_ARG,
AST_ENUM,
AST_ENUM_MEMBER,
AST_STRUCT,
AST_UNION,
};
@@ -371,6 +368,7 @@ struct Ast {
Token *pos;
Ast_Kind kind;
Ast_Scope *parent_scope;
Ast_Flag flags;
};
@@ -492,8 +490,8 @@ struct Ast_If : Ast {
Array<Ast_If_Node *> ifs;
};
struct Ast_Pass : Ast {};
struct Ast_Break : Ast {};
#define Ast_Pass Ast
#define Ast_Break Ast
struct Ast_For : Ast {
Ast_Expr *init;
@@ -506,6 +504,9 @@ struct Ast_For : Ast {
bool is_also_slice_traversal;
};
// @cleanup @refactor: return value shouldn't be a array of expressions.
// It should be a single expression. So probably need a special type
// for that.
struct Ast_Lambda : Ast_Expr {
Array<Ast_Decl *> args;
Array<Ast_Expr *> ret;
@@ -602,7 +603,9 @@ struct Ast_Decl : Ast {
uint64_t operator_overload_arguments_hash;
Ast_Operator_Info *overload_op_info;
Array<Ast_Decl *> polymorph_parameters;
Array<Ast_Decl *> polymorphs; // instantiated polymorphs
Ast_Scope *scope;
Ast_Expr *typespec;