Mercurial > repos > rhope
annotate jsbackend.rhope @ 176:327bcf35e094
Add bytecode interpreter
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 08 Jun 2011 23:24:29 -0700 |
parents | fc3815b7462f |
children | 4580c08fd4e8 |
rev | line source |
---|---|
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 Import backendutils_c.rhope |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 Blueprint JS Method Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 Lookup |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 Next ID |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 JS Method Registry[:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 builtins <- [[[[[[[[[[[[[Dictionary[] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 ]Set["+", "METHOD_ADD"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 ]Set["-", "METHOD_SUB"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 ]Set["/", "METHOD_DIV"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 ]Set["*", "METHOD_MUL"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 ]Set["LShift", "METHOD_LSHIFT"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 ]Set["RShift", "METHOD_RSHIFT"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 ]Set["=", "METHOD_EQUALS"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 ]Set[">", "METHOD_GREATER"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 ]Set["<", "METHOD_LESS"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 ]Set["If", "METHOD_IF"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 ]Set["Set Missing Field", "METHOD_SETFIELDMISSING"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 ]Set["Get Missing Field", "METHOD_GETFIELDMISSING"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 ]Set["Missing Method", "METHOD_MISSING"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 out <- [[Build[JS Method Registry()]]Lookup <<[builtins]]Next ID<<[0] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 Register Method@JS Method Registry[reg,method:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 [[reg]Lookup >>]Index[method] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 out <- reg |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 method ID <- [reg]Next ID>> |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 new lookup <- [[reg]Lookup >>]Set[method, ["METHOD_FIRST_USER+"]Append[String[method ID]]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 out <- [[reg]Lookup <<[new lookup]]Next ID <<[[method ID]+[1]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 Method ID@JS Method Registry[reg,method:out,notfound] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 out,notfound <- [[reg]Lookup >>]Index[method] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 Blueprint JS Field Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 Lookup |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 Next ID |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 JS Field Registry[:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 out <- [[Build[JS Field Registry()]]Lookup <<[Dictionary[]]]Next ID<<[1] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 Register Field@JS Field Registry[reg,field:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 [[reg]Lookup >>]Index[field] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 out <- reg |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 field ID <- [reg]Next ID>> |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 new lookup <- [[reg]Lookup >>]Set[field, field ID] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 out <- [[reg]Lookup <<[new lookup]]Next ID <<[[field ID]+[1]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 Field ID@JS Field Registry[reg,field:out,notfound] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 out,notfound <- [[reg]Lookup >>]Index[field] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 Blueprint JS Type |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 Name |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 Fields |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 Methods |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 Init |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 Copy |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 Cleanup |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 JS Type[name:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 out <- [[[[[[Build[JS Type()]]Name <<[name]]Fields <<[()]]Methods <<[()]]Init <<["NULL"]]Copy <<["NULL"]]Cleanup <<["NULL"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 Add Field@JS Type[ctype,name,type:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 out <- [ctype]Fields <<[ [[ctype]Fields >>]Append[ [[()]Append[name]]Append[type] ] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 Add Method@JS Type[ctype,name:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 out <- [ctype]Methods <<[ [[ctype]Methods >>]Append[name] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 Register Methods@JS Type[ctype,method reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 out <- Fold[Register Method[?], method reg, [ctype]Methods >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 _Register Field JS[reg,field:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 name <- [field]Index[0] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 out <- [reg]Register Field[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 Register Fields@JS Type[ctype,field reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 out <- Fold[_Register Field JS[?], field reg, [ctype]Fields >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
117 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
118 Type Init@JS Type[jstype,id,method reg,field reg,p:out] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
120 ename <- Escape Rhope Name[[jstype]Name >>,p] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
121 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
122 [("Array", "Worker")]Find[=[[jstype]Name >>, ?]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
124 constructor <- [[[["var t_"]Append[ename]]Append[" = "]]Append[ [("Array","Function")]Index[~] ]]Append[";\n"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 }{ |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
126 constructor <- [["function t_"]Append[ename]]Append["()\n{}\n"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 } |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
128 out <- [[[[[constructor |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
129 ]Append[ [[[["t_"]Append[ename]]Append[".prototype.type_id = "]]Append[id]]Append[";\n"] ] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
130 ]Append[ [["t_"]Append[ename]]Append[".prototype.conversions = new Array();\n"] ] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
131 ]Append[ [["t = new t_Blueprint;\nt.id = "]Append[id]]Append[";\n"] ] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
132 ]Append[ [["t.construct = t_"]Append[ename]]Append[";\n"] ] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
133 ]Append[ [["registered_types["]Append[id]]Append["] = t;\n\n"] ] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 Blueprint JS Type Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 Lookup |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 Definitions |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 Next ID |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 Escape Pattern |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 JS Type Registry[p:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 out <- [[[[Build[JS Type Registry()]]Lookup << [ |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
147 [[[[[[[[[[[[[[[[[[Dictionary[] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 ]Set["UInt8", "TYPE_UINT8"] //1 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 ]Set["UInt16", "TYPE_UINT16"] //2 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 ]Set["UInt32", "TYPE_UINT32"] //3 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 ]Set["UInt64", "TYPE_UINT64"] //4 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 ]Set["Int8", "TYPE_INT8"] //5 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 ]Set["Int16", "TYPE_INT16"] //6 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 ]Set["Int32", "TYPE_INT32"] //7 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 ]Set["Int64", "TYPE_INT64"] //8 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 ]Set["Boolean", "TYPE_BOOLEAN"] //9 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 ]Set["Float32", "TYPE_FLOAT32"] //10 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 ]Set["Float64", "TYPE_FLOAT64"] //11 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 ]Set["Blueprint", "TYPE_BLUEPRINT"] //12 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 ]Set["Array", "TYPE_ARRAY"] //13 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 ]Set["Boxed Array", "TYPE_BOXEDARRAY"]//14 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 ]Set["Worker", "TYPE_WORKER"] //15 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 ]Set["Method Missing Exception", "TYPE_METHODMISSINGEXCEPTION"] //16 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 ]Set["Field Missing Exception", "TYPE_FIELDMISSINGEXCEPTION"] //17 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
165 ]Set["Wrong Type Exception", "TYPE_WRONGTYPEEXCEPTION"]] //18 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
166 ]Definitions << [Dictionary[]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
167 ]Next ID <<[0] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
168 ]Escape Pattern <<[p] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
170 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 _Type Inits JS[reg,method reg,field reg,text,def,name:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
173 out <- [[text]Append[ [def]Type Init[[reg]Type ID[name], method reg, field reg,[reg]Escape Pattern >>] ]]Append["\n\n"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 Type Inits@JS Type Registry[reg,method reg,field reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
178 out <- Fold[_Type Inits JS[reg, method reg, field reg, ?], "", [reg]Definitions >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
181 Register Type@JS Type Registry[reg,def:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
183 name <- [def]Name >> |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
184 [[reg]Lookup >>]Index[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
185 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
186 [[reg]Definitions >>]Index[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
187 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
188 out <- reg |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
189 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
190 out <- [reg]Definitions <<[[[reg]Definitions >>]Set[name, def]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
191 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
192 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
193 out <- [[[reg]Lookup <<[ [[reg]Lookup >>]Set[name, ["TYPE_FIRST_USER+"]Append[String[[reg]Next ID >>]]] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
194 ]Definitions <<[ [[reg]Definitions >>]Set[name, def] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
195 ]Next ID <<[ [[reg]Next ID >>]+[1] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
196 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
197 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
198 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
199 Type ID@JS Type Registry[reg,name:out,notfound] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
200 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
201 out <- [[reg]Lookup >>]Index[name] {} |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
202 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
203 ,notfound <- If[[name]=["Any Type"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
204 { out <- "0" } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
205 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
206 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
207 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
208 Simple Type?@JS Type Registry[reg,name:yep,nope,notfound] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
209 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
210 ,notfound <- [[reg]Definitions >>]Index[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
211 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
212 yep,nope <- If[[[[~]Fields >>]Length] = [1]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
213 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
214 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
215 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
216 Defined?@JS Type Registry[reg,name:yep,nope] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
217 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 yep,nope <- [[reg]Definitions >>]Index[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
220 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
221 Blueprint JS Function |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
222 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
223 Name |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
224 Inputs |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
225 Outputs |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
226 Convention |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 Variables |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
228 Statements |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
229 Method Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
230 Field Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
231 Type Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
232 Constants |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
233 Input Types |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
234 Output Types |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
235 Resume Index |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
236 Last NumParams |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
237 Escape Pattern |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
238 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
239 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
240 JS Function[name,inputs,outputs,convention,p:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
241 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
242 out <- JS Function With Registry[name,inputs,outputs,convention, JS Method Registry[], JS Field Registry[], JS Type Registry[p],p] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
243 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
244 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
245 JS Function With Registry[name,inputs,outputs,convention,registry,field reg,type reg,p:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
246 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
247 out <- [[[[[[[[[[[[[[[Build[JS Function()] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
248 ]Name <<[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
249 ]Inputs <<[inputs] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
250 ]Outputs <<[outputs] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
251 ]Convention <<[convention] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
252 ]Variables <<[Dictionary[]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
253 ]Statements <<[()] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
254 ]Method Registry <<[registry] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
255 ]Field Registry <<[field reg] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
256 ]Type Registry <<[type reg] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
257 ]Constants <<[Dictionary[]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
258 ]Input Types <<[ Fold[Append[?, "Any Type"], (), inputs] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
259 ]Output Types <<[ Fold[Append[?, "Any Type"], (), outputs] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
260 ]Resume Index <<[1] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
261 ]Last NumParams <<[-1] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
262 ]Escape Pattern <<[p] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
263 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
264 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
265 Set Input Type@JS Function[func,type,input num:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
266 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
267 out <- [func]Input Types <<[ [[func]Input Types >>]Set[input num, type] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
268 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
269 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
270 Set Output Type@JS Function[func,type,output num:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
271 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
272 out <- [func]Output Types <<[ [[func]Output Types >>]Set[output num, type] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
273 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
274 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
275 Register Constant@JS Function[func,name,constant:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
276 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
277 out <- [func]Constants <<[ [[func]Constants >>]Set[name, constant] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
278 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
279 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
280 Allocate Var@JS Function[func,name,type:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
281 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
282 out <- [func]Variables <<[ [[func]Variables >>]Set[name,type] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
283 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
284 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
285 Add Statement@JS Function[func,statement:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
286 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
287 out <- [func]Statements <<[ [[func]Statements >>]Append[["\t"]Append[[statement]Append[";\n"]]] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
288 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
289 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
290 Add Raw Line@JS Function[func,line:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
291 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
292 out <- [func]Statements <<[ [[func]Statements >>]Append[["\t"]Append[[line]Append["\n"]]] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
293 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
294 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
295 Add Operator Statement@JS Function[func,psource1,psource2,pdest,op:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
296 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
297 source1 <- [psource1]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
298 source2 <- [psource2]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
299 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
300 out <- [func]Add Statement[[[[[dest]Append[" = "]]Append[source1]]Append[op]]Append[source2]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
301 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
302 |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
303 Make AddRef Op@JS Function[func,val:out] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
304 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
305 out <- [val]Make Op[func] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
306 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
307 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
308 Add@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
309 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
310 out <- [func]Add Operator Statement[source1,source2,dest," + "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
311 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
312 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
313 Sub@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
314 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
315 out <- [func]Add Operator Statement[source1,source2,dest," - "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
316 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
317 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
318 Multiply@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
319 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
320 out <- [func]Add Operator Statement[source1,source2,dest," * "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
321 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
322 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
323 Get Constant Type@JS Function[func,const:out] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
324 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
325 //TODO: Support more types as needed, particularly Float64 when support for that type is added in general |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
326 val <- [[func]Constants >>]Index[const] {} |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
327 { typename <- "Any Type" } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
328 [(Int32(),UInt8(),UInt32())]Find[=[val,?]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
329 { typename <- [("Int32","UInt8","UInt32")]Index[~] } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
330 { typename <- "Any Type" } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
331 out <- Type Instance[typename] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
332 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
333 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
334 Name Match[field,target name:out] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
335 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
336 out <- [[field]Index[0]]=[target name] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
337 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
338 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
339 Get Field Type@JS Function[func,otype,field:out] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
340 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
341 def <- [[[func]Type Registry >>]Definitions >>]Index[[otype]Name >>] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
342 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
343 [[~]Fields >>]Find[Name Match[?,field]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
344 { out <- [[[def]Fields >>]Index[~]]Index[1] } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
345 { out <- Type Instance["Any Type"] } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
346 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
347 out <- Type Instance["Any Type"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
348 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
349 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
350 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
351 Get Var Type@JS Function[func,varname:out] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
352 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
353 [[func]Inputs >>]Find[=[varname,?]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
354 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
355 out <- [[func]Input Types >>]Index[~] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
356 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
357 [[func]Outputs >>]Find[=[varname,?]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
358 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
359 out <- [[func]Output Types >>]Index[~] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
360 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
361 out <- [[func]Variables >>]Index[varname] {} |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
362 { out <- Type Instance["Any Type"] } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
363 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
364 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
365 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
366 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
367 Divide@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
368 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
369 sourcetype <- [source1]Get Type[func] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
370 If[[[sourcetype]Name >>]=["Float64"]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
371 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
372 out <- [func]Add Operator Statement[source1,source2,dest," / "] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
373 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
374 out <- [func]Add Statement[ [[[[[Make Op[dest, func]]Append[" = Math.floor(("]]Append[ Make Op[source1,func] ]]Append[") / ("]]Append[Make Op[source2, func]]]Append["))"] ] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
375 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
376 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
377 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
378 DoLShift@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
379 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
380 out <- [func]Add Operator Statement[source1,source2,dest," << "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
381 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
382 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
383 DoRShift@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
384 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
385 out <- [func]Add Operator Statement[source1,source2,dest," >> "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
386 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
387 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
388 BitAnd@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
389 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
390 out <- [func]Add Operator Statement[source1,source2,dest," & "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
391 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
392 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
393 BitOr@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
394 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
395 out <- [func]Add Operator Statement[source1,source2,dest," | "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
396 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
397 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
398 CompLess@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
399 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
400 out <- [func]Add Operator Statement[source1,source2,dest," < "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
401 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
402 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
403 CompGreater@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
404 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
405 out <- [func]Add Operator Statement[source1,source2,dest," > "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
406 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
407 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
408 CompEqual@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
409 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
410 out <- [func]Add Operator Statement[source1,source2,dest," == "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
411 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
412 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
413 CompLessEqual@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
414 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
415 out <- [func]Add Operator Statement[source1,source2,dest," <= "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
416 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
417 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
418 CompGreaterEqual@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
419 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
420 out <- [func]Add Operator Statement[source1,source2,dest," >= "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
421 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
422 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
423 CompNotEqual@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
424 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
425 out <- [func]Add Operator Statement[source1,source2,dest," != "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
426 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
427 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
428 Move@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
429 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
430 source <- [psource]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
431 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
432 out <- [func]Add Statement[[[dest]Append[" = "]]Append[source]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
433 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
434 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
435 Do AddRef@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
436 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
437 out <- [func]Move[psource,pdest] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
438 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
439 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
440 AddRef No Dest@JS Function[func,psource:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
441 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
442 out <- func |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
443 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
444 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
445 Release@JS Function[func,psource:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
446 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
447 out <- func |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
448 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
449 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
450 Set Null@JS Function[func,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
451 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
452 dest <- [pdest]Make Op[func] |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
453 out <- [func]Add Statement[[dest]Append[" = null"]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
454 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
455 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
456 Lookup Constant@JS Function[func,const,doaddref:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
457 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
458 out <- ["_const_"]Append[Escape Rhope Name[const,[func]Escape Pattern >>]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
459 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
460 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
461 Field Result@JS Function[func,var,field:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
462 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
463 as op <- [var]Make Op[func] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
464 out <- [[as op]Append[".p_"]]Append[Escape Rhope Name[field,[func]Escape Pattern >>]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
465 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
466 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
467 Read Field@JS Function[func,var,field:out,result op] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
468 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
469 out <- func |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
470 result op <- Field Ref[var,field] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
471 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
472 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
473 Write Field@JS Function[func,var,field:out,result op] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
474 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
475 out <- func |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
476 result op <- Field Ref[var,field] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
477 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
478 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
479 Set Field Null@JS Function[func,var,field:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
480 { |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
481 out <- [func]Add Statement[ [[func]Field Result[var,field]]Append[" = null"] ] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
482 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
483 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
484 Copy@JS Function[func,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
485 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
486 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
487 out <- [func]Add Statement[ [dest]Append[[[" = copy_object("]Append[dest]]Append[")"]] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
488 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
489 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
490 Box@JS Function[func,psource,pdest,type:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
491 { |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
492 dest <- [pdest]Make Op[func] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
493 source <- [psource]Make Op[func] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
494 typename <- [type]Name >> |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
495 [("Int32","UInt32","UInt8")]Find[=[typename,?]] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
496 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
497 out <- [func]Add Statement[ [[[[dest]Append[[" = make_"]Append[typename]]]Append["("]]Append[source]]Append[")"] ] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
498 }{ |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
499 If[[typename]=["Boolean"]] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
500 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
501 out <- [func]Add Statement[ [[[[dest]Append[" = make_Bool"]]Append["("]]Append[source]]Append[")"] ] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
502 }{ |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
503 out <- [func]Move[psource,pdest] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
504 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
505 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
506 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
507 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
508 Unbox@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
509 { |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
510 dest <- [pdest]Make Op[func] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
511 source <- [psource]Make Op[func] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
512 out <- [func]Add Statement[ [[[dest]Append[" = "]]Append[source]]Append[".unbox()"] ] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
513 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
514 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
515 Get Raw Pointer@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
516 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
517 out <- func |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
518 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
519 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
520 Array Raw Pointer@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
521 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
522 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
523 source <- [psource]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
524 out <- [func]Add Statement[ [[[dest]Append[" = ((char *)"]]Append[source]]Append[")+ sizeof(t_Array)"] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
525 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
526 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
527 _Function Arg JS[func,val,inputnum:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
528 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
529 out <- [func]Add Raw Line[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
530 [[[["SetParam(" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
531 ]Append[String[inputnum]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
532 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
533 ]Append[val] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
534 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
535 ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
536 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
537 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
538 _Val Function Arg JS[func,val,inputnum,worker:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
539 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
540 out <- [func]Add Raw Line[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
541 [[[[[["VCSetParam(" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
542 ]Append[worker] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
543 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
544 ]Append[String[inputnum]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
545 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
546 ]Append[val] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
547 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
548 ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
549 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
550 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
551 Method Call@JS Function[func,method,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
552 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
553 If[[method]=["Call"]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
554 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
555 out <- [[[[[func]Add Raw Line[[["if ("]Append[Make Op[[args]Index[0], func]]]Append[".type_id == TYPE_WORKER) {"]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
556 ]Val Call[[args]Index[0], Tail[args,1]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
557 ]Add Raw Line["} else {"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
558 ]Func Base["Call",args, "MCall"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
559 ]Add Raw Line["}"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
560 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
561 out <- [func]Func Base[Escape Rhope Name[method,[func]Escape Pattern >>],args, "MCall"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
562 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
563 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
564 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
565 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
566 Val Call@JS Function[func,to call,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
567 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
568 worker <- Make Op[to call, func] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
569 rargs <- Map[args, Make Op[?, func]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
570 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
571 out <- [[[[[func]Add Raw Line[[[[["if ("]Append[worker]]Append[".Args.length > 0 || "]]Append[worker]]Append[".IsMethod) { "]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
572 ]Add Statement[[[[[" res = valcall("]Append[worker]]Append["["]]Append[ [rargs]Join[","] ]]Append["])"]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
573 ]Add Raw Line["} else {"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
574 ]Add Statement[[[[[" res = "]Append[worker]]Append["("]]Append[ [rargs]Join[","] ]]Append[")"]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
575 ]Add Raw Line["}"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
576 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
577 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
578 Call@JS Function[func,name,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
579 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
580 If[[name]=["Call@Worker"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
581 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
582 //TODO: Handle case when user explicitly calls the fully qualified version, but the type of the first arg isn't Worker |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
583 out <- [func]Val Call[[args]Index[0], Tail[args,1]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
584 }{ |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
585 out <- [func]Func Base[Escape Rhope Name[name,[func]Escape Pattern >>],args, "Call"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
586 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
587 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
588 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
589 Func Base@JS Function[func,tocall,args,type:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
590 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
591 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
592 Print[ [[func]Name >>]Append[ [": Func Base("]Append[tocall] ] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
593 rargs <- Map[args, Make Op[?, func]] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
594 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
595 If[[type]=["MCall"]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
596 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
597 out <- [func]Add Statement[[[[[[["res = "]Append[[rargs]Index[0]]]Append[".f_"]]Append[tocall]]Append["("]]Append[ [Tail[rargs, 1]]Join[","] ]]Append[")"]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
598 }{ |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
599 out <- [func]Add Statement[[[[["res = f_"]Append[tocall]]Append["("]]Append[ [rargs]Join[","] ]]Append[")"]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
600 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
601 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
602 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
603 Call Foreign@JS Function[func,name,language,args,store result:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
604 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
605 rargs <- Map[args, Make Op[?, func]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
606 //Assume language = "JS" for now |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
607 If[[name]Ends With["@"]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
608 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
609 base <- [[[[[[rargs]Index[0]]Append["."]]Append[ [name]Slice[ [[name]Length]-[1] ] ]]Append["("]]Append[ [Tail[rargs,1]]Join[","] ]]Append[")"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
610 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
611 base <- [[[name]Append["("]]Append[ Join[rargs, ", "] ]]Append[")"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
612 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
613 ,do store <- [(String(), String Slice(), String Cat())]Find[=[Blueprint Of[store result], ?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
614 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
615 ,do store <- If[[store result]=[""]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
616 { stmt <- Val[base] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
617 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
618 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
619 Val[do store] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
620 { stmt <- [[Make Op[store result, func]]Append[" = "]]Append[base] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
621 out <- [func]Add Statement[stmt] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
622 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
623 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
624 Get Field Call@JS Function[func,field,source:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
625 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
626 //This will need to change later when I add support for "Field Missing" |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
627 efield <- Escape Rhope Name[field, [func]Escape Pattern >>] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
628 out <- [func]Add Statement[[[[["res = ["]Append[Make Op[source,func]]]Append[".p_"]]Append[efield]]Append["]"]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
629 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
630 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
631 Set Field Call@JS Function[func,field,object,value:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
632 { |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
633 out <- [func]Func Base[Escape Rhope Name[[field]Append[" <<"],[func]Escape Pattern >>], [[()]Append[object]]Append[value], "MCall"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
634 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
635 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
636 Tail Method Call@JS Function[func,method,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
637 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
638 //Javascript doesn't support tail calls, at least not directly anyway |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
639 out <- [func]Method Call[method,args] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
640 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
641 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
642 Tail Call@JS Function[func,name,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
643 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
644 If[[name]=[[func]Name >>]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
645 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
646 //TODO: Support simple tail recursion |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
647 out <- func |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
648 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
649 out <- [func]Call[name,args] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
650 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
651 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
652 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
653 Resolve@JS Function[func,op:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
654 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
655 If[[[func]Convention >>] = ["rhope"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
656 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
657 out <- ["lv_"]Append[Escape Rhope Name[op, [func]Escape Pattern >>]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
658 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
659 out <- Escape Rhope Name[op,[func]Escape Pattern >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
660 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
661 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
662 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
663 Resolve Output@JS Function[func,name:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
664 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
665 If[[[func]Convention >>] = ["rhope"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
666 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
667 out <- ["lv_"]Append[Escape Rhope Name[name, [func]Escape Pattern >>]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
668 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
669 out <- Escape Rhope Name[name,[func]Escape Pattern >>] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
670 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
671 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
672 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
673 Instruction Stream@JS Function[func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
674 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
675 out <- [func]Statements <<[()] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
676 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
677 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
678 _If JS[func, statement:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
679 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
680 out <- [func]Statements <<[ [[func]Statements >>]Append[ ["\t"]Append[statement] ] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
681 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
682 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
683 Do If@JS Function[func,condition,stream:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
684 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
685 cond <- [condition]Make Op[func] |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
686 If[[[stream]Statements >>]Length] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
687 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
688 out <- [Fold[_If JS[?], [[func |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
689 ]Add Raw Line[ [["if("]Append[cond]]Append[")"] ] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
690 ]Add Raw Line["{"], [stream]Statements >>] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
691 ]Add Raw Line["}"] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
692 }{ |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
693 out <- func |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
694 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
695 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
696 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
697 Discard Outputs@JS Function[func,first to discard:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
698 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
699 out <- func |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
700 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
701 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
702 Result Reference@JS Function[func,output:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
703 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
704 out <- [["res["]Append[String[output]]]Append["]"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
705 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
706 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
707 Checked Result Reference@JS Function[func,output:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
708 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
709 out <- [func]Result Reference[output] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
710 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
711 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
712 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
713 If Null Else@JS Function[func,left,right:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
714 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
715 check <- [Make Condition[left]]Make Op[func] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
716 l <- [left]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
717 r <- [right]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
718 out <- [[[[[["(" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
719 ]Append[check] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
720 ]Append[" != null ? "] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
721 ]Append[l] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
722 ]Append[" : "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
723 ]Append[r] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
724 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
725 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
726 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
727 Set Outputs@JS Function[func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
728 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
729 If[[[func]Convention >>] = ["rhope"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
730 { |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
731 out <- [["\treturn ["]Append[ [ Map[Map[[func]Outputs >>, Escape Rhope Name[?, [func]Escape Pattern >>]], ["lv_"]Append[?]] ]Join[","] ]]Append["];\n"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
732 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
733 [[func]Outputs >>]Index[0] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
734 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
735 out <- [["\treturn "]Append[Escape Rhope Name[~,[func]Escape Pattern >>]]]Append[";\n"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
736 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
737 out <- "" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
738 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
739 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
740 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
741 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
742 Check Param Type JS[text,type,input num,func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
743 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
744 [(String(),String Cat(),String Slice())]Find[=[Blueprint Of[type],?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
745 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
746 typename <- type |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
747 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
748 typename <- [type]Name >> |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
749 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
750 If[[typename] = ["Any Type"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
751 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
752 out <- text |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
753 }{ |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
754 input <- ["lv_"]Append[Escape Rhope Name[[[func]Inputs >>]Index[input num], [func]Escape Pattern >>]] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
755 out <- [text]Append[ [[[["\t"]Append[input]]Append["= check_type("]]Append[input]]Append[ [[", "]Append[ [[func]Type Registry >>]Type ID[typename] ]]Append[");"] ] ] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
756 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
757 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
758 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
759 _Add Prefix[val:out] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
760 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
761 out <- ["lv_"]Append[val] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
762 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
763 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
764 Text@JS Function[func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
765 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
766 Print[["Text@JS Function: "]Append[[func]Name >>]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
767 If[ [[func]Convention >>] = ["rhope"] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
768 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
769 |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
770 before,,after <- [[func]Name >>]Partition["@"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
771 { |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
772 If[[after]=[""]] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
773 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
774 norm name <- Val[before] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
775 } { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
776 ivars <- Tail[[func]Inputs >>, 1] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
777 cname <- [[["t_"]Append[Escape Rhope Name[after,[func]Escape Pattern >>]] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
778 ]Append[[".prototype.f_"]Append[Escape Rhope Name[before,[func]Escape Pattern >>]]] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
779 ]Append[" = function"] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
780 [[func]Inputs >>]Index[0] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
781 { move this <- ["\tlv_"]Append[[Escape Rhope Name[~, [func]Escape Pattern >>]]Append[" = this;"]] } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
782 { move this <- "" } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
783 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
784 } {} {} { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
785 norm name <- Name >>[func] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
786 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
787 Val[norm name] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
788 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
789 ivars <- [func]Inputs >> |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
790 fname <- ["f_"]Append[Escape Rhope Name[norm name,[func]Escape Pattern >>]] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
791 move this <- "" |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
792 } |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
793 inproc <- Val[Map[?, _Add Prefix[?]]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
794 }{ |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
795 fname <- Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
796 ivars <- Inputs >>[func] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
797 move this <- "" |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
798 inproc <- Val[Val[?]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
799 } |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
800 cname <- ["function "]Append[fname] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
801 param check <- Fold[Check Param Type JS[?, ?, ?, func], "", [func]Input Types >>] |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
802 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
803 allvars <- Concatenate[[func]Outputs >>, Keys[[func]Variables >>]] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
804 If[[allvars]Length] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
805 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
806 vardec <- [["\tvar "]Append[ [ [inproc]Call[Map[allvars, Escape Rhope Name[?, [func]Escape Pattern >>]]] ]Join[","] ]]Append[";\n"] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
807 }{ |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
808 vardec <- "" |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
809 } |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
810 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
811 out <- [[[[[[[[[cname |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
812 ]Append["("] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
813 ]Append[ [[inproc]Call[Map[ivars, Escape Rhope Name[?, [func]Escape Pattern >>]]]]Join[","] ] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
814 ]Append[")\n{\n"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
815 ]Append[move this] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
816 ]Append[param check] |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
817 ]Append[vardec] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
818 ]Append[ [[func]Statements >>]Join[""] ] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
819 ]Append[[func]Set Outputs] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
820 ]Append["}"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
821 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
822 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
823 Blueprint JS Program |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
824 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
825 Functions |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
826 Method Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
827 Field Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
828 Type Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
829 Libraries |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
830 Escape Pattern |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
831 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
832 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
833 JS Program[:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
834 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
835 p <- Pattern[("_", "@", " ", ":", "?", "+", "-", "*", "/", "<", ">", "(", ")", "!", "=", "'", |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
836 "\"", "\t", ",", ".", "\n", "{", "}", "[", "]", "#", "\\", "\r", ";", "&", "|", "%", "^", "`", "~")] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
837 out <- [[[[[[Build[JS Program()]]Functions <<[Dictionary[]]]Method Registry <<[JS Method Registry[]]]Type Registry <<[JS Type Registry[p]]]Field Registry <<[JS Field Registry[]]]Libraries <<[Dictionary[]]]Escape Pattern <<[p] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
838 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
839 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
840 Supported Number Types@JS Program[program:out] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
841 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
842 out <- ("Int32","UInt8","UInt32") |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
843 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
844 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
845 Needed Specials@JS Program[program,typename,makespecial:out] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
846 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
847 out <- () |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
848 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
849 |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
850 Set Stdlib Imports@JS Program[program,parser:out] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
851 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
852 out <- [parser]Imports <<[ [[parser]Imports >>]Set["kerneljs.rhope", Yes] ] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
853 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
854 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
855 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
856 Link@JS Program[program,language,library:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
857 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
858 If[[library] = ["runtime"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
859 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
860 out <- program |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
861 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
862 langlibs <- [[program]Libraries >>]Index[language] {} |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
863 { langlibs <- Dictionary[] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
864 out <- [program]Libraries <<[ [[program]Libraries >>]Set[language, [langlibs]Set[library, Yes]] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
865 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
866 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
867 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
868 Register Type@JS Program[program,def:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
869 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
870 out <- [[[program]Type Registry <<[ [[program]Type Registry >>]Register Type[def] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
871 ]Method Registry <<[ [def]Register Methods[[program]Method Registry >>] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
872 ]Field Registry <<[ [def]Register Fields[[program]Field Registry >>] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
873 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
874 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
875 Create Type@JS Program[program,name:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
876 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
877 out <- JS Type[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
878 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
879 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
880 Create Function@JS Program[program,name,inputs,outputs,convention:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
881 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
882 out <- JS Function With Registry[name,inputs,outputs,convention, [program]Method Registry >>, [program]Field Registry >>, [program]Type Registry >>, [program]Escape Pattern >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
883 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
884 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
885 Store Function@JS Program[program,func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
886 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
887 out <- [program]Functions <<[ [[program]Functions >>]Set[ [func]Name >>, func] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
888 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
889 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
890 Method?@JS Program[program,funcname:is,isnot] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
891 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
892 is,isnot <- [[program]Method Registry >>]Method ID[funcname] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
893 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
894 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
895 _Text JS Program[text,func,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
896 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
897 out <- [text]Append[[[ [func]Type Registry <<[type reg] ]Text]Append["\n\n"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
898 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
899 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
900 Combine Consts[consts,func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
901 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
902 out <- Combine[[func]Constants >>, consts] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
903 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
904 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
905 _List Literal El[text,val,index,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
906 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
907 out <- [[[[text |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
908 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
909 ]Append[index] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
910 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
911 ]Append[Const Construct JS[val, type reg]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
912 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
913 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
914 Const Construct JS[value,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
915 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
916 valtype <- Blueprint Of[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
917 [(Int8(),UInt8(),Int16(),UInt16(),Int32(),UInt32(),Int64(),UInt64())]Find[=[valtype,?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
918 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
919 size <- [("8","16","32","64")]Index[[~]/[2]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
920 If[[~]Mod[2]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
921 { s <- "UI" } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
922 { s <- "I" } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
923 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
924 out <- [[[[[["make_" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
925 ]Append[s] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
926 ]Append["nt"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
927 ]Append[size] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
928 ]Append["("] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
929 ]Append[String[value]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
930 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
931 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
932 If[[valtype] = [Type Instance()]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
933 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
934 //TODO: Support parametric types |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
935 typeid <- [type reg]Type ID[[value]Name >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
936 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
937 out <- [["make_Blueprint("]Append[typeid]]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
938 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
939 If[[valtype] = [Boolean()]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
940 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
941 If[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
942 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
943 out <- "make_Bool(true)" |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
944 }{ |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
945 out <- "make_Bool(false)" |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
946 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
947 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
948 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
949 [(String(),String Slice(),String Cat())]Find[=[valtype,?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
950 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
951 out <- [["make_String(\""]Append[ [[[[value]Replace["\\", "\\\\"]]Replace["\n", "\\n"]]Replace["\"", "\\\""]]Replace["\r", "\\r"] ]]Append["\")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
952 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
953 If[[valtype]=[Worker Literal()]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
954 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
955 //TODO: Figure out how to fully support these in nested cases |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
956 //or workaround the problem higher up in the food chain |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
957 [[value]Args >>]Last |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
958 { size <- String[[~]+[1]] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
959 { size <- "0" } |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
960 out <- [[[[[["make_Worker(f_" |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
961 ]Append[Escape Rhope Name[[value]Name >>,[type reg]Escape Pattern >>]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
962 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
963 ]Append[size] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
964 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
965 ]Append[String[Fold[+[1,?], 0, [value]Args >>]]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
966 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
967 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
968 [(List(), List Leaf())]Find[=[?,valtype]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
969 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
970 out <- [Fold[_List Literal El[?, ?, ?, type reg], ["make_List("]Append[String[[value]Length]], value]]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
971 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
972 out <- "UnhandledLiteralType" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
973 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
974 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
975 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
976 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
977 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
978 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
979 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
980 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
981 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
982 _Set Worker Params JS[text,param,num,type reg,name:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
983 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
984 out <- [text]Append[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
985 [[[[[["\t((object **)(((t_Worker *)_const_" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
986 ]Append[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
987 ]Append[")+1))["] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
988 ]Append[String[num]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
989 ]Append["] = "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
990 ]Append[Const Construct JS[param, type reg]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
991 ]Append[";\n"] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
992 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
993 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
994 _Set Consts JS Program[text,value,name,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
995 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
996 valtype <- Blueprint Of[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
997 [(String(),String Cat(),String Slice(),Worker Literal(),List(),List Leaf())]Find[=[valtype,?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
998 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
999 out <- text |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1000 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1001 Const Construct JS[value,type reg] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1002 { out <- [text]Append[ [[[["var _const_"]Append[Escape Rhope Name[name,[type reg]Escape Pattern >>]]]Append[" = "]]Append[~]]Append[";\n"] ] } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1003 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1004 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1005 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1006 _Set List Els[text,el,index,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1007 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1008 out <- [[text]Append[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1009 [["\tinout[1] = " |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1010 ]Append[Const Construct JS[index,type reg]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1011 ]Append[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1012 [[";\n\tinout[2] = " |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1013 ]Append[Const Construct JS[el, type reg]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1014 ]Append[";\n"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1015 ]]]Append["\trhope(FUNC_Set, inout, 3, 3);\n"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1016 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1017 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1018 _Set Late Consts JS[text,value,name,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1019 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1020 valtype <- Blueprint Of[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1021 [(String(),String Cat(),String Slice(),Worker Literal(),List(),List Leaf())]Find[=[valtype,?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1022 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1023 If[[~]>[3]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1024 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1025 out <- [Fold[_Set List Els[?, ?, ?, type reg], [text]Append["\trhope(FUNC_List, inout, 0, 1);\n"], value] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1026 ]Append[[["var _const_"]Append[Escape Rhope Name[name,[type reg]Escape Pattern >>]]]Append[" = inout[0];\n"]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1027 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1028 Const Construct JS[value,type reg] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1029 { init <- [text]Append[ [[[["var _const_"]Append[Escape Rhope Name[name,[type reg]Escape Pattern >>]]]Append[" = "]]Append[~]]Append[";\n"] ] } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1030 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1031 If[[valtype]=[Worker Literal()]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1032 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1033 out <- Fold[_Set Worker Params JS[?, ?, ?, type reg, Escape Rhope Name[name,[type reg]Escape Pattern >>]], init, [value]Args >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1034 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1035 out <- Val[init] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1036 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1037 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1038 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1039 out <- text |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1040 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1041 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1042 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1043 Text Filename@JS Program[program,source name:out] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1044 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1045 out <- [source name]Append[".js"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1046 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1047 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1048 Text@JS Program[program:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1049 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1050 p <- [program]Escape Pattern >> |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1051 constants <- Fold[Combine Consts[?], Dictionary[], [program]Functions >>] |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1052 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1053 out <- [[[[[[" |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1054 var i = 0; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1055 var TYPE_ANY = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1056 var TYPE_INT32 = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1057 var TYPE_UINT8 = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1058 var TYPE_UINT32 = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1059 var TYPE_BOOLEAN = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1060 var TYPE_FLOAT64 = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1061 var TYPE_BLUEPRINT = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1062 var TYPE_ARRAY = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1063 var TYPE_WORKER = i++; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1064 var TYPE_FIRST_USER = i; |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1065 |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1066 Object.prototype.unbox = function() |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1067 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1068 return this; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1069 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1070 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1071 registered_types = new Array(); |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1072 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1073 function t_Blueprint() |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1074 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1075 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1076 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1077 t_Blueprint.prototype.type_id = TYPE_BLUEPRINT; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1078 t_Blueprint.prototype.conversions = new Array(); |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1079 var t = new t_Blueprint; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1080 t.id = TYPE_BLUEPRINT; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1081 t.construct = t_Blueprint; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1082 registered_types[TYPE_BLUEPRINT] = t;\n\n" |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1083 ]Append[ [[program]Type Registry >>]Type Inits[[program]Method Registry >>, [program]Field Registry >>] ] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1084 ]Append[" |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1085 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1086 t_Int32.prototype.unbox = function() |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1087 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1088 return this.p_Num; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1089 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1090 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1091 t_UInt32.prototype.unbox = function() |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1092 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1093 return this.p_Num; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1094 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1095 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1096 t_UInt8.prototype.unbox = function() |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1097 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1098 return this.p_Num; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1099 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1100 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1101 t_Boolean.prototype.unbox = function() |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1102 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1103 return this.p_Val; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1104 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1105 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1106 function make_Int32(val) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1107 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1108 var out = new t_Int32; |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1109 out.p_Num = val; |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1110 return out; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1111 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1112 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1113 function make_UInt8(val) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1114 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1115 var out = new t_UInt8; |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1116 out.p_Num = val & 255; |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1117 return out; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1118 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1119 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1120 function make_UInt32(val) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1121 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1122 var out = new t_UInt32; |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1123 out.p_Num = val; |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1124 return out; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1125 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1126 |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1127 function make_Bool(val) |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1128 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1129 var out = new t_Boolean; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1130 out.p_Val = val; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1131 return out; |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1132 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1133 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1134 function make_Float64(val) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1135 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1136 var out = new t_Float64; |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1137 out.p_Num = val; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1138 return out; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1139 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1140 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1141 function make_String(string) |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1142 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1143 var out = new t_String; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1144 out.p_Buffer = string; |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1145 return out; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1146 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1147 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1148 function make_Blueprint(typeid) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1149 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1150 return registered_types[typeid]; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1151 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1152 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1153 function check_type(val,typeid) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1154 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1155 if (val.type_id = typeid) { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1156 return val; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1157 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1158 if (val.conversions[type_id] != undefined) { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1159 var out = val.conversions[type_id](val); |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1160 return out[0]; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1161 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1162 throw new Error(\"Conversion needed\"); |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1163 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1164 |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1165 function copy_object(obj) |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1166 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1167 if (obj.type_id == TYPE_ARRAY) { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1168 return obj.slice(0); |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1169 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1170 var dest = new registered_types[obj.type_id].construct; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1171 for (var prop in obj) { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1172 if (obj.hasOwnProperty(prop)) { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1173 dest[prop] = obj[prop]; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1174 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1175 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1176 return dest; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1177 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1178 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1179 function _internal_js_length(arr) |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1180 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1181 return arr.length; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1182 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1183 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1184 function _internal_js_eq(left,right) |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1185 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1186 return left == right; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1187 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1188 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1189 function _internal_array_set(arr,index,val) |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1190 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1191 arr[index] = val; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1192 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1193 |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1194 function _internal_array_get(arr,index) |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1195 { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1196 return arr[index] |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1197 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1198 |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1199 function f_Build(type) |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1200 { |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1201 type = check_type(type, TYPE_BLUEPRINT); |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1202 return [new type.construct()]; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1203 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1204 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1205 function f_BlueprintSP_Of(val) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1206 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1207 return [registered_types[val.type_id]]; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1208 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1209 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1210 function f_ID(type) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1211 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1212 type = check_type(type, TYPE_BLUEPRINT); |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1213 return [type.id]; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1214 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1215 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1216 function f_BlueprintSP_FromSP_ID(id) |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1217 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1218 id = check_type(id, TYPE_UINT32); |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1219 if (id.p_Num > 0 && registered_types[id.p_Num] != null) { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1220 return [registered_types[id.p_Num], null]; |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1221 } else { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1222 return [null,id]; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1223 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1224 }\n"] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1225 ]Append[Fold[_Text JS Program[?, ?, [program]Type Registry >>], "", [program]Functions >>]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1226 ]Append[Fold[_Set Consts JS Program[?, ?, ?, [program]Type Registry >>], "", constants]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1227 ]Append[Fold[_Set Late Consts JS[?, ?, ?, [program]Type Registry >>], "", constants]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1228 ]Append[" |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1229 try { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1230 var args = f_List()[0]; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1231 for (var i in arguments) { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1232 args = args.f_Append(make_String(arguments[i]))[0]; |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1233 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1234 res = f_Main(args); |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1235 } catch(e) { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1236 res = f_Main(); |
135
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1237 } |
136
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1238 if (res[0] != null && res[0].type_id == TYPE_INT32) { |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1239 print(res[0].p_Num); |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1240 } |
fc3815b7462f
Javascript backend now produces working code for some simple examples, still more of the standard lib that needs to be ported.
Mike Pavone <pavone@retrodev.com>
parents:
135
diff
changeset
|
1241 "] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1242 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1243 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1244 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1245 |