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 {