swf-toolkit 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -2
  3. package/README.tr.md +126 -0
  4. package/dist/abc/abc-file.d.ts +168 -0
  5. package/dist/abc/abc-file.js +656 -0
  6. package/dist/abc/analysis.d.ts +36 -0
  7. package/dist/abc/analysis.js +213 -0
  8. package/dist/abc/code.d.ts +59 -0
  9. package/dist/abc/code.js +379 -0
  10. package/dist/abc/constants.d.ts +80 -0
  11. package/dist/abc/constants.js +93 -0
  12. package/dist/abc/interner.d.ts +46 -0
  13. package/dist/abc/interner.js +168 -0
  14. package/dist/abc/model.d.ts +40 -0
  15. package/dist/abc/model.js +146 -0
  16. package/dist/abc/opcodes.d.ts +39 -0
  17. package/dist/abc/opcodes.js +196 -0
  18. package/dist/abc/pcode/assembler.d.ts +42 -0
  19. package/dist/abc/pcode/assembler.js +635 -0
  20. package/dist/abc/pcode/disassembler.d.ts +17 -0
  21. package/dist/abc/pcode/disassembler.js +147 -0
  22. package/dist/abc/pcode/format.d.ts +23 -0
  23. package/dist/abc/pcode/format.js +131 -0
  24. package/dist/abc/pcode/lexer.d.ts +34 -0
  25. package/dist/abc/pcode/lexer.js +183 -0
  26. package/dist/assets/assets.d.ts +26 -0
  27. package/dist/assets/assets.js +151 -0
  28. package/dist/assets/images.d.ts +31 -0
  29. package/dist/assets/images.js +238 -0
  30. package/dist/assets/png.d.ts +12 -0
  31. package/dist/assets/png.js +196 -0
  32. package/dist/assets/sounds.d.ts +37 -0
  33. package/dist/assets/sounds.js +236 -0
  34. package/dist/avm1/avm1.d.ts +55 -0
  35. package/dist/avm1/avm1.js +642 -0
  36. package/dist/avm1/project.d.ts +16 -0
  37. package/dist/avm1/project.js +81 -0
  38. package/dist/cjs/abc/abc-file.d.ts +168 -0
  39. package/dist/cjs/abc/abc-file.js +663 -0
  40. package/dist/cjs/abc/analysis.d.ts +36 -0
  41. package/dist/cjs/abc/analysis.js +221 -0
  42. package/dist/cjs/abc/code.d.ts +59 -0
  43. package/dist/cjs/abc/code.js +387 -0
  44. package/dist/cjs/abc/constants.d.ts +80 -0
  45. package/dist/cjs/abc/constants.js +97 -0
  46. package/dist/cjs/abc/interner.d.ts +46 -0
  47. package/dist/cjs/abc/interner.js +172 -0
  48. package/dist/cjs/abc/model.d.ts +40 -0
  49. package/dist/cjs/abc/model.js +155 -0
  50. package/dist/cjs/abc/opcodes.d.ts +39 -0
  51. package/dist/cjs/abc/opcodes.js +201 -0
  52. package/dist/cjs/abc/pcode/assembler.d.ts +42 -0
  53. package/dist/cjs/abc/pcode/assembler.js +640 -0
  54. package/dist/cjs/abc/pcode/disassembler.d.ts +17 -0
  55. package/dist/cjs/abc/pcode/disassembler.js +152 -0
  56. package/dist/cjs/abc/pcode/format.d.ts +23 -0
  57. package/dist/cjs/abc/pcode/format.js +141 -0
  58. package/dist/cjs/abc/pcode/lexer.d.ts +34 -0
  59. package/dist/cjs/abc/pcode/lexer.js +188 -0
  60. package/dist/cjs/assets/assets.d.ts +26 -0
  61. package/dist/cjs/assets/assets.js +159 -0
  62. package/dist/cjs/assets/images.d.ts +31 -0
  63. package/dist/cjs/assets/images.js +246 -0
  64. package/dist/cjs/assets/png.d.ts +12 -0
  65. package/dist/cjs/assets/png.js +202 -0
  66. package/dist/cjs/assets/sounds.d.ts +37 -0
  67. package/dist/cjs/assets/sounds.js +246 -0
  68. package/dist/cjs/avm1/avm1.d.ts +55 -0
  69. package/dist/cjs/avm1/avm1.js +649 -0
  70. package/dist/cjs/avm1/project.d.ts +16 -0
  71. package/dist/cjs/avm1/project.js +88 -0
  72. package/dist/cjs/compiler/ast.d.ts +285 -0
  73. package/dist/cjs/compiler/ast.js +3 -0
  74. package/dist/cjs/compiler/class-compiler.d.ts +34 -0
  75. package/dist/cjs/compiler/class-compiler.js +440 -0
  76. package/dist/cjs/compiler/codegen.d.ts +144 -0
  77. package/dist/cjs/compiler/codegen.js +1589 -0
  78. package/dist/cjs/compiler/lexer.d.ts +27 -0
  79. package/dist/cjs/compiler/lexer.js +254 -0
  80. package/dist/cjs/compiler/parser.d.ts +58 -0
  81. package/dist/cjs/compiler/parser.js +989 -0
  82. package/dist/cjs/compiler/program.d.ts +29 -0
  83. package/dist/cjs/compiler/program.js +36 -0
  84. package/dist/cjs/compiler/scope.d.ts +22 -0
  85. package/dist/cjs/compiler/scope.js +242 -0
  86. package/dist/cjs/compression/lzma.d.ts +37 -0
  87. package/dist/cjs/compression/lzma.js +575 -0
  88. package/dist/cjs/compression/swf-container.d.ts +19 -0
  89. package/dist/cjs/compression/swf-container.js +92 -0
  90. package/dist/cjs/decompiler/ast.d.ts +228 -0
  91. package/dist/cjs/decompiler/ast.js +455 -0
  92. package/dist/cjs/decompiler/cfg.d.ts +40 -0
  93. package/dist/cjs/decompiler/cfg.js +236 -0
  94. package/dist/cjs/decompiler/class-printer.d.ts +9 -0
  95. package/dist/cjs/decompiler/class-printer.js +173 -0
  96. package/dist/cjs/decompiler/method.d.ts +41 -0
  97. package/dist/cjs/decompiler/method.js +436 -0
  98. package/dist/cjs/decompiler/simulate.d.ts +55 -0
  99. package/dist/cjs/decompiler/simulate.js +591 -0
  100. package/dist/cjs/decompiler/structure.d.ts +48 -0
  101. package/dist/cjs/decompiler/structure.js +764 -0
  102. package/dist/cjs/errors.d.ts +11 -0
  103. package/dist/cjs/errors.js +25 -0
  104. package/dist/cjs/index.d.ts +41 -0
  105. package/dist/cjs/index.js +82 -0
  106. package/dist/cjs/io/reader.d.ts +48 -0
  107. package/dist/cjs/io/reader.js +180 -0
  108. package/dist/cjs/io/writer.d.ts +37 -0
  109. package/dist/cjs/io/writer.js +175 -0
  110. package/dist/cjs/package.json +1 -0
  111. package/dist/cjs/project/pcode-project.d.ts +32 -0
  112. package/dist/cjs/project/pcode-project.js +210 -0
  113. package/dist/cjs/project/source-export.d.ts +12 -0
  114. package/dist/cjs/project/source-export.js +51 -0
  115. package/dist/cjs/project/source-import.d.ts +13 -0
  116. package/dist/cjs/project/source-import.js +73 -0
  117. package/dist/cjs/swf/swf.d.ts +63 -0
  118. package/dist/cjs/swf/swf.js +147 -0
  119. package/dist/cjs/swf/tag-codes.d.ts +77 -0
  120. package/dist/cjs/swf/tag-codes.js +109 -0
  121. package/dist/cjs/swf/tags.d.ts +118 -0
  122. package/dist/cjs/swf/tags.js +330 -0
  123. package/dist/cli.d.ts +2 -0
  124. package/dist/cli.js +296 -0
  125. package/dist/compiler/ast.d.ts +285 -0
  126. package/dist/compiler/ast.js +2 -0
  127. package/dist/compiler/class-compiler.d.ts +34 -0
  128. package/dist/compiler/class-compiler.js +437 -0
  129. package/dist/compiler/codegen.d.ts +144 -0
  130. package/dist/compiler/codegen.js +1585 -0
  131. package/dist/compiler/lexer.d.ts +27 -0
  132. package/dist/compiler/lexer.js +249 -0
  133. package/dist/compiler/parser.d.ts +58 -0
  134. package/dist/compiler/parser.js +984 -0
  135. package/dist/compiler/program.d.ts +29 -0
  136. package/dist/compiler/program.js +32 -0
  137. package/dist/compiler/scope.d.ts +22 -0
  138. package/dist/compiler/scope.js +238 -0
  139. package/dist/compression/lzma.d.ts +37 -0
  140. package/dist/compression/lzma.js +569 -0
  141. package/dist/compression/swf-container.d.ts +19 -0
  142. package/dist/compression/swf-container.js +87 -0
  143. package/dist/decompiler/ast.d.ts +228 -0
  144. package/dist/decompiler/ast.js +441 -0
  145. package/dist/decompiler/cfg.d.ts +40 -0
  146. package/dist/decompiler/cfg.js +231 -0
  147. package/dist/decompiler/class-printer.d.ts +9 -0
  148. package/dist/decompiler/class-printer.js +170 -0
  149. package/dist/decompiler/method.d.ts +41 -0
  150. package/dist/decompiler/method.js +427 -0
  151. package/dist/decompiler/simulate.d.ts +55 -0
  152. package/dist/decompiler/simulate.js +586 -0
  153. package/dist/decompiler/structure.d.ts +48 -0
  154. package/dist/decompiler/structure.js +760 -0
  155. package/dist/errors.d.ts +11 -0
  156. package/dist/errors.js +20 -0
  157. package/dist/index.d.ts +41 -0
  158. package/dist/index.js +49 -0
  159. package/dist/io/reader.d.ts +48 -0
  160. package/dist/io/reader.js +176 -0
  161. package/dist/io/writer.d.ts +37 -0
  162. package/dist/io/writer.js +169 -0
  163. package/dist/project/pcode-project.d.ts +32 -0
  164. package/dist/project/pcode-project.js +203 -0
  165. package/dist/project/source-export.d.ts +12 -0
  166. package/dist/project/source-export.js +47 -0
  167. package/dist/project/source-import.d.ts +13 -0
  168. package/dist/project/source-import.js +70 -0
  169. package/dist/swf/swf.d.ts +63 -0
  170. package/dist/swf/swf.js +143 -0
  171. package/dist/swf/tag-codes.d.ts +77 -0
  172. package/dist/swf/tag-codes.js +105 -0
  173. package/dist/swf/tags.d.ts +118 -0
  174. package/dist/swf/tags.js +316 -0
  175. package/package.json +71 -4
@@ -0,0 +1,196 @@
1
+ /**
2
+ * AVM2 instruction set table (AVM2 overview, chapter 5).
3
+ */
4
+ const table = [];
5
+ const byName = new Map();
6
+ function op(code, name, operands, pop, push, extra = {}) {
7
+ const info = {
8
+ code,
9
+ name,
10
+ operands,
11
+ pop,
12
+ push,
13
+ popArgc: extra.popArgc ?? 0,
14
+ popMn: extra.popMn ?? false,
15
+ scope: extra.scope ?? 0,
16
+ flow: extra.flow,
17
+ };
18
+ table[code] = info;
19
+ byName.set(name, info);
20
+ }
21
+ const MN = { popMn: true };
22
+ op(0x01, 'bkpt', [], 0, 0);
23
+ op(0x02, 'nop', [], 0, 0);
24
+ op(0x03, 'throw', [], 1, 0, { flow: 'throw' });
25
+ op(0x04, 'getsuper', ['multiname'], 1, 1, MN);
26
+ op(0x05, 'setsuper', ['multiname'], 2, 0, MN);
27
+ op(0x06, 'dxns', ['string'], 0, 0);
28
+ op(0x07, 'dxnslate', [], 1, 0);
29
+ op(0x08, 'kill', ['reg'], 0, 0);
30
+ op(0x09, 'label', [], 0, 0);
31
+ op(0x0c, 'ifnlt', ['branch'], 2, 0, { flow: 'cond' });
32
+ op(0x0d, 'ifnle', ['branch'], 2, 0, { flow: 'cond' });
33
+ op(0x0e, 'ifngt', ['branch'], 2, 0, { flow: 'cond' });
34
+ op(0x0f, 'ifnge', ['branch'], 2, 0, { flow: 'cond' });
35
+ op(0x10, 'jump', ['branch'], 0, 0, { flow: 'jump' });
36
+ op(0x11, 'iftrue', ['branch'], 1, 0, { flow: 'cond' });
37
+ op(0x12, 'iffalse', ['branch'], 1, 0, { flow: 'cond' });
38
+ op(0x13, 'ifeq', ['branch'], 2, 0, { flow: 'cond' });
39
+ op(0x14, 'ifne', ['branch'], 2, 0, { flow: 'cond' });
40
+ op(0x15, 'iflt', ['branch'], 2, 0, { flow: 'cond' });
41
+ op(0x16, 'ifle', ['branch'], 2, 0, { flow: 'cond' });
42
+ op(0x17, 'ifgt', ['branch'], 2, 0, { flow: 'cond' });
43
+ op(0x18, 'ifge', ['branch'], 2, 0, { flow: 'cond' });
44
+ op(0x19, 'ifstricteq', ['branch'], 2, 0, { flow: 'cond' });
45
+ op(0x1a, 'ifstrictne', ['branch'], 2, 0, { flow: 'cond' });
46
+ op(0x1b, 'lookupswitch', ['switch'], 1, 0, { flow: 'switch' });
47
+ op(0x1c, 'pushwith', [], 1, 0, { scope: 1 });
48
+ op(0x1d, 'popscope', [], 0, 0, { scope: -1 });
49
+ op(0x1e, 'nextname', [], 2, 1);
50
+ op(0x1f, 'hasnext', [], 2, 1);
51
+ op(0x20, 'pushnull', [], 0, 1);
52
+ op(0x21, 'pushundefined', [], 0, 1);
53
+ op(0x23, 'nextvalue', [], 2, 1);
54
+ op(0x24, 'pushbyte', ['s8'], 0, 1);
55
+ op(0x25, 'pushshort', ['short'], 0, 1);
56
+ op(0x26, 'pushtrue', [], 0, 1);
57
+ op(0x27, 'pushfalse', [], 0, 1);
58
+ op(0x28, 'pushnan', [], 0, 1);
59
+ op(0x29, 'pop', [], 1, 0);
60
+ op(0x2a, 'dup', [], 1, 2);
61
+ op(0x2b, 'swap', [], 2, 2);
62
+ op(0x2c, 'pushstring', ['string'], 0, 1);
63
+ op(0x2d, 'pushint', ['int'], 0, 1);
64
+ op(0x2e, 'pushuint', ['uint'], 0, 1);
65
+ op(0x2f, 'pushdouble', ['double'], 0, 1);
66
+ op(0x30, 'pushscope', [], 1, 0, { scope: 1 });
67
+ op(0x31, 'pushnamespace', ['namespace'], 0, 1);
68
+ op(0x32, 'hasnext2', ['reg', 'reg'], 0, 1);
69
+ // Alchemy / domain memory opcodes
70
+ op(0x35, 'li8', [], 1, 1);
71
+ op(0x36, 'li16', [], 1, 1);
72
+ op(0x37, 'li32', [], 1, 1);
73
+ op(0x38, 'lf32', [], 1, 1);
74
+ op(0x39, 'lf64', [], 1, 1);
75
+ op(0x3a, 'si8', [], 2, 0);
76
+ op(0x3b, 'si16', [], 2, 0);
77
+ op(0x3c, 'si32', [], 2, 0);
78
+ op(0x3d, 'sf32', [], 2, 0);
79
+ op(0x3e, 'sf64', [], 2, 0);
80
+ op(0x40, 'newfunction', ['method'], 0, 1);
81
+ op(0x41, 'call', ['argc'], 2, 1, { popArgc: 1 });
82
+ op(0x42, 'construct', ['argc'], 1, 1, { popArgc: 1 });
83
+ op(0x43, 'callmethod', ['u30', 'argc'], 1, 1, { popArgc: 1 });
84
+ op(0x44, 'callstatic', ['method', 'argc'], 1, 1, { popArgc: 1 });
85
+ op(0x45, 'callsuper', ['multiname', 'argc'], 1, 1, { popArgc: 1, popMn: true });
86
+ op(0x46, 'callproperty', ['multiname', 'argc'], 1, 1, { popArgc: 1, popMn: true });
87
+ op(0x47, 'returnvoid', [], 0, 0, { flow: 'return' });
88
+ op(0x48, 'returnvalue', [], 1, 0, { flow: 'return' });
89
+ op(0x49, 'constructsuper', ['argc'], 1, 0, { popArgc: 1 });
90
+ op(0x4a, 'constructprop', ['multiname', 'argc'], 1, 1, { popArgc: 1, popMn: true });
91
+ op(0x4c, 'callproplex', ['multiname', 'argc'], 1, 1, { popArgc: 1, popMn: true });
92
+ op(0x4e, 'callsupervoid', ['multiname', 'argc'], 1, 0, { popArgc: 1, popMn: true });
93
+ op(0x4f, 'callpropvoid', ['multiname', 'argc'], 1, 0, { popArgc: 1, popMn: true });
94
+ op(0x50, 'sxi1', [], 1, 1);
95
+ op(0x51, 'sxi8', [], 1, 1);
96
+ op(0x52, 'sxi16', [], 1, 1);
97
+ op(0x53, 'applytype', ['argc'], 1, 1, { popArgc: 1 });
98
+ op(0x55, 'newobject', ['argc'], 0, 1, { popArgc: 2 });
99
+ op(0x56, 'newarray', ['argc'], 0, 1, { popArgc: 1 });
100
+ op(0x57, 'newactivation', [], 0, 1);
101
+ op(0x58, 'newclass', ['class'], 1, 1);
102
+ op(0x59, 'getdescendants', ['multiname'], 1, 1, MN);
103
+ op(0x5a, 'newcatch', ['exception'], 0, 1);
104
+ op(0x5d, 'findpropstrict', ['multiname'], 0, 1, MN);
105
+ op(0x5e, 'findproperty', ['multiname'], 0, 1, MN);
106
+ op(0x5f, 'finddef', ['multiname'], 0, 1);
107
+ op(0x60, 'getlex', ['multiname'], 0, 1);
108
+ op(0x61, 'setproperty', ['multiname'], 2, 0, MN);
109
+ op(0x62, 'getlocal', ['reg'], 0, 1);
110
+ op(0x63, 'setlocal', ['reg'], 1, 0);
111
+ op(0x64, 'getglobalscope', [], 0, 1);
112
+ op(0x65, 'getscopeobject', ['u8'], 0, 1);
113
+ op(0x66, 'getproperty', ['multiname'], 1, 1, MN);
114
+ op(0x67, 'getouterscope', ['u30'], 0, 1);
115
+ op(0x68, 'initproperty', ['multiname'], 2, 0, MN);
116
+ op(0x6a, 'deleteproperty', ['multiname'], 1, 1, MN);
117
+ op(0x6c, 'getslot', ['u30'], 1, 1);
118
+ op(0x6d, 'setslot', ['u30'], 2, 0);
119
+ op(0x6e, 'getglobalslot', ['u30'], 0, 1);
120
+ op(0x6f, 'setglobalslot', ['u30'], 1, 0);
121
+ op(0x70, 'convert_s', [], 1, 1);
122
+ op(0x71, 'esc_xelem', [], 1, 1);
123
+ op(0x72, 'esc_xattr', [], 1, 1);
124
+ op(0x73, 'convert_i', [], 1, 1);
125
+ op(0x74, 'convert_u', [], 1, 1);
126
+ op(0x75, 'convert_d', [], 1, 1);
127
+ op(0x76, 'convert_b', [], 1, 1);
128
+ op(0x77, 'convert_o', [], 1, 1);
129
+ op(0x78, 'checkfilter', [], 1, 1);
130
+ op(0x80, 'coerce', ['multiname'], 1, 1);
131
+ op(0x81, 'coerce_b', [], 1, 1);
132
+ op(0x82, 'coerce_a', [], 1, 1);
133
+ op(0x83, 'coerce_i', [], 1, 1);
134
+ op(0x84, 'coerce_d', [], 1, 1);
135
+ op(0x85, 'coerce_s', [], 1, 1);
136
+ op(0x86, 'astype', ['multiname'], 1, 1);
137
+ op(0x87, 'astypelate', [], 2, 1);
138
+ op(0x88, 'coerce_u', [], 1, 1);
139
+ op(0x89, 'coerce_o', [], 1, 1);
140
+ op(0x90, 'negate', [], 1, 1);
141
+ op(0x91, 'increment', [], 1, 1);
142
+ op(0x92, 'inclocal', ['reg'], 0, 0);
143
+ op(0x93, 'decrement', [], 1, 1);
144
+ op(0x94, 'declocal', ['reg'], 0, 0);
145
+ op(0x95, 'typeof', [], 1, 1);
146
+ op(0x96, 'not', [], 1, 1);
147
+ op(0x97, 'bitnot', [], 1, 1);
148
+ op(0xa0, 'add', [], 2, 1);
149
+ op(0xa1, 'subtract', [], 2, 1);
150
+ op(0xa2, 'multiply', [], 2, 1);
151
+ op(0xa3, 'divide', [], 2, 1);
152
+ op(0xa4, 'modulo', [], 2, 1);
153
+ op(0xa5, 'lshift', [], 2, 1);
154
+ op(0xa6, 'rshift', [], 2, 1);
155
+ op(0xa7, 'urshift', [], 2, 1);
156
+ op(0xa8, 'bitand', [], 2, 1);
157
+ op(0xa9, 'bitor', [], 2, 1);
158
+ op(0xaa, 'bitxor', [], 2, 1);
159
+ op(0xab, 'equals', [], 2, 1);
160
+ op(0xac, 'strictequals', [], 2, 1);
161
+ op(0xad, 'lessthan', [], 2, 1);
162
+ op(0xae, 'lessequals', [], 2, 1);
163
+ op(0xaf, 'greaterthan', [], 2, 1);
164
+ op(0xb0, 'greaterequals', [], 2, 1);
165
+ op(0xb1, 'instanceof', [], 2, 1);
166
+ op(0xb2, 'istype', ['multiname'], 1, 1);
167
+ op(0xb3, 'istypelate', [], 2, 1);
168
+ op(0xb4, 'in', [], 2, 1);
169
+ op(0xc0, 'increment_i', [], 1, 1);
170
+ op(0xc1, 'decrement_i', [], 1, 1);
171
+ op(0xc2, 'inclocal_i', ['reg'], 0, 0);
172
+ op(0xc3, 'declocal_i', ['reg'], 0, 0);
173
+ op(0xc4, 'negate_i', [], 1, 1);
174
+ op(0xc5, 'add_i', [], 2, 1);
175
+ op(0xc6, 'subtract_i', [], 2, 1);
176
+ op(0xc7, 'multiply_i', [], 2, 1);
177
+ op(0xd0, 'getlocal0', [], 0, 1);
178
+ op(0xd1, 'getlocal1', [], 0, 1);
179
+ op(0xd2, 'getlocal2', [], 0, 1);
180
+ op(0xd3, 'getlocal3', [], 0, 1);
181
+ op(0xd4, 'setlocal0', [], 1, 0);
182
+ op(0xd5, 'setlocal1', [], 1, 0);
183
+ op(0xd6, 'setlocal2', [], 1, 0);
184
+ op(0xd7, 'setlocal3', [], 1, 0);
185
+ op(0xef, 'debug', ['u8', 'string', 'u8', 'u30'], 0, 0);
186
+ op(0xf0, 'debugline', ['u30'], 0, 0);
187
+ op(0xf1, 'debugfile', ['string'], 0, 0);
188
+ op(0xf2, 'bkptline', ['u30'], 0, 0);
189
+ op(0xf3, 'timestamp', [], 0, 0);
190
+ export function opInfo(code) {
191
+ return table[code];
192
+ }
193
+ export function opByName(name) {
194
+ return byName.get(name);
195
+ }
196
+ export const Op = Object.fromEntries([...byName].map(([name, info]) => [name, info.code]));
@@ -0,0 +1,42 @@
1
+ import type { AbcFile } from '../abc-file.js';
2
+ import { type CodeItem } from '../code.js';
3
+ import { Interner } from '../interner.js';
4
+ export type LimitsMode =
5
+ /** Use the declared values but raise them if the code needs more (default). */
6
+ 'grow'
7
+ /** Always use computed values. */
8
+ | 'auto'
9
+ /** Use declared values verbatim. */
10
+ | 'keep';
11
+ export interface AssembleOptions {
12
+ /** How maxstack / localcount / maxscopedepth are determined. Default 'grow'. */
13
+ limits?: LimitsMode;
14
+ /** File name used in error messages. */
15
+ source?: string;
16
+ /** Reuse an interner across calls (faster when assembling many methods into the same ABC). */
17
+ interner?: Interner;
18
+ }
19
+ export interface AssembledMethod {
20
+ /** Method index that was replaced or created. */
21
+ methodIndex: number;
22
+ /** True when the method was newly appended (`method new`). */
23
+ created: boolean;
24
+ }
25
+ /**
26
+ * Assembles one or more `method ... end` blocks into `abc`, replacing the
27
+ * referenced methods (or appending them for `method new`).
28
+ */
29
+ export declare function assembleMethods(abc: AbcFile, text: string, options?: AssembleOptions): AssembledMethod[];
30
+ /** Assembles a single method block. */
31
+ export declare function assembleMethod(abc: AbcFile, text: string, options?: AssembleOptions): AssembledMethod;
32
+ /**
33
+ * Parses P-code instructions (the contents of a `code` section) into code
34
+ * items, interning constants into `abc`. Labels are returned by name.
35
+ */
36
+ export declare function assembleCode(abc: AbcFile, text: string, options?: {
37
+ source?: string;
38
+ interner?: Interner;
39
+ }): {
40
+ items: CodeItem[];
41
+ labels: Map<string, number>;
42
+ };