Mercurial > repos > rhope
annotate jsbackend.rhope @ 135:18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 14 Nov 2010 03:09:49 -0500 |
parents | e1911b2fd5cc |
children | fc3815b7462f |
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 }{ |
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
|
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
303 Add@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
304 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
305 out <- [func]Add Operator Statement[source1,source2,dest," + "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
306 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
307 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
308 Sub@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 Multiply@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 |
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
|
318 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
|
319 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
320 //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
|
321 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
|
322 { 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
|
323 [(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
|
324 { 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
|
325 { 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
|
326 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
|
327 } |
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 |
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 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
|
330 { |
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 <- [[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
|
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 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
|
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 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
|
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 [[~]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
|
339 { 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
|
340 { 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
|
341 }{ |
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 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
|
343 } |
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 } |
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 |
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 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
|
347 { |
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 [[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
|
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 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
|
351 }{ |
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 [[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
|
353 { |
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 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
|
355 }{ |
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 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
|
357 { 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
|
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 } |
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 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
362 Divide@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
363 { |
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
|
364 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
|
365 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
|
366 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
367 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
|
368 }{ |
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 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
|
370 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
371 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
372 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
373 DoLShift@JS Function[func,source1,source2,dest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
374 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
375 out <- [func]Add Operator Statement[source1,source2,dest," << "] |
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 DoRShift@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 BitAnd@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 BitOr@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 CompLess@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 CompGreater@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 CompEqual@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 CompLessEqual@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 CompGreaterEqual@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 CompNotEqual@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 Move@JS Function[func,psource,pdest: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 source <- [psource]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
426 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
427 out <- [func]Add Statement[[[dest]Append[" = "]]Append[source]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
428 } |
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 Do AddRef@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
431 { |
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
|
432 out <- [func]Move[psource,pdest] |
133
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 AddRef No Dest@JS Function[func,psource: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 |
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 Release@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 Set Null@JS Function[func,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
446 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
447 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
448 out <- [func]Add Statement[[dest]Append[" = NULL"]] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
451 Lookup Constant@JS Function[func,const,doaddref:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
452 { |
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
|
453 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
|
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 Field Result@JS Function[func,var,field:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
457 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
458 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
|
459 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
|
460 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
461 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
462 Read Field@JS Function[func,var,field:out,result op] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
463 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
464 out <- func |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
465 result op <- Field Ref[var,field] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
468 Write Field@JS Function[func,var,field:out,result op] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
469 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
470 out <- func |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
471 result op <- Field Ref[var,field] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
474 Set Field Null@JS Function[func,var,field:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
475 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
476 out <- [func]Add Statement[ [[func]Field Result[var,field]]Append[" = NULL"] ] |
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 Copy@JS Function[func,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
480 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
481 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
482 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
|
483 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
484 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
485 Box@JS Function[func,psource,pdest,type:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
486 { |
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
|
487 out <- func |
133
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 Unbox@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
491 { |
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
|
492 out <- func |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
493 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
494 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
495 Get Raw Pointer@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
496 { |
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
|
497 out <- func |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
498 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
499 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
500 Array Raw Pointer@JS Function[func,psource,pdest:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
501 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
502 dest <- [pdest]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
503 source <- [psource]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
504 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
|
505 } |
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 _Function Arg JS[func,val,inputnum:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
508 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
509 out <- [func]Add Raw Line[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
510 [[[["SetParam(" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
511 ]Append[String[inputnum]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
512 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
513 ]Append[val] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
514 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
515 ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
516 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
517 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
518 _Val Function Arg JS[func,val,inputnum,worker:out] |
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 out <- [func]Add Raw Line[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
521 [[[[[["VCSetParam(" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
522 ]Append[worker] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
523 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
524 ]Append[String[inputnum]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
525 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
526 ]Append[val] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
527 ]Append[")"] |
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 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
530 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
531 Method Call@JS Function[func,method,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
532 { |
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
|
533 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
|
534 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
535 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
|
536 ]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
|
537 ]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
|
538 ]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
|
539 ]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
|
540 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
541 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
|
542 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
543 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
544 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
545 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
546 Val Call@JS Function[func,to call,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
547 { |
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
|
548 worker <- Make Op[to call, func] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
549 rargs <- Map[args, Make Op[?, func]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
550 |
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
|
551 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
|
552 ]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
|
553 ]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
|
554 ]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
|
555 ]Add Raw Line["}"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
556 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
557 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
558 Call@JS Function[func,name,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
559 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
560 If[[name]=["Call@Worker"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
561 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
562 //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
|
563 out <- [func]Val Call[[args]Index[0], Tail[args,1]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
564 }{ |
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
|
565 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
|
566 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
567 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
568 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
569 Func Base@JS Function[func,tocall,args,type:out] |
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 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
572 Print[ [[func]Name >>]Append[ [": Func Base("]Append[tocall] ] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
573 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
|
574 |
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 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
|
576 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
577 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
|
578 }{ |
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
|
579 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
|
580 } |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
583 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
|
584 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
585 rargs <- Map[args, Make Op[?, func]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
586 //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
|
587 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
|
588 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
589 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
|
590 }{ |
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 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
|
592 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
593 ,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
|
594 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
595 ,do store <- If[[store result]=[""]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
596 { stmt <- Val[base] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
597 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
598 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
599 Val[do store] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
600 { stmt <- [[Make Op[store result, func]]Append[" = "]]Append[base] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
601 out <- [func]Add Statement[stmt] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
604 Get Field Call@JS Function[func,field,source:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
605 { |
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
|
606 //This will need to change later when I add support for "Field Missing" |
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 [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
|
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 esource <- Escape Rhope Name[Make Op[source,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
|
610 efield <- Escape Rhope Name[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
|
611 } |
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 out <- [func]Add Statement[[[["res = "]Append[esource]]Append[".p_"]]Append[efield]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
613 } |
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 Set Field Call@JS Function[func,field,object,value:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
616 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
617 out <- [func]Func Base[Escape Rhope Name[[field]Append[" <<"],[func]Escape Pattern >>], [[()]Append[object]]Append[value], "Call"] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
620 Tail Method Call@JS Function[func,method,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
621 { |
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
|
622 //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
|
623 out <- [func]Method Call[method,args] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
624 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
625 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
626 Tail Call@JS Function[func,name,args:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
627 { |
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
|
628 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
|
629 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
630 //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
|
631 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
|
632 }{ |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
633 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
|
634 } |
133
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
637 Resolve@JS Function[func,op:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
638 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
639 If[[[func]Convention >>] = ["rhope"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
640 { |
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
|
641 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
|
642 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
643 out <- Escape Rhope Name[op,[func]Escape Pattern >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
644 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
645 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
646 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
647 Resolve Output@JS Function[func,name:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
648 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
649 If[[[func]Convention >>] = ["rhope"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
650 { |
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
|
651 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
|
652 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
653 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
|
654 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
655 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
656 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
657 Instruction Stream@JS Function[func:out] |
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 <- [func]Statements <<[()] |
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 _If JS[func, statement:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
663 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
664 out <- [func]Statements <<[ [[func]Statements >>]Append[ ["\t"]Append[statement] ] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
665 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
666 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
667 Do If@JS Function[func,condition,stream:out] |
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 cond <- [condition]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
|
670 out <- [Fold[_If JS[?], [[func |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
671 ]Add Raw Line[ [["if("]Append[cond]]Append[")"] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
672 ]Add Raw Line["{"], [stream]Statements >>] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
673 ]Add Raw Line["}"] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
676 Discard Outputs@JS Function[func,first to discard:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
677 { |
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
|
678 out <- func |
133
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
681 Result Reference@JS Function[func,output:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
682 { |
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
|
683 out <- [["res["]Append[String[output]]]Append["]"] |
133
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
686 Checked Result Reference@JS Function[func,output:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
687 { |
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
|
688 out <- [func]Result Reference[output] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
689 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
690 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
691 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
692 If Null Else@JS Function[func,left,right:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
693 { |
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
|
694 check <- [Make Condition[left]]Make Op[func] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
695 l <- [left]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
696 r <- [right]Make Op[func] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
697 out <- [[[[[["(" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
698 ]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
|
699 ]Append[" != null ? "] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
700 ]Append[l] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
701 ]Append[" : "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
702 ]Append[r] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
703 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
704 } |
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 Set Outputs@JS Function[func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
707 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
708 If[[[func]Convention >>] = ["rhope"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
709 { |
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
|
710 out <- [["\treturn ["]Append[ [Map[[func]Outputs >>, Escape Rhope Name[?, [func]Escape Pattern >>]]]Join[","] ]]Append["];\n"] |
133
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 [[func]Outputs >>]Index[0] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
713 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
714 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
|
715 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
716 out <- "" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
717 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
718 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
719 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
720 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
721 Check Param Type JS[text,type,input num,func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
722 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
723 [(String(),String Cat(),String Slice())]Find[=[Blueprint Of[type],?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
724 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
725 typename <- type |
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 typename <- [type]Name >> |
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[[typename] = ["Any Type"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
730 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
731 out <- text |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
732 }{ |
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
|
733 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
|
734 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
|
735 } |
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 |
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
|
738 _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
|
739 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
740 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
|
741 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
742 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
743 Text@JS Function[func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
744 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
745 Print[["Text@JS Function: "]Append[[func]Name >>]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
746 If[ [[func]Convention >>] = ["rhope"] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
747 { |
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
|
748 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
749 before <- [[func]Name >>]Partition["@"] {} {} |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
750 { |
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
|
751 ivars <- Tail[[func]Inputs >>, 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
|
752 cname <- [["t_"]Append[Escape Rhope 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
|
753 ]Append[[".f_"]Append[Escape Rhope Name[before,[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
|
754 [[func]Inputs >>]Index[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
|
755 { move this <- ["\tlv_"]Append[[Escape Rhope Name[~, [func]Escape Pattern >>]]Append[" = 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
|
756 { move this <- "" } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
757 }{ |
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
|
758 ivars <- [func]Inputs >> |
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 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
|
760 move this <- "" |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
761 } |
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
|
762 inproc <- Val[Map[?, _Add Prefix[?]]] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
763 }{ |
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
|
764 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
|
765 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
|
766 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
|
767 inproc <- Val[Val[?]] |
133
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 cname <- ["var "]Append[fname] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
770 param check <- Fold[Check Param Type JS[?, ?, ?, func], "", [func]Input Types >>] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
771 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
772 out <- [[[[[[[[[cname |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
773 ]Append[" = function("] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
774 ]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
|
775 ]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
|
776 ]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
|
777 ]Append[param check] |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
778 ]Append[ [["\tvar "]Append[ [ [inproc]Call[Concatenate[[func]Outputs >>, Keys[[func]Variables >>]]] ]Join[","] ]]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
|
779 ]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
|
780 ]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
|
781 ]Append["}"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
782 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
783 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
784 Blueprint JS Program |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
785 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
786 Functions |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
787 Method Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
788 Field Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
789 Type Registry |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
790 Libraries |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
791 Escape Pattern |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
792 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
793 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
794 JS Program[:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
795 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
796 p <- Pattern[("_", "@", " ", ":", "?", "+", "-", "*", "/", "<", ">", "(", ")", "!", "=", "'", |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
797 "\"", "\t", ",", ".", "\n", "{", "}", "[", "]", "#", "\\", "\r", ";", "&", "|", "%", "^", "`", "~")] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
798 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
|
799 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
800 |
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 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
|
802 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
803 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
|
804 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
805 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
806 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
|
807 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
808 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
|
809 } |
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 |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
811 Link@JS Program[program,language,library:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
812 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
813 If[[library] = ["runtime"]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
814 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
815 out <- program |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
816 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
817 langlibs <- [[program]Libraries >>]Index[language] {} |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
818 { langlibs <- Dictionary[] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
819 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
|
820 } |
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 Register Type@JS Program[program,def:out] |
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 out <- [[[program]Type Registry <<[ [[program]Type Registry >>]Register Type[def] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
826 ]Method Registry <<[ [def]Register Methods[[program]Method Registry >>] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
827 ]Field Registry <<[ [def]Register Fields[[program]Field Registry >>] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
828 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
829 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
830 Create Type@JS Program[program,name:out] |
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 out <- JS Type[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
833 } |
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 Create Function@JS Program[program,name,inputs,outputs,convention:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
836 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
837 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
|
838 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
839 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
840 Store Function@JS Program[program,func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
841 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
842 out <- [program]Functions <<[ [[program]Functions >>]Set[ [func]Name >>, func] ] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
843 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
844 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
845 Method?@JS Program[program,funcname:is,isnot] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
846 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
847 is,isnot <- [[program]Method Registry >>]Method ID[funcname] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
848 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
849 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
850 _Text JS Program[text,func,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
851 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
852 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
|
853 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
854 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
855 Combine Consts[consts,func:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
856 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
857 out <- Combine[[func]Constants >>, consts] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
858 } |
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 _List Literal El[text,val,index,type reg:out] |
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 out <- [[[[text |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
863 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
864 ]Append[index] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
865 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
866 ]Append[Const Construct JS[val, type reg]] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
869 Const Construct JS[value,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
870 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
871 valtype <- Blueprint Of[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
872 [(Int8(),UInt8(),Int16(),UInt16(),Int32(),UInt32(),Int64(),UInt64())]Find[=[valtype,?]] |
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 size <- [("8","16","32","64")]Index[[~]/[2]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
875 If[[~]Mod[2]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
876 { s <- "UI" } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
877 { s <- "I" } |
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 out <- [[[[[["make_" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
880 ]Append[s] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
881 ]Append["nt"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
882 ]Append[size] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
883 ]Append["("] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
884 ]Append[String[value]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
885 ]Append[")"] |
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 If[[valtype] = [Type Instance()]] |
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 //TODO: Support parametric types |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
890 typeid <- [type reg]Type ID[[value]Name >>] |
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 out <- [["make_Blueprint("]Append[typeid]]Append[")"] |
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 If[[valtype] = [Boolean()]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
895 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
896 If[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
897 { |
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
|
898 out <- "make_Bool(true)" |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
899 }{ |
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
|
900 out <- "make_Bool(false)" |
133
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 }{ |
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 [(String(),String Slice(),String Cat())]Find[=[valtype,?]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
905 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
906 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
|
907 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
908 If[[valtype]=[Worker Literal()]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
909 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
910 //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
|
911 //or workaround the problem higher up in the food chain |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
912 [[value]Args >>]Last |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
913 { size <- String[[~]+[1]] } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
914 { 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
|
915 out <- [[[[[["make_Worker(f_" |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
916 ]Append[Escape Rhope Name[[value]Name >>,[type reg]Escape Pattern >>]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
917 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
918 ]Append[size] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
919 ]Append[", "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
920 ]Append[String[Fold[+[1,?], 0, [value]Args >>]]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
921 ]Append[")"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
922 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
923 [(List(), List Leaf())]Find[=[?,valtype]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
924 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
925 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
|
926 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
927 out <- "UnhandledLiteralType" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
928 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
929 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
930 } |
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 } |
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 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
935 } |
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 _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
|
938 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
939 out <- [text]Append[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
940 [[[[[["\t((object **)(((t_Worker *)_const_" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
941 ]Append[name] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
942 ]Append[")+1))["] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
943 ]Append[String[num]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
944 ]Append["] = "] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
945 ]Append[Const Construct JS[param, type reg]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
946 ]Append[";\n"] ] |
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 _Set Consts JS Program[text,value,name,type reg:out] |
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 valtype <- Blueprint Of[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
952 [(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
|
953 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
954 out <- text |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
955 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
956 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
|
957 { 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
|
958 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
959 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
960 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
961 _Set List Els[text,el,index,type reg:out] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
962 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
963 out <- [[text]Append[ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
964 [["\tinout[1] = " |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
965 ]Append[Const Construct JS[index,type reg]] |
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 [[";\n\tinout[2] = " |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
968 ]Append[Const Construct JS[el, type reg]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
969 ]Append[";\n"] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
970 ]]]Append["\trhope(FUNC_Set, inout, 3, 3);\n"] |
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 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
973 _Set Late Consts JS[text,value,name,type reg:out] |
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 valtype <- Blueprint Of[value] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
976 [(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
|
977 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
978 If[[~]>[3]] |
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 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
|
981 ]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
|
982 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
983 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
|
984 { 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
|
985 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
986 If[[valtype]=[Worker Literal()]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
987 { |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
988 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
|
989 }{ |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
990 out <- Val[init] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
991 } |
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 out <- text |
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 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
997 |
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
|
998 Text Filename@JS Program[program,source name:out] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
999 { |
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
|
1000 out <- [source name]Append[".js"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1001 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1002 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1003 Text@JS Program[program:out] |
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 p <- [program]Escape Pattern >> |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1006 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
|
1007 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1008 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
|
1009 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
|
1010 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
|
1011 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
|
1012 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
|
1013 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
|
1014 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
|
1015 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
|
1016 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
|
1017 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
|
1018 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
|
1019 var TYPE_FIRST_USER = i; |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1020 |
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
|
1021 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
|
1022 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1023 function t_Blueprint() |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1024 { |
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
|
1025 } |
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 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1027 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
|
1028 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
|
1029 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
|
1030 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
|
1031 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
|
1032 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
|
1033 ]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
|
1034 ]Append[" |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1035 |
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
|
1036 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
|
1037 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1038 var out = new t_Int32; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1039 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
|
1040 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
|
1041 } |
133
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 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
|
1044 { |
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 var out = new t_UInt8; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1046 out.p_Val = val & 255; |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1047 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
|
1048 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1049 |
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
|
1050 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
|
1051 { |
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 var out = new t_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
|
1053 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
|
1054 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
|
1055 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1056 |
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
|
1057 function make_Boolean(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
|
1058 { |
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 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
|
1060 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
|
1061 return out; |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1062 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1063 |
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
|
1064 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
|
1065 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1066 var out = new t_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
|
1067 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
|
1068 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
|
1069 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1070 |
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 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
|
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 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
|
1074 } |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1075 |
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
|
1076 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
|
1077 { |
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 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
|
1079 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
|
1080 } |
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 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
|
1082 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
|
1083 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
|
1084 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1085 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
|
1086 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1087 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1088 function f_Build(type) |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1089 { |
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
|
1090 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
|
1091 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
|
1092 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1093 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1094 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
|
1095 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1096 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
|
1097 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1098 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1099 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
|
1100 { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1101 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
|
1102 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
|
1103 } |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1104 |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1105 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
|
1106 { |
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 id = check_type(id, TYPE_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
|
1108 if (id.p_Val > 0 && registered_types[id.p_Val] != null) { |
18a4403fe576
Javascript backend can now produce broken output. Needs fixes plus port of standard lib
Mike Pavone <pavone@retrodev.com>
parents:
133
diff
changeset
|
1109 return [registered_types[id.p_Val], null]; |
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 } 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
|
1111 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
|
1112 } |
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 }\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
|
1114 ]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
|
1115 ]Append[Fold[_Set Consts JS Program[?, ?, ?, [program]Type Registry >>], "", constants]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1116 ]Append[Fold[_Set Late Consts JS[?, ?, ?, [program]Type Registry >>], "", constants]] |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1117 ]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
|
1118 var args = f_List()[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
|
1119 for (var i in arguments) { |
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 args = args.f_Append(make_String(arguments[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
|
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 f_Main(args);"] |
133
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1123 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1124 } |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1125 |
e1911b2fd5cc
Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1126 |