Mercurial > repos > tabletprog
diff compiler.js @ 20:bf03c9f0dd55
Initial work on proper property support
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 25 Mar 2012 16:52:11 -0700 |
parents | 59e83296e331 |
children | 068d63627b16 |
line wrap: on
line diff
--- a/compiler.js Sun Mar 25 16:11:19 2012 -0700 +++ b/compiler.js Sun Mar 25 16:52:11 2012 -0700 @@ -142,6 +142,7 @@ } funcall.prototype.populateSymbols = function(symbols) { + if(this.name == 'q:') { console.log('populateSymbols', this); } if (this.name == 'foreign:') { if ((this.args[0] instanceof lambda) || (this.args[0] instanceof object) || (this.args[0] instanceof symbol)) { return; @@ -149,9 +150,13 @@ throw new Error("Unexpected AST type for foreign:"); } } + this.symbols = symbols; for (var i in this.args) { this.args[i].populateSymbols(symbols); } + if (this.receiver) { + this.receiver.populateSymbols(symbols); + } } object.prototype.populateSymbols = function(symbols) { @@ -186,10 +191,26 @@ } this.symbol.populateSymbols(symbols); this.expression.populateSymbols(symbols); + this.symbols = symbols; }; assignment.prototype.populateSymbolsObject = function(symbols) { + console.log('populateSymbolsObject for assignment to ' + this.symbol.name) symbols.defineMsg(this.symbol.name, this.expression); + if (!(this.expression instanceof lambda)) { + symbols.defineMsg(this.symbol.name + '!', new setter(null)); + } this.symbol.populateSymbols(symbols); this.expression.populateSymbols(symbols); + this.symbols = symbols; }; +function setter(fun) +{ + this.fun = fun; +} + +function getter(fun) +{ + this.fun = fun; +} +