diff --git a/kraken.krak b/kraken.krak index b16d8d0..08c80ff 100644 --- a/kraken.krak +++ b/kraken.krak @@ -128,8 +128,9 @@ fun main(argc: int, argv: **char):int { var line = get_line(string("> "), 100) if (line == "end") return 0 - var trimmed_parse = trim(parse1.parse_input(line, string("stdin"))) - var ast_expression = ast_pass.transform_expression(trimmed_parse, scope, map()) + var parse = parse1.parse_input(line, string("stdin")) + trim(parse) + var ast_expression = ast_pass.transform_expression(parse, scope, map()) print_value(evaluate_constant_expression(ast_expression)) /*print_value(evaluate_with_globals(ast_expression, &globals))*/ } diff --git a/stdlib/function_value_lower.krak b/stdlib/function_value_lower.krak index fec7adc..7935d52 100644 --- a/stdlib/function_value_lower.krak +++ b/stdlib/function_value_lower.krak @@ -34,7 +34,7 @@ fun function_value_lower(name_ast_map: *map,*ast_node name_ast_map->for_each(fun(name: string, syntax_ast_pair: pair<*tree,*ast_node>) { lambdas.add(syntax_ast_pair.second->translation_unit.lambdas) }) - var all_types = set<*type>() + var all_types = hash_set<*type>() var function_value_creation_points = vector() var function_value_call_points = vector() var closed_over_uses = vector>>() diff --git a/stdlib/hash_set.krak b/stdlib/hash_set.krak index 845ee88..b7ea193 100644 --- a/stdlib/hash_set.krak +++ b/stdlib/hash_set.krak @@ -2,6 +2,7 @@ import hash_map import vector import io import serialize +import set fun hash_set(): hash_set { var toRet.construct() : hash_set @@ -89,9 +90,14 @@ obj hash_set (Object, Serializable) { /*fun for_each(func: fun(ref T):void) {*/ /*data.for_each(func)*/ /*}*/ - /*fun for_each(func: fun(T):void) {*/ - /*data.for_each(func)*/ - /*}*/ + fun for_each(func: fun(T):void) { + data.for_each(fun(key: T, value: bool) { func(key); }) + } + fun map(func: fun(T):U): set::set { + var newSet.construct(size()): set::set + for_each(fun(i: T) { newSet.add(func(i)); }) + return newSet + } /*fun any_true(func: fun(T):bool):bool {*/ /*return data.any_true(func)*/ /*}*/ @@ -109,5 +115,17 @@ obj hash_set (Object, Serializable) { /*newSet.data = data.filter(func)*/ /*return newSet*/ /*}*/ + fun chaotic_closure(func: fun(T): set::set) { + var prev_size = 0 + while (prev_size != size()) { + prev_size = size() + var to_add.construct(size()): vector::vector + for_each(fun(i: T) { + func(i).for_each(fun(j: T) { to_add.add(j); }) + }) + to_add.for_each(fun(i:T) { add(i); }) + } + + } } diff --git a/stdlib/importer.krak b/stdlib/importer.krak index 2cbbb08..41f44d3 100644 --- a/stdlib/importer.krak +++ b/stdlib/importer.krak @@ -56,7 +56,7 @@ fun import(file_name: string, parsers: ref vector, ast_pass: ref ast_tra return name_ast_map } -fun trim(parse_tree: *tree): *tree { +fun trim(parse_tree: *tree) { remove_node(symbol("$NULL$", false), parse_tree) remove_node(symbol("WS", false), parse_tree) // the terminals have " around them, which we have to escape @@ -97,8 +97,6 @@ fun trim(parse_tree: *tree): *tree { collapse_node(symbol("template_param_list", false), parse_tree) collapse_node(symbol("trait_list", false), parse_tree) collapse_node(symbol("dec_type", false), parse_tree) - - return parse_tree } fun remove_node(remove: symbol, parse_tree: *tree) { var to_process = stack<*tree>()