Mercurial > repos > rhope
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 |
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 |