work in progress

This commit is contained in:
Nathan Braswell
2017-06-12 23:52:12 -04:00
parent 8166db37ac
commit bd83156c12
10 changed files with 27 additions and 16 deletions

View File

@@ -132,7 +132,7 @@ fun adt_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, ast_to_
} }
} }
} }
run_on_tree(helper_before, empty_pass_second_half, syntax_ast_pair.second, &visited1) run_on_tree(helper_before, empty_pass_second_half(), syntax_ast_pair.second, &visited1)
}) })
name_ast_map->for_each(fun(name: string, syntax_ast_pair: pair<*tree<symbol>,*ast_node>) { name_ast_map->for_each(fun(name: string, syntax_ast_pair: pair<*tree<symbol>,*ast_node>) {
var second_helper = fun(node: *ast_node, parent_chain: *stack<*ast_node>) { var second_helper = fun(node: *ast_node, parent_chain: *stack<*ast_node>) {
@@ -185,7 +185,7 @@ fun adt_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, ast_to_
} }
} }
} }
run_on_tree(second_helper, empty_pass_second_half, syntax_ast_pair.second, &visited2) run_on_tree(second_helper, empty_pass_second_half(), syntax_ast_pair.second, &visited2)
}) })
} }

View File

@@ -29,7 +29,7 @@ fun c_line_control(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, as
/*}*/ /*}*/
/*}*/ /*}*/
/*if (first)*/ /*if (first)*/
/*run_on_tree(helper, empty_pass_second_half, syntax_ast_pair.second)*/ /*run_on_tree(helper, empty_pass_second_half(), syntax_ast_pair.second)*/
first = false first = false
}) })
} }

View File

@@ -31,7 +31,7 @@ fun ctce_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, ast_to
} }
} }
} }
run_on_tree(helper_before, empty_pass_second_half, syntax_ast_pair.second, &visited) run_on_tree(helper_before, empty_pass_second_half(), syntax_ast_pair.second, &visited)
}) })
ctce_passes.for_each(fun(func: *ast_node) { ctce_passes.for_each(fun(func: *ast_node) {
// don't want to pick up the ast_node::value // don't want to pick up the ast_node::value

View File

@@ -78,7 +78,7 @@ fun function_value_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node
} }
} }
} }
run_on_tree(helper_before, empty_pass_second_half, syntax_ast_pair.second, &visited) run_on_tree(helper_before, empty_pass_second_half(), syntax_ast_pair.second, &visited)
}) })
println(string("there are ") + function_value_creation_points.size + " function value creation points in the program.") println(string("there are ") + function_value_creation_points.size + " function value creation points in the program.")
println(string("there are ") + all_types.size() + " all types in the program.") println(string("there are ") + all_types.size() + " all types in the program.")

View File

@@ -27,7 +27,7 @@ fun node_counter_helper(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>
var helper = fun(node: *ast_node, parent_chain: *stack<*ast_node>) { var helper = fun(node: *ast_node, parent_chain: *stack<*ast_node>) {
counter++ counter++
} }
run_on_tree(helper, empty_pass_second_half, syntax_ast_pair.second, &visited) run_on_tree(helper, empty_pass_second_half(), syntax_ast_pair.second, &visited)
}) })
return counter return counter
} }

View File

@@ -72,7 +72,7 @@ fun obj_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, ast_to_
} }
} }
} }
run_on_tree(ensure_block_and_munge, empty_pass_second_half, syntax_ast_pair.second, &visited1) run_on_tree(ensure_block_and_munge, empty_pass_second_half(), syntax_ast_pair.second, &visited1)
// Pass 2 // Pass 2
var short_circut_op: fun(*ast_node,*stack<*ast_node>,*hash_set<*ast_node>): bool = fun(node: *ast_node, parent_chain: *stack<*ast_node>, visited: *hash_set<*ast_node>): bool { var short_circut_op: fun(*ast_node,*stack<*ast_node>,*hash_set<*ast_node>): bool = fun(node: *ast_node, parent_chain: *stack<*ast_node>, visited: *hash_set<*ast_node>): bool {
match(*node) { match(*node) {
@@ -103,15 +103,15 @@ fun obj_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, ast_to_
add_before_in(short_circuit_if, parent_chain->from_top(enclosing_block_idx-1), parent_chain->from_top(enclosing_block_idx)) add_before_in(short_circuit_if, parent_chain->from_top(enclosing_block_idx-1), parent_chain->from_top(enclosing_block_idx))
replace_with_in(node, short_circuit_result, parent_chain) replace_with_in(node, short_circuit_result, parent_chain)
var shorter_tree = stack_from_vector( parent_chain->data.slice(0, parent_chain->size()-enclosing_block_idx)) var shorter_tree = stack_from_vector( parent_chain->data.slice(0, parent_chain->size()-enclosing_block_idx))
run_on_tree_helper(short_circut_op, empty_pass_second_half, short_circuit_declaration, &shorter_tree, visited) run_on_tree_helper(short_circut_op, empty_pass_second_half(), short_circuit_declaration, &shorter_tree, visited)
run_on_tree_helper(short_circut_op, empty_pass_second_half, short_circuit_if, &shorter_tree, visited) run_on_tree_helper(short_circut_op, empty_pass_second_half(), short_circuit_if, &shorter_tree, visited)
return false return false
} }
} }
} }
return true return true
} }
run_on_tree(short_circut_op, empty_pass_second_half, syntax_ast_pair.second, &visited2) run_on_tree(short_circut_op, empty_pass_second_half(), syntax_ast_pair.second, &visited2)
// Pass 3 // Pass 3
var construct_in_destruct_out = fun(node: *ast_node, parent_chain: *stack<*ast_node>) { var construct_in_destruct_out = fun(node: *ast_node, parent_chain: *stack<*ast_node>) {
match(*node) { match(*node) {
@@ -204,7 +204,7 @@ fun obj_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, ast_to_
} }
} }
} }
run_on_tree(empty_pass_first_half, construct_in_destruct_out, syntax_ast_pair.second, &visited3) run_on_tree(empty_pass_first_half(), construct_in_destruct_out, syntax_ast_pair.second, &visited3)
}) })
} }

View File

@@ -418,8 +418,12 @@ 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)) error(string("cannot add_after_in to ") + get_ast_name(in))
} }
fun empty_pass_first_half(node: *ast_node, parent_chain: *stack<*ast_node>, visited: *hash_set<*ast_node>): bool { return true; } fun empty_pass_first_half(): fun(*ast_node, *stack<*ast_node>, *hash_set<*ast_node>): bool {
fun empty_pass_second_half(node: *ast_node, parent_chain: *stack<*ast_node>) {} return fun(node: *ast_node, parent_chain: *stack<*ast_node>, visited: *hash_set<*ast_node>): bool { return true; }
}
fun empty_pass_second_half(): fun(*ast_node, *stack<*ast_node>): void {
return fun(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, visited: *hash_set<*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, visited: *hash_set<*ast_node>)
run_on_tree(fun(n: *ast_node, s: *stack<*ast_node>, v: *hash_set<*ast_node>): bool {func_before(n, s);return true;}, func_after, tree, visited) run_on_tree(fun(n: *ast_node, s: *stack<*ast_node>, v: *hash_set<*ast_node>): bool {func_before(n, s);return true;}, func_after, tree, visited)

View File

@@ -74,7 +74,7 @@ fun ref_lower(name_ast_map: *map<string, pair<*tree<symbol>,*ast_node>>, ast_to_
} }
} }
} }
run_on_tree(helper_before, empty_pass_second_half, syntax_ast_pair.second, &visited) run_on_tree(helper_before, empty_pass_second_half(), syntax_ast_pair.second, &visited)
}) })
remove_ref_type_set.for_each(fun(p: pair<string, *type>) { remove_ref_type_set.for_each(fun(p: pair<string, *type>) {
var t = p.second var t = p.second

View File

@@ -89,6 +89,10 @@ obj stack<T> (Object, Serializable) {
return i return i
return -1 return -1
} }
fun item_from_top_satisfying(func_raw: run(T):bool): T {
var temp_lambda = fun(i: T):bool { return func_raw(i); }
return item_from_top_satisfying(temp_lambda);
}
fun item_from_top_satisfying(func: fun(T):bool): T { fun item_from_top_satisfying(func: fun(T):bool): T {
return from_top(index_from_top_satisfying(func)) return from_top(index_from_top_satisfying(func))
} }

View File

@@ -1,7 +1,10 @@
fun call(f: fun(int, int):int):int {
return f(1,2)
}
fun main(argc: int, argv: **char): int { fun main(argc: int, argv: **char): int {
var y = 20 var y = 20
var a = fun(i: int, x: int): int { return i+x+y; } var a = fun(i: int, x: int): int { return i+x+y; }
return a(12, 11) /*return a(12, 11)*/
return call(a)
} }