Fix not top level ast's getting into ordered list. Delete parent nodes

This commit is contained in:
Krzosa Karol
2022-06-10 16:47:49 +02:00
parent 6ad5f4e706
commit 957dbbd5cc
6 changed files with 18 additions and 59 deletions

39
ast.cpp
View File

@@ -47,6 +47,7 @@ enum{
AST_ATOM = bit_flag(7),
AST_FOREIGN = bit_flag(8),
AST_DECL = bit_flag(9),
AST_PACKAGE_LEVEL = bit_flag(10),
};
struct Ast{
@@ -54,7 +55,6 @@ struct Ast{
Token *pos;
Ast_Kind kind;
Ast *parent;
Ast_Scope *parent_scope;
Ast_Flag flags;
};
@@ -281,8 +281,6 @@ ast_expr_binary(Ast_Expr *left, Ast_Expr *right, Token *op){
result->op = op->kind;
result->left = left;
result->right = right;
result->left->parent = result;
if(result->right) result->right->parent = result;
return result;
}
@@ -291,8 +289,6 @@ ast_call(Token *pos, Ast_Expr *name, Array<Ast_Call_Item *> exprs){
AST_NEW(Call, CALL, pos, AST_EXPR);
result->name = name;
result->exprs = exprs.tight_copy(pctx->perm);
if(result->name) result->name->parent = result;
For(result->exprs) it->parent = result;
return result;
}
@@ -302,9 +298,6 @@ ast_call_item(Token *pos, Ast_Expr *index, Ast_Atom *name, Ast_Expr *item){
result->name = name;
result->index = index;
result->item = item;
if(result->name) result->name->parent = result;
if(result->index) result->index->parent = result;
item->parent = result;
return result;
}
@@ -314,8 +307,6 @@ ast_expr_cast(Token *pos, Ast_Expr *expr, Ast_Expr *typespec){
result->flags = AST_EXPR;
result->expr = expr;
result->typespec = typespec;
expr->parent = result;
typespec->parent = result;
return result;
}
@@ -325,7 +316,6 @@ ast_expr_unary(Token *pos, Token_Kind op, Ast_Expr *expr){
result->flags = AST_EXPR;
result->expr = expr;
result->op = op;
expr->parent = result;
return result;
}
@@ -335,8 +325,6 @@ ast_expr_index(Token *pos, Ast_Expr *expr, Ast_Expr *index){
result->flags = AST_EXPR;
result->expr = expr;
result->index = index;
expr->parent = result;
index->parent = result;
return result;
}
@@ -350,9 +338,6 @@ ast_lambda(Token *pos, Array<Ast_Decl *> params, B32 has_var_args, Ast_Expr *ret
result->has_var_args = has_var_args;
if(!ret) result->ret = ast_ident(result->pos, intern_void);
if(result->scope) result->scope->parent = result;
result->ret->parent = result;
For(result->args) it->parent = result;
return result;
}
@@ -360,7 +345,6 @@ function Ast_If *
ast_if(Token *pos, Array<Ast_If_Node *> ifs){
AST_NEW(If, IF, pos, AST_STMT);
result->ifs = ifs.tight_copy(pctx->perm);
For(result->ifs) it->parent = result;
return result;
}
@@ -371,10 +355,6 @@ ast_for(Token *pos, Ast_Expr *init, Ast_Expr *cond, Ast_Expr *iter, Ast_Scope *s
result->cond = cond;
result->iter = iter;
result->scope = scope;
if(result->init) result->init->parent = result;
if(result->cond) result->cond->parent = result;
if(result->iter) result->iter->parent = result;
result->scope->parent = result;
return result;
}
@@ -390,7 +370,6 @@ ast_return(Token *pos, Ast_Expr *expr){
if(expr){
assert(is_flag_set(expr->flags, AST_EXPR));
result->expr = expr;
result->expr->parent = result;
}
return result;
}
@@ -401,11 +380,8 @@ ast_if_node(Token *pos, Ast_Expr *init, Ast_Expr *expr, Ast_Scope *scope){
result->scope = scope;
result->expr = expr;
result->init = (Ast_Binary *)init;
if(result->scope) result->scope->parent = result;
if(result->expr) result->expr->parent = result;
if(result->init) {
assert(init->kind == AST_VAR);
result->init->parent = result;
}
return result;
}
@@ -414,7 +390,6 @@ function Ast_Array *
ast_array(Token *pos, Ast_Expr *expr){
AST_NEW(Array, ARRAY, pos, AST_EXPR);
result->expr = expr;
if(result->expr) result->expr->parent = result;
return result;
}
@@ -430,9 +405,6 @@ function void
finalize_decl_scope(Ast_Scope *scope){
scope->decls = scope->decls.tight_copy(pctx->perm);
pctx->currently_parsed_scope = scope->parent_scope;
For(scope->decls){
it->parent = scope;
}
}
function Ast_Scope *
@@ -448,16 +420,12 @@ function void
finalize_stmt_scope(Ast_Scope *scope){
scope->stmts = scope->stmts.tight_copy(pctx->perm);
pctx->currently_parsed_scope = scope->parent_scope;
For(scope->stmts){
it->parent = scope;
}
}
function Ast_Decl *
ast_struct(Token *pos, Ast_Scope *scope){
AST_NEW(Decl, STRUCT, pos, AST_DECL | AST_AGGREGATE);
result->scope = scope;
result->scope->parent = result;
return result;
}
@@ -466,8 +434,6 @@ ast_enum(Token *pos, Ast_Expr *typespec, Ast_Scope *scope){
AST_NEW(Decl, ENUM, pos, AST_DECL | AST_AGGREGATE);
result->scope = scope;
result->typespec = typespec;
result->scope->parent = result;
if(result->typespec) result->typespec->parent = result;
return result;
}
@@ -477,8 +443,6 @@ ast_var(Token *pos, Ast_Expr *typespec, Intern_String name, Ast_Expr *expr){
result->name = name;
result->typespec = typespec;
result->expr = expr;
if(result->typespec) result->typespec->parent = result;
if(result->expr) result->expr->parent = result;
return result;
}
@@ -495,7 +459,6 @@ ast_const(Token *pos, Intern_String name, Ast_Expr *expr){
AST_NEW(Decl, CONST, pos, AST_DECL);
result->expr = expr;
result->name = name;
if(result->expr) result->expr->parent = result;
return result;
}