Mercurial > repos > tabletprog
comparison jsbackend.js @ 21:6c8ae6b47ab5
Small improvements to property support and elimination of setP and getP functions as they are no longer needed
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 25 Mar 2012 21:11:10 -0700 |
parents | bf03c9f0dd55 |
children | 068d63627b16 |
comparison
equal
deleted
inserted
replaced
20:bf03c9f0dd55 | 21:6c8ae6b47ab5 |
---|---|
12 } | 12 } |
13 case 'number': | 13 case 'number': |
14 return mainModule.snumber(val); | 14 return mainModule.snumber(val); |
15 } | 15 } |
16 throw new Error("can't make val into object"); | 16 throw new Error("can't make val into object"); |
17 } | |
18 | |
19 function setP(o, p, val) | |
20 { | |
21 o[p] = val; | |
22 return o; | |
23 } | |
24 | |
25 function getP(o, p) | |
26 { | |
27 return o[p]; | |
28 } | 17 } |
29 | 18 |
30 op.prototype.toJS = function(isReceiver) { | 19 op.prototype.toJS = function(isReceiver) { |
31 var ret = '(' + this.left.toJS() +' '+ (this.op == '=' ? '==' : this.op) +' '+ this.right.toJS() + ')'; | 20 var ret = '(' + this.left.toJS() +' '+ (this.op == '=' ? '==' : this.op) +' '+ this.right.toJS() + ')'; |
32 if (isReceiver) { | 21 if (isReceiver) { |
73 } | 62 } |
74 var args = this.args.slice(0, this.args.length); | 63 var args = this.args.slice(0, this.args.length); |
75 if (this.receiver) { | 64 if (this.receiver) { |
76 args.splice(0, 0, this.receiver); | 65 args.splice(0, 0, this.receiver); |
77 } | 66 } |
78 console.log(this); | |
79 console.log('Checking symbol table for ' + name); | |
80 var funinfo = this.symbols.find(name); | 67 var funinfo = this.symbols.find(name); |
81 if (!funinfo || funinfo.def instanceof setter) { | 68 if (!funinfo || funinfo.def instanceof setter) { |
82 var receiver = args[0]; | 69 var receiver = args[0]; |
83 args.splice(0, 1); | 70 args.splice(0, 1); |
84 for (var i in args) { | 71 for (var i in args) { |
85 args[i] = args[i].toJS(); | 72 args[i] = args[i].toJS(); |
86 } | 73 } |
87 var rJS = receiver.toJS(true); | 74 var rJS = receiver.toJS(true); |
88 var jsName = (new symbol(name, this.symbols)).toJS(); | |
89 if ((name[name.length-1] == '!' && args.length == 1) || (funinfo && funinfo.def instanceof setter)) { | 75 if ((name[name.length-1] == '!' && args.length == 1) || (funinfo && funinfo.def instanceof setter)) { |
90 return '(' + rJS + '.' + jsName + ' = ' + args[0] + ', ' + rJS + ')' | 76 console.log(name.substr(0, name.length-1)); |
77 return '(' + rJS + '.' + (new symbol(name.substr(0, name.length-1), this.symbols)).toJS() + ' = ' + args[0] + ', ' + rJS + ')' | |
91 } else { | 78 } else { |
92 return rJS + '.' + jsName + '(' + args.join(', ') + ')'; | 79 var callCode = rJS + '.' + (new symbol(name, this.symbols)).toJS() + '(' + args.join(', ') + ')'; |
80 if (args.length == 0) { | |
81 return '(' + rJS + ' instanceof Function ? ' + callCode + ' : ' + callCode.substr(0, callCode.length-2) + ')'; | |
82 } else { | |
83 return callCode; | |
84 } | |
93 } | 85 } |
94 } | 86 } |
95 var ret = ''; | 87 var ret = ''; |
96 switch(funinfo.type) | 88 switch(funinfo.type) |
97 { | 89 { |