From caba8b310f01ce83b6ff46961660901e35a8ccac Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Wed, 25 Jan 2017 01:47:05 -0500 Subject: [PATCH] Small speed improvement int trim by using stack (and DFS) instead of queue (and BFS) for remove and collapse, finally fix the unknown escape '\*' error --- stdlib/ast_transformation.krak | 1 + stdlib/importer.krak | 6 +++--- stdlib/pass_common.krak | 2 +- stdlib/stack.krak | 7 +++++++ 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/stdlib/ast_transformation.krak b/stdlib/ast_transformation.krak index e6098da..3160a1f 100644 --- a/stdlib/ast_transformation.krak +++ b/stdlib/ast_transformation.krak @@ -1,6 +1,7 @@ import symbol:* import tree:* import vector:* +import queue:* import stack:* import map:* import util:* diff --git a/stdlib/importer.krak b/stdlib/importer.krak index aa5ce34..2a9c0c6 100644 --- a/stdlib/importer.krak +++ b/stdlib/importer.krak @@ -1,7 +1,7 @@ import symbol:* import tree:* import vector:* -import queue:* +import stack:* import map:* import util:* import string:* @@ -151,7 +151,7 @@ fun trim(parse_tree: *tree): *tree { return parse_tree } fun remove_node(remove: symbol, parse_tree: *tree) { - var to_process = queue<*tree>() + var to_process = stack<*tree>() to_process.push(parse_tree) while(!to_process.empty()) { var node = to_process.pop() @@ -174,7 +174,7 @@ fun remove_node(remove: symbol, parse_tree: *tree) { } } fun collapse_node(remove: symbol, parse_tree: *tree) { - var to_process = queue<*tree>() + var to_process = stack<*tree>() to_process.push(parse_tree) while(!to_process.empty()) { var node = to_process.pop() diff --git a/stdlib/pass_common.krak b/stdlib/pass_common.krak index 502b55d..25bc084 100644 --- a/stdlib/pass_common.krak +++ b/stdlib/pass_common.krak @@ -196,7 +196,7 @@ fun get_builtin_function(name: string, param_types: vector<*type>, syntax: *tree } if (name == "&" && param_types.size == 1) return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_increased_indirection()), vector<*ast_node>(), false) - if (name == "\*" && param_types.size == 1) { + if (name == "*" && param_types.size == 1) { if (param_types[0]->indirection == 0) error(syntax, string("drereferencing not a pointer: ") + name) else diff --git a/stdlib/stack.krak b/stdlib/stack.krak index 5f2569d..d30de54 100644 --- a/stdlib/stack.krak +++ b/stdlib/stack.krak @@ -24,6 +24,10 @@ obj stack (Object, Serializable) { data.construct() return this } + fun construct(ammt: int): *stack { + data.construct(ammt) + return this + } fun copy_construct(other: *stack) { data.copy_construct(&other->data) } @@ -59,6 +63,9 @@ obj stack (Object, Serializable) { fun size(): int { return data.size } + fun available(): int { + return data.available + } fun empty():bool { return data.size == 0 }