Mercurial > repos > tabletprog
diff jsbackend.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 | 132c7756860e |
children | 6c8ae6b47ab5 |
line wrap: on
line diff
--- a/jsbackend.js Sun Mar 25 16:11:19 2012 -0700 +++ b/jsbackend.js Sun Mar 25 16:52:11 2012 -0700 @@ -75,15 +75,24 @@ if (this.receiver) { args.splice(0, 0, this.receiver); } + console.log(this); + console.log('Checking symbol table for ' + name); var funinfo = this.symbols.find(name); - if (!funinfo) { + if (!funinfo || funinfo.def instanceof setter) { var receiver = args[0]; args.splice(0, 1); for (var i in args) { args[i] = args[i].toJS(); } - return receiver.toJS(true) + '.' + (new symbol(name, this.symbols)).toJS() + '(' + args.join(', ') + ')'; + var rJS = receiver.toJS(true); + var jsName = (new symbol(name, this.symbols)).toJS(); + if ((name[name.length-1] == '!' && args.length == 1) || (funinfo && funinfo.def instanceof setter)) { + return '(' + rJS + '.' + jsName + ' = ' + args[0] + ', ' + rJS + ')' + } else { + return rJS + '.' + jsName + '(' + args.join(', ') + ')'; + } } + var ret = ''; switch(funinfo.type) { case 'self': @@ -93,28 +102,19 @@ var receiver = args[0]; args.splice(0, 1); } - for (var i in args) { - args[i] = args[i].toJS(); - } - return receiver.toJS(true) + '.' + (new symbol(name, this.symbols)).toJS() + '(' + args.join(', ') + ')'; + ret = receiver.toJS(true) + '.'; + break; case 'parent': - var ret = 'this'; + ret = 'this'; for (var i = 0; i < funinfo.depth; ++i) { ret += '.parent'; } - for (var i in args) { - args[i] = args[i].toJS(); - } - ret += (new symbol(name, this.symbols)).toJS() + '(' + args.join(', ') + ')'; - return ret; - case 'local': - case 'upvar': - case 'foreign': - for (var i in args) { - args[i] = args[i].toJS(); - } - return (new symbol(name, this.symbols)).toJS() + '(' + args.join(', ') + ')'; + break; } + for (var i in args) { + args[i] = args[i].toJS(); + } + return ret + (new symbol(name, this.symbols)).toJS() + '(' + args.join(', ') + ')'; } object.prototype.toJS = function() {