furnace-avm2 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +17 -0
  4. data/abcdump.abc +0 -0
  5. data/bin/furnace-avm2 +175 -0
  6. data/bin/furnace-avm2-benchmark +38 -0
  7. data/darkorbit.abc +0 -0
  8. data/furnace-avm2.gemspec +22 -0
  9. data/lib/avm2.rb +13 -0
  10. data/lib/avm2/abc.rb +65 -0
  11. data/lib/avm2/abc/metadata/const_pool_info.rb +18 -0
  12. data/lib/avm2/abc/metadata/exception_info.rb +29 -0
  13. data/lib/avm2/abc/metadata/file.rb +27 -0
  14. data/lib/avm2/abc/metadata/instance_info.rb +53 -0
  15. data/lib/avm2/abc/metadata/klass_info.rb +7 -0
  16. data/lib/avm2/abc/metadata/metadata_info.rb +9 -0
  17. data/lib/avm2/abc/metadata/method_body_info.rb +31 -0
  18. data/lib/avm2/abc/metadata/method_info.rb +57 -0
  19. data/lib/avm2/abc/metadata/multiname_info.rb +42 -0
  20. data/lib/avm2/abc/metadata/multiname_kind_genericname.rb +16 -0
  21. data/lib/avm2/abc/metadata/multiname_kind_multiname.rb +18 -0
  22. data/lib/avm2/abc/metadata/multiname_kind_multinamel.rb +17 -0
  23. data/lib/avm2/abc/metadata/multiname_kind_qname.rb +44 -0
  24. data/lib/avm2/abc/metadata/multiname_kind_rtqname.rb +17 -0
  25. data/lib/avm2/abc/metadata/multiname_kind_rtqnamel.rb +11 -0
  26. data/lib/avm2/abc/metadata/namespace_info.rb +22 -0
  27. data/lib/avm2/abc/metadata/ns_set_info.rb +13 -0
  28. data/lib/avm2/abc/metadata/option_detail.rb +26 -0
  29. data/lib/avm2/abc/metadata/option_info.rb +5 -0
  30. data/lib/avm2/abc/metadata/script_info.rb +7 -0
  31. data/lib/avm2/abc/metadata/trait_class.rb +9 -0
  32. data/lib/avm2/abc/metadata/trait_function.rb +9 -0
  33. data/lib/avm2/abc/metadata/trait_info.rb +55 -0
  34. data/lib/avm2/abc/metadata/trait_method.rb +12 -0
  35. data/lib/avm2/abc/metadata/trait_slot.rb +11 -0
  36. data/lib/avm2/abc/opcodes/arithmetic/as3_add.rb +8 -0
  37. data/lib/avm2/abc/opcodes/arithmetic/as3_add_i.rb +10 -0
  38. data/lib/avm2/abc/opcodes/arithmetic/as3_declocal.rb +14 -0
  39. data/lib/avm2/abc/opcodes/arithmetic/as3_declocal_i.rb +14 -0
  40. data/lib/avm2/abc/opcodes/arithmetic/as3_decrement.rb +10 -0
  41. data/lib/avm2/abc/opcodes/arithmetic/as3_decrement_i.rb +10 -0
  42. data/lib/avm2/abc/opcodes/arithmetic/as3_divide.rb +10 -0
  43. data/lib/avm2/abc/opcodes/arithmetic/as3_equals.rb +8 -0
  44. data/lib/avm2/abc/opcodes/arithmetic/as3_greaterequals.rb +8 -0
  45. data/lib/avm2/abc/opcodes/arithmetic/as3_greaterthan.rb +8 -0
  46. data/lib/avm2/abc/opcodes/arithmetic/as3_inclocal.rb +14 -0
  47. data/lib/avm2/abc/opcodes/arithmetic/as3_inclocal_i.rb +18 -0
  48. data/lib/avm2/abc/opcodes/arithmetic/as3_increment.rb +10 -0
  49. data/lib/avm2/abc/opcodes/arithmetic/as3_increment_i.rb +10 -0
  50. data/lib/avm2/abc/opcodes/arithmetic/as3_lessequals.rb +8 -0
  51. data/lib/avm2/abc/opcodes/arithmetic/as3_lessthan.rb +8 -0
  52. data/lib/avm2/abc/opcodes/arithmetic/as3_modulo.rb +10 -0
  53. data/lib/avm2/abc/opcodes/arithmetic/as3_multiply.rb +10 -0
  54. data/lib/avm2/abc/opcodes/arithmetic/as3_multiply_i.rb +10 -0
  55. data/lib/avm2/abc/opcodes/arithmetic/as3_negate.rb +10 -0
  56. data/lib/avm2/abc/opcodes/arithmetic/as3_negate_i.rb +10 -0
  57. data/lib/avm2/abc/opcodes/arithmetic/as3_not.rb +8 -0
  58. data/lib/avm2/abc/opcodes/arithmetic/as3_strictequals.rb +8 -0
  59. data/lib/avm2/abc/opcodes/arithmetic/as3_subtract.rb +10 -0
  60. data/lib/avm2/abc/opcodes/arithmetic/as3_subtract_i.rb +10 -0
  61. data/lib/avm2/abc/opcodes/arithmetic_opcode.rb +4 -0
  62. data/lib/avm2/abc/opcodes/bitwise/as3_bitand.rb +8 -0
  63. data/lib/avm2/abc/opcodes/bitwise/as3_bitnot.rb +8 -0
  64. data/lib/avm2/abc/opcodes/bitwise/as3_bitor.rb +8 -0
  65. data/lib/avm2/abc/opcodes/bitwise/as3_bitxor.rb +8 -0
  66. data/lib/avm2/abc/opcodes/bitwise/as3_lshift.rb +8 -0
  67. data/lib/avm2/abc/opcodes/bitwise/as3_rshift.rb +8 -0
  68. data/lib/avm2/abc/opcodes/bitwise/as3_urshift.rb +8 -0
  69. data/lib/avm2/abc/opcodes/bitwise_opcode.rb +4 -0
  70. data/lib/avm2/abc/opcodes/contextual_opcode.rb +32 -0
  71. data/lib/avm2/abc/opcodes/control_transfer/as3_ifeq.rb +14 -0
  72. data/lib/avm2/abc/opcodes/control_transfer/as3_iffalse.rb +14 -0
  73. data/lib/avm2/abc/opcodes/control_transfer/as3_ifge.rb +14 -0
  74. data/lib/avm2/abc/opcodes/control_transfer/as3_ifgt.rb +14 -0
  75. data/lib/avm2/abc/opcodes/control_transfer/as3_ifle.rb +14 -0
  76. data/lib/avm2/abc/opcodes/control_transfer/as3_iflt.rb +14 -0
  77. data/lib/avm2/abc/opcodes/control_transfer/as3_ifne.rb +14 -0
  78. data/lib/avm2/abc/opcodes/control_transfer/as3_ifnge.rb +14 -0
  79. data/lib/avm2/abc/opcodes/control_transfer/as3_ifngt.rb +14 -0
  80. data/lib/avm2/abc/opcodes/control_transfer/as3_ifnle.rb +14 -0
  81. data/lib/avm2/abc/opcodes/control_transfer/as3_ifnlt.rb +14 -0
  82. data/lib/avm2/abc/opcodes/control_transfer/as3_ifstricteq.rb +14 -0
  83. data/lib/avm2/abc/opcodes/control_transfer/as3_ifstrictne.rb +14 -0
  84. data/lib/avm2/abc/opcodes/control_transfer/as3_iftrue.rb +14 -0
  85. data/lib/avm2/abc/opcodes/control_transfer/as3_jump.rb +22 -0
  86. data/lib/avm2/abc/opcodes/control_transfer/as3_lookupswitch.rb +34 -0
  87. data/lib/avm2/abc/opcodes/control_transfer_opcode.rb +37 -0
  88. data/lib/avm2/abc/opcodes/exception/as3_newcatch.rb +16 -0
  89. data/lib/avm2/abc/opcodes/exception_opcode.rb +4 -0
  90. data/lib/avm2/abc/opcodes/function_invocation/as3_call.rb +16 -0
  91. data/lib/avm2/abc/opcodes/function_invocation/as3_callproperty.rb +7 -0
  92. data/lib/avm2/abc/opcodes/function_invocation/as3_callpropvoid.rb +7 -0
  93. data/lib/avm2/abc/opcodes/function_invocation/as3_callsuper.rb +7 -0
  94. data/lib/avm2/abc/opcodes/function_invocation/as3_callsupervoid.rb +7 -0
  95. data/lib/avm2/abc/opcodes/function_invocation_opcode.rb +17 -0
  96. data/lib/avm2/abc/opcodes/function_return/as3_returnvalue.rb +8 -0
  97. data/lib/avm2/abc/opcodes/function_return/as3_returnvoid.rb +8 -0
  98. data/lib/avm2/abc/opcodes/function_return_opcode.rb +4 -0
  99. data/lib/avm2/abc/opcodes/generic/as3_astypelate.rb +8 -0
  100. data/lib/avm2/abc/opcodes/generic/as3_checkfilter.rb +8 -0
  101. data/lib/avm2/abc/opcodes/generic/as3_dup.rb +8 -0
  102. data/lib/avm2/abc/opcodes/generic/as3_dxnslate.rb +8 -0
  103. data/lib/avm2/abc/opcodes/generic/as3_escxattr.rb +8 -0
  104. data/lib/avm2/abc/opcodes/generic/as3_getglobalscope.rb +8 -0
  105. data/lib/avm2/abc/opcodes/generic/as3_getlex.rb +16 -0
  106. data/lib/avm2/abc/opcodes/generic/as3_getscopeobject.rb +16 -0
  107. data/lib/avm2/abc/opcodes/generic/as3_getslot.rb +16 -0
  108. data/lib/avm2/abc/opcodes/generic/as3_hasnext.rb +8 -0
  109. data/lib/avm2/abc/opcodes/generic/as3_hasnext2.rb +17 -0
  110. data/lib/avm2/abc/opcodes/generic/as3_in.rb +8 -0
  111. data/lib/avm2/abc/opcodes/generic/as3_instanceof.rb +8 -0
  112. data/lib/avm2/abc/opcodes/generic/as3_istypelate.rb +8 -0
  113. data/lib/avm2/abc/opcodes/generic/as3_kill.rb +16 -0
  114. data/lib/avm2/abc/opcodes/generic/as3_label.rb +8 -0
  115. data/lib/avm2/abc/opcodes/generic/as3_nextname.rb +8 -0
  116. data/lib/avm2/abc/opcodes/generic/as3_nextvalue.rb +8 -0
  117. data/lib/avm2/abc/opcodes/generic/as3_nop.rb +8 -0
  118. data/lib/avm2/abc/opcodes/generic/as3_pop.rb +8 -0
  119. data/lib/avm2/abc/opcodes/generic/as3_popscope.rb +8 -0
  120. data/lib/avm2/abc/opcodes/generic/as3_setslot.rb +16 -0
  121. data/lib/avm2/abc/opcodes/generic/as3_swap.rb +8 -0
  122. data/lib/avm2/abc/opcodes/generic/as3_throw.rb +8 -0
  123. data/lib/avm2/abc/opcodes/generic/as3_typeof.rb +8 -0
  124. data/lib/avm2/abc/opcodes/load_store/as3_getlocal.rb +15 -0
  125. data/lib/avm2/abc/opcodes/load_store/as3_getlocal_0.rb +11 -0
  126. data/lib/avm2/abc/opcodes/load_store/as3_getlocal_1.rb +11 -0
  127. data/lib/avm2/abc/opcodes/load_store/as3_getlocal_2.rb +11 -0
  128. data/lib/avm2/abc/opcodes/load_store/as3_getlocal_3.rb +11 -0
  129. data/lib/avm2/abc/opcodes/load_store/as3_setlocal.rb +15 -0
  130. data/lib/avm2/abc/opcodes/load_store/as3_setlocal_0.rb +11 -0
  131. data/lib/avm2/abc/opcodes/load_store/as3_setlocal_1.rb +11 -0
  132. data/lib/avm2/abc/opcodes/load_store/as3_setlocal_2.rb +11 -0
  133. data/lib/avm2/abc/opcodes/load_store/as3_setlocal_3.rb +11 -0
  134. data/lib/avm2/abc/opcodes/load_store_opcode.rb +18 -0
  135. data/lib/avm2/abc/opcodes/object_manipulation/as3_construct.rb +12 -0
  136. data/lib/avm2/abc/opcodes/object_manipulation/as3_constructsuper.rb +16 -0
  137. data/lib/avm2/abc/opcodes/object_manipulation/as3_newactivation.rb +8 -0
  138. data/lib/avm2/abc/opcodes/object_manipulation/as3_newarray.rb +12 -0
  139. data/lib/avm2/abc/opcodes/object_manipulation/as3_newclass.rb +12 -0
  140. data/lib/avm2/abc/opcodes/object_manipulation/as3_newfunction.rb +12 -0
  141. data/lib/avm2/abc/opcodes/object_manipulation/as3_newobject.rb +12 -0
  142. data/lib/avm2/abc/opcodes/object_manipulation_opcode.rb +4 -0
  143. data/lib/avm2/abc/opcodes/opcode.rb +127 -0
  144. data/lib/avm2/abc/opcodes/property/as3_constructprop.rb +20 -0
  145. data/lib/avm2/abc/opcodes/property/as3_deleteproperty.rb +9 -0
  146. data/lib/avm2/abc/opcodes/property/as3_findproperty.rb +9 -0
  147. data/lib/avm2/abc/opcodes/property/as3_findpropstrict.rb +9 -0
  148. data/lib/avm2/abc/opcodes/property/as3_getdescendants.rb +9 -0
  149. data/lib/avm2/abc/opcodes/property/as3_getproperty.rb +9 -0
  150. data/lib/avm2/abc/opcodes/property/as3_getsuper.rb +9 -0
  151. data/lib/avm2/abc/opcodes/property/as3_initproperty.rb +9 -0
  152. data/lib/avm2/abc/opcodes/property/as3_setproperty.rb +9 -0
  153. data/lib/avm2/abc/opcodes/property/as3_setsuper.rb +9 -0
  154. data/lib/avm2/abc/opcodes/property_opcode.rb +13 -0
  155. data/lib/avm2/abc/opcodes/push_literal/as3_pushbyte.rb +11 -0
  156. data/lib/avm2/abc/opcodes/push_literal/as3_pushdouble.rb +11 -0
  157. data/lib/avm2/abc/opcodes/push_literal/as3_pushfalse.rb +7 -0
  158. data/lib/avm2/abc/opcodes/push_literal/as3_pushint.rb +11 -0
  159. data/lib/avm2/abc/opcodes/push_literal/as3_pushnan.rb +7 -0
  160. data/lib/avm2/abc/opcodes/push_literal/as3_pushnull.rb +7 -0
  161. data/lib/avm2/abc/opcodes/push_literal/as3_pushscope.rb +8 -0
  162. data/lib/avm2/abc/opcodes/push_literal/as3_pushshort.rb +11 -0
  163. data/lib/avm2/abc/opcodes/push_literal/as3_pushstring.rb +11 -0
  164. data/lib/avm2/abc/opcodes/push_literal/as3_pushtrue.rb +7 -0
  165. data/lib/avm2/abc/opcodes/push_literal/as3_pushundefined.rb +7 -0
  166. data/lib/avm2/abc/opcodes/push_literal/as3_pushwith.rb +8 -0
  167. data/lib/avm2/abc/opcodes/push_literal_opcode.rb +18 -0
  168. data/lib/avm2/abc/opcodes/type_conversion/as3_applytype.rb +12 -0
  169. data/lib/avm2/abc/opcodes/type_conversion/as3_coerce.rb +16 -0
  170. data/lib/avm2/abc/opcodes/type_conversion/as3_coerce_a.rb +8 -0
  171. data/lib/avm2/abc/opcodes/type_conversion/as3_coerce_b.rb +10 -0
  172. data/lib/avm2/abc/opcodes/type_conversion/as3_coerce_s.rb +10 -0
  173. data/lib/avm2/abc/opcodes/type_conversion/as3_convert_d.rb +10 -0
  174. data/lib/avm2/abc/opcodes/type_conversion/as3_convert_i.rb +10 -0
  175. data/lib/avm2/abc/opcodes/type_conversion/as3_convert_o.rb +10 -0
  176. data/lib/avm2/abc/opcodes/type_conversion/as3_convert_s.rb +10 -0
  177. data/lib/avm2/abc/opcodes/type_conversion/as3_convert_u.rb +10 -0
  178. data/lib/avm2/abc/opcodes/type_conversion_opcode.rb +4 -0
  179. data/lib/avm2/abc/primitives/opcode_sequence.rb +195 -0
  180. data/lib/avm2/abc/primitives/record.rb +132 -0
  181. data/lib/avm2/binary/choice_definition.rb +21 -0
  182. data/lib/avm2/binary/record.rb +469 -0
  183. data/lib/avm2/transform.rb +6 -0
  184. data/lib/avm2/transform/ast_build.rb +206 -0
  185. data/lib/avm2/transform/ast_normalize.rb +0 -0
  186. data/lib/avm2/version.rb +3 -0
  187. data/test/exception.abc +0 -0
  188. data/test/exception.as +29 -0
  189. data/test/literal.abc +0 -0
  190. data/test/literal.as +5 -0
  191. data/test/logic.abc +0 -0
  192. data/test/logic.as +23 -0
  193. data/test/loops.abc +0 -0
  194. data/test/loops.as +30 -0
  195. data/test/number.abc +0 -0
  196. data/test/number.as +14 -0
  197. data/test/switch.abc +0 -0
  198. data/test/switch.as +38 -0
  199. data/test/ternary.abc +0 -0
  200. data/test/ternary.as +22 -0
  201. metadata +579 -0
@@ -0,0 +1,6 @@
1
+ module AVM2::Transform
2
+ AST = Furnace::AST
3
+ end
4
+
5
+ require "avm2/transform/ast_build"
6
+ require "avm2/transform/ast_normalize"
@@ -0,0 +1,206 @@
1
+ module AVM2
2
+ module Transform
3
+ class ASTBuild
4
+ CONDITIONAL_OPERATORS = [ :if_eq, :if_false, :if_true, :if_ge, :if_gt,
5
+ :if_le, :if_lt, :if_ne, :if_nge, :if_ngt,
6
+ :if_nle, :if_nlt, :if_strict_eq, :if_strict_ne, :if_true ]
7
+
8
+ CONST_OPERATORS = [ :push_byte, :push_double, :push_false, :push_int, :push_nan,
9
+ :push_short, :push_string, :push_true, :push_undefined, :push_null ]
10
+
11
+ def initialize(options)
12
+ @validate = options[:validate] || false
13
+ @verbose = options[:verbose] || false
14
+
15
+ #@verbose = true
16
+ end
17
+
18
+ def transform(code, method)
19
+ stack = []
20
+ ast = AST::Node.new(:root)
21
+
22
+ dup = nil
23
+ spurious = 0
24
+
25
+ in_shortcut = false
26
+ shortjump = []
27
+ ternary = []
28
+
29
+ consume = lambda do |count|
30
+ if count == 0
31
+ []
32
+ elsif count <= stack.size
33
+ stack.slice!(-count..-1)
34
+ else
35
+ raise "cannot consume #{count}: stack underflow with #{stack.size}"
36
+ end
37
+ end
38
+
39
+ produce = lambda do |what|
40
+ stack.push what
41
+ end
42
+
43
+ emit = lambda do |node|
44
+ if @verbose
45
+ puts "emitted:"
46
+ puts node.to_sexp(1)
47
+ end
48
+
49
+ ast.children.push node
50
+ end
51
+
52
+ extend_complex_expr = lambda do |valid_types, expected_depth=nil|
53
+ expr, current = consume.(2)
54
+
55
+ if @validate
56
+ if !valid_types.include?(expr.type)
57
+ raise "invalid complex expr: #{expr.type} not in #{valid_types}"
58
+ elsif expected_depth && expr.children.count != expected_depth
59
+ raise "invalid complex expr: depth #{expr.children.count} != #{expected_depth}"
60
+ end
61
+ end
62
+
63
+ emit.(current)
64
+ produce.(expr)
65
+ end
66
+
67
+ finalize_complex_expr = lambda do |opcode, worklist, valid_types, expected_depth=nil|
68
+ while worklist.last == opcode.offset
69
+ extend_complex_expr.(valid_types, expected_depth)
70
+ worklist.pop
71
+ end
72
+ end
73
+
74
+ expand_conditionals = lambda do
75
+ while stack.any? && CONDITIONAL_OPERATORS.include?(stack.last.type)
76
+ conditional, = consume.(1)
77
+
78
+ jump_node = AST::Node.new(:jump_if, [ true, conditional.metadata[:offset], conditional ])
79
+ emit.(jump_node)
80
+ end
81
+ end
82
+
83
+ code.each do |opcode|
84
+ if @verbose
85
+ puts "================================"
86
+ puts "stack: #{stack.inspect}"
87
+ puts "shortjump: #{shortjump.inspect} ternary: #{ternary.inspect}"
88
+ puts "opcode: #{opcode.inspect}"
89
+ end
90
+
91
+ finalize_complex_expr.(opcode, shortjump, [ :and, :or ], 1)
92
+ finalize_complex_expr.(opcode, ternary, CONDITIONAL_OPERATORS)
93
+
94
+ if dup == 1 && (opcode.is_a?(ABC::AS3CoerceB) ||
95
+ opcode.is_a?(ABC::AS3IfTrue) || opcode.is_a?(ABC::AS3IfFalse))
96
+ in_shortcut = true
97
+ dup = false
98
+ end
99
+
100
+ if in_shortcut
101
+ if opcode.is_a?(ABC::AS3IfTrue)
102
+ type = :or
103
+ elsif opcode.is_a?(ABC::AS3IfFalse)
104
+ type = :and
105
+ elsif opcode.is_a?(ABC::AS3CoerceB)
106
+ next
107
+ elsif opcode.is_a?(ABC::AS3Pop)
108
+ in_shortcut = false
109
+ next
110
+ elsif opcode.is_a?(ABC::AS3Jump) && opcode.body.jump_offset == 0
111
+ # nop
112
+ next
113
+ else
114
+ raise "invalid shortcut"
115
+ end
116
+
117
+ node = AST::Node.new(type, [], label: opcode.offset)
118
+ node.children = consume.(1)
119
+ produce.(node)
120
+
121
+ shortjump.push opcode.target_offset
122
+ elsif opcode.is_a?(ABC::AS3Swap)
123
+ first, second = stack.pop, stack.pop
124
+ stack.push first, second
125
+ elsif opcode.is_a?(ABC::AS3Dup)
126
+ node = stack.last
127
+
128
+ if CONST_OPERATORS.include? node.type
129
+ dup_node = node.dup
130
+ dup_node.metadata[:label] = opcode.offset
131
+ produce.(dup_node)
132
+ else
133
+ dup ||= 0
134
+ dup += 1
135
+ end
136
+ elsif opcode.is_a?(ABC::AS3Jump)
137
+ if opcode.body.jump_offset == 0
138
+ node = AST::Node.new(:jump_target, [], label: opcode.offset)
139
+ emit.(node)
140
+ elsif stack.any? && !CONDITIONAL_OPERATORS.include?(stack.last.type)
141
+ extend_complex_expr.(CONDITIONAL_OPERATORS)
142
+
143
+ ternary.push opcode.target_offset
144
+ else
145
+ expand_conditionals.()
146
+
147
+ node = AST::Node.new(opcode.ast_type, opcode.parameters, label: opcode.offset)
148
+ emit.(node)
149
+ end
150
+ elsif opcode.is_a?(ABC::ControlTransferOpcode)
151
+ node = AST::Node.new(opcode.ast_type, [], label: opcode.offset)
152
+ node.metadata[:offset] = opcode.target_offset
153
+ node.children = consume.(opcode.consumes)
154
+ produce.(node)
155
+ elsif opcode.is_a?(ABC::AS3Kill)
156
+ # Ignore. SSA will handle that.
157
+ else
158
+ if dup
159
+ spurious += 1
160
+
161
+ save_node = AST::Node.new(:set_spurious, [ spurious, *consume.(1) ])
162
+ emit.(save_node)
163
+
164
+ (1 + dup).times do
165
+ load_node = AST::Node.new(:get_spurious, [ spurious ])
166
+ produce.(load_node)
167
+ end
168
+
169
+ dup = false
170
+ end
171
+
172
+ node = AST::Node.new(opcode.ast_type, [], label: opcode.offset)
173
+
174
+ parameters = consume.(opcode.consumes)
175
+ if opcode.consumes_context
176
+ context = opcode.context(consume.(opcode.consumes_context))
177
+ end
178
+
179
+ node.children.concat context if context
180
+ node.children.concat opcode.parameters
181
+ node.children.concat parameters
182
+
183
+ # All opcodes which produce 2 results--that is, dup and swap--
184
+ # are already handled at the top.
185
+ if opcode.produces == 0
186
+ expand_conditionals.()
187
+ emit.(node)
188
+ elsif opcode.produces == 1
189
+ produce.(node)
190
+ end
191
+ end
192
+ end
193
+
194
+ if @validate
195
+ extracted_opcodes = []
196
+ extract = lambda do |tree|
197
+ extracted_opcodes.push tree.metadata[:label]
198
+ tree.select { |c| c.is_a? Node }.each { |c| extract.(c) }
199
+ end
200
+ end
201
+
202
+ [ ast.normalize_hierarchy!, method ]
203
+ end
204
+ end
205
+ end
206
+ end
File without changes
@@ -0,0 +1,3 @@
1
+ module AVM2
2
+ VERSION = "0.0.1"
3
+ end
Binary file
data/test/exception.as ADDED
@@ -0,0 +1,29 @@
1
+ package test {
2
+ function c() {
3
+ try {
4
+ hoge();
5
+ } finally {
6
+ piyo();
7
+ }
8
+ }
9
+ function b() {
10
+ try {
11
+ hoge();
12
+ throw 1;
13
+ fuga();
14
+ } catch(e: SecurityError) {
15
+ piyo(e);
16
+ }
17
+ }
18
+ function a() {
19
+ try {
20
+ hoge();
21
+ throw 1;
22
+ fuga();
23
+ } catch(e: SecurityError) {
24
+ piyo(e);
25
+ } catch(e: Error) {
26
+ throw e;
27
+ }
28
+ }
29
+ }
data/test/literal.abc ADDED
Binary file
data/test/literal.as ADDED
@@ -0,0 +1,5 @@
1
+ package test {
2
+ function lit() {
3
+ call(1, 1, 200, 200);
4
+ }
5
+ }
data/test/logic.abc ADDED
Binary file
data/test/logic.as ADDED
@@ -0,0 +1,23 @@
1
+ package test {
2
+ function P_a_or_b_p_and_P_c_and_d_p_or_e(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
3
+ var v:Boolean = (a || b) && (c && d) || e;
4
+ away();
5
+ return v;
6
+ }
7
+ function a_or_b(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
8
+ if(a || b) {
9
+ yes();
10
+ } else {
11
+ no();
12
+ }
13
+ }
14
+ function a_and_b_and_c(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
15
+ return a && b && c;
16
+ }
17
+ function P_a_and_b_p_and_c(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
18
+ return (a && b) && c;
19
+ }
20
+ function a_and_b(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
21
+ return a && b;
22
+ }
23
+ }
data/test/loops.abc ADDED
Binary file
data/test/loops.as ADDED
@@ -0,0 +1,30 @@
1
+ package test {
2
+ function d() {
3
+ while(true) {
4
+ pow();
5
+ if(frak()) { a(); break; b(); }
6
+ weee();
7
+ }
8
+ }
9
+ function c() {
10
+ while(true) {
11
+ pow();
12
+ if(frak()) { break; }
13
+ weee();
14
+ }
15
+ }
16
+ function b() {
17
+ weee();
18
+ for(var q:int = 1; q > 0; q++) {
19
+ frak();
20
+ }
21
+ }
22
+ function a() {
23
+ var q:int = 1;
24
+ weee();
25
+ while(q > 0) {
26
+ frak();
27
+ q++;
28
+ }
29
+ }
30
+ }
data/test/number.abc ADDED
Binary file
data/test/number.as ADDED
@@ -0,0 +1,14 @@
1
+ package test {
2
+ function b() {
3
+ var a:int = 0;
4
+ var b:int;
5
+ b = (a += 1);
6
+ return (b -= (a += 1));
7
+ }
8
+ function a() {
9
+ var a:int = 0;
10
+ var b:int = ++a;
11
+ var c:int = a++;
12
+ return a;
13
+ }
14
+ }
data/test/switch.abc ADDED
Binary file
data/test/switch.as ADDED
@@ -0,0 +1,38 @@
1
+ package test {
2
+ function b(q:int):Boolean {
3
+
4
+ for(;;) {
5
+ switch(prop) {
6
+ case 0x10:
7
+ case 0x20:
8
+ fuga();
9
+ break;
10
+
11
+ case 0x30:
12
+ piyo();
13
+ break;
14
+
15
+ default:
16
+ baz();
17
+ break;
18
+ }
19
+ }
20
+ return false;
21
+ }
22
+ function a(q:int):Boolean {
23
+ switch(q) {
24
+ case 0x10:
25
+ hoge();
26
+ case 0x20:
27
+ fuga();
28
+ break;
29
+ case 0x30:
30
+ piyo();
31
+ break;
32
+ default:
33
+ baz();
34
+ break;
35
+ }
36
+ return false;
37
+ }
38
+ }
data/test/ternary.abc ADDED
Binary file
data/test/ternary.as ADDED
@@ -0,0 +1,22 @@
1
+ package test {
2
+ function hardcore(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
3
+ if(((a && b) ? (c || d) && e : b) && (a || b)) {
4
+ return pow();
5
+ } else {
6
+ weeee();
7
+ }
8
+ duh();
9
+ }
10
+ function q(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
11
+ return ((a ? b : c) ? (b ? c : d) : (c ? d : e));
12
+ }
13
+ function a_I_b_E_c_I_d_E_e(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
14
+ return a ? b : (c ? d : e);
15
+ }
16
+ function a_I_b_I_c_E_d_E_e(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
17
+ return a ? (b ? c : d) : e;
18
+ }
19
+ function a_I_b_E_c(a: Boolean, b:Boolean, c:Boolean, d:Boolean, e:Boolean) : Boolean {
20
+ return (1 > 2) ? b : c;
21
+ }
22
+ }
metadata ADDED
@@ -0,0 +1,579 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: furnace-avm2
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Peter Zotov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: furnace
16
+ version_requirements: &2056 !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: !binary |-
21
+ MA==
22
+ none: false
23
+ requirement: *2056
24
+ prerelease: false
25
+ type: :runtime
26
+ - !ruby/object:Gem::Dependency
27
+ name: trollop
28
+ version_requirements: &2074 !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: !binary |-
33
+ MA==
34
+ none: false
35
+ requirement: *2074
36
+ prerelease: false
37
+ type: :runtime
38
+ description: furnace-avm2 allows one to load, modify and write backFlash ActionScript3 bytecode. It can also decompile it.
39
+ email:
40
+ - whitequark@whitequark.org
41
+ executables:
42
+ - furnace-avm2
43
+ - furnace-avm2-benchmark
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - !binary |-
48
+ LmdpdGlnbm9yZQ==
49
+ - !binary |-
50
+ R2VtZmlsZQ==
51
+ - !binary |-
52
+ R2VtZmlsZS5sb2Nr
53
+ - !binary |-
54
+ YWJjZHVtcC5hYmM=
55
+ - !binary |-
56
+ YmluL2Z1cm5hY2UtYXZtMg==
57
+ - !binary |-
58
+ YmluL2Z1cm5hY2UtYXZtMi1iZW5jaG1hcms=
59
+ - !binary |-
60
+ ZGFya29yYml0LmFiYw==
61
+ - !binary |-
62
+ ZnVybmFjZS1hdm0yLmdlbXNwZWM=
63
+ - !binary |-
64
+ bGliL2F2bTIucmI=
65
+ - !binary |-
66
+ bGliL2F2bTIvYWJjLnJi
67
+ - !binary |-
68
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL2NvbnN0X3Bvb2xfaW5mby5yYg==
69
+ - !binary |-
70
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL2V4Y2VwdGlvbl9pbmZvLnJi
71
+ - !binary |-
72
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL2ZpbGUucmI=
73
+ - !binary |-
74
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL2luc3RhbmNlX2luZm8ucmI=
75
+ - !binary |-
76
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL2tsYXNzX2luZm8ucmI=
77
+ - !binary |-
78
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL21ldGFkYXRhX2luZm8ucmI=
79
+ - !binary |-
80
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL21ldGhvZF9ib2R5X2luZm8ucmI=
81
+ - !binary |-
82
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL21ldGhvZF9pbmZvLnJi
83
+ - !binary |-
84
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL211bHRpbmFtZV9pbmZvLnJi
85
+ - !binary |-
86
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL211bHRpbmFtZV9raW5kX2dlbmVyaWNu
87
+ YW1lLnJi
88
+ - !binary |-
89
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL211bHRpbmFtZV9raW5kX211bHRpbmFt
90
+ ZS5yYg==
91
+ - !binary |-
92
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL211bHRpbmFtZV9raW5kX211bHRpbmFt
93
+ ZWwucmI=
94
+ - !binary |-
95
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL211bHRpbmFtZV9raW5kX3FuYW1lLnJi
96
+ - !binary |-
97
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL211bHRpbmFtZV9raW5kX3J0cW5hbWUu
98
+ cmI=
99
+ - !binary |-
100
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL211bHRpbmFtZV9raW5kX3J0cW5hbWVs
101
+ LnJi
102
+ - !binary |-
103
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL25hbWVzcGFjZV9pbmZvLnJi
104
+ - !binary |-
105
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL25zX3NldF9pbmZvLnJi
106
+ - !binary |-
107
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL29wdGlvbl9kZXRhaWwucmI=
108
+ - !binary |-
109
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL29wdGlvbl9pbmZvLnJi
110
+ - !binary |-
111
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL3NjcmlwdF9pbmZvLnJi
112
+ - !binary |-
113
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL3RyYWl0X2NsYXNzLnJi
114
+ - !binary |-
115
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL3RyYWl0X2Z1bmN0aW9uLnJi
116
+ - !binary |-
117
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL3RyYWl0X2luZm8ucmI=
118
+ - !binary |-
119
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL3RyYWl0X21ldGhvZC5yYg==
120
+ - !binary |-
121
+ bGliL2F2bTIvYWJjL21ldGFkYXRhL3RyYWl0X3Nsb3QucmI=
122
+ - !binary |-
123
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfYWRkLnJi
124
+ - !binary |-
125
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfYWRkX2kucmI=
126
+ - !binary |-
127
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZGVjbG9jYWwu
128
+ cmI=
129
+ - !binary |-
130
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZGVjbG9jYWxf
131
+ aS5yYg==
132
+ - !binary |-
133
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZGVjcmVtZW50
134
+ LnJi
135
+ - !binary |-
136
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZGVjcmVtZW50
137
+ X2kucmI=
138
+ - !binary |-
139
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZGl2aWRlLnJi
140
+ - !binary |-
141
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZXF1YWxzLnJi
142
+ - !binary |-
143
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZ3JlYXRlcmVx
144
+ dWFscy5yYg==
145
+ - !binary |-
146
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfZ3JlYXRlcnRo
147
+ YW4ucmI=
148
+ - !binary |-
149
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfaW5jbG9jYWwu
150
+ cmI=
151
+ - !binary |-
152
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfaW5jbG9jYWxf
153
+ aS5yYg==
154
+ - !binary |-
155
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfaW5jcmVtZW50
156
+ LnJi
157
+ - !binary |-
158
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfaW5jcmVtZW50
159
+ X2kucmI=
160
+ - !binary |-
161
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbGVzc2VxdWFs
162
+ cy5yYg==
163
+ - !binary |-
164
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbGVzc3RoYW4u
165
+ cmI=
166
+ - !binary |-
167
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbW9kdWxvLnJi
168
+ - !binary |-
169
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbXVsdGlwbHku
170
+ cmI=
171
+ - !binary |-
172
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbXVsdGlwbHlf
173
+ aS5yYg==
174
+ - !binary |-
175
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbmVnYXRlLnJi
176
+ - !binary |-
177
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbmVnYXRlX2ku
178
+ cmI=
179
+ - !binary |-
180
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfbm90LnJi
181
+ - !binary |-
182
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfc3RyaWN0ZXF1
183
+ YWxzLnJi
184
+ - !binary |-
185
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfc3VidHJhY3Qu
186
+ cmI=
187
+ - !binary |-
188
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpYy9hczNfc3VidHJhY3Rf
189
+ aS5yYg==
190
+ - !binary |-
191
+ bGliL2F2bTIvYWJjL29wY29kZXMvYXJpdGhtZXRpY19vcGNvZGUucmI=
192
+ - !binary |-
193
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZS9hczNfYml0YW5kLnJi
194
+ - !binary |-
195
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZS9hczNfYml0bm90LnJi
196
+ - !binary |-
197
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZS9hczNfYml0b3IucmI=
198
+ - !binary |-
199
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZS9hczNfYml0eG9yLnJi
200
+ - !binary |-
201
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZS9hczNfbHNoaWZ0LnJi
202
+ - !binary |-
203
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZS9hczNfcnNoaWZ0LnJi
204
+ - !binary |-
205
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZS9hczNfdXJzaGlmdC5yYg==
206
+ - !binary |-
207
+ bGliL2F2bTIvYWJjL29wY29kZXMvYml0d2lzZV9vcGNvZGUucmI=
208
+ - !binary |-
209
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udGV4dHVhbF9vcGNvZGUucmI=
210
+ - !binary |-
211
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZl
212
+ cS5yYg==
213
+ - !binary |-
214
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZm
215
+ YWxzZS5yYg==
216
+ - !binary |-
217
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZn
218
+ ZS5yYg==
219
+ - !binary |-
220
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZn
221
+ dC5yYg==
222
+ - !binary |-
223
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZs
224
+ ZS5yYg==
225
+ - !binary |-
226
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZs
227
+ dC5yYg==
228
+ - !binary |-
229
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZu
230
+ ZS5yYg==
231
+ - !binary |-
232
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZu
233
+ Z2UucmI=
234
+ - !binary |-
235
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZu
236
+ Z3QucmI=
237
+ - !binary |-
238
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZu
239
+ bGUucmI=
240
+ - !binary |-
241
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZu
242
+ bHQucmI=
243
+ - !binary |-
244
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZz
245
+ dHJpY3RlcS5yYg==
246
+ - !binary |-
247
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZz
248
+ dHJpY3RuZS5yYg==
249
+ - !binary |-
250
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfaWZ0
251
+ cnVlLnJi
252
+ - !binary |-
253
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfanVt
254
+ cC5yYg==
255
+ - !binary |-
256
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlci9hczNfbG9v
257
+ a3Vwc3dpdGNoLnJi
258
+ - !binary |-
259
+ bGliL2F2bTIvYWJjL29wY29kZXMvY29udHJvbF90cmFuc2Zlcl9vcGNvZGUu
260
+ cmI=
261
+ - !binary |-
262
+ bGliL2F2bTIvYWJjL29wY29kZXMvZXhjZXB0aW9uL2FzM19uZXdjYXRjaC5y
263
+ Yg==
264
+ - !binary |-
265
+ bGliL2F2bTIvYWJjL29wY29kZXMvZXhjZXB0aW9uX29wY29kZS5yYg==
266
+ - !binary |-
267
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25faW52b2NhdGlvbi9hczNf
268
+ Y2FsbC5yYg==
269
+ - !binary |-
270
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25faW52b2NhdGlvbi9hczNf
271
+ Y2FsbHByb3BlcnR5LnJi
272
+ - !binary |-
273
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25faW52b2NhdGlvbi9hczNf
274
+ Y2FsbHByb3B2b2lkLnJi
275
+ - !binary |-
276
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25faW52b2NhdGlvbi9hczNf
277
+ Y2FsbHN1cGVyLnJi
278
+ - !binary |-
279
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25faW52b2NhdGlvbi9hczNf
280
+ Y2FsbHN1cGVydm9pZC5yYg==
281
+ - !binary |-
282
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25faW52b2NhdGlvbl9vcGNv
283
+ ZGUucmI=
284
+ - !binary |-
285
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25fcmV0dXJuL2FzM19yZXR1
286
+ cm52YWx1ZS5yYg==
287
+ - !binary |-
288
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25fcmV0dXJuL2FzM19yZXR1
289
+ cm52b2lkLnJi
290
+ - !binary |-
291
+ bGliL2F2bTIvYWJjL29wY29kZXMvZnVuY3Rpb25fcmV0dXJuX29wY29kZS5y
292
+ Yg==
293
+ - !binary |-
294
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfYXN0eXBlbGF0ZS5y
295
+ Yg==
296
+ - !binary |-
297
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfY2hlY2tmaWx0ZXIu
298
+ cmI=
299
+ - !binary |-
300
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfZHVwLnJi
301
+ - !binary |-
302
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfZHhuc2xhdGUucmI=
303
+ - !binary |-
304
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfZXNjeGF0dHIucmI=
305
+ - !binary |-
306
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfZ2V0Z2xvYmFsc2Nv
307
+ cGUucmI=
308
+ - !binary |-
309
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfZ2V0bGV4LnJi
310
+ - !binary |-
311
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfZ2V0c2NvcGVvYmpl
312
+ Y3QucmI=
313
+ - !binary |-
314
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfZ2V0c2xvdC5yYg==
315
+ - !binary |-
316
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfaGFzbmV4dC5yYg==
317
+ - !binary |-
318
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfaGFzbmV4dDIucmI=
319
+ - !binary |-
320
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfaW4ucmI=
321
+ - !binary |-
322
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfaW5zdGFuY2VvZi5y
323
+ Yg==
324
+ - !binary |-
325
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfaXN0eXBlbGF0ZS5y
326
+ Yg==
327
+ - !binary |-
328
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfa2lsbC5yYg==
329
+ - !binary |-
330
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfbGFiZWwucmI=
331
+ - !binary |-
332
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfbmV4dG5hbWUucmI=
333
+ - !binary |-
334
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfbmV4dHZhbHVlLnJi
335
+ - !binary |-
336
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfbm9wLnJi
337
+ - !binary |-
338
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfcG9wLnJi
339
+ - !binary |-
340
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfcG9wc2NvcGUucmI=
341
+ - !binary |-
342
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfc2V0c2xvdC5yYg==
343
+ - !binary |-
344
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfc3dhcC5yYg==
345
+ - !binary |-
346
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfdGhyb3cucmI=
347
+ - !binary |-
348
+ bGliL2F2bTIvYWJjL29wY29kZXMvZ2VuZXJpYy9hczNfdHlwZW9mLnJi
349
+ - !binary |-
350
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfZ2V0bG9jYWwu
351
+ cmI=
352
+ - !binary |-
353
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfZ2V0bG9jYWxf
354
+ MC5yYg==
355
+ - !binary |-
356
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfZ2V0bG9jYWxf
357
+ MS5yYg==
358
+ - !binary |-
359
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfZ2V0bG9jYWxf
360
+ Mi5yYg==
361
+ - !binary |-
362
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfZ2V0bG9jYWxf
363
+ My5yYg==
364
+ - !binary |-
365
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfc2V0bG9jYWwu
366
+ cmI=
367
+ - !binary |-
368
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfc2V0bG9jYWxf
369
+ MC5yYg==
370
+ - !binary |-
371
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfc2V0bG9jYWxf
372
+ MS5yYg==
373
+ - !binary |-
374
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfc2V0bG9jYWxf
375
+ Mi5yYg==
376
+ - !binary |-
377
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZS9hczNfc2V0bG9jYWxf
378
+ My5yYg==
379
+ - !binary |-
380
+ bGliL2F2bTIvYWJjL29wY29kZXMvbG9hZF9zdG9yZV9vcGNvZGUucmI=
381
+ - !binary |-
382
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbi9hczNf
383
+ Y29uc3RydWN0LnJi
384
+ - !binary |-
385
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbi9hczNf
386
+ Y29uc3RydWN0c3VwZXIucmI=
387
+ - !binary |-
388
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbi9hczNf
389
+ bmV3YWN0aXZhdGlvbi5yYg==
390
+ - !binary |-
391
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbi9hczNf
392
+ bmV3YXJyYXkucmI=
393
+ - !binary |-
394
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbi9hczNf
395
+ bmV3Y2xhc3MucmI=
396
+ - !binary |-
397
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbi9hczNf
398
+ bmV3ZnVuY3Rpb24ucmI=
399
+ - !binary |-
400
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbi9hczNf
401
+ bmV3b2JqZWN0LnJi
402
+ - !binary |-
403
+ bGliL2F2bTIvYWJjL29wY29kZXMvb2JqZWN0X21hbmlwdWxhdGlvbl9vcGNv
404
+ ZGUucmI=
405
+ - !binary |-
406
+ bGliL2F2bTIvYWJjL29wY29kZXMvb3Bjb2RlLnJi
407
+ - !binary |-
408
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2NvbnN0cnVjdHBy
409
+ b3AucmI=
410
+ - !binary |-
411
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2RlbGV0ZXByb3Bl
412
+ cnR5LnJi
413
+ - !binary |-
414
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2ZpbmRwcm9wZXJ0
415
+ eS5yYg==
416
+ - !binary |-
417
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2ZpbmRwcm9wc3Ry
418
+ aWN0LnJi
419
+ - !binary |-
420
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2dldGRlc2NlbmRh
421
+ bnRzLnJi
422
+ - !binary |-
423
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2dldHByb3BlcnR5
424
+ LnJi
425
+ - !binary |-
426
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2dldHN1cGVyLnJi
427
+ - !binary |-
428
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX2luaXRwcm9wZXJ0
429
+ eS5yYg==
430
+ - !binary |-
431
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX3NldHByb3BlcnR5
432
+ LnJi
433
+ - !binary |-
434
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHkvYXMzX3NldHN1cGVyLnJi
435
+ - !binary |-
436
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHJvcGVydHlfb3Bjb2RlLnJi
437
+ - !binary |-
438
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNoYnl0
439
+ ZS5yYg==
440
+ - !binary |-
441
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNoZG91
442
+ YmxlLnJi
443
+ - !binary |-
444
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNoZmFs
445
+ c2UucmI=
446
+ - !binary |-
447
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNoaW50
448
+ LnJi
449
+ - !binary |-
450
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNobmFu
451
+ LnJi
452
+ - !binary |-
453
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNobnVs
454
+ bC5yYg==
455
+ - !binary |-
456
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNoc2Nv
457
+ cGUucmI=
458
+ - !binary |-
459
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNoc2hv
460
+ cnQucmI=
461
+ - !binary |-
462
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNoc3Ry
463
+ aW5nLnJi
464
+ - !binary |-
465
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNodHJ1
466
+ ZS5yYg==
467
+ - !binary |-
468
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNodW5k
469
+ ZWZpbmVkLnJi
470
+ - !binary |-
471
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsL2FzM19wdXNod2l0
472
+ aC5yYg==
473
+ - !binary |-
474
+ bGliL2F2bTIvYWJjL29wY29kZXMvcHVzaF9saXRlcmFsX29wY29kZS5yYg==
475
+ - !binary |-
476
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19hcHBs
477
+ eXR5cGUucmI=
478
+ - !binary |-
479
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb2Vy
480
+ Y2UucmI=
481
+ - !binary |-
482
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb2Vy
483
+ Y2VfYS5yYg==
484
+ - !binary |-
485
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb2Vy
486
+ Y2VfYi5yYg==
487
+ - !binary |-
488
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb2Vy
489
+ Y2Vfcy5yYg==
490
+ - !binary |-
491
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb252
492
+ ZXJ0X2QucmI=
493
+ - !binary |-
494
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb252
495
+ ZXJ0X2kucmI=
496
+ - !binary |-
497
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb252
498
+ ZXJ0X28ucmI=
499
+ - !binary |-
500
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb252
501
+ ZXJ0X3MucmI=
502
+ - !binary |-
503
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uL2FzM19jb252
504
+ ZXJ0X3UucmI=
505
+ - !binary |-
506
+ bGliL2F2bTIvYWJjL29wY29kZXMvdHlwZV9jb252ZXJzaW9uX29wY29kZS5y
507
+ Yg==
508
+ - !binary |-
509
+ bGliL2F2bTIvYWJjL3ByaW1pdGl2ZXMvb3Bjb2RlX3NlcXVlbmNlLnJi
510
+ - !binary |-
511
+ bGliL2F2bTIvYWJjL3ByaW1pdGl2ZXMvcmVjb3JkLnJi
512
+ - !binary |-
513
+ bGliL2F2bTIvYmluYXJ5L2Nob2ljZV9kZWZpbml0aW9uLnJi
514
+ - !binary |-
515
+ bGliL2F2bTIvYmluYXJ5L3JlY29yZC5yYg==
516
+ - !binary |-
517
+ bGliL2F2bTIvdHJhbnNmb3JtLnJi
518
+ - !binary |-
519
+ bGliL2F2bTIvdHJhbnNmb3JtL2FzdF9idWlsZC5yYg==
520
+ - !binary |-
521
+ bGliL2F2bTIvdHJhbnNmb3JtL2FzdF9ub3JtYWxpemUucmI=
522
+ - !binary |-
523
+ bGliL2F2bTIvdmVyc2lvbi5yYg==
524
+ - !binary |-
525
+ dGVzdC9leGNlcHRpb24uYWJj
526
+ - !binary |-
527
+ dGVzdC9leGNlcHRpb24uYXM=
528
+ - !binary |-
529
+ dGVzdC9saXRlcmFsLmFiYw==
530
+ - !binary |-
531
+ dGVzdC9saXRlcmFsLmFz
532
+ - !binary |-
533
+ dGVzdC9sb2dpYy5hYmM=
534
+ - !binary |-
535
+ dGVzdC9sb2dpYy5hcw==
536
+ - !binary |-
537
+ dGVzdC9sb29wcy5hYmM=
538
+ - !binary |-
539
+ dGVzdC9sb29wcy5hcw==
540
+ - !binary |-
541
+ dGVzdC9udW1iZXIuYWJj
542
+ - !binary |-
543
+ dGVzdC9udW1iZXIuYXM=
544
+ - !binary |-
545
+ dGVzdC9zd2l0Y2guYWJj
546
+ - !binary |-
547
+ dGVzdC9zd2l0Y2guYXM=
548
+ - !binary |-
549
+ dGVzdC90ZXJuYXJ5LmFiYw==
550
+ - !binary |-
551
+ dGVzdC90ZXJuYXJ5LmFz
552
+ homepage: http://github.com/whitequark/furnace-avm2
553
+ licenses: []
554
+ post_install_message:
555
+ rdoc_options: []
556
+ require_paths:
557
+ - lib
558
+ required_ruby_version: !ruby/object:Gem::Requirement
559
+ requirements:
560
+ - - ! '>='
561
+ - !ruby/object:Gem::Version
562
+ version: !binary |-
563
+ MA==
564
+ none: false
565
+ required_rubygems_version: !ruby/object:Gem::Requirement
566
+ requirements:
567
+ - - ! '>='
568
+ - !ruby/object:Gem::Version
569
+ version: !binary |-
570
+ MA==
571
+ none: false
572
+ requirements: []
573
+ rubyforge_project:
574
+ rubygems_version: 1.8.13
575
+ signing_key:
576
+ specification_version: 3
577
+ summary: AVM2 analysis framework based on Furnace
578
+ test_files: []
579
+ ...