Changing typespecs to be normal expressions

This commit is contained in:
Krzosa Karol
2022-05-27 12:29:51 +02:00
parent f66fd447e5
commit d8a9b318b7
4 changed files with 78 additions and 53 deletions

View File

@@ -91,6 +91,8 @@ enum Ast_Kind{
AST_COMPOUND_ITEM,
AST_COMPOUND,
AST_POINTER,
AST_ARRAY,
AST_INIT,
AST_IF,
AST_IF_NODE,
@@ -190,16 +192,20 @@ struct Ast_If: Ast{
struct Ast_Lambda_Arg: Ast_Expr{
Intern_String name;
Ast_Typespec *typespec;
Ast_Expr *typespec;
};
struct Ast_Lambda : Ast_Expr {
Array<Ast_Lambda_Arg *> args;
Ast_Typespec *ret;
Ast_Expr *ret;
Ast_Block *block;
};
struct Ast_Resolved_Type;
struct Ast_Array: Ast_Expr{
Ast_Expr *base;
Ast_Expr *expr;
};
struct Ast_Typespec:Ast{
union{
Ast_Typespec *base;
@@ -331,7 +337,7 @@ ast_expr_lambda_empty(Token *pos){
}
function Ast_Lambda_Arg *
ast_expr_lambda_arg(Token *pos, Intern_String name, Ast_Typespec *typespec){
ast_expr_lambda_arg(Token *pos, Intern_String name, Ast_Expr *typespec){
AST_NEW(Lambda_Arg, LAMBDA_ARG, pos);
result->name = name;
result->typespec = typespec;
@@ -370,6 +376,13 @@ ast_init(Token *pos, Token_Kind op, Ast_Atom *ident, Ast_Expr *expr){
return result;
}
function Ast_Array *
ast_array(Token *pos, Ast_Expr *base){
AST_NEW(Array, ARRAY, pos);
result->base = base;
return result;
}
//-----------------------------------------------------------------------------
// Typespecs
//-----------------------------------------------------------------------------