Mercurial > repos > tabletprog
changeset 302:aea99b93cf2f
More fleshed out implementation of symbol tables
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 25 Jul 2014 13:46:43 -0700 |
parents | 5d24b3117aa7 |
children | 60b9941d3713 |
files | modules/symbols.tp |
diffstat | 1 files changed, 62 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/modules/symbols.tp Fri Jul 25 13:43:36 2014 -0700 +++ b/modules/symbols.tp Fri Jul 25 13:46:43 2014 -0700 @@ -3,6 +3,9 @@ find:else <- :_ :else { else: } + ifDefined:else <- :name ifdef :else { + else: + } } _local <- 0 _closedover <- 1 @@ -19,17 +22,63 @@ name <- { _name } id <- { _id } string <- { "method " . _name . "(" . _id . ")" } + isMethod? <- { true } + isLocal? <- { false } + } + } + _local <- :_name _def { + #{ + name <- { _name } + string <- { "local " . _name } + def <- { _def } + isMethod? <- { false } + closedOver? <- false + isLocal? <- { true } + } + } + _upvar <- :parent { + if: (parent isLocal?) { + parent closedOver?!: true + #{ + name <- { parent name } + def <- { parent def } + closedOver? <- { parent closedOver? } + isMethod? <- { parent isMethod? } + string <- { "upvar " . name} + isLocal? <- { false } + depth <- 1 + } + } else: { + parent depth!: (parent depth) + 1 } } #{ nullTable <- { _null } - tablewithParent <- :_parent { + tableWithParent <- :_parent { _symbols <- dict hash #{ + ifDefined:else <- :name ifdef :else { + _symbols ifget: name :sym { + ifdef: sym + } else: { + _parent ifDefined: name :sym { + ifdef: (_upvar: sym) + } else: else + } + } find:else <- :name :else { _symbols get: name else: { - _parent find: name else: else + _parent ifDefined: name :sym { + if: (sym isMethod?) { + //TODO: methods on parent objects + sym + } else: { + _upvar: sym + } + } else: { + else: + } } } defineMethod <- :name { @@ -38,6 +87,16 @@ } self } + define <- :name def { + s <- (_local: name def) + _symbols set: name s + s + } + find:elseDefine <- :name :def { + find: name else: { + define: name def + } + } print <- { foreach: _symbols :name info { print: name . ": " . info . "\n" @@ -47,7 +106,7 @@ } table <- { - tablewithParent: _null + tableWithParent: _null } buildMethodTable <- :tree {