annotate jsbackend.rhope @ 189:d0e3a13c1bd9 default tip

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