@markw65/monkeyc-optimizer 1.1.34 → 1.1.36

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 (80) hide show
  1. package/CHANGELOG.md +964 -0
  2. package/README.md +9 -1
  3. package/build/api.cjs +31 -31
  4. package/build/{chunk-QBCVUVLD.cjs → chunk-FD2NCZK4.cjs} +1112 -2695
  5. package/build/optimizer.cjs +17 -17
  6. package/build/sdk-util.cjs +14 -14
  7. package/build/src/api.d.ts +1 -1
  8. package/build/src/type-flow/types.d.ts +1 -1
  9. package/build/worker-thread.cjs +3 -3
  10. package/package.json +3 -2
  11. package/build/src/readprg/switch.d.ts +0 -5
  12. package/build/src/src/api.d.ts +0 -51
  13. package/build/src/src/ast.d.ts +0 -59
  14. package/build/src/src/build.d.ts +0 -7
  15. package/build/src/src/cftinfo.d.ts +0 -32
  16. package/build/src/src/control-flow.d.ts +0 -22
  17. package/build/src/src/data-flow.d.ts +0 -107
  18. package/build/src/src/driver.d.ts +0 -2
  19. package/build/src/src/function-info.d.ts +0 -14
  20. package/build/src/src/inliner.d.ts +0 -13
  21. package/build/src/src/jungles.d.ts +0 -66
  22. package/build/src/src/launch.d.ts +0 -5
  23. package/build/src/src/logger.d.ts +0 -6
  24. package/build/src/src/manifest.d.ts +0 -11
  25. package/build/src/src/mc-rewrite.d.ts +0 -13
  26. package/build/src/src/negative-fixups.d.ts +0 -1
  27. package/build/src/src/optimizer-types.d.ts +0 -249
  28. package/build/src/src/optimizer.d.ts +0 -100
  29. package/build/src/src/pragma-checker.d.ts +0 -3
  30. package/build/src/src/pre.d.ts +0 -2
  31. package/build/src/src/projects.d.ts +0 -26
  32. package/build/src/src/readprg/array-init.d.ts +0 -3
  33. package/build/src/src/readprg/bytecode.d.ts +0 -72
  34. package/build/src/src/readprg/cflow.d.ts +0 -17
  35. package/build/src/src/readprg/data.d.ts +0 -4
  36. package/build/src/src/readprg/dce.d.ts +0 -6
  37. package/build/src/src/readprg/emit.d.ts +0 -23
  38. package/build/src/src/readprg/exceptions.d.ts +0 -10
  39. package/build/src/src/readprg/header.d.ts +0 -15
  40. package/build/src/src/readprg/interp.d.ts +0 -21
  41. package/build/src/src/readprg/linenum.d.ts +0 -29
  42. package/build/src/src/readprg/locals.d.ts +0 -3
  43. package/build/src/src/readprg/opcodes.d.ts +0 -279
  44. package/build/src/src/readprg/optimize.d.ts +0 -3
  45. package/build/src/src/readprg/pre.d.ts +0 -2
  46. package/build/src/src/readprg/sharing.d.ts +0 -2
  47. package/build/src/src/readprg/signer.d.ts +0 -8
  48. package/build/src/src/readprg/symbols.d.ts +0 -19
  49. package/build/src/src/readprg.d.ts +0 -25
  50. package/build/src/src/resources.d.ts +0 -12
  51. package/build/src/src/sdk-util.d.ts +0 -28
  52. package/build/src/src/type-flow/could-be.d.ts +0 -5
  53. package/build/src/src/type-flow/dead-store.d.ts +0 -18
  54. package/build/src/src/type-flow/interp-binary.d.ts +0 -4
  55. package/build/src/src/type-flow/interp-call.d.ts +0 -16
  56. package/build/src/src/type-flow/interp.d.ts +0 -33
  57. package/build/src/src/type-flow/intersection-type.d.ts +0 -4
  58. package/build/src/src/type-flow/minimize-locals.d.ts +0 -4
  59. package/build/src/src/type-flow/minimize-modules.d.ts +0 -3
  60. package/build/src/src/type-flow/optimize.d.ts +0 -7
  61. package/build/src/src/type-flow/sub-type.d.ts +0 -2
  62. package/build/src/src/type-flow/type-flow-util.d.ts +0 -27
  63. package/build/src/src/type-flow/types.d.ts +0 -204
  64. package/build/src/src/type-flow/union-type.d.ts +0 -4
  65. package/build/src/src/type-flow.d.ts +0 -18
  66. package/build/src/src/unused-exprs.d.ts +0 -3
  67. package/build/src/src/util.d.ts +0 -33
  68. package/build/src/src/variable-renamer.d.ts +0 -4
  69. package/build/src/src/visitor.d.ts +0 -5
  70. package/build/src/src/worker-pool.d.ts +0 -4
  71. package/build/src/src/worker-task.d.ts +0 -88
  72. package/build/src/src/worker-thread.d.ts +0 -1
  73. package/build/src/src/xml-util.d.ts +0 -172
  74. package/build/src/test/mocha/bytecode.spec.d.ts +0 -1
  75. package/build/src/test/mocha/coudbe.spec.d.ts +0 -2
  76. package/build/src/test/mocha/intersection.spec.d.ts +0 -2
  77. package/build/src/test/mocha/root.spec.d.ts +0 -1
  78. package/build/src/test/mocha/subtype.spec.d.ts +0 -2
  79. package/build/src/test/mocha/test-utils.d.ts +0 -6
  80. package/build/src/test/mocha/types.spec.d.ts +0 -1
@@ -1,279 +0,0 @@
1
- import { LineNumber } from "./linenum";
2
- export declare enum Opcodes {
3
- nop = 0,
4
- incsp = 1,
5
- popv = 2,
6
- addv = 3,
7
- subv = 4,
8
- mulv = 5,
9
- divv = 6,
10
- andv = 7,
11
- orv = 8,
12
- modv = 9,
13
- shlv = 10,
14
- shrv = 11,
15
- xorv = 12,
16
- getv = 13,
17
- putv = 14,
18
- invokem = 15,
19
- agetv = 16,
20
- aputv = 17,
21
- lgetv = 18,
22
- lputv = 19,
23
- newa = 20,
24
- newc = 21,
25
- return = 22,
26
- ret = 23,
27
- news = 24,
28
- goto = 25,
29
- eq = 26,
30
- lt = 27,
31
- lte = 28,
32
- gt = 29,
33
- gte = 30,
34
- ne = 31,
35
- isnull = 32,
36
- isa = 33,
37
- canhazplz = 34,
38
- jsr = 35,
39
- ts = 36,
40
- ipush = 37,
41
- fpush = 38,
42
- spush = 39,
43
- bt = 40,
44
- bf = 41,
45
- frpush = 42,
46
- bpush = 43,
47
- npush = 44,
48
- invv = 45,
49
- dup = 46,
50
- newd = 47,
51
- getm = 48,
52
- lpush = 49,
53
- dpush = 50,
54
- throw = 51,
55
- cpush = 52,
56
- argc = 53,
57
- newba = 54
58
- }
59
- interface BaseOpcode {
60
- op: Opcodes;
61
- offset: number;
62
- size: number;
63
- lineNum?: LineNumber;
64
- arg?: unknown;
65
- }
66
- export interface Incsp extends BaseOpcode {
67
- op: Opcodes.incsp;
68
- arg: number;
69
- }
70
- export interface Argless extends BaseOpcode {
71
- arg?: never;
72
- }
73
- export interface ByteArg extends BaseOpcode {
74
- arg: number;
75
- }
76
- export interface ShortArg extends BaseOpcode {
77
- arg: number;
78
- }
79
- export interface WordArg extends BaseOpcode {
80
- arg: number;
81
- }
82
- export interface FloatArg extends BaseOpcode {
83
- arg: number;
84
- }
85
- export interface LongArg extends BaseOpcode {
86
- arg: bigint;
87
- }
88
- export interface DoubleArg extends BaseOpcode {
89
- arg: number;
90
- }
91
- export interface Nop extends Argless {
92
- op: Opcodes.nop;
93
- }
94
- export interface Popv extends Argless {
95
- op: Opcodes.popv;
96
- }
97
- export interface Addv extends Argless {
98
- op: Opcodes.addv;
99
- }
100
- export interface Subv extends Argless {
101
- op: Opcodes.subv;
102
- }
103
- export interface Mulv extends Argless {
104
- op: Opcodes.mulv;
105
- }
106
- export interface Divv extends Argless {
107
- op: Opcodes.divv;
108
- }
109
- export interface Andv extends Argless {
110
- op: Opcodes.andv;
111
- }
112
- export interface Orv extends Argless {
113
- op: Opcodes.orv;
114
- }
115
- export interface Modv extends Argless {
116
- op: Opcodes.modv;
117
- }
118
- export interface Shlv extends ByteArg {
119
- op: Opcodes.shlv;
120
- }
121
- export interface Shrv extends ByteArg {
122
- op: Opcodes.shrv;
123
- }
124
- export interface Xorv extends Argless {
125
- op: Opcodes.xorv;
126
- }
127
- export interface Getv extends Argless {
128
- op: Opcodes.getv;
129
- }
130
- export interface Putv extends Argless {
131
- op: Opcodes.putv;
132
- }
133
- export interface Invokem extends ByteArg {
134
- op: Opcodes.invokem;
135
- }
136
- export interface Agetv extends Argless {
137
- op: Opcodes.agetv;
138
- }
139
- export interface Aputv extends Argless {
140
- op: Opcodes.aputv;
141
- }
142
- export type LocalRange = {
143
- name: string;
144
- id: number;
145
- isParam?: true | undefined;
146
- };
147
- export interface LocalInst extends ByteArg {
148
- range?: LocalRange;
149
- }
150
- export interface Lgetv extends LocalInst {
151
- op: Opcodes.lgetv;
152
- }
153
- export interface Lputv extends LocalInst {
154
- op: Opcodes.lputv;
155
- }
156
- export interface Newa extends Argless {
157
- op: Opcodes.newa;
158
- }
159
- export interface Newc extends Argless {
160
- op: Opcodes.newc;
161
- }
162
- export interface Return extends Argless {
163
- op: Opcodes.return;
164
- }
165
- export interface Ret extends Argless {
166
- op: Opcodes.ret;
167
- }
168
- export interface News extends WordArg {
169
- op: Opcodes.news;
170
- }
171
- export interface Goto extends ShortArg {
172
- op: Opcodes.goto;
173
- }
174
- export interface Bt extends ShortArg {
175
- op: Opcodes.bt;
176
- }
177
- export interface Bf extends ShortArg {
178
- op: Opcodes.bf;
179
- }
180
- export interface Jsr extends ShortArg {
181
- op: Opcodes.jsr;
182
- }
183
- export interface Eq extends Argless {
184
- op: Opcodes.eq;
185
- }
186
- export interface Lt extends Argless {
187
- op: Opcodes.lt;
188
- }
189
- export interface Lte extends Argless {
190
- op: Opcodes.lte;
191
- }
192
- export interface Gt extends Argless {
193
- op: Opcodes.gt;
194
- }
195
- export interface Gte extends Argless {
196
- op: Opcodes.gte;
197
- }
198
- export interface Ne extends Argless {
199
- op: Opcodes.ne;
200
- }
201
- export interface Isnull extends Argless {
202
- op: Opcodes.isnull;
203
- }
204
- export interface Isa extends Argless {
205
- op: Opcodes.isa;
206
- }
207
- export interface Canhazplz extends Argless {
208
- op: Opcodes.canhazplz;
209
- }
210
- export interface Ts extends Argless {
211
- op: Opcodes.ts;
212
- }
213
- export interface Ipush extends WordArg {
214
- op: Opcodes.ipush;
215
- }
216
- export interface Fpush extends FloatArg {
217
- op: Opcodes.fpush;
218
- }
219
- export interface Spush extends WordArg {
220
- op: Opcodes.spush;
221
- }
222
- export interface Frpush extends Argless {
223
- op: Opcodes.frpush;
224
- }
225
- export interface Bpush extends ByteArg {
226
- op: Opcodes.bpush;
227
- }
228
- export interface Npush extends Argless {
229
- op: Opcodes.npush;
230
- }
231
- export interface Invv extends Argless {
232
- op: Opcodes.invv;
233
- }
234
- export interface Dup extends ByteArg {
235
- op: Opcodes.dup;
236
- }
237
- export interface Newd extends Argless {
238
- op: Opcodes.newd;
239
- }
240
- export interface Getm extends Argless {
241
- op: Opcodes.getm;
242
- }
243
- export interface Lpush extends LongArg {
244
- op: Opcodes.lpush;
245
- }
246
- export interface Dpush extends DoubleArg {
247
- op: Opcodes.dpush;
248
- }
249
- export interface Throw extends Argless {
250
- op: Opcodes.throw;
251
- }
252
- export interface Cpush extends WordArg {
253
- op: Opcodes.cpush;
254
- }
255
- export interface Newba extends Argless {
256
- op: Opcodes.newba;
257
- }
258
- export interface Argc extends ByteArg {
259
- op: Opcodes.argc;
260
- }
261
- export type Bytecode = Nop | Incsp | Popv | Addv | Subv | Mulv | Divv | Andv | Orv | Modv | Shlv | Shrv | Xorv | Getv | Putv | Invokem | Agetv | Aputv | Lgetv | Lputv | Newa | Newc | Return | Ret | News | Goto | Eq | Lt | Lte | Gt | Gte | Ne | Isnull | Isa | Canhazplz | Jsr | Ts | Ipush | Fpush | Spush | Bt | Bf | Frpush | Bpush | Npush | Invv | Dup | Newd | Getm | Lpush | Dpush | Throw | Cpush | Argc | Newba;
262
- export declare function parseCode(view: DataView, lineTable: Map<number, LineNumber>): Bytecode[];
263
- export declare function opcodeSize(op: Opcodes): 1 | 2 | 3 | 5 | 9;
264
- export declare function emitBytecode(bytecode: Bytecode, view: DataView, offset: number, linktable: Map<number, number>): number;
265
- export declare function getOpInfo(bytecode: Bytecode): {
266
- pop: number;
267
- push: number;
268
- };
269
- export declare const enum Effects {
270
- None = 0,
271
- Local = 1,
272
- Global = 2,
273
- ArrayLike = 4,
274
- Call = 8
275
- }
276
- export declare function getOpEffects(bytecode: Bytecode): number;
277
- export declare function isBoolOp(op: Opcodes): boolean;
278
- export declare function isCondBranch(op: Opcodes): boolean;
279
- export {};
@@ -1,3 +0,0 @@
1
- import { Context, FuncEntry } from "./bytecode";
2
- export declare function optimizeFunc(func: FuncEntry, context: Context): void;
3
- export declare function cleanCfg(func: FuncEntry, context: Context): void;
@@ -1,2 +0,0 @@
1
- import { Context, FuncEntry } from "./bytecode";
2
- export declare function sizeBasedPRE(func: FuncEntry, context: Context): true | undefined;
@@ -1,2 +0,0 @@
1
- import { Context, FuncEntry } from "./bytecode";
2
- export declare function blockSharing(func: FuncEntry, context: Context): boolean;
@@ -1,8 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import * as crypto from "node:crypto";
4
- import { Context } from "./bytecode";
5
- export declare function getPrgSignature(context: Context): Buffer | undefined;
6
- export declare function getDevKey(file: string): Promise<crypto.KeyObject>;
7
- export declare function signatureFromContext(context: Context): Buffer | null;
8
- export declare function signView(key: crypto.KeyObject, view: DataView): Buffer;
@@ -1,19 +0,0 @@
1
- /// <reference types="node" />
2
- import { xmlUtil } from "../sdk-util";
3
- export declare class SymbolTable {
4
- symbolToLabelMap: Map<number, number>;
5
- symbols: Map<number, {
6
- str: string;
7
- label: string;
8
- }>;
9
- methods: Map<number, {
10
- name: string;
11
- id: number | null;
12
- argc: number | null;
13
- }>;
14
- decoder: import("util").TextDecoder;
15
- parseSymbolTable(view: DataView): number;
16
- parse(view: DataView): void;
17
- parseXml(debugXml: xmlUtil.Document): void;
18
- parseSymbol(view: DataView, offset: number, current: number): number;
19
- }
@@ -1,25 +0,0 @@
1
- /// <reference types="node" />
2
- import * as crypto from "node:crypto";
3
- import { BuildConfig } from "./optimizer-types";
4
- import { SectionInfo } from "./readprg/bytecode";
5
- export declare function readPrg(path: string): Promise<{
6
- [k: string]: number;
7
- }>;
8
- export declare function readPrgFromFile(prg: string): Promise<{
9
- view: DataView;
10
- sections: Record<number, SectionInfo>;
11
- }>;
12
- export declare function readPrgWithOffsets(view: DataView): {
13
- view: DataView;
14
- sections: Record<number, SectionInfo>;
15
- };
16
- export declare function optimizeProgram(filepath: string, devKey?: string | undefined, output?: string, config?: BuildConfig): Promise<unknown>;
17
- export declare function optimizePrgAndDebug(prgName: string, prgBuffer: ArrayBuffer, prgOffset: number, prgLength: number, xmlName: string, xmlBuffer: ArrayBuffer, xmlOffset: number, xmlLength: number, key: crypto.KeyObject, config: BuildConfig | undefined): Promise<{
18
- sigBuffer: ArrayBufferLike | undefined;
19
- sigOffset: number | undefined;
20
- sigLength: number | undefined;
21
- prgBuffer: ArrayBufferLike;
22
- prgOffset: number;
23
- prgLength: number;
24
- debugXml: string;
25
- }>;
@@ -1,12 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { JungleResourceMap } from "./jungles";
3
- import { ProgramState } from "./optimizer-types";
4
- import { xmlUtil } from "./sdk-util";
5
- type Visit = (e: xmlUtil.Element, module: string | null, parent: xmlUtil.Element | null) => void;
6
- type Visitor = {
7
- visit?: Visit;
8
- error?: (node: xmlUtil.Element, parent: string | null) => void;
9
- } & xmlUtil.Visitor;
10
- export declare function visit_resources(elements: xmlUtil.Content[], parent: xmlUtil.Element | null, v: Visitor | Visit): void;
11
- export declare function add_resources_to_ast(state: ProgramState | undefined, ast: mctree.Program, resources: Record<string, JungleResourceMap>, manifestXML?: xmlUtil.Document): void;
12
- export {};
@@ -1,28 +0,0 @@
1
- export { readPrg, optimizeProgram, readPrgWithOffsets } from "./readprg";
2
- export { SectionKinds } from "./readprg/bytecode";
3
- export * as xmlUtil from "./xml-util";
4
- export declare const isWin: boolean;
5
- export declare const appSupport: string;
6
- export declare const connectiq: string;
7
- export declare function getSdkPath(): Promise<string>;
8
- export type DeviceInfo = {
9
- [key: string]: {
10
- appTypes: {
11
- memoryLimit: number;
12
- type: string;
13
- }[];
14
- deviceFamily: string;
15
- displayName: string;
16
- languages: Record<string, true>;
17
- };
18
- };
19
- export declare function getDeviceInfo(): Promise<DeviceInfo>;
20
- export declare function getLanguages(): Promise<{
21
- id: string;
22
- name: string;
23
- }[]>;
24
- export declare function getFunctionDocumentation(): Promise<{
25
- name: string;
26
- parent: string;
27
- doc: string;
28
- }[] | null>;
@@ -1,5 +0,0 @@
1
- import { ExactOrUnion } from "./types";
2
- export declare function couldBeHelper(a: ExactOrUnion, b: ExactOrUnion, shallow: boolean): boolean;
3
- export declare function couldBe(a: ExactOrUnion, b: ExactOrUnion): boolean;
4
- export declare function couldBeWeak(a: ExactOrUnion, b: ExactOrUnion): boolean;
5
- export declare function couldBeShallow(a: ExactOrUnion, b: ExactOrUnion): boolean;
@@ -1,18 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { NodeEquivMap } from "../type-flow";
3
- import { FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
4
- import { TypeFlowBlock, TypeStateKey } from "./type-flow-util";
5
- export type CopyPropStores = Map<mctree.Node, {
6
- ref: mctree.Node;
7
- ant: boolean;
8
- }>;
9
- export declare function findDeadStores(func: FunctionStateNode, graph: TypeFlowBlock, nodeEquivs: NodeEquivMap | null, findCopyPropCandidates: boolean, logThisRun: boolean): {
10
- deadStores: Set<mctree.Node>;
11
- locals: Set<TypeStateKey>;
12
- localConflicts: Map<TypeStateKey, Set<TypeStateKey>> | null;
13
- copyPropStores: CopyPropStores;
14
- };
15
- export declare function eliminateDeadStores(state: ProgramStateAnalysis, func: FunctionStateNode, graph: TypeFlowBlock, logThisRun: boolean): {
16
- changes: boolean;
17
- copyPropStores: CopyPropStores;
18
- };
@@ -1,4 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { ExactOrUnion } from "./types";
3
- export declare function evaluateBinaryTypes(op: mctree.BinaryOperator | "instanceof", left: ExactOrUnion, right: ExactOrUnion): ExactOrUnion;
4
- export declare function evaluateLogicalTypes(op: mctree.LogicalOperator, left: ExactOrUnion, right: ExactOrUnion): ExactOrUnion;
@@ -1,16 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
3
- import { InterpStackElem, InterpState } from "./interp";
4
- import { ExactOrUnion } from "./types";
5
- export declare function evaluateCall(istate: InterpState, node: mctree.CallExpression, callee: ExactOrUnion, args: ExactOrUnion[]): InterpStackElem;
6
- export declare function checkCallArgs(istate: InterpState, node: mctree.CallExpression, callees: FunctionStateNode | FunctionStateNode[], args: ExactOrUnion[]): InterpStackElem;
7
- type SysCallHelperResult = {
8
- calleeObj?: ExactOrUnion;
9
- returnType?: ExactOrUnion;
10
- argTypes?: ExactOrUnion[];
11
- effectFree?: true;
12
- argEffects?: true;
13
- };
14
- type SysCallHelper = (state: ProgramStateAnalysis, func: FunctionStateNode, calleeObj: ExactOrUnion, getArgs: () => Array<ExactOrUnion>) => SysCallHelperResult;
15
- export declare function sysCallInfo(state: ProgramStateAnalysis, func: FunctionStateNode): SysCallHelper | null;
16
- export {};
@@ -1,33 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { DiagnosticType, FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
3
- import { ExactOrUnion, ObjectType } from "./types";
4
- export type TypeMap = Map<mctree.Node, ExactOrUnion>;
5
- export type InterpStackElem = {
6
- value: ExactOrUnion;
7
- embeddedEffects: boolean;
8
- node: mctree.Expression | mctree.TypeSpecList | mctree.InstanceOfCase;
9
- };
10
- export type InterpState = {
11
- state: ProgramStateAnalysis;
12
- stack: InterpStackElem[];
13
- typeMap?: TypeMap;
14
- localLvals?: Set<mctree.Node>;
15
- func?: FunctionStateNode;
16
- pre?: (node: mctree.Node) => mctree.Node | false | null | void;
17
- post?: (node: mctree.Node) => mctree.Node | false | null | void;
18
- typeChecker?: (a: ExactOrUnion, b: ExactOrUnion) => boolean;
19
- checkTypes?: DiagnosticType;
20
- };
21
- export declare function popIstate(istate: InterpState, node: mctree.Node): InterpStackElem;
22
- export declare function tryPop(istate: InterpState, node: InterpStackElem["node"]): InterpStackElem;
23
- export declare function evaluateExpr(state: ProgramStateAnalysis, expr: mctree.Expression, typeMap?: TypeMap): InterpStackElem;
24
- export declare function preEvaluate(istate: InterpState, node: mctree.Node): null | (keyof mctree.NodeAll)[];
25
- export declare function evaluate(istate: InterpState, node: mctree.Expression): InterpStackElem;
26
- export declare function evaluate(istate: InterpState, node: mctree.Node): InterpStackElem | undefined;
27
- export declare function evaluateUnaryTypes(op: mctree.UnaryOperator, argument: ExactOrUnion): ExactOrUnion;
28
- export declare function deEnumerate(t: ExactOrUnion): ExactOrUnion;
29
- export declare function evaluateNode(istate: InterpState, node: mctree.Node): void;
30
- export declare function roundToFloat(value: number): number;
31
- export declare function mustBeIdentical(a: ExactOrUnion, b: ExactOrUnion): boolean;
32
- export declare function isByteArray(object: ExactOrUnion): boolean | undefined;
33
- export declare function isByteArrayData(objectData: NonNullable<ObjectType["value"]>): boolean | undefined;
@@ -1,4 +0,0 @@
1
- import { ExactOrUnion } from "./types";
2
- export declare function expandTypedef(t: ExactOrUnion): ExactOrUnion;
3
- export declare function intersection(a: ExactOrUnion, b: ExactOrUnion): ExactOrUnion;
4
- export declare function restrictByEquality(a: ExactOrUnion, b: ExactOrUnion): ExactOrUnion;
@@ -1,4 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
3
- export declare function minimizeLocals(state: ProgramStateAnalysis, func: FunctionStateNode): void;
4
- export declare function variableCleanup(node: mctree.Node): false | mctree.BlockStatement | mctree.Statement[] | null;
@@ -1,3 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { ProgramStateAnalysis } from "../optimizer-types";
3
- export declare function minimizeModules(ast: mctree.Program, state: ProgramStateAnalysis): void;
@@ -1,7 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
3
- import { InterpState } from "./interp";
4
- export declare function optimizeFunction(state: ProgramStateAnalysis, func: FunctionStateNode): void;
5
- export declare function beforeEvaluate(istate: InterpState, node: mctree.Node): mctree.Node | null | false;
6
- export declare function afterEvaluate(istate: InterpState, node: mctree.Node): mctree.Node | null | false;
7
- export declare function tryDeEnumerate(istate: InterpState, node: mctree.Expression, elem: number): mctree.Expression | null;
@@ -1,2 +0,0 @@
1
- import { ExactOrUnion } from "./types";
2
- export declare function subtypeOf(a: ExactOrUnion, b: ExactOrUnion): boolean;
@@ -1,27 +0,0 @@
1
- import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { DataFlowBlock as TypeFlowBlock, Event, EventDecl } from "../data-flow";
3
- import { ProgramStateAnalysis, StateNode, VariableStateNode } from "../optimizer-types";
4
- import { InterpState } from "./interp";
5
- import { ExactOrUnion } from "./types";
6
- export { TypeFlowBlock };
7
- export declare function isTypeStateKey(decl: EventDecl): decl is TypeStateKey;
8
- export declare function declIsLocal(decl: EventDecl): decl is VariableStateNode | VariableStateNode[] | mctree.TypedIdentifier;
9
- export declare function declIsNonLocal(decl: EventDecl): decl is VariableStateNode | VariableStateNode[];
10
- export declare function localDeclName(decl: EventDecl): string;
11
- export type TypeStateKey = Exclude<EventDecl, {
12
- type: "MemberDecl" | "Unknown";
13
- }>;
14
- export declare function tsKey(key: TypeStateKey): string;
15
- export declare function sourceLocation(loc: mctree.SourceLocation | null | undefined): string;
16
- export declare function printBlockHeader(block: TypeFlowBlock): void;
17
- export declare function describeEvent(event: Event): string;
18
- export declare function printBlockEvents(block: TypeFlowBlock, extra?: (event: Event) => string): void;
19
- export declare function printBlockTrailer(block: TypeFlowBlock): void;
20
- export declare function findObjectDeclsByProperty(state: ProgramStateAnalysis, object: ExactOrUnion, next: mctree.DottedMemberExpression): readonly [null, null] | [StateNode[], StateNode[]];
21
- export declare function refineObjectTypeByDecls(istate: InterpState, object: ExactOrUnion, trueDecls: StateNode[]): ExactOrUnion;
22
- export declare function findNextObjectType(istate: InterpState, trueDecls: StateNode[], next: mctree.DottedMemberExpression): import("./types").UnionType | import("./types").NumberType | import("./types").LongType | import("./types").FloatType | import("./types").DoubleType | import("./types").CharType | import("./types").StringType | import("./types").ArrayType | import("./types").DictionaryType | import("./types").MethodType | import("./types").ModuleType | import("./types").FunctionType | import("./types").ClassType | import("./types").ObjectType | import("./types").EnumType | import("./types").SymbolType | import("./types").TypedefType | null;
23
- export declare function resolveDottedMember(istate: InterpState, object: ExactOrUnion, next: mctree.DottedMemberExpression): {
24
- mayThrow: boolean;
25
- object: ExactOrUnion;
26
- property: import("./types").UnionType | import("./types").NumberType | import("./types").LongType | import("./types").FloatType | import("./types").DoubleType | import("./types").CharType | import("./types").StringType | import("./types").ArrayType | import("./types").DictionaryType | import("./types").MethodType | import("./types").ModuleType | import("./types").FunctionType | import("./types").ClassType | import("./types").ObjectType | import("./types").EnumType | import("./types").SymbolType | import("./types").TypedefType;
27
- } | null;