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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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