@markw65/monkeyc-optimizer 1.1.10 → 1.1.12
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/README.md +25 -0
- package/build/api.cjs +958 -317
- package/build/optimizer.cjs +4407 -3771
- package/build/src/api.d.ts +1 -1
- package/build/src/control-flow.d.ts +1 -1
- package/build/src/data-flow.d.ts +2 -1
- package/build/src/inliner.d.ts +1 -0
- package/build/src/optimizer-types.d.ts +2 -0
- package/build/src/type-flow/dead-store.d.ts +10 -2
- package/build/src/type-flow/interp-call.d.ts +1 -1
- package/build/src/type-flow/type-flow-util.d.ts +1 -0
- package/build/src/type-flow/types.d.ts +1 -1
- package/build/src/type-flow.d.ts +2 -2
- package/package.json +2 -2
package/build/src/api.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export declare function findNamesInScope(declStack: StateNode[][], pattern: stri
|
|
|
26
26
|
parent: StateNode;
|
|
27
27
|
depth: number;
|
|
28
28
|
}][];
|
|
29
|
-
export declare function mapVarDeclsByType(state: ProgramStateAnalysis, decls: StateNodeDecl[], node: mctree.Node, typeMap: TypeMap | null | undefined): (ModuleStateNode | FunctionStateNode | ClassStateNode | TypedefStateNode | ProgramStateNode | import("./optimizer-types").BlockStateNode | VariableStateNode | EnumStateNode
|
|
29
|
+
export declare function mapVarDeclsByType(state: ProgramStateAnalysis, decls: StateNodeDecl[], node: mctree.Node, typeMap: TypeMap | null | undefined): (ModuleStateNode | FunctionStateNode | ClassStateNode | TypedefStateNode | ProgramStateNode | mctree.Identifier | mctree.EnumStringMember | mctree.AsIdentifier | import("./optimizer-types").BlockStateNode | VariableStateNode | EnumStateNode)[];
|
|
30
30
|
export declare function formatAstLongLines(node: mctree.Node): string;
|
|
31
31
|
export declare function createDocumentationMap(functionDocumentation: {
|
|
32
32
|
name: string;
|
|
@@ -14,7 +14,7 @@ export declare type Block<T extends EventConstraint<T>> = {
|
|
|
14
14
|
bogopred?: Block<T>;
|
|
15
15
|
events?: T[];
|
|
16
16
|
};
|
|
17
|
-
export declare function buildReducedGraph<T extends EventConstraint<T>>(state: ProgramStateAnalysis, func: FunctionStateNode, notice: (node: mctree.Node, stmt: mctree.Node, mayThrow: boolean | 1) => T | T[] | null): Block<T>;
|
|
17
|
+
export declare function buildReducedGraph<T extends EventConstraint<T>>(state: ProgramStateAnalysis, func: FunctionStateNode, refsForUpdate: boolean, notice: (node: mctree.Node, stmt: mctree.Node, mayThrow: boolean | 1, containedEvents: () => T[]) => T | T[] | null): Block<T>;
|
|
18
18
|
export declare function postOrderTraverse<T extends EventConstraint<T>>(head: Block<T>, visitor: (block: Block<T>) => void): void;
|
|
19
19
|
export declare function preOrderTraverse<T extends EventConstraint<T>>(head: Block<T>, visitor: (block: Block<T>) => void): void;
|
|
20
20
|
export declare function getPostOrder<T extends EventConstraint<T>>(head: Block<T>): Block<T>[];
|
package/build/src/data-flow.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export interface DefEvent extends BaseEvent {
|
|
|
27
27
|
node: mctree.AssignmentExpression | mctree.UpdateExpression | mctree.VariableDeclarator;
|
|
28
28
|
decl: EventDecl;
|
|
29
29
|
rhs?: EventDecl;
|
|
30
|
+
containedEvents?: Array<RefEvent | ModEvent>;
|
|
30
31
|
}
|
|
31
32
|
export interface ModEvent extends BaseEvent {
|
|
32
33
|
type: "mod";
|
|
@@ -98,7 +99,7 @@ export declare function declName(decl: EventDecl): string | undefined;
|
|
|
98
99
|
export declare function unhandledType(node: never): never;
|
|
99
100
|
export declare function buildDataFlowGraph(state: ProgramStateAnalysis, func: FunctionStateNode, wantsLiteral: (literal: mctree.Literal) => boolean, trackInsertionPoints: boolean, wantsAllRefs: boolean): {
|
|
100
101
|
identifiers: Set<string>;
|
|
101
|
-
graph: Block<
|
|
102
|
+
graph: Block<Event>;
|
|
102
103
|
};
|
|
103
104
|
export declare class DataflowQueue {
|
|
104
105
|
private enqueued;
|
package/build/src/inliner.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
2
2
|
import { FunctionStateNode, ProgramStateAnalysis } from "./optimizer-types";
|
|
3
3
|
export declare function inlinableSubExpression(expr: mctree.Expression): mctree.SimpleCallExpression | null;
|
|
4
|
+
export declare function inlineRequested(state: ProgramStateAnalysis, func: FunctionStateNode): boolean;
|
|
4
5
|
export declare function shouldInline(state: ProgramStateAnalysis, func: FunctionStateNode, call: mctree.CallExpression, context: InlineContext | null): boolean;
|
|
5
6
|
declare type InlineBody = mctree.BlockStatement | mctree.ExpressionStatement["expression"];
|
|
6
7
|
export declare function unused(state: ProgramStateAnalysis, expression: mctree.ExpressionStatement["expression"]): mctree.Statement[];
|
|
@@ -37,6 +37,8 @@ export declare type BuildConfig = {
|
|
|
37
37
|
useLocalOptimizer?: boolean;
|
|
38
38
|
propagateTypes?: boolean;
|
|
39
39
|
trustDeclaredTypes?: boolean;
|
|
40
|
+
minimizeLocals?: boolean;
|
|
41
|
+
singleUseCopyProp?: boolean;
|
|
40
42
|
covarianceWarnings?: boolean;
|
|
41
43
|
checkTypes?: DiagnosticType | "OFF";
|
|
42
44
|
};
|
|
@@ -2,9 +2,17 @@ import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
|
2
2
|
import { NodeEquivMap } from "src/type-flow";
|
|
3
3
|
import { FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
|
|
4
4
|
import { TypeFlowBlock, TypeStateKey } from "./type-flow-util";
|
|
5
|
-
export declare
|
|
5
|
+
export declare 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): {
|
|
6
10
|
deadStores: Set<mctree.Node>;
|
|
7
11
|
locals: Set<TypeStateKey>;
|
|
8
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;
|
|
9
18
|
};
|
|
10
|
-
export declare function eliminateDeadStores(state: ProgramStateAnalysis, func: FunctionStateNode, graph: TypeFlowBlock, logThisRun: boolean): boolean;
|
|
@@ -12,5 +12,5 @@ declare type SysCallHelperResult = {
|
|
|
12
12
|
argEffects?: true;
|
|
13
13
|
};
|
|
14
14
|
declare type SysCallHelper = (state: ProgramStateAnalysis, func: FunctionStateNode, calleeObj: ExactOrUnion, getArgs: () => Array<ExactOrUnion>) => SysCallHelperResult;
|
|
15
|
-
export declare function sysCallInfo(func: FunctionStateNode): SysCallHelper | null;
|
|
15
|
+
export declare function sysCallInfo(state: ProgramStateAnalysis, func: FunctionStateNode): SysCallHelper | null;
|
|
16
16
|
export {};
|
|
@@ -6,6 +6,7 @@ import { ExactOrUnion } from "./types";
|
|
|
6
6
|
export { TypeFlowBlock };
|
|
7
7
|
export declare function isTypeStateKey(decl: EventDecl): decl is TypeStateKey;
|
|
8
8
|
export declare function declIsLocal(decl: EventDecl): decl is VariableStateNode | VariableStateNode[] | mctree.TypedIdentifier;
|
|
9
|
+
export declare function declIsNonLocal(decl: EventDecl): decl is VariableStateNode | VariableStateNode[];
|
|
9
10
|
export declare function localDeclName(decl: EventDecl): string;
|
|
10
11
|
export declare type TypeStateKey = Exclude<EventDecl, {
|
|
11
12
|
type: "MemberDecl" | "Unknown";
|
|
@@ -26,7 +26,7 @@ export declare const enum TypeTag {
|
|
|
26
26
|
Typedef = 262144,
|
|
27
27
|
Any = 524287
|
|
28
28
|
}
|
|
29
|
-
export declare function typeTagName(tag: TypeTag): "
|
|
29
|
+
export declare function typeTagName(tag: TypeTag): "Number" | "Float" | "Double" | "Long" | "String" | "Char" | "Boolean" | "Null" | "Object" | "Symbol" | "Never" | "False" | "True" | "Decimal" | "Numeric" | "Array" | "Dictionary" | "Method" | "Module" | "Function" | "Class" | "Enum" | "Typedef" | "Any";
|
|
30
30
|
export declare const LastTypeTag = TypeTag.Typedef;
|
|
31
31
|
export declare const SingletonTypeTagsConst: number;
|
|
32
32
|
export declare const UnionDataTypeTagsConst: number;
|
package/build/src/type-flow.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
2
|
-
import { EventDecl } from "./data-flow";
|
|
2
|
+
import { Event, EventDecl } from "./data-flow";
|
|
3
3
|
import { FunctionStateNode, ProgramStateAnalysis } from "./optimizer-types";
|
|
4
4
|
import { InterpState } from "./type-flow/interp";
|
|
5
5
|
import { TypeStateKey } from "./type-flow/type-flow-util";
|
|
@@ -10,7 +10,7 @@ export declare type NodeEquivMap = Map<mctree.Node, {
|
|
|
10
10
|
}>;
|
|
11
11
|
export declare function buildTypeInfo(state: ProgramStateAnalysis, func: FunctionStateNode, optimizeEquivalencies: boolean): InterpState | undefined;
|
|
12
12
|
export declare function buildConflictGraph(state: ProgramStateAnalysis, func: FunctionStateNode): {
|
|
13
|
-
graph: import("./control-flow").Block<
|
|
13
|
+
graph: import("./control-flow").Block<Event>;
|
|
14
14
|
localConflicts: Map<TypeStateKey, Set<TypeStateKey>> | null;
|
|
15
15
|
locals: Set<TypeStateKey>;
|
|
16
16
|
identifiers: Set<string>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@markw65/monkeyc-optimizer",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.12",
|
|
5
5
|
"description": "Source to source optimizer for Garmin Monkey C code",
|
|
6
6
|
"main": "build/optimizer.cjs",
|
|
7
7
|
"types": "build/src/optimizer.d.ts",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"author": "markw65",
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@markw65/prettier-plugin-monkeyc": "^1.0.
|
|
43
|
+
"@markw65/prettier-plugin-monkeyc": "^1.0.45"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/chai": "^4.3.4",
|