annotate jsbackend.rhope @ 133:e1911b2fd5cc

Start work on Javascript backend
author Mike Pavone <pavone@retrodev.com>
date Wed, 10 Nov 2010 22:29:33 -0500
parents
children 18a4403fe576
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
133
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 Import backendutils_c.rhope
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 Blueprint JS Method Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 Lookup
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 Next ID
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 JS Method Registry[:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 builtins <- [[[[[[[[[[[[[Dictionary[]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 ]Set["+", "METHOD_ADD"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 ]Set["-", "METHOD_SUB"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 ]Set["/", "METHOD_DIV"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 ]Set["*", "METHOD_MUL"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 ]Set["LShift", "METHOD_LSHIFT"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 ]Set["RShift", "METHOD_RSHIFT"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 ]Set["=", "METHOD_EQUALS"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 ]Set[">", "METHOD_GREATER"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 ]Set["<", "METHOD_LESS"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 ]Set["If", "METHOD_IF"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 ]Set["Set Missing Field", "METHOD_SETFIELDMISSING"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 ]Set["Get Missing Field", "METHOD_GETFIELDMISSING"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 ]Set["Missing Method", "METHOD_MISSING"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 out <- [[Build[JS Method Registry()]]Lookup <<[builtins]]Next ID<<[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 Register Method@JS Method Registry[reg,method:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 [[reg]Lookup >>]Index[method]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 out <- reg
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 method ID <- [reg]Next ID>>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 new lookup <- [[reg]Lookup >>]Set[method, ["METHOD_FIRST_USER+"]Append[String[method ID]]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 out <- [[reg]Lookup <<[new lookup]]Next ID <<[[method ID]+[1]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 Method ID@JS Method Registry[reg,method:out,notfound]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 out,notfound <- [[reg]Lookup >>]Index[method]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 Blueprint JS Field Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 Lookup
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 Next ID
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52 JS Field Registry[:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 out <- [[Build[JS Field Registry()]]Lookup <<[Dictionary[]]]Next ID<<[1]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 Register Field@JS Field Registry[reg,field:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 [[reg]Lookup >>]Index[field]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 out <- reg
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 field ID <- [reg]Next ID>>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 new lookup <- [[reg]Lookup >>]Set[field, field ID]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 out <- [[reg]Lookup <<[new lookup]]Next ID <<[[field ID]+[1]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70 Field ID@JS Field Registry[reg,field:out,notfound]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 out,notfound <- [[reg]Lookup >>]Index[field]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 Blueprint JS Type
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77 Name
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78 Fields
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 Methods
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 Init
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 Copy
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 Cleanup
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 JS Type[name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 out <- [[[[[[Build[JS Type()]]Name <<[name]]Fields <<[()]]Methods <<[()]]Init <<["NULL"]]Copy <<["NULL"]]Cleanup <<["NULL"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 Add Field@JS Type[ctype,name,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 out <- [ctype]Fields <<[ [[ctype]Fields >>]Append[ [[()]Append[name]]Append[type] ] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96 Add Method@JS Type[ctype,name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
98 out <- [ctype]Methods <<[ [[ctype]Methods >>]Append[name] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101 Register Methods@JS Type[ctype,method reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
102 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
103 out <- Fold[Register Method[?], method reg, [ctype]Methods >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
105
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
106 _Register Field JS[reg,field:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
107 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
108 name <- [field]Index[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
109 out <- [reg]Register Field[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 Register Fields@JS Type[ctype,field reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 out <- Fold[_Register Field JS[?], field reg, [ctype]Fields >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 Rhope Type to JS[type,p:out,array]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 If[[Blueprint Of[type]]=[Type Instance()]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 variant <- [type]Variant >>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 If[[[type]Name >>] = ["Array"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
124 [("Naked","Raw Pointer")]Find[=[variant,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
126 /*
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 //Below code assumes that paramaterized types are implemented
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128 pre param <- [[type]Params >>]Index[0] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129 { pre param <- Type Instance["Any Type"] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130 [[type]Params >>]Index[1]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
131 { param,param <- [pre param]Set Variant[~] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
132 { param <- Val[pre param] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
133 child type <- Rhope Type to JS[param]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
134 If[[variant] = ["Naked"]]
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 out <- Val[child type]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 array <- "[1]"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
139 out <- [child type]Append[" *"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 array <- ""
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 } */
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142 out <- "void *"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143 array <- ""
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
145 typename <- "Array"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147 primitive <- No
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 ,regulartype <- [("Naked","Raw Pointer")]Find[=[variant,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 [("Int64","Int32","Int16","Int8")]Find[=[[type]Name >>,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 primitive <- Yes
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 [[type]Name >>]Slice[3] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 { typename <- [["int"]Append[~]]Append["_t"] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157 ,regulartype <- [("UInt64","UInt32","UInt16","UInt8")]Find[=[[type]Name >>,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 primitive <- Yes
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 [[type]Name >>]Slice[4] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 { typename <- [["uint"]Append[~]]Append["_t"] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 Val[regulartype]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168 typename <- [type]Name >>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 primitive <- No
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 }
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 typename <- type
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
174 param <- "Any Type"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
175 variant <- "boxed"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
176 primitive <- No
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
179 Val[typename]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
180 { array <- "" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
181 If[[typename] = ["Any Type"]]
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 out <- "struct object *"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185 [("Naked","Raw Pointer")]Find[=[variant,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
186 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
187 If[primitive]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
188 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
189 prefix <- ""
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
190 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
191 prefix <- "nt_"
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 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
194 prefix <- "t_"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
195 }
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 If[[variant]=["Naked"]]
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 postfix <- ""
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 postfix <- " *"
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 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 If[primitive]
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 escaped <- Val[typename]
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 escaped <- Escape Rhope Name[typename,p]
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 out <- [[prefix]Append[escaped]]Append[postfix]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
213 _Type Def JS Type[text,field,p:out]
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 name <- [field]Index[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
216 ,postfix <- Rhope Type to JS[[field]Index[1],p]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
217 { type <- ["\n\t"]Append[~] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
218
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
219 out <- [[[[text]Append[type]]Append[" "]]Append[[Escape Rhope Name[name,p]]Append[postfix]]]Append[";"]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
222 Type Def@JS Type[ctype,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
223 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
224 If[[[[ctype]Fields >>]Length] = [1]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
225 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
226 out <- [[[[_Type Def JS Type["typedef struct {\n\tobject _SP_header;\n\t", [[ctype]Fields >>]Index[0], p]]Append["\n} t_"]]Append[Escape Rhope Name[[ctype]Name >>,p]]]Append[";"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
227 ]Append[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
228 [[[["typedef "
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
229 ]Append[Rhope Type to JS[ [[[ctype]Fields >>]Index[0]]Index[1],p ]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
230 ]Append[" nt_"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
231 ]Append[Escape Rhope Name[[ctype]Name >>,p]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
232 ]Append[";"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
233 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
234 //HACK!!!
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
235 If[[[ctype]Name >>]=["Blueprint"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
236 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
237 out <- ""
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 [("Array","Boxed Array","Worker")]Find[=[[ctype]Name >>,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
240 { oend <- "\nMObject(" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
241 { oend <- "\nObject(" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
242 out <- [Fold[_Type Def JS Type[?,?,p], "OBegin", [ctype]Fields >>]]Append[ [[oend]Append[Escape Rhope Name[[ctype]Name >>,p]]]Append[")"] ]
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 }
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 _Type Init JS[type name,method reg,text,method,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
248 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
249 out <- [[text]Append[[["\n\tadd_method(bp, "]Append[ [method reg]Method ID[method] ]]Append[ [[", MethodName("]Append[Escape Rhope Name[method,p]]]Append[[","]Append[Escape Rhope Name[type name,p]]]]]]Append["));"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
250 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
251
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
252 _Type Init JS Field[type name,field reg,text,field,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
253 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
254 fname <- [field]Index[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
255 out <- [[[[text]Append[[["\n\tadd_getter(bp, "]Append[ String[[field reg]Field ID[fname]] ]]Append[ [[", MethodName("]Append[Escape Rhope Name[[fname]Append[" >>"],p]]]Append[[","]Append[Escape Rhope Name[type name,p]]]]]]Append["));"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
256 ]Append[[["\n\tadd_setter(bp, "]Append[ String[[field reg]Field ID[fname]] ]]Append[ [[", MethodName("]Append[Escape Rhope Name[[fname]Append[" <<"],p]]]Append[[","]Append[Escape Rhope Name[type name,p]]]]]]Append["));"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
257 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
258
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
259 Type Init@JS Type[ctype,id,method reg,field reg,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
260 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
261 [("Array","Boxed Array", "Worker")]Find[=[[ctype]Name >>, ?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
262 { size <- "-1" }
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 [("Int64","Int32","Int16","Int8")]Find[=[[ctype]Name >>, ?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
265 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
266 [[ctype]Name >>]Slice[3] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
267 { typename <- [["int"]Append[~]]Append["_t"] }
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 [("UInt64","UInt32","UInt16","UInt8")]Find[=[[ctype]Name >>, ?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
270 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
271 [[ctype]Name >>]Slice[4] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
272 { typename <- [["uint"]Append[~]]Append["_t"] }
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 If[[[ctype]Name >>]=["Blueprint"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
275 { typename <- "blueprint *" }
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 If[[[ctype]Name >>]=["Boolean"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
278 { typename <- "int32_t" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
279 { typename <- ["nt_"]Append[Escape Rhope Name[[ctype]Name >>,p]] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
280 }
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 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
283 size <- [["sizeof("]Append[typename]]Append[")"]
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 start <- [["\tbp = register_type_byid("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
286 ]Append[id]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
287 ]Append[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
288 [[", "]Append[size]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
289 ]Append[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
290 [", (special_func)"]Append[
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 [[[[Escape Rhope Name[[ctype]Init >>,p]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
293 ]Append[", (special_func)"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
294 ]Append[Escape Rhope Name[[ctype]Copy >> ,p]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
295 ]Append[", (special_func)"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
296 ]Append[Escape Rhope Name[[ctype]Cleanup >>,p]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
297 ]Append[");"]]] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
298 out <- Val[start]//Fold[[["_Type Init JS Field"]Set Input[0, [ctype]Name >>]]Set Input[1, field reg], Fold[[["_Type Init JS"]Set Input[0, [ctype]Name >>]]Set Input[1, method reg], start, [ctype]Methods >>], [ctype]Fields >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
299 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
300
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
301 Blueprint JS Type Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
302 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
303 Lookup
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
304 Definitions
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
305 Next ID
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
306 Escape Pattern
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
307 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
308
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
309 JS Type Registry[p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
310 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
311 out <- [[[[Build[JS Type Registry()]]Lookup << [
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
312 [[[[[[[[[[[[[[[[[[[Dictionary[]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
313 ]Set["UInt8", "TYPE_UINT8"] //1
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
314 ]Set["UInt16", "TYPE_UINT16"] //2
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
315 ]Set["UInt32", "TYPE_UINT32"] //3
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
316 ]Set["UInt64", "TYPE_UINT64"] //4
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
317 ]Set["Int8", "TYPE_INT8"] //5
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
318 ]Set["Int16", "TYPE_INT16"] //6
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
319 ]Set["Int32", "TYPE_INT32"] //7
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
320 ]Set["Int64", "TYPE_INT64"] //8
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
321 ]Set["Boolean", "TYPE_BOOLEAN"] //9
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
322 ]Set["Float32", "TYPE_FLOAT32"] //10
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
323 ]Set["Float64", "TYPE_FLOAT64"] //11
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
324 ]Set["Real Number", "TYPE_FLOAT64"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
325 ]Set["Blueprint", "TYPE_BLUEPRINT"] //12
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
326 ]Set["Array", "TYPE_ARRAY"] //13
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
327 ]Set["Boxed Array", "TYPE_BOXEDARRAY"]//14
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
328 ]Set["Worker", "TYPE_WORKER"] //15
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
329 ]Set["Method Missing Exception", "TYPE_METHODMISSINGEXCEPTION"] //16
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
330 ]Set["Field Missing Exception", "TYPE_FIELDMISSINGEXCEPTION"] //17
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
331 ]Set["Wrong Type Exception", "TYPE_WRONGTYPEEXCEPTION"]] //18
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
332 ]Definitions << [Dictionary[]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
333 ]Next ID <<[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
334 ]Escape Pattern <<[p]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
335 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
336
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
337 _Type Defs JS[text,def,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
338 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
339 out <- [[text]Append[[def]Type Def[p]]]Append["\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
340 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
341
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
342 Type Defs@JS Type Registry[reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
343 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
344 out <- Fold[_Type Defs JS[?,?,[reg]Escape Pattern >>], "", [reg]Definitions >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
345 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
346
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
347 _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
348 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
349 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
350 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
351
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
352 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
353 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
354 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
355 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
356
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
357 Register Type@JS Type Registry[reg,def:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
358 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
359 name <- [def]Name >>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
360 [[reg]Lookup >>]Index[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
361 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
362 [[reg]Definitions >>]Index[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
363 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
364 out <- reg
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
365 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
366 out <- [reg]Definitions <<[[[reg]Definitions >>]Set[name, def]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
367 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
368 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
369 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
370 ]Definitions <<[ [[reg]Definitions >>]Set[name, def] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
371 ]Next ID <<[ [[reg]Next ID >>]+[1] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
372 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
373 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
374
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
375 Type ID@JS Type Registry[reg,name:out,notfound]
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 out <- [[reg]Lookup >>]Index[name] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
378 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
379 ,notfound <- If[[name]=["Any Type"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
380 { out <- "0" }
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
384 Simple Type?@JS Type Registry[reg,name:yep,nope,notfound]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
385 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
386 ,notfound <- [[reg]Definitions >>]Index[name]
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 yep,nope <- If[[[[~]Fields >>]Length] = [1]]
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 }
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 Defined?@JS Type Registry[reg,name:yep,nope]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
393 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
394 yep,nope <- [[reg]Definitions >>]Index[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
395 }
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 Blueprint JS Function
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
398 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
399 Name
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
400 Inputs
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
401 Outputs
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
402 Convention
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
403 Variables
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
404 Statements
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
405 Method Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
406 Field Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
407 Type Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
408 Constants
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
409 Input Types
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
410 Output Types
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
411 Resume Index
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
412 Last NumParams
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
413 Escape Pattern
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
416 JS Function[name,inputs,outputs,convention,p:out]
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 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
419 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
420
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
421 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
422 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
423 out <- [[[[[[[[[[[[[[[Build[JS Function()]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
424 ]Name <<[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
425 ]Inputs <<[inputs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
426 ]Outputs <<[outputs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
427 ]Convention <<[convention]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
428 ]Variables <<[Dictionary[]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
429 ]Statements <<[()]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
430 ]Method Registry <<[registry]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
431 ]Field Registry <<[field reg]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
432 ]Type Registry <<[type reg]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
433 ]Constants <<[Dictionary[]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
434 ]Input Types <<[ Fold[Append[?, "Any Type"], (), inputs] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
435 ]Output Types <<[ Fold[Append[?, "Any Type"], (), outputs] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
436 ]Resume Index <<[1]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
437 ]Last NumParams <<[-1]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
438 ]Escape Pattern <<[p]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
441 Set Input Type@JS Function[func,type,input num:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
442 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
443 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
444 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
445
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
446 Set Output Type@JS Function[func,type,output num:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
447 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
448 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
449 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
450
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
451 Register Constant@JS Function[func,name,constant:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
452 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
453 out <- [func]Constants <<[ [[func]Constants >>]Set[name, constant] ]
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 Allocate Var@JS Function[func,name,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
457 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
458 out <- [func]Variables <<[ [[func]Variables >>]Set[name,type] ]
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 Add Statement@JS Function[func,statement: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 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
464 }
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 Add Raw Line@JS Function[func,line:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
467 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
468 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
469 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
470
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
471 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
472 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
473 source1 <- [psource1]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
474 source2 <- [psource2]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
475 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
476 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
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 Add@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
480 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
481 out <- [func]Add Operator Statement[source1,source2,dest," + "]
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 Sub@JS Function[func,source1,source2,dest: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 out <- [func]Add Operator Statement[source1,source2,dest," - "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
487 }
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 Multiply@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
490 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
491 out <- [func]Add Operator Statement[source1,source2,dest," * "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
492 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
493
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
494 Divide@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
495 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
496 out <- [func]Add Operator Statement[source1,source2,dest," / "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
497 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
498
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
499 DoLShift@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
500 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
501 out <- [func]Add Operator Statement[source1,source2,dest," << "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
502 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
503
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
504 DoRShift@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
505 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
506 out <- [func]Add Operator Statement[source1,source2,dest," >> "]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
509 BitAnd@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
510 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
511 out <- [func]Add Operator Statement[source1,source2,dest," & "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
512 }
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 BitOr@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
515 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
516 out <- [func]Add Operator Statement[source1,source2,dest," | "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
517 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
518
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
519 CompLess@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
520 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
521 out <- [func]Add Operator Statement[source1,source2,dest," < "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
522 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
523
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
524 CompGreater@JS Function[func,source1,source2,dest:out]
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 out <- [func]Add Operator Statement[source1,source2,dest," > "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
527 }
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 CompEqual@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
530 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
531 out <- [func]Add Operator Statement[source1,source2,dest," == "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
532 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
533
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
534 CompLessEqual@JS Function[func,source1,source2,dest:out]
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 out <- [func]Add Operator Statement[source1,source2,dest," <= "]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
539 CompGreaterEqual@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
540 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
541 out <- [func]Add Operator Statement[source1,source2,dest," >= "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
542 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
543
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
544 CompNotEqual@JS Function[func,source1,source2,dest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
545 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
546 out <- [func]Add Operator Statement[source1,source2,dest," != "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
547 }
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 Move@JS Function[func,psource,pdest:out]
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 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
552 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
553 out <- [func]Add Statement[[[dest]Append[" = "]]Append[source]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
554 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
555
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
556 Do AddRef@JS Function[func,psource,pdest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
557 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
558 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
559 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
560 out <- [func]Add Statement[[[[dest]Append[" = add_ref((object *)"]]Append[source]]Append[")"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
561 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
562
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
563 AddRef No Dest@JS Function[func,psource:out]
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 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
566 out <- [func]Add Statement[[["add_ref((object *)"]Append[source]]Append[")"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
567 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
568
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
569 Release@JS Function[func,psource:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
570 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
571 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
572 out <- [func]Add Statement[[["release_ref((object *)"]Append[source]]Append[")"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
573 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
574
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
575 Set Null@JS Function[func,pdest:out]
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 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
578 out <- [func]Add Statement[[dest]Append[" = NULL"]]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
581 Lookup Constant@JS Function[func,const,doaddref:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
582 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
583 var <- ["_const_"]Append[Escape Rhope Name[const,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
584 If[doaddref]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
585 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
586 out <- [["add_ref("]Append[var]]Append[")"]
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 out <- Val[var]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
589 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
590 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
591
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
592 Field Result@JS Function[func,var,field:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
593 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
594 as op <- [var]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
595 [(String(),String Cat(),String Slice())]Find[=[Blueprint Of[var],?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
596 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
597 [[func]Inputs >>]Find[=[var,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
598 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
599 type <- [[func]Input Types >>]Index[~]
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 type <- [[func]Variables >>]Index[var] { Print["op refers to a var"] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
603 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
604 [[func]Outputs >>]Find[=[var,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
605 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
606 type <- [[func]Output Types >>]Index[~]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
607 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
608 //Does it make sense for us to do this?
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
609 type <- Type Instance["Any Type"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
610 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
611 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
612 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
613 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
614 type <- Type Instance["Any Type"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
615 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
616 If[[[func]Convention >>] = ["rhope"]]
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 If[[type] = ["Any Type"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
619 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
620 rvar <- Val[as op]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
621 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
622 rvar <- [[[["(("]Append[ Rhope Type to JS[type,[func]Escape Pattern >>] ]]Append[")("]]Append[as op]]Append["))"]
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 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
625 rvar <- Val[as op]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
626 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
627
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
628 [[func]Type Registry >>]Simple Type?[[type]Name >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
629 { access <- "->" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
630 { access <- "->payload." }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
631 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
632 //TODO: Generate some kind of error/exception in this case
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
633 access <- "->"
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 out <- [[rvar]Append[access]]Append[Escape Rhope Name[field,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
636 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
637
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
638 Read Field@JS Function[func,var,field:out,result op]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
639 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
640 out <- func
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
641 result op <- Field Ref[var,field]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
642 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
643
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
644 Write Field@JS Function[func,var,field:out,result op]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
645 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
646 out <- func
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
647 result op <- Field Ref[var,field]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
648 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
649
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
650
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 Set Field Null@JS Function[func,var,field: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 out <- [func]Add Statement[ [[func]Field Result[var,field]]Append[" = NULL"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
656 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
657
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
658 Copy@JS Function[func,pdest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
659 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
660 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
661 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
662 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
663
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
664 Box@JS Function[func,psource,pdest,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
665 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
666 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
667 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
668 out <- [func]Add Statement[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
669 [[[[[dest
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
670 ]Append[" = naked_to_boxed("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
671 ]Append[ [[func]Type Registry >>]Type ID[[type]Name >>] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
672 ]Append[", &"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
673 ]Append[source]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
674 ]Append[")"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
675 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
676
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
677 Unbox@JS Function[func,psource,pdest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
678 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
679 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
680 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
681 out <- [func]Add Statement[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
682 [[[["boxed_to_naked("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
683 ]Append[source]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
684 ]Append[", &"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
685 ]Append[dest]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
686 ]Append[")"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
687 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
688
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
689 Get Raw Pointer@JS Function[func,psource,pdest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
690 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
691 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
692 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
693 out <- [func]Add Statement[ [[[dest]Append[" = (void*)("]]Append[source]]Append[" + 1)"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
694 }
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 Array Raw Pointer@JS Function[func,psource,pdest:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
697 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
698 dest <- [pdest]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
699 source <- [psource]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
700 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
701 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
702
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
703 _Function Arg JS[func,val,inputnum:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
704 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
705 out <- [func]Add Raw Line[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
706 [[[["SetParam("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
707 ]Append[String[inputnum]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
708 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
709 ]Append[val]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
710 ]Append[")"]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
714 _Val Function Arg JS[func,val,inputnum,worker:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
715 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
716 out <- [func]Add Raw Line[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
717 [[[[[["VCSetParam("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
718 ]Append[worker]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
719 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
720 ]Append[String[inputnum]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
721 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
722 ]Append[val]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
723 ]Append[")"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
724 ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
725 }
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 Method Call@JS Function[func,method,args: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 out <- [func]Call[method,args]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
730 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
731
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
732 Val Call@JS Function[func,to call,args:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
733 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
734 worker <- Make Op[Strip Addref[to call], func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
735 rargs <- Map[args, Make Op[?, func]]
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 If[[[func]Last NumParams >>] = [-1]]
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 prepped <- [[func]Add Raw Line[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
740 [[[["VCPrepCall("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
741 ]Append[worker]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
742 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
743 ]Append[String[[rargs]Length]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
744 ]Append[")"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
745 ]Last NumParams <<[[rargs]Length]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
746 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
747 prepped <- [[func]Add Raw Line[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
748 [[[[[["VCRePrepCall("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
749 ]Append[worker]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
750 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
751 ]Append[String[[rargs]Length]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
752 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
753 ]Append[String[[func]Last NumParams >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
754 ]Append[")"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
755 ]Last NumParams <<[[rargs]Length]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
759 out <- [[[[Fold[_Val Function Arg JS[?, ?, ?, worker], prepped, rargs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
760 ]Add Raw Line[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
761 [[[[[[[["ValCall("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
762 ]Append[worker]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
763 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
764 ]Append[String[[rargs]Length]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
765 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
766 ]Append[String[[func]Resume Index >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
767 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
768 ]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
769 ]Append[")"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
770 ]Add Raw Line["DISPATCH"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
771 ]Add Raw Line[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
772 [[[["ValCallPostlude("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
773 ]Append[String[[func]Resume Index >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
774 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
775 ]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
776 ]Append[")"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
777 ]Resume Index <<[ [[func]Resume Index >>]+[1] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
778 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
779
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
780 Call@JS Function[func,name,args:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
781 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
782 If[[name]=["Call@Worker"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
783 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
784 //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
785 out <- [func]Val Call[[args]Index[0], Tail[args,1]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
786 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
787 If[[name]=["Call"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
788 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
789 to call <- [args]Index[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
790 last numparams <- [func]Last NumParams >>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
791 out <- [[[[[[func]Add Raw Line[[["if (get_blueprint("]Append[Make Op[Strip Addref[to call], func]]]Append[")->type_id == TYPE_WORKER) {"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
792 ]Val Call[to call, Tail[args,1]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
793 ]Add Raw Line["} else {"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
794 ]Last NumParams <<[last numparams]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
795 ]Func Base["Call",args, "Call"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
796 ]Add Raw Line["}"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
797 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
798 out <- [func]Func Base[Escape Rhope Name[name,[func]Escape Pattern >>],args, "Call"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
799 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
800 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
801 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
802
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
803 Func Base@JS Function[func,tocall,args,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
804 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
805 Print[ [[func]Name >>]Append[ [": Func Base("]Append[tocall] ] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
806 rargs <- Map[args, Make Op[?, func]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
807
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
808 If[[[rargs]Length] > [[func]Last NumParams >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
809 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
810 If[[[func]Last NumParams >>] = [-1]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
811 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
812 freed <- Val[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
813 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
814 freed <- [func]Add Raw Line["FreeCall"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
815 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
816 prepped <- [[freed]Add Raw Line[ [["PrepCall("]Append[String[[rargs]Length]]]Append[")"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
817 ]Last NumParams <<[[rargs]Length]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
818 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
819 prepped <- Val[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
820 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
821
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
822
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
823 out <- [[Fold[_Function Arg JS[?], prepped, rargs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
824 ]Add Raw Line[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
825 [[[[[[[[[type]Append["("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
826 ]Append[tocall]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
827 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
828 ]Append[String[[rargs]Length]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
829 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
830 ]Append[String[[func]Resume Index >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
831 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
832 ]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
833 ]Append[")"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
834 ]Resume Index <<[ [[func]Resume Index >>]+[1] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
835 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
836
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
837 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
838 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
839 rargs <- Map[args, Make Op[?, func]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
840 //Assume language = "JS" for now
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
841 base <- [[[name]Append["("]]Append[ Join[rargs, ", "] ]]Append[")"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
842 ,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
843 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
844 ,do store <- If[[store result]=[""]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
845 { stmt <- Val[base] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
846 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
847
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
848 Val[do store]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
849 { stmt <- [[Make Op[store result, func]]Append[" = "]]Append[base] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
850 out <- [func]Add Statement[stmt]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
851 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
852
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
853 Get Field Call@JS Function[func,field,source:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
854 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
855 out <- [func]Func Base[Escape Rhope Name[[field]Append[" >>"],[func]Escape Pattern >>], [()]Append[source], "Call"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
856 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
857
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
858 Set Field Call@JS Function[func,field,object,value:out]
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 <- [func]Func Base[Escape Rhope Name[[field]Append[" <<"],[func]Escape Pattern >>], [[()]Append[object]]Append[value], "Call"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
861 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
862
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
863 Tail Method Call@JS Function[func,method,args:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
864 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
865 out <- [func]Func Base[[[func]Method Registry >>]Method ID[method],args, "TMCall"]
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 Tail Call@JS Function[func,name,args: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 <- [func]Func Base[Escape Rhope Name[name,[func]Escape Pattern >>],args, "TCall"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
871 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
872
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
873 Resolve@JS Function[func,op:out]
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 If[[[func]Convention >>] = ["rhope"]]
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 [[func]Inputs >>]Find[=[op,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
878 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
879 out <- [["my_cdata->params["]Append[String[~]]]Append[" ]"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
880 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
881 out <- [[["lv_"]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]]Append["->"]]Append[Escape Rhope Name[op,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
882 }
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 out <- Escape Rhope Name[op,[func]Escape Pattern >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
885 }
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
888 Resolve Output@JS Function[func,name:out]
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 If[[[func]Convention >>] = ["rhope"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
891 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
892 out <- [[["lv_"]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]]Append["->"]]Append[Escape Rhope Name[name,[func]Escape Pattern >>]]
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 out <- Escape Rhope Name[name,[func]Escape Pattern >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
895 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
896 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
897
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
898 Instruction Stream@JS Function[func:out]
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 out <- [func]Statements <<[()]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
901 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
902
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
903 _If JS[func, statement:out]
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 out <- [func]Statements <<[ [[func]Statements >>]Append[ ["\t"]Append[statement] ] ]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
908 Do If@JS Function[func,condition,stream:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
909 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
910 cond <- [condition]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
911 out <- [[Fold[_If JS[?], [[func
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
912 ]Add Raw Line[ [["if("]Append[cond]]Append[")"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
913 ]Add Raw Line["{"], [stream]Statements >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
914 ]Add Raw Line["}"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
915 ]Resume Index <<[[stream]Resume Index >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
916
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
917 }
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 Discard Outputs@JS Function[func,first to discard:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
920 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
921 out <- [[[[[func
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
922 ]Add Raw Line[[["for(idx = "]Append[String[first to discard]]]Append["; idx < cdata->num_params; ++idx)"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
923 ]Add Raw Line["{"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
924 ]Add Raw Line[" if (cdata->params[idx])"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
925 ]Add Raw Line[" release_ref(cdata->params[idx]);"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
926 ]Add Raw Line["}"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
927 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
928
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
929 Result Reference@JS Function[func,output:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
930 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
931 out <- [["cdata->params["]Append[String[output]]]Append["]"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
932 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
933
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
934 Checked Result Reference@JS Function[func,output:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
935 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
936 out <- [[[["("]Append[String[output]]]Append[" < cdata->num_params ? cdata->params["]]Append[String[output]]]Append["] : NULL)"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
937 }
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
940 If Null Else@JS Function[func,left,right:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
941 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
942 check <- [[Make Condition[left]]Strip Addref]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
943 l <- [left]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
944 r <- [right]Make Op[func]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
945 out <- [[[[[["("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
946 ]Append[check]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
947 ]Append[" ? "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
948 ]Append[l]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
949 ]Append[" : "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
950 ]Append[r]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
951 ]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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
954 _Set Outputs JS[string,inputname,inputnum,func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
955 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
956 out <- [string]Append[[[ [ ["\tRet("]Append[String[inputnum]] ]Append[ [[", lv_"]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]]Append["->"]]]Append[Escape Rhope Name[inputname,[func]Escape Pattern >>]]]Append[")\n"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
957 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
958
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
959 Set Outputs@JS Function[func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
960 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
961 If[[[func]Convention >>] = ["rhope"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
962 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
963 out <- [[[Fold[_Set Outputs JS[?, ?, ?, func], "", [func]Outputs >>]]Append["\tNumRet("]]Append[String[[[func]Outputs >>]Length]]]Append[")\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
964 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
965 [[func]Outputs >>]Index[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
966 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
967 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
968 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
969 out <- ""
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
970 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
971 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
972 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
973 _Output Defs JS[string,varname,index,func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
974 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
975 out <- [[[string]Append[ ["\t"]Append[Rhope Type to JS[[[func]Output Types >>]Index[index],[func]Escape Pattern >>]] ]]Append[[" "]Append[Escape Rhope Name[varname,[func]Escape Pattern >>]]]]Append[";\n"]
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 _Var Defs JS[string,type,varname,p:out]
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 out <- [[[string]Append[ ["\t"]Append[Rhope Type to JS[type,p]] ]]Append[[" "]Append[Escape Rhope Name[varname,p]]]]Append[";\n"]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
983 Definitions@JS Function[func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
984 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
985 Print[["Definitions@JS Function: "]Append[[func]Name >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
986 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
987 If[ [[[func]Convention >>] = ["rhope"]] And [[ [[[func]Variables >>]Length]+[[[func]Outputs >>]Length] ] > [0]] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
988 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
989 localtype <- [[[Fold[_Output Defs JS[?, ?, ?, func], Fold[_Var Defs JS[?,?,?,[func]Escape Pattern >>],"typedef struct {\n", [func]Variables >>], [func]Outputs >>]]Append["} lt_"]]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]]Append[";\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
990 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
991 localtype <- ""
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 If[ [[func]Convention >>] = ["rhope"] ]
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 /* parts <- [[func]Name >>]Split["@"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
997 [parts]Index[1]
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 proto <- [[[["MethodDef("
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1000 ]Append[Escape Rhope Name[[parts]Index[0],[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1001 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1002 ]Append[Escape Rhope Name[~,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1003 ]Append[")\n"]
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 proto <- [["FuncDef("]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]]Append[")\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1006 } */
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1007 out <- Val[localtype]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1008 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1009 out <- [[func]Naked Proto]Append[";\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1010 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1011 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1012 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1013
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1014 _Proto Input[list,input,index,types,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1015 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1016 out <- [list]Append[ [[Rhope Type to JS[[types]Index[index],p]]Append[" "]]Append[Escape Rhope Name[input,p]] ]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1019 Naked Proto@JS Function[func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1020 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1021 [[func]Output Types >>]Index[0]
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 outtype <- [Rhope Type to JS[~,[func]Escape Pattern >>]]Append[" "]
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 outtype <- "void "
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1026 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1027 out <- [[[[outtype
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1028 ]Append[ Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1029 ]Append["("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1030 ]Append[ [Fold[_Proto Input[?, ?, ?, [func]Input Types >>,[func]Escape Pattern >>], (), [func]Inputs >>]]Join[", "] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1031 ]Append[")"]
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
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1034 Type Check@JS Function[func,text,type,input num:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1035 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1036 If[[type] = ["Any Type"]]
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 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1039 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1040 out <- [text]Append[ [["\tParam("]Append[input num]]Append[ [[", "]Append[ [[func]Type Registry >>]Type ID[type] ]]Append[")"] ] ]
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 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1043
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1044 Check Param Type JS[text,type,input num,func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1045 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1046 [(String(),String Cat(),String Slice())]Find[=[Blueprint Of[type],?]]
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 typename <- type
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 typename <- [type]Name >>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1051 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1052 If[[typename] = ["Any Type"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1053 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1054 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1055 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1056 out <- [text]Append[[[["\tParam("]Append[String[input num]]]Append[ [","]Append[ [[func]Type Registry >>]Type ID[typename] ] ]]Append[")\n"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1057 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1058 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1059
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1060 Text@JS Function[func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1061 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1062 Print[["Text@JS Function: "]Append[[func]Name >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1063 If[ [[func]Convention >>] = ["rhope"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1064 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1065 before <- [[func]Name >>]Partition["@"] {} {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1066 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1067 type <- "MethodImpl"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1068 cname <- [[[[Escape Rhope Name[before,[func]Escape Pattern >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1069 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1070 ]Append[Escape Rhope Name[~,[func]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1071 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1072 ]Append[ [[func]Type Registry >>]Type ID[~] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1073 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1074 type <- "Func"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1075 cname <- Val[fname]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1076 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1077 fname <- Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1078 param check <- Fold[Check Param Type JS[?, ?, ?, func], "", [func]Input Types >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1079 If[ [ [[[func]Variables >>]Length]+[[[func]Outputs >>]Length] ] = [0] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1080 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1081 out <- [[[[[[[[ [type]Append["NoLocals("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1082 ]Append[cname]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1083 ]Append[",\n\tNumParams "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1084 ]Append[ String[[[func]Inputs >>]Length] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1085 ]Append[")\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1086 ]Append[param check]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1087 ]Append[ [[func]Statements >>]Join[""] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1088 ]Append["EndFuncNoLocals\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1089 ]Append["DISPATCH"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1090 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1091 If[[[func]Last NumParams >>] = [-1]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1092 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1093 freecall <- ""
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1094 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1095 freecall <- "\n\tFreeCall\n"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1096 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1097 out <- [[[[[[[[[[ [type]Append["("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1098 ]Append[cname]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1099 ]Append[",\n\tNumParams "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1100 ]Append[ String[[[func]Inputs >>]Length] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1101 ]Append[")\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1102 ]Append[param check]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1103 ]Append[ [[func]Statements >>]Join[""] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1104 ]Append[freecall]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1105 ]Append[[func]Set Outputs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1106 ]Append[[["EndFunc("]Append[fname]]Append[")\n"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1107 ]Append["DISPATCH"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1108 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1109 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1110
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1111 out <- [[[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1112 Fold[_Output Defs JS[?, ?, ?, func],
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1113 Fold[_Var Defs JS[?], [[func]Naked Proto]Append["\n{"], [func]Variables >>], [func]Outputs >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1114 ]Append[[[func]Statements >>]Join[""]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1115 ]Append[[func]Set Outputs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1116 ]Append["}"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1117 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1118 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1119
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1120 Blueprint JS Program
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1121 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1122 Functions
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1123 Method Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1124 Field Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1125 Type Registry
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1126 Libraries
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1127 Escape Pattern
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1128 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1129
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1130 JS Program[:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1131 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1132 p <- Pattern[("_", "@", " ", ":", "?", "+", "-", "*", "/", "<", ">", "(", ")", "!", "=", "'",
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1133 "\"", "\t", ",", ".", "\n", "{", "}", "[", "]", "#", "\\", "\r", ";", "&", "|", "%", "^", "`", "~")]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1134 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
1135 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1136
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1137 Link@JS Program[program,language,library:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1138 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1139 If[[library] = ["runtime"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1140 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1141 out <- program
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1142 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1143 langlibs <- [[program]Libraries >>]Index[language] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1144 { langlibs <- Dictionary[] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1145 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
1146 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1147 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1148
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1149 Register Type@JS Program[program,def:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1150 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1151 out <- [[[program]Type Registry <<[ [[program]Type Registry >>]Register Type[def] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1152 ]Method Registry <<[ [def]Register Methods[[program]Method Registry >>] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1153 ]Field Registry <<[ [def]Register Fields[[program]Field Registry >>] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1154 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1155
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1156 Create Type@JS Program[program,name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1157 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1158 out <- JS Type[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1159 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1160
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1161 Create Function@JS Program[program,name,inputs,outputs,convention:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1162 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1163 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
1164 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1165
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1166 Store Function@JS Program[program,func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1167 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1168 out <- [program]Functions <<[ [[program]Functions >>]Set[ [func]Name >>, func] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1169 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1170
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1171 Method?@JS Program[program,funcname:is,isnot]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1172 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1173 is,isnot <- [[program]Method Registry >>]Method ID[funcname]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1174 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1175
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1176 _Defs JS Program[text,func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1177 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1178 def <- [func]Definitions
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1179 If[[def]=[""]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1180 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1181 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1182 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1183 out <- [text]Append[[def]Append["\n\n"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1184 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1185 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1186
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1187 _Text JS Program[text,func,type reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1188 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1189 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
1190 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1191
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1192 Combine Consts[consts,func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1193 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1194 out <- Combine[[func]Constants >>, consts]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1195 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1196
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1197 _Consts JS Program[text,value,name,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1198 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1199 out <- [text]Append[ [["object * _const_"]Append[Escape Rhope Name[name,p]]]Append[";\n"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1200 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1201
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1202 _Consts JS Release[text,value,name,p:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1203 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1204 out <- [text]Append[ [["\trelease_ref(_const_"]Append[Escape Rhope Name[name,p]]]Append[");\n"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1205 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1206
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1207 _List Literal El[text,val,index,type reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1208 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1209 out <- [[[[text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1210 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1211 ]Append[index]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1212 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1213 ]Append[Const Construct JS[val, type reg]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1214 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1215
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1216 Const Construct JS[value,type reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1217 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1218 valtype <- Blueprint Of[value]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1219 [(Int8(),UInt8(),Int16(),UInt16(),Int32(),UInt32(),Int64(),UInt64())]Find[=[valtype,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1220 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1221 size <- [("8","16","32","64")]Index[[~]/[2]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1222 If[[~]Mod[2]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1223 { s <- "UI" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1224 { s <- "I" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1225
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1226 out <- [[[[[["make_"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1227 ]Append[s]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1228 ]Append["nt"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1229 ]Append[size]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1230 ]Append["("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1231 ]Append[String[value]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1232 ]Append[")"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1233 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1234 If[[valtype] = [Type Instance()]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1235 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1236 //TODO: Support parametric types
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1237 typeid <- [type reg]Type ID[[value]Name >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1238
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1239 out <- [["make_Blueprint("]Append[typeid]]Append[")"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1240 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1241 If[[valtype] = [Boolean()]]
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 If[value]
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 out <- "make_Bool(1)"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1246 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1247 out <- "make_Bool(0)"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1248 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1249 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1250
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1251 [(String(),String Slice(),String Cat())]Find[=[valtype,?]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1252 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1253 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
1254 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1255 If[[valtype]=[Worker Literal()]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1256 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1257 //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
1258 //or workaround the problem higher up in the food chain
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1259 [[value]Args >>]Last
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1260 { size <- String[[~]+[1]] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1261 { size <- "0" }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1262 out <- [[[[[["make_Worker(FUNC_"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1263 ]Append[Escape Rhope Name[[value]Name >>,[type reg]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1264 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1265 ]Append[size]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1266 ]Append[", "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1267 ]Append[String[Fold[+[1,?], 0, [value]Args >>]]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1268 ]Append[")"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1269 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1270 [(List(), List Leaf())]Find[=[?,valtype]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1271 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1272 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
1273 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1274 out <- "UnhandledLiteralType"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1275 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1276 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1277 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1278 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1279 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1280
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1281 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1282 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1283
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1284 _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
1285 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1286 out <- [text]Append[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1287 [[[[[["\t((object **)(((t_Worker *)_const_"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1288 ]Append[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1289 ]Append[")+1))["]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1290 ]Append[String[num]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1291 ]Append["] = "]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1292 ]Append[Const Construct JS[param, type reg]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1293 ]Append[";\n"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1294 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1295
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1296 _Set Consts JS Program[text,value,name,type reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1297 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1298 valtype <- Blueprint Of[value]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1299 [(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
1300 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1301 Print[[name]Append[" is not of an early constant type"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1302 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1303 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1304 Const Construct JS[value,type reg]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1305 { out <- [text]Append[ [[[["\t_const_"]Append[Escape Rhope Name[name,[type reg]Escape Pattern >>]]]Append[" = "]]Append[~]]Append[";\n"] ] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1306 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1307 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1308
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1309 _Set List Els[text,el,index,type reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1310 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1311 out <- [[text]Append[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1312 [["\tinout[1] = "
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1313 ]Append[Const Construct JS[index,type reg]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1314 ]Append[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1315 [[";\n\tinout[2] = "
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1316 ]Append[Const Construct JS[el, type reg]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1317 ]Append[";\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1318 ]]]Append["\trhope(FUNC_Set, inout, 3, 3);\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1319 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1320
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1321 _Set Late Consts JS[text,value,name,type reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1322 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1323 valtype <- Blueprint Of[value]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1324 [(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
1325 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1326 If[[~]>[3]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1327 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1328 out <- [Fold[_Set List Els[?, ?, ?, type reg], [text]Append["\trhope(FUNC_List, inout, 0, 1);\n"], value]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1329 ]Append[[["\t_const_"]Append[Escape Rhope Name[name,[type reg]Escape Pattern >>]]]Append[" = inout[0];\n"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1330 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1331 Const Construct JS[value,type reg]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1332 { init <- [text]Append[ [[[["\t_const_"]Append[Escape Rhope Name[name,[type reg]Escape Pattern >>]]]Append[" = "]]Append[~]]Append[";\n"] ] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1333
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1334 If[[valtype]=[Worker Literal()]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1335 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1336 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
1337 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1338 out <- Val[init]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1339 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1340 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1341 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1342 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1343 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1344 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1345
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1346 _Dispatch Switch Sub[text, num, name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1347 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1348 out <- [[[[[text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1349 ]Append["\tResumeEntry("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1350 ]Append[String[num]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1351 ]Append[","]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1352 ]Append[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1353 ]Append[")\\\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1354 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1355
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1356 _Dispatch Switch[text,func,raw name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1357 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1358 If[[[func]Convention >>] = ["rhope"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1359 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1360 name <- Escape Rhope Name[raw name,[func]Escape Pattern >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1361 out <- [[text]Append[ [["\tDispatchEntry("]Append[name]]Append[")\\\n"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1362 ]Append[Fold[_Dispatch Switch Sub[?, ?, name], "", Range[1, [func]Resume Index >>]]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1363 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1364 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1365 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1366 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1367
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1368 _Dispatch Switch Methods[p,text,id,raw name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1369 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1370 name <- Escape Rhope Name[raw name,p]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1371 out <- [text]Append[ [["\tDispatchEntry("]Append[name]]Append[")\\\n"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1372 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1373
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1374 _Dispatch Enum Sub[text, num, name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1375 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1376 out <- [[[[[text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1377 ]Append["\tRES_"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1378 ]Append[String[num]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1379 ]Append["_"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1380 ]Append[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1381 ]Append[",\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1382 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1383
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1384 _Dispatch Enum[text,func,raw name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1385 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1386 If[[[func]Convention >>] = ["rhope"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1387 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1388 name <- Escape Rhope Name[raw name,[func]Escape Pattern >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1389 out <- [[text]Append[ [["\tFUNC_"]Append[name]]Append[",\n"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1390 ]Append[Fold[_Dispatch Enum Sub[?, ?, name], "", Range[1, [func]Resume Index >>]]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1391 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1392 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1393 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1394 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1395
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1396 _Dispatch Enum Methods[p,text,types,name:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1397 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1398 out <- [text]Append[ [["\tFUNC_"]Append[Escape Rhope Name[name,p]]]Append[",\n"] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1399 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1400
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1401 Dispatch@JS Program[program,all methods:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1402 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1403 out <- [[[[["typedef enum {\n"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1404 ]Append[Fold[_Dispatch Enum[?],
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1405 [Fold[_Dispatch Enum Methods[[program]Escape Pattern >>,?], "", all methods]]Append["\tFUNC_Build,\n\tFUNC_BlueprintSP_Of,\n\tFUNC_ID,\n\tFUNC_BlueprintSP_FromSP_ID,\n"],
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1406 [program]Functions >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1407 ]Append["\tEND\n} funcids;\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1408 ]Append["#define DispatchEntries \\\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1409 ]Append[Fold[_Dispatch Switch[?],
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1410 [Fold[_Dispatch Switch Methods[[program]Escape Pattern >>,?], "", all methods]]Append["\tDispatchEntry(Build)\\\n\tDispatchEntry(BlueprintSP_Of)\\\n\tDispatchEntry(ID)\\\n\tDispatchEntry(BlueprintSP_FromSP_ID)\\\n"],
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1411 [program]Functions >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1412 ]Append["\tEndEntry\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1413 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1414
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1415 Not Native[func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1416 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1417 If[[[func]Convention >>] = ["rhope"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1418 { out <- No }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1419 { out <- Yes }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1420 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1421
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1422 Native[func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1423 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1424 out <- [[func]Convention >>] = ["rhope"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1425 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1426
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1427 Local Pointers[text,func:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1428 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1429 If[ [ [[[func]Variables >>]Length]+[[[func]Outputs >>]Length] ] = [0] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1430 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1431 out <- text
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1432 }{
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1433 out <- [text]Append[[["\tFuncDef("]Append[Escape Rhope Name[[func]Name >>,[func]Escape Pattern >>]]]Append[")\n"]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1434 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1435 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1436
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1437 _Method to Types[dict,name,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1438 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1439 typelist <- [dict]Index[name] {}
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1440 { typelist <- () }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1441
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1442 out <- [dict]Set[name, [typelist]Append[[type]Name >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1443
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1444 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1445
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1446 _Field to Types[dict,field,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1447 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1448 name <- [field]Index[0]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1449 out <- _Method to Types[_Method to Types[dict, [name]Append[" >>"], type], [name]Append[" <<"], type]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1450
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1451 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1452
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1453 Method to Types[dict,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1454 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1455 out <- Fold[_Method to Types[?, ?, type], dict, [type]Methods >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1456 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1457
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1458 Field to Types[dict,type:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1459 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1460 out <- Fold[_Field to Types[?, ?, type], dict, [type]Fields >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1461 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1462
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1463 _Method Dispatch[text, type, method, reg: out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1464 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1465 out <- [[[[[[[text]Append["\tMethodDispatch("]]Append[ [reg]Type ID[type] ]]Append[","]]Append[Escape Rhope Name[method,[reg]Escape Pattern >>]]]Append[","]]Append[Escape Rhope Name[type,[reg]Escape Pattern >>]]]Append[")\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1466 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1467
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1468 Method Dispatch[text, types, method, reg: out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1469 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1470 out <- [[[Fold[_Method Dispatch[?, ?, method, reg], [[[text]Append["Method("]]Append[ Escape Rhope Name[method,[reg]Escape Pattern >>] ]]Append[")\n"], types]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1471 ]Append["EndMethod("]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1472 ]Append[Escape Rhope Name[method,[reg]Escape Pattern >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1473 ]Append[")\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1474 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1475
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1476 Init Type Names[text,typeid,name,reg:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1477 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1478 [reg]Defined?[name]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1479 { out <- [text]Append[ [[[["\tregistered_types["]Append[typeid]]Append["]->name = "]]Append[Const Construct JS[name, reg]]]Append[";\n"] ] }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1480 { out <- text }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1481 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1482
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1483 Text@JS Program[program:out]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1484 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1485 p <- [program]Escape Pattern >>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1486 type defs <- [[program]Type Registry >>]Definitions >>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1487 constants <- Fold[Combine Consts[?], Dictionary[], [program]Functions >>]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1488 all methods <- Fold[Field to Types[?], Fold[Method to Types[?], Dictionary[], type defs], type defs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1489 headers <- "#include <stdio.h>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1490 #include <stdlib.h>
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1491 #include \"builtin.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1492 #include \"object.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1493 #include \"context.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1494 #include \"func.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1495 #include \"integer.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1496 #include \"blueprint.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1497 #include \"array.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1498 #include \"worker.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1499 #include \"bool.h\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1500 #include <sys/time.h>\n\n"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1501 out <- [[[[[[[[[[[[[[[[[[headers
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1502 ]Append[[program]Dispatch[all methods]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1503 ]Append[[[program]Type Registry >>]Type Defs]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1504 ]Append[Fold[_Consts JS Program[?,?,?,p],
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1505 Fold[_Defs JS Program[?], "", [program]Functions >>],
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1506 constants]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1507 ]Append[Fold[_Text JS Program[?, ?, [program]Type Registry >>], "", Filter[[program]Functions >>, Not Native[?]]]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1508 ]Append["\n
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1509 #ifdef ENABLE_PROFILING
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1510 uint64_t profile_counts[END];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1511 uint64_t profile_nestedcounts[END];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1512 uint64_t profile_totals[END];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1513 uint64_t profile_selftotals[END];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1514 uint64_t profile_activationlevel[END];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1515 #endif
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1516
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1517 int32_t rhope(uint32_t func, object ** params, uint16_t numparams, uint16_t callspace)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1518 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1519 #ifdef ENABLE_PROFILING
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1520 struct timeval time;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1521 #endif
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1522 uint16_t resume,idx, vcparam_offset, last_vcparam;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1523 context * ct;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1524 calldata * cdata, *temp_cdata, *my_cdata;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1525 DispatchVar
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1526 FuncDef(Build)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1527 FuncDef(BlueprintSP_Of)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1528 FuncDef(ID)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1529 FuncDef(BlueprintSP_FromSP_ID)\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1530 ]Append[Fold[Local Pointers[?], "", [program]Functions >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1531 ]Append["
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1532 ct = new_context();
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1533 cdata = alloc_cdata(ct, NULL, callspace);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1534 cdata->num_params = numparams;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1535 for(idx = 0; idx < numparams; ++idx)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1536 cdata->params[idx] = params[idx];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1537 cdata->func = END;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1538 DISPATCH\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1539 ]Append[Fold[Method Dispatch[?, ?, ?, [program]Type Registry >>], "", all methods]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1540 ]Append["
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1541 Func(Build,
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1542 NumParams 1)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1543
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1544 Param(0, TYPE_BLUEPRINT)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1545
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1546 lv_Build->bp = ((t_Blueprint *)(cdata->params[0]))->bp;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1547 release_ref(cdata->params[0]);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1548
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1549 Ret(0, new_object_bp(lv_Build->bp))
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1550 EndFunc(Build)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1551 DISPATCH
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1552
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1553 Func(BlueprintSP_Of,
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1554 NumParams 1)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1555
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1556 lv_BlueprintSP_Of->bp = get_blueprint(cdata->params[0]);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1557 release_ref(cdata->params[0]);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1558
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1559 Ret(0, new_object(TYPE_BLUEPRINT))
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1560 ((t_Blueprint *)cdata->params[0])->bp = lv_BlueprintSP_Of->bp;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1561 EndFunc(BlueprintSP_Of)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1562 DISPATCH
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1563
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1564 Func(ID, NumParams 1)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1565
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1566 Param(0, TYPE_BLUEPRINT)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1567
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1568 lv_ID->id = new_object(TYPE_UINT32);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1569 ((t_UInt32 *)lv_ID->id)->Num = ((t_Blueprint *)cdata->params[0])->bp->type_id;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1570 release_ref(cdata->params[0]);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1571 Ret(0, lv_ID->id)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1572 EndFunc(ID)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1573 DISPATCH
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1574
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1575 Func(BlueprintSP_FromSP_ID, NumParams 1)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1576
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1577 Param(0, TYPE_UINT32)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1578
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1579 lv_BlueprintSP_FromSP_ID->type = ((t_UInt32 *)cdata->params[0])->Num;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1580 if (lv_BlueprintSP_FromSP_ID->type >= max_registered_type || !registered_types[lv_BlueprintSP_FromSP_ID->type]) {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1581 Ret(1, cdata->params[0])
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1582 Ret(0, NULL)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1583 } else {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1584 release_ref(cdata->params[0]);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1585 Ret(0, new_object(TYPE_BLUEPRINT))
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1586 ((t_Blueprint *)cdata->params[0])->bp = registered_types[lv_BlueprintSP_FromSP_ID->type];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1587 Ret(1, NULL)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1588 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1589
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1590 EndFunc(BlueprintSP_FromSP_ID)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1591 DISPATCH\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1592 ]Append[Fold[_Text JS Program[?, ?, [program]Type Registry >>], "", Filter[[program]Functions >>, Native[?]]]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1593 ]Append["
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1594 DO_END:
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1595 for(idx = 0; idx < cdata->num_params; ++idx)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1596 params[idx] = cdata->params[idx];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1597 free_context(ct);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1598 return cdata->num_params;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1599
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1600 _exception:
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1601 puts(\"Exception! Trace follows:\");
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1602 while(cdata && cdata->func != END)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1603 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1604 printf(\"%d\\n\", cdata->func);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1605 cdata = cdata->lastframe;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1606 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1607 return -1;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1608 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1609
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1610 #include \"builtin.c\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1611 #include \"array.c\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1612 #include \"worker.c\"
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1613
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1614 int main(int argc, char **argv)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1615 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1616 blueprint * bp;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1617 int numret;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1618 int idx;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1619 object * inout[3];
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1620 register_builtin_types();\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1621 ]Append[ [[program]Type Registry >>]Type Inits[[program]Method Registry >>, [program]Field Registry >>] ]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1622 ]Append[Fold[_Set Consts JS Program[?, ?, ?, [program]Type Registry >>], "", constants]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1623 ]Append[Fold[_Set Late Consts JS[?, ?, ?, [program]Type Registry >>], "", constants]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1624 ]Append[Fold[Init Type Names[?, ?, ?, [program]Type Registry >>], "", [[program]Type Registry >>]Lookup >>]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1625 ]Append["
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1626 rhope(FUNC_List, inout, 0, 1);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1627 for (idx = 0; idx < argc; ++idx)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1628 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1629 inout[1] = make_String(argv[idx]);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1630 rhope(FUNC_Append, inout, 2, 2);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1631 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1632 numret = rhope(FUNC_Main, inout, 1, 1);"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1633 ]Append[Fold[_Consts JS Release[?, ?, ?, p], "", constants]]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1634 ]Append[
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1635 "
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1636 print_mem_info(manager);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1637 print_live_object_types(manager);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1638
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1639 #ifdef ENABLE_PROFILING
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1640 for (idx = 0; idx < END; ++idx)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1641 {
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1642 if(profile_counts[idx])
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1643 printf(\"Func: %d\tCount: %llu\tTime: %llu\tAvg: %f\tSelf: %llu\tAvg: %f\tNested Count: %llu\\n\", idx, profile_counts[idx], profile_totals[idx], ((double)profile_totals[idx])/((double)profile_counts[idx]), profile_selftotals[idx], ((double)profile_selftotals[idx])/((double)profile_counts[idx]), profile_nestedcounts[idx]);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1644 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1645 #endif
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1646 if (!numret)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1647 return 0;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1648 if (numret < 0)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1649 return numret;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1650 if (get_blueprint(inout[0])->type_id == TYPE_INT32)
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1651 return ((t_Int32 *)inout[0])->Num;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1652
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1653 rhope(FUNC_If, inout, 1, 2);
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1654 if (inout[0])
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1655 return 0;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1656 return 1;
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1657 }\n\n"]
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1658
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1659 }
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1660
e1911b2fd5cc Start work on Javascript backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1661