Fix not top level ast's getting into ordered list. Delete parent nodes
This commit is contained in:
39
ast.cpp
39
ast.cpp
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user