pavone@252: { pavone@252: _null <- #{ pavone@252: find:else <- :_ :else { pavone@252: else: pavone@252: } pavone@252: } pavone@252: _local <- 0 pavone@252: _closedover <- 1 pavone@252: _upvar <- 2 pavone@252: _method <- 3 pavone@252: _self <- 4 pavone@252: _parent <- 5 pavone@252: pavone@252: _nextMethodId <- 0 pavone@252: _method <- :_name { pavone@252: _id <- _nextMethodId pavone@252: _nextMethodId <- _id + 1 pavone@252: #{ pavone@252: name <- { _name } pavone@252: id <- { _id } pavone@252: string <- { "method " . _name . "(" . _id . ")" } pavone@252: } pavone@252: } pavone@252: #{ pavone@252: nullTable <- { _null } pavone@252: pavone@252: tablewithParent <- :_parent { pavone@252: _symbols <- dict hash pavone@252: #{ pavone@252: find:else <- :name :else { pavone@252: _symbols get: name else: { pavone@252: _parent find: name else: else pavone@252: } pavone@252: } pavone@252: defineMethod <- :name { pavone@252: _symbols get: name else: { pavone@252: _symbols set: name (_method: name) pavone@252: } pavone@252: self pavone@252: } pavone@252: print <- { pavone@252: foreach: _symbols :name info { pavone@252: print: name . ": " . info . "\n" pavone@252: } pavone@252: } pavone@252: } pavone@252: } pavone@252: pavone@252: table <- { pavone@252: tablewithParent: _null pavone@252: } pavone@252: pavone@252: buildMethodTable <- :tree { pavone@252: _object <- ast obj pavone@252: _assignment <- ast assignment pavone@263: _call <- ast call pavone@263: pavone@252: tree fold: table with: :acc el { pavone@252: if: (el nodeType) = _object { pavone@252: (el messages) fold: acc with: :acc msg { pavone@252: if: (msg nodeType) = _assignment { pavone@252: acc defineMethod: ((msg to) name) pavone@263: } else: { pavone@263: if: (msg nodeType) = _call && (msg llMessage?) { pavone@263: acc defineMethod: (((msg args) value) name) pavone@263: } pavone@252: } pavone@252: acc pavone@252: } pavone@252: } else: { pavone@252: acc pavone@252: } pavone@252: } pavone@252: } pavone@252: } pavone@252: }