Fixed Kalypso's scope lookup to handle ::, ported another test (+ got another one from having proper scope operator)

This commit is contained in:
Nathan Braswell
2016-02-05 13:56:29 -05:00
parent 464805b7aa
commit 778e03a929
3 changed files with 33 additions and 5 deletions

View File

@@ -579,7 +579,18 @@ fun identifier_lookup(name: string, scope: *ast_node): *ast_node {
fun scope_lookup(name: string, scope: *ast_node): vector<*ast_node> { fun scope_lookup(name: string, scope: *ast_node): vector<*ast_node> {
println("*****Doing a name lookup for*****") println("*****Doing a name lookup for*****")
println(name) println(name)
return scope_lookup_helper(name, scope, set<*ast_node>()) var results = vector(scope)
name.split("::").for_each(fun(i: string) {
println(string("based on split, looking up: ") + i)
var next_results = vector<*ast_node>()
results.for_each(fun(s: *ast_node) {
print("looking in scope: ")
println(s)
next_results += scope_lookup_helper(i, s, set<*ast_node>())
})
results = next_results
})
return results
} }
fun scope_lookup_helper(name: string, scope: *ast_node, visited: set<*ast_node>): vector<*ast_node> { fun scope_lookup_helper(name: string, scope: *ast_node, visited: set<*ast_node>): vector<*ast_node> {
// need to do properly scopded lookups // need to do properly scopded lookups

View File

@@ -149,11 +149,28 @@ obj string (Object, Serializable) {
return out; return out;
} }
fun lines(): vector::vector<string> { fun split(delim: *char): vector::vector<string> return split(string(delim))
fun split(delim: string): vector::vector<string> {
var out.construct(): vector::vector<string> var out.construct(): vector::vector<string>
var current = string("") var current = string("")
for (var i = 0; i < data.size; i++;) { for (var i = 0; i < data.size; i++;) {
if (data[i] == '\n') { if (i < data.size-delim.length() && slice(i, i+delim.length()) == delim) {
out.add(current)
current = string("")
i += delim.length()-1
} else {
current += data[i]
}
}
out.add(current)
return out
}
fun lines(): vector::vector<string> return split('\n')
fun split(delim: char): vector::vector<string> {
var out.construct(): vector::vector<string>
var current = string("")
for (var i = 0; i < data.size; i++;) {
if (data[i] == delim) {
out.add(current) out.add(current)
current = string("") current = string("")
} else { } else {

View File

@@ -1,9 +1,9 @@
import io; import simple_print;
fun nothing(): void {} fun nothing(): void {}
fun main(): int { fun main(): int {
nothing(); nothing();
io::println("It was nothing"); simple_print::println("It was nothing");
return 0; return 0;
} }