Mercurial > repos > tabletprog
annotate compiler.js @ 31:668f533e5284
Add initial version of C backend
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 07 Jul 2012 16:48:36 -0700 |
parents | 608eb70fe261 |
children | a10f1b049193 |
rev | line source |
---|---|
8
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 function indent(str) |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 return str.split('\n').join('\n\t'); |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 |
31
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
6 var toplevel = new topsymbols(); |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
7 function topsymbols() |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
8 { |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
9 this.names = null; |
31
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
10 var self = this; |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
11 get('/src/', function(data) { |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
12 console.log(data); |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
13 self.names = {}; |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
14 var fakeEl = newEl("div", { |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
15 innerHTML: data.response |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
16 }); |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
17 console.log(fakeEl); |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
18 each(qall('a', fakeEl), function(idx, a) { |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
19 var tpidx = a.textContent.indexOf('.tp'); |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
20 if (tpidx > -1) { |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
21 self.names[a.textContent.substr(0, tpidx)] = true; |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
22 } |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
23 }); |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
24 }); |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
25 } |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
26 topsymbols.prototype.find = function(name) { |
31
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
27 console.log(this.names); |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
28 if (!this.names) { |
31
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
29 throw new Error('data not ready'); |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
30 } |
31
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
31 console.log('toplevel', name); |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
32 if (name in this.names) { |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
33 return { |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
34 type: 'toplevel', |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
35 def: null |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
36 }; |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
37 } |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
38 return null; |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
39 } |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
40 |
8
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 function osymbols(parent) |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 this.parent = parent; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 this.names = {}; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 osymbols.prototype.find = function(name) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 if (name in this.names) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 if (this.names[name] instanceof funcall && this.names[name].name == 'foreign:') { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 return { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 type: 'foreign', |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 def: this.names[name] |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 return { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 type: 'self', |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 def: this.names[name], |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 } else if(this.parent) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 var ret = this.parent.find(name); |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 if (ret) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 if(ret.type == 'self') { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 ret.type = 'parent'; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 ret.depth = 1; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 } else if(ret.type == 'parent') { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 ret.depth++; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 return ret; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 return null; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 osymbols.prototype.defineMsg = function(name, def) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 this.names[name] = def; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 osymbols.prototype.parentObject = function() { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 if (!this.parent) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 return 'null'; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 return 'this'; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 } |
24
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
81 osymbols.prototype.allSymbols = function(curlist, cursyms) { |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
82 if (curlist === undefined) { |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
83 curlist = []; |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
84 cursyms = {}; |
23
068d63627b16
Populate in scope symbol buttons when clicking on a symbol in the source
Mike Pavone <pavone@retrodev.com>
parents:
20
diff
changeset
|
85 } |
24
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
86 var keys = Object.keys(this.names).sort(); |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
87 for (var i in keys) { |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
88 if (!(keys[i] in cursyms)) { |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
89 curlist.push(keys[i]); |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
90 cursyms[keys[i]] = true; |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
91 } |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
92 } |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
93 if (this.parent) { |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
94 return this.parent.allSymbols(curlist, cursyms); |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
95 } |
fe3533494ce9
Display symbols order first by depth. Eliminate extraneous setter symbols
Mike Pavone <pavone@retrodev.com>
parents:
23
diff
changeset
|
96 return curlist; |
23
068d63627b16
Populate in scope symbol buttons when clicking on a symbol in the source
Mike Pavone <pavone@retrodev.com>
parents:
20
diff
changeset
|
97 } |
8
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 function lsymbols(parent) |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 this.parent = parent; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 this.names = {}; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 this.needsSelfVar = false; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 lsymbols.prototype.find = function(name) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 if (name in this.names) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 if (this.names[name] instanceof funcall && this.names[name].name == 'foreign:') { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 return { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 type: 'foreign', |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 def: this.names[name] |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 return { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 type: 'local', |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 def: this.names[name] |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 } else if(this.parent) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 var ret = this.parent.find(name); |
31
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
119 if (ret) { |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
120 if (ret.type == 'local') { |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
121 ret.type = 'upvar'; |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
122 ret.depth = 1; |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
123 } else if (ret.type == 'upvar') { |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
124 ret.depth++; |
668f533e5284
Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
30
diff
changeset
|
125 } |
8
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 return ret; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 return null; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 lsymbols.prototype.defineVar = function(name, def) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 this.names[name] = def; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 lsymbols.prototype.selfVar = function() { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 if (this.parent && this.parent instanceof lsymbols) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 this.parent.needsSelf(); |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 return 'self'; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 } else { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 return 'this'; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 }; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 lsymbols.prototype.needsSelf = function() { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 if (this.parent && this.parent instanceof lsymbols) { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 this.parent.needsSelf(); |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 } else { |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 this.needsSelfVar = true; |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 } |
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 }; |
23
068d63627b16
Populate in scope symbol buttons when clicking on a symbol in the source
Mike Pavone <pavone@retrodev.com>
parents:
20
diff
changeset
|
149 lsymbols.prototype.allSymbols = osymbols.prototype.allSymbols; |
8
04ae32e91598
Move compiler and test page related code out of parser.js
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
151 var mainModule; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
152 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
153 function toobj(val) |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
154 { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
155 switch(typeof val) |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
156 { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
157 case 'boolean': |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
158 if(val) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
159 return mainModule.strue; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
160 } else { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
161 return mainModule.sfalse; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
162 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
163 case 'number': |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
164 return mainModule.snumber(val); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
165 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
166 throw new Error("can't make val into object"); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
167 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
168 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
169 op.prototype.populateSymbols = function(symbols, isReceiver) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
170 this.left.populateSymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
171 this.right.populateSymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
172 }; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
173 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
174 symbol.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
175 this.symbols = symbols; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
176 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
177 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
178 intlit.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
179 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
180 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
181 floatlit.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
182 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
183 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
184 strlit.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
185 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
186 |
25
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
187 listlit.prototype.populateSymbols = function(symbols) { |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
188 each(this.val, function(i,el) { |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
189 el.populateSymbols(symbols); |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
190 }); |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
191 } |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
192 |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
193 funcall.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
194 if (this.name == 'foreign:') { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
195 if ((this.args[0] instanceof lambda) || (this.args[0] instanceof object) || (this.args[0] instanceof symbol)) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
196 return; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
197 } else { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
198 throw new Error("Unexpected AST type for foreign:"); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
199 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
200 } |
20
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
201 this.symbols = symbols; |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
202 for (var i in this.args) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
203 this.args[i].populateSymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
204 } |
20
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
205 if (this.receiver) { |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
206 this.receiver.populateSymbols(symbols); |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
207 } |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
208 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
209 |
25
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
210 funcall.prototype.populateSymbolsObject = function(symbols) { |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
211 this.populateSymbols(symbols.parent); |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
212 } |
4d87c38404d6
List literals, fixes to implicit self property lookup, import statement and editor improvements
Mike Pavone <pavone@retrodev.com>
parents:
24
diff
changeset
|
213 |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
214 object.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
215 symbols = new osymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
216 for (var i in this.messages) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
217 this.messages[i].populateSymbolsObject(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
218 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
219 this.symbols = symbols; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
220 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
221 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
222 lambda.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
223 var args = this.args ? this.args.slice(0, this.args.length) : []; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
224 if (args.length && args[0].cleanName() == 'self') { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
225 args.splice(0, 1); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
226 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
227 var exprs = this.expressions; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
228 symbols = new lsymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
229 for (var i in args) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
230 symbols.defineVar(args[i].cleanName(), null); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
231 args[i].populateSymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
232 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
233 for (var i in exprs) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
234 exprs[i].populateSymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
235 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
236 this.symbols = symbols; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
237 }; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
238 |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
239 assignment.prototype.populateSymbols = function(symbols) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
240 var existing = symbols.find(this.symbol.name); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
241 if (!existing) { |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
242 symbols.defineVar(this.symbol.name, this.expression); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
243 } |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
244 this.symbol.populateSymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
245 this.expression.populateSymbols(symbols); |
20
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
246 this.symbols = symbols; |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
247 }; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
248 assignment.prototype.populateSymbolsObject = function(symbols) { |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
249 if (this.expression instanceof lambda || (this.expression instanceof funcall & this.expression.name == 'foreign:')) { |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
250 symbols.defineMsg(this.symbol.name, this.expression); |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
251 } else { |
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
252 symbols.defineMsg(this.symbol.name, new getter(null)); |
20
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
253 symbols.defineMsg(this.symbol.name + '!', new setter(null)); |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
254 } |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
255 this.symbol.populateSymbols(symbols); |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
256 this.expression.populateSymbols(symbols); |
20
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
257 this.symbols = symbols; |
16
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
258 }; |
59e83296e331
Add populateSymbols method to AST
Mike Pavone <pavone@retrodev.com>
parents:
8
diff
changeset
|
259 |
20
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
260 function setter(fun) |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
261 { |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
262 this.fun = fun; |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
263 } |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
264 setter.prototype.args = [new symbol('self'), new symbol('newval')]; |
20
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
265 function getter(fun) |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
266 { |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
267 this.fun = fun; |
bf03c9f0dd55
Initial work on proper property support
Mike Pavone <pavone@retrodev.com>
parents:
16
diff
changeset
|
268 } |
30
608eb70fe261
Fix some compiler bugs and do initial work on module import
Mike Pavone <pavone@retrodev.com>
parents:
25
diff
changeset
|
269 getter.prototype.args = [new symbol('self')]; |