Cleanup + little polymorph + ast_copy
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user