OSDN Git Service

merge src/ and test/ at driver/
[happyabc/happyabc.git] / xml / disasm.ml
1 open Base
2 open Byte
3
4 let op n stream =
5   match Stream.peek stream with
6       Some m when m = n ->
7         Stream.next stream
8     | _ ->
9         raise Stream.Failure
10
11 let code =
12   parser
13       [< _ = op 0xc5 >] ->
14         `Add_i
15     | [< _ = op 0x86; index = u30 >] ->
16         `AsType index
17     | [< _ = op 0x87 >] ->
18         `AsTypeLate
19     | [< _ = op 0xa8 >] ->
20         `BitAnd
21     | [< _ = op 0x97 >] ->
22         `BitNot
23     | [< _ = op 0xa9 >] ->
24         `BitOr
25     | [< _ = op 0xaa >] ->
26         `BitXor
27     | [< _ = op 0x41; arg_count = u30 >] ->
28         `Call arg_count
29     | [< _ = op 0x43; index = u30; arg_count = u30 >] ->
30         `CallMethod (index,arg_count)
31     | [< _ = op 0x46; index = u30; arg_count = u30 >] ->
32         `CallProperty (index,arg_count)
33     | [< _ = op 0x4c; index = u30; arg_count = u30 >] ->
34         `CallPropLex (index,arg_count)
35     | [< _ = op 0x4f; index = u30; arg_count = u30 >] ->
36         `CallPropVoid (index,arg_count)
37     | [< _ = op 0x44; index = u30; arg_count = u30 >] ->
38         `CallStatic (index,arg_count)
39     | [< _ = op 0x45; index = u30; arg_count = u30 >] ->
40         `CallSuper (index,arg_count)
41     | [< _ = op 0x4e; index = u30; arg_count = u30 >] ->
42         `CallSuperVoid (index,arg_count)
43     | [< _ = op 0x78 >] ->
44         `CheckFilter
45     | [< _ = op 0x80; index = u30 >] ->
46         `Coerce index
47     | [< _ = op 0x82 >] ->
48         `Coerce_a
49     | [< _ = op 0x85 >] ->
50         `Coerce_s
51     | [< _ = op 0x42; arg_count = u30 >] ->
52         `Construct arg_count
53     | [< _ = op 0x4a; index = u30; arg_count = u30 >] ->
54         `ConstructProp (index,arg_count)
55     | [< _ = op 0x49; arg_count = u30 >] ->
56         `ConstructSuper arg_count
57     | [< _ = op 0x76 >] ->
58         `Convert_b
59     | [< _ = op 0x73 >] ->
60         `Convert_i
61     | [< _ = op 0x75 >] ->
62         `Convert_d
63     | [< _ = op 0x77 >] ->
64         `Convert_o
65     | [< _ = op 0x74 >] ->
66         `Convert_u
67     | [< _ = op 0x70 >] ->
68         `Convert_s
69     | [< _ = op 0xef; debug_type = u8; index = u30; reg = u8; extra = u30 >] ->
70         `Debug (debug_type,index,reg,extra)
71     | [< _ = op 0xf1; index = u30 >] ->
72         `DebugFile index
73     | [< _ = op 0xf0; linenum = u30 >] ->
74         `DebugLine linenum
75     | [< _ = op 0x94; index = u30 >] ->
76         `DecLocal index
77     | [< _ = op 0xc3; index = u30 >] ->
78         `DecLocal_i index
79     | [< _ = op 0x93 >] ->
80         `Decrement
81     | [< _ = op 0xc1 >] ->
82         `Decrement_i
83     | [< _ = op 0x6a; name = u30 >] ->
84         `DeleteProperty name
85     | [< _ = op 0xa3 >] ->
86         `Divide
87     | [< _ = op 0x2a >] ->
88         `Dup
89     | [< _ = op 0x06; string = u30 >] ->
90         `Dxns string
91     | [< _ = op 0x07 >] ->
92         `DxnsLate
93     | [< _ = op 0xab >] ->
94         `Equals
95     | [< _ = op 0x72 >] ->
96         `Esc_xattr
97     | [< _ = op 0x71 >] ->
98         `Esc_xelem
99     | [< _ = op 0x5f; _ = u30 >] ->
100         failwith "finddef: undocumented instruction"
101     | [< _ = op 0x5e; name = u30 >] ->
102         `FindProperty name
103     | [< _ = op 0x5d; name = u30 >] ->
104         `FindPropStrict name
105     | [< _ = op 0x59; name = u30 >] ->
106         `GetDescendants name
107     | [< _ = op 0x64 >] ->
108         `GetGlobalScope
109     | [< _ = op 0x6e; slot_id = u30 >] ->
110         `GetGlobalSlot slot_id
111     | [< _ = op 0x60; name = u30 >] ->
112         `GetLex name
113     | [< _ = op 0x62; index = u30 >] ->
114         `GetLocal index
115     | [< _ = op 0xD0 >] ->
116         `GetLocal_0
117     | [< _ = op 0xD1 >] ->
118         `GetLocal_1
119     | [< _ = op 0xD2 >] ->
120         `GetLocal_2
121     | [< _ = op 0xD3 >] ->
122         `GetLocal_3
123     | [< _ = op 0x66; name = u30 >] ->
124         `GetProperty name
125     | [< _ = op 0x65; index = u8 >] ->
126         `GetScopeObject index
127     | [< _ = op 0x6c; slot_id = u30 >] ->
128         `GetSlot slot_id
129     | [< _ = op 0x04; name = u30 >] ->
130         `GetSuper name
131     | [< _ = op 0xb0 >] ->
132         `GreaterEquals 
133     | [< _ = op 0xaf >] ->
134         `GreaterThan
135     | [< _ = op 0x1f >] ->
136         `HasNext
137     | [< _ = op 0x32; object_reg = u32; index_reg = u32 >] ->
138         `HasNext2 (object_reg,index_reg)
139     | [< _ = op 0x13; offset = s24 >] ->
140         `IfEq offset
141     | [< _ = op 0x12; offset = s24 >] ->
142         `IfFalse offset
143     | [< _ = op 0x17; offset = s24 >] ->
144         `IfGt offset
145     | [< _ = op 0x16; offset = s24 >] ->
146         `IfLe offset
147     | [< _ = op 0x15; offset = s24 >] ->
148         `IfLt offset
149     | [< _ = op 0x15; offset = s24 >] ->
150         `IfLt offset
151     | [< _ = op 0x0f; offset = s24 >] ->
152         `IfNge offset
153     | [< _ = op 0x0e; offset = s24 >] ->
154         `IfNgt offset
155     | [< _ = op 0x0d; offset = s24 >] ->
156         `IfNle offset
157     | [< _ = op 0x0c; offset = s24 >] ->
158         `IfNlt offset
159     | [< _ = op 0x14; offset = s24 >] ->
160         `IfNe offset
161     | [< _ = op 0x19; offset = s24 >] ->
162         `IfStrictEq offset
163     | [< _ = op 0x1a; offset = s24 >] ->
164         `IfStrictNe offset
165     | [< _ = op 0x11; offset = s24 >] ->
166         `IfTrue offset
167     | [< _ = op 0xb4 >] ->
168         `In
169     | [< _ = op 0x92; index = u30 >] ->
170         `IncLocal index
171     | [< _ = op 0xc2; index = u30 >] ->
172         `IncLocal_i index
173     | [< _ = op 0x91 >] ->
174         `Increment
175     | [< _ = op 0xc0 >] ->
176         `Increment_i
177     | [< _ = op 0x68; index = u30 >] ->
178         `InitProperty index
179     | [< _ = op 0xb1 >] ->
180         `InstanceOf
181     | [< _ = op 0xb2; index = u30 >] ->
182         `IsType index
183     | [< _ = op 0xb3 >] ->
184         `IsTypeLate
185     | [< _ = op 0x10; offset = s24 >] ->
186         `Jump offset
187     | [< _ = op 0x08; index = u30 >] ->
188         `Kill index
189     | [< _ = op 0x09 >] ->
190         `Label
191     | [< _ = op 0xae >] ->
192         `LessEquals
193     | [< _ = op 0xad >] ->
194         `LessThan
195     | [< _ = op 0x1b; 
196          default_offset = s24; 
197          case_count = u30; 
198          case_offsets = Parsec.repeat_l (Int32.add case_count 1l) s24 >] ->
199         `LookupSwitch (default_offset,case_offsets)
200     | [< _ = op 0xa5 >] ->
201         `LShift
202     | [< _ = op 0xa4 >] ->
203         `Modulo
204     | [< _ = op 0xa2 >] ->
205         `Multiply
206     | [< _ = op 0xc7 >] ->
207         `Multiply_i
208     | [< _ = op 0x90 >] ->
209         `Negate
210     | [< _ = op 0xc4 >] ->
211         `Negate_i
212     | [< _ = op 0x57 >] ->
213         `NewActivation
214     | [< _ = op 0x56; arg_count = u30 >] ->
215         `NewArray arg_count
216     | [< _ = op 0x5a; index = u30 >] ->
217         `NewCatch index
218     | [< _ = op 0x58; index = u30 >] ->
219         `NewClass index
220     | [< _ = op 0x40; index = u30 >] ->
221         `NewFunction index
222     | [< _ = op 0x55; arg_count = u30 >] ->
223         `NewObject arg_count
224     | [< _ = op 0x1e >] ->
225         `NextName
226     | [< _ = op 0x23 >] ->
227         `NextValue
228     | [< _ = op 0x02 >] ->
229         `Nop
230     | [< _ = op 0x96 >] ->
231         `Not
232     | [< _ = op 0x29 >] ->
233         `Pop
234     | [< _ = op 0x1d >] ->
235         `PopScope
236     | [< _ = op 0x24; byte_value = u8 >] ->
237         `PushByte byte_value
238     | [< _ = op 0x2f; index = u30 >] ->
239         `PushDouble index
240     | [< _ = op 0x27 >] ->
241         `PushFalse
242     | [< _ = op 0x2d; index = u30 >] ->
243         `PushInt index
244     | [< _ = op 0x31; index = u30 >] ->
245         `PushNamespace index
246     | [< _ = op 0x28 >] ->
247         `PushNan
248     | [< _ = op 0x20 >] ->
249         `PushNull
250     | [< _ = op 0x30 >] ->
251         `PushScope
252     | [< _ = op 0x25; value = u30 >] ->
253         `PushShort value
254     | [< _ = op 0x2c; index = u30 >] ->
255         `PushString index
256     | [< _ = op 0x26 >] ->
257         `PushTrue
258     | [< _ = op 0x2e; index = u30 >] ->
259         `PushUInt index
260     | [< _ = op 0x21 >] ->
261         `PushUndefined
262     | [< _ = op 0x1c >] ->
263         `PushWith
264     | [< _ = op 0x48 >] ->
265         `ReturnValue
266     | [< _ = op 0x47 >] ->
267         `ReturnVoid
268     | [< _ = op 0xa6 >] ->
269         `RShift
270     | [< _ = op 0x63; index = u30 >] ->
271         `SetLocal index
272     | [< _ = op 0xd4 >] ->
273         `SetLocal_0
274     | [< _ = op 0xd5 >] ->
275         `SetLocal_1
276     | [< _ = op 0xd6 >] ->
277         `SetLocal_2
278     | [< _ = op 0xd7 >] ->
279         `SetLocal_3
280     | [< _ = op 0x6f; slot_index = u30 >] ->
281         `SetGlobalSlot slot_index
282     | [< _ = op 0x61; index = u30 >] ->
283         `SetProperty index
284     | [< _ = op 0x6d; slot_index = u30 >] ->
285         `SetSlot slot_index
286     | [< _ = op 0x05; index = u30 >] ->
287         `SetSuper index
288     | [< _ = op 0xac >] ->
289         `StrictEquals
290     | [< _ = op 0xa1 >] ->
291         `Subtract
292     | [< _ = op 0xc6 >] ->
293         `Subtract_i
294     | [< _ = op 0x2b >] ->
295         `Swap
296     | [< _ = op 0x03 >] ->
297         `Throw
298     | [< _ = op 0x95 >] ->
299         `TypeOf
300     | [< _ = op 0xa7 >] ->
301         `URShift