Refactor parameter destruction into obj_lower

This commit is contained in:
Nathan Braswell
2016-06-24 01:42:48 -07:00
parent 29eff2a23e
commit e3607beabe
4 changed files with 18 additions and 104 deletions

View File

@@ -109,47 +109,6 @@ fun add_after_in(to_add: *ast_node, before: *ast_node, in: *ast_node) {
error(string("cannot add_after_in to ") + get_ast_name(in))
}
// only works for statements (not for loop init, etc)
fun ensure_enclosing_statement_scope_is_block(parent_chain: *stack<*ast_node>) {
var node = parent_chain->top()
match (*node) {
ast_node::for_loop(backing) {
var old = backing.body
if (!is_statement(old))
error("for loop body is not statement")
if (!is_code_block(old->statement.child)) {
var block = ast_code_block_ptr(old)
var stmt = ast_statement_ptr(block);
parent_chain->push(stmt)
parent_chain->push(block)
node->for_loop.body = stmt
}
return
}
ast_node::while_loop(backing) {
var old = backing.statement
if (!is_statement(old))
error("while loop body is not statement")
if (!is_code_block(old->statement.child)) {
var block = ast_code_block_ptr(old)
var stmt = ast_statement_ptr(block);
parent_chain->push(stmt)
parent_chain->push(block)
node->while_loop.statement = stmt
}
return
}
ast_node::code_block(backing) return
ast_node::if_statement(backing) error("ensure enclosing statment can't do if_statement yet")
ast_node::function(backing) error("ensure enclosing statment can't do function yet")
}
var old = parent_chain->pop()
if (parent_chain->empty())
error("hit top of parent chain in ensure_enclosing_statement_scope_is_block")
ensure_enclosing_statement_scope_is_block(parent_chain)
parent_chain->push(old)
}
fun empty_pass_half(node: *ast_node, parent_chain: *stack<*ast_node>) {}
fun run_on_tree(func_before: fun(*ast_node,*stack<*ast_node>):void, func_after: fun(*ast_node,*stack<*ast_node>):void, tree: *ast_node) {
var parent_stack = stack<*ast_node>()