/source/core/ast/Scope.ooc
Unknown | 61 lines | 48 code | 13 blank | 0 comment | 0 complexity | 515c2f648c6f4ef0c129e3b60cba0ec1 MD5 | raw file
1 2import structs/[ArrayList, List] 3 4import middle/Resolver 5import Node, Statement, Var, Access 6 7Scope: class extends Node { 8 9 body: List<Statement> { get set } 10 11 init: func { 12 body = ArrayList<Statement> new() 13 } 14 15 resolve: func (task: Task) { 16 task queueList(body) 17 } 18 19 resolveAccess: func (acc: Access, task: Task, suggest: Func (Var)) { 20 idx : Int = -1 21 //"Looking for %s in %s" printfln(acc toString(), toString()) 22 23 if(task has("noindex")) { 24 size := body size 25 idx = size 26 } else { 27 previous := task 28 task walkBackwardTasks(|t| 29 if(t node == this) { 30 idx = previous get("index", Int) 31 return true 32 } 33 previous = t 34 false 35 ) 36 if(idx == -1) return // not found, don't resolve 37 } 38 39 // idx + 1 to allow recursion, of course :) 40 for(i in 0..(idx + 1)) { 41 node := body[i] 42 match (node class) { 43 case Var => 44 v := node as Var 45 if(v name == acc name) 46 suggest(v) 47 } 48 } 49 } 50 51 accessResolver?: func -> Bool { true } 52 53 add: func (s: Statement) { 54 body add(s) 55 } 56 57 toString: func -> String { 58 "{}" 59 } 60 61}