@@ -36,102 +36,96 @@ var connect = function() {
3636 case "SetPropertyAtIndex":
3737 jsaddle_values.get(d.contents[0])[d.contents[1]]=jsaddle_values.get(d.contents[2]);
3838 break;
39+ case "EvaluateScript":
40+ var n = d.contents[1];
41+ jsaddle_values.set(n, eval(d.contents[0]));
42+ break;
43+ case "StringToValue":
44+ var n = d.contents[1];
45+ jsaddle_values.set(n, d.contents[0]);
46+ break;
47+ case "GetPropertyByName":
48+ var n = d.contents[2];
49+ jsaddle_values.set(n, jsaddle_values.get(d.contents[0])[d.contents[1]]);
50+ break;
51+ case "GetPropertyAtIndex":
52+ var n = d.contents[2];
53+ jsaddle_values.set(n, jsaddle_values.get(d.contents[0])[d.contents[1]]);
54+ break;
55+ case "NumberToValue":
56+ var n = d.contents[1];
57+ jsaddle_values.set(n, d.contents[0]);
58+ break;
59+ case "NewEmptyObject":
60+ var n = d.contents;
61+ jsaddle_values.set(n, {});
62+ break;
63+ case "NewCallback":
64+ var nFunction = d.contents;
65+ jsaddle_values.set(nFunction, function() {
66+ var nThis = ++jsaddle_index;
67+ jsaddle_values.set(nThis, this);
68+ var args = [];
69+ for (var i = 0; i != arguments.length; i++) {
70+ var nArg = ++jsaddle_index;
71+ jsaddle_values.set(nArg, arguments[i]);
72+ args[i] = nArg;
73+ }
74+ ws.send(JSON.stringify({"tag": "Callback", "contents": [nFunction, nThis, args]}));
75+ });
76+ break;
77+ case "CallAsFunction":
78+ var n = d.contents[3];
79+ jsaddle_values.set(n,
80+ jsaddle_values.get(d.contents[0]).apply(jsaddle_values.get(d.contents[1]),
81+ d.contents[2].map(function(arg){return jsaddle_values.get(arg);})));
82+ break;
83+ case "CallAsConstructor":
84+ var n = d.contents[2];
85+ var r;
86+ var f = jsaddle_values.get(d.contents[0]);
87+ var a = d.contents[1].map(function(arg){return jsaddle_values.get(arg);});
88+ switch(a.length) {
89+ case 0 : r = new f(); break;
90+ case 1 : r = new f(a[0]); break;
91+ case 2 : r = new f(a[0],a[1]); break;
92+ case 3 : r = new f(a[0],a[1],a[2]); break;
93+ case 4 : r = new f(a[0],a[1],a[2],a[3]); break;
94+ case 5 : r = new f(a[0],a[1],a[2],a[3],a[4]); break;
95+ case 6 : r = new f(a[0],a[1],a[2],a[3],a[4],a[5]); break;
96+ case 7 : r = new f(a[0],a[1],a[2],a[3],a[4],a[5],a[6]); break;
97+ default:
98+ var ret;
99+ var temp = function() {
100+ ret = f.apply(this, a);
101+ };
102+ temp.prototype = f.prototype;
103+ var i = new temp();
104+ if(ret instanceof Object)
105+ r = ret;
106+ else {
107+ i.constructor = f;
108+ r = i;
109+ }
110+ }
111+ jsaddle_values.set(n, r);
112+ break;
113+ case "NewArray":
114+ var n = d.contents[1];
115+ jsaddle_values.set(n, d.contents[0].map(function(v){return jsaddle_values.get(v);}));
116+ break;
117+ default:
118+ ws.send(JSON.stringify({"tag": "ProtocolError", "contents": e.data}));
119+ return;
39120 }
40121 }
41122 var d = batch[1];
42123 switch (d.tag) {
43− case "EvaluateScript":
44− var n = ++jsaddle_index;
45− jsaddle_values.set(n, eval(d.contents));
46− ws.send(JSON.stringify({"tag": "EvaluateScriptResult", "contents": n}));
47− break;
48124 case "ValueToString":
49125 var val = jsaddle_values.get(d.contents);
50126 var s = val === null ? "null" : val === undefined ? "undefined" : val.toString();
51127 ws.send(JSON.stringify({"tag": "ValueToStringResult", "contents": s}));
52128 break;
53− case "StringToValue":
54− var n = ++jsaddle_index;
55− jsaddle_values.set(n, d.contents);
56− ws.send(JSON.stringify({"tag": "StringToValueResult", "contents": n}));
57− break;
58− case "GetPropertyByName":
59− var n = ++jsaddle_index;
60− jsaddle_values.set(n, jsaddle_values.get(d.contents[0])[d.contents[1]]);
61− ws.send(JSON.stringify({"tag": "GetPropertyByNameResult", "contents": n}));
62− break;
63− case "GetPropertyAtIndex":
64− var n = ++jsaddle_index;
65− jsaddle_values.set(n, jsaddle_values.get(d.contents[0])[d.contents[1]]);
66− ws.send(JSON.stringify({"tag": "GetPropertyAtIndexResult", "contents": n}));
67− break;
68− case "NumberToValue":
69− var n = ++jsaddle_index;
70− jsaddle_values.set(n, d.contents);
71− ws.send(JSON.stringify({"tag": "NumberToValueResult", "contents": n}));
72− break;
73− case "NewEmptyObject":
74− var n = ++jsaddle_index;
75− jsaddle_values.set(n, {});
76− ws.send(JSON.stringify({"tag": "NewEmptyObjectResult", "contents": n}));
77− break;
78− case "NewCallback":
79− var nFunction = ++jsaddle_index;
80− jsaddle_values.set(nFunction, function() {
81− var nThis = ++jsaddle_index;
82− jsaddle_values.set(nThis, this);
83− var args = [];
84− for (var i = 0; i != arguments.length; i++) {
85− var nArg = ++jsaddle_index;
86− jsaddle_values.set(nArg, arguments[i]);
87− args[i] = nArg;
88− }
89− ws.send(JSON.stringify({"tag": "Callback", "contents": [nFunction, nThis, args]})); });
90− ws.send(JSON.stringify({"tag": "NewCallbackResult", "contents": nFunction}));
91− break;
92− case "CallAsFunction":
93− var n = ++jsaddle_index;
94− jsaddle_values.set(n,
95− jsaddle_values.get(d.contents[0]).apply(jsaddle_values.get(d.contents[1]),
96− d.contents[2].map(function(arg){return jsaddle_values.get(arg);})));
97− ws.send(JSON.stringify({"tag": "CallAsFunctionResult", "contents": n}));
98− break;
99− case "CallAsConstructor":
100− var n = ++jsaddle_index;
101− var r;
102− var f = jsaddle_values.get(d.contents[0]);
103− var a = d.contents[1].map(function(arg){return jsaddle_values.get(arg);});
104− switch(a.length) {
105− case 0 : r = new f(); break;
106− case 1 : r = new f(a[0]); break;
107− case 2 : r = new f(a[0],a[1]); break;
108− case 3 : r = new f(a[0],a[1],a[2]); break;
109− case 4 : r = new f(a[0],a[1],a[2],a[3]); break;
110− case 5 : r = new f(a[0],a[1],a[2],a[3],a[4]); break;
111− case 6 : r = new f(a[0],a[1],a[2],a[3],a[4],a[5]); break;
112− case 7 : r = new f(a[0],a[1],a[2],a[3],a[4],a[5],a[6]); break;
113− default:
114− var ret;
115− var temp = function() {
116− ret = f.apply(this, a);
117− };
118− temp.prototype = f.prototype;
119− var i = new temp();
120− if(ret instanceof Object)
121− r = ret;
122− else {
123− i.constructor = f;
124− r = i;
125− }
126− }
127− jsaddle_values.set(n, r);
128− ws.send(JSON.stringify({"tag": "CallAsConstructorResult", "contents": n}));
129− break;
130− case "NewArray":
131− var n = ++jsaddle_index;
132− jsaddle_values.set(n, d.contents.map(function(v){return jsaddle_values.get(v);}));
133− ws.send(JSON.stringify({"tag": "NewArrayResult", "contents": n}));
134− break;
135129 case "ValueToBool":
136130 ws.send(JSON.stringify({"tag": "ValueToBoolResult", "contents": jsaddle_values.get(d.contents) ? true : false}));
137131 break;
@@ -172,7 +166,7 @@ var connect = function() {
172166 ws.send(JSON.stringify({"tag": "PropertyNamesResult", "contents": result}));
173167 break;
174168 case "Sync":
175− ws.send(JSON.stringify({"tag": "SyncResult"}));
169+ ws.send(JSON.stringify({"tag": "SyncResult", "contents": []}));
176170 break;
177171 default:
178172 ws.send(JSON.stringify({"tag": "ProtocolError", "contents": e.data}));