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