@markw65/monkeyc-optimizer 1.0.28 → 1.0.29
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 +27 -0
- package/build/api.cjs +2042 -223
- package/build/optimizer.cjs +1965 -169
- package/build/src/api.d.ts +2 -4
- package/build/src/ast.d.ts +7 -0
- package/build/src/control-flow.d.ts +20 -0
- package/build/src/inliner.d.ts +3 -3
- package/build/src/mc-rewrite.d.ts +1 -1
- package/build/src/optimizer.d.ts +1 -0
- package/package.json +4 -2
package/build/src/api.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
2
|
-
import { traverseAst } from "./ast";
|
|
2
|
+
import { traverseAst, hasProperty } from "./ast";
|
|
3
3
|
export { visitReferences } from "./visitor";
|
|
4
|
-
export { traverseAst };
|
|
4
|
+
export { traverseAst, hasProperty };
|
|
5
5
|
export declare function getApiMapping(state?: ProgramState, barrelList?: string[]): Promise<ProgramStateNode | null>;
|
|
6
|
-
export declare function hasProperty<T extends null extends T ? unknown : undefined extends T ? unknown : never>(obj: T, prop: string): obj is NonNullable<T>;
|
|
7
|
-
export declare function hasProperty<T>(obj: T, prop: string): boolean;
|
|
8
6
|
export declare function isStateNode(node: StateNodeDecl): node is StateNode;
|
|
9
7
|
export declare function variableDeclarationName(node: mctree.TypedIdentifier | mctree.InstanceofIdentifier): string;
|
|
10
8
|
export declare function sameLookupResult(a: LookupDefinition[], b: LookupDefinition[]): boolean;
|
package/build/src/ast.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
2
2
|
export declare function traverseAst(node: mctree.Node, pre?: null | ((node: mctree.Node) => void | null | false | (keyof mctree.NodeAll)[]), post?: (node: mctree.Node) => void | null | false | mctree.Node | mctree.Node[]): false | void | null | mctree.Node | mctree.Node[];
|
|
3
|
+
export declare function isStatement(node: mctree.Node): node is mctree.Statement;
|
|
4
|
+
export declare function isExpression(node: mctree.Node): node is mctree.Expression;
|
|
5
|
+
export declare function mayThrow(node: mctree.Node): boolean;
|
|
6
|
+
export declare function hasProperty<T extends null extends T ? unknown : undefined extends T ? unknown : never>(obj: T, prop: string): obj is NonNullable<T>;
|
|
7
|
+
export declare function hasProperty<T>(obj: T, prop: string): boolean;
|
|
8
|
+
export declare function withLoc<T extends mctree.Node>(node: T, start: mctree.Node | null, end?: mctree.Node | undefined): T;
|
|
9
|
+
export declare function withLocDeep<T extends mctree.Node>(node: T, start: mctree.Node | null, end?: mctree.Node | undefined): T;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
2
|
+
export declare type BaseEvent = {
|
|
3
|
+
type: string;
|
|
4
|
+
mayThrow: boolean;
|
|
5
|
+
};
|
|
6
|
+
declare type EventConstraint<_T> = BaseEvent;
|
|
7
|
+
export declare type Block<T extends EventConstraint<T>> = {
|
|
8
|
+
node?: mctree.Node;
|
|
9
|
+
preds?: Block<T>[];
|
|
10
|
+
succs?: Block<T>[];
|
|
11
|
+
expreds?: Block<T>[];
|
|
12
|
+
exsucc?: Block<T>;
|
|
13
|
+
events?: T[];
|
|
14
|
+
};
|
|
15
|
+
export declare function buildReducedGraph<T extends EventConstraint<T>>(state: ProgramStateAnalysis, func: FunctionStateNode, notice: (node: mctree.Node, stmt: mctree.Node, mayThrow: boolean) => T | null): Block<T>;
|
|
16
|
+
export declare function postOrderTraverse<T extends EventConstraint<T>>(head: Block<T>, visitor: (block: Block<T>) => void): void;
|
|
17
|
+
export declare function preOrderTraverse<T extends EventConstraint<T>>(head: Block<T>, visitor: (block: Block<T>) => void): void;
|
|
18
|
+
export declare function getPostOrder<T extends EventConstraint<T>>(head: Block<T>): Block<T>[];
|
|
19
|
+
export declare function getPreOrder<T extends EventConstraint<T>>(head: Block<T>): Block<T>[];
|
|
20
|
+
export {};
|
package/build/src/inliner.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
2
2
|
export declare function shouldInline(state: ProgramStateAnalysis, func: FunctionStateNode, call: mctree.CallExpression, context: InlineContext | null): boolean;
|
|
3
3
|
declare type InlineBody = mctree.BlockStatement | mctree.ExpressionStatement["expression"];
|
|
4
|
-
export declare function unused(expression: mctree.ExpressionStatement["expression"]): mctree.
|
|
5
|
-
export declare function unused(expression: mctree.ExpressionStatement["expression"], top: true): mctree.
|
|
4
|
+
export declare function unused(expression: mctree.ExpressionStatement["expression"]): mctree.Statement[];
|
|
5
|
+
export declare function unused(expression: mctree.ExpressionStatement["expression"], top: true): mctree.Statement[] | null;
|
|
6
6
|
export declare function diagnostic(state: ProgramStateLive, loc: mctree.Node["loc"], message: string | null, type?: NonNullable<ProgramStateAnalysis["diagnostics"]>[string][number]["type"]): void;
|
|
7
|
-
export declare type InlineContext = mctree.ReturnStatement | mctree.AssignmentExpression | mctree.ExpressionStatement;
|
|
7
|
+
export declare type InlineContext = mctree.ReturnStatement | mctree.AssignmentExpression | mctree.ExpressionStatement | mctree.VariableDeclarator;
|
|
8
8
|
export declare function inlineFunction(state: ProgramStateAnalysis, func: FunctionStateNode, call: mctree.CallExpression, context: InlineContext | null): InlineBody | null;
|
|
9
9
|
export declare function applyTypeIfNeeded(node: mctree.Node): mctree.Node;
|
|
10
10
|
export {};
|
|
@@ -2,7 +2,7 @@ import { mctree } from "@markw65/prettier-plugin-monkeyc";
|
|
|
2
2
|
export declare function getFileSources(fnMap: FilesToOptimizeMap): Promise<void>;
|
|
3
3
|
export declare function getFileASTs(fnMap: FilesToOptimizeMap): Promise<boolean>;
|
|
4
4
|
export declare function analyze(fnMap: FilesToOptimizeMap, barrelList?: string[], config?: BuildConfig): Promise<ProgramStateAnalysis>;
|
|
5
|
-
export declare function getLiteralFromDecls(lookupDefns: LookupDefinition[]): null;
|
|
5
|
+
export declare function getLiteralFromDecls(lookupDefns: LookupDefinition[]): mctree.Literal | mctree.AsExpression | null;
|
|
6
6
|
export declare function getLiteralNode(node: mctree.Node | null | undefined): null | mctree.Literal | mctree.AsExpression;
|
|
7
7
|
export declare function optimizeMonkeyC(fnMap: FilesToOptimizeMap, barrelList?: string[], config?: BuildConfig): Promise<Record<string, {
|
|
8
8
|
type: DiagnosticType;
|
package/build/src/optimizer.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ declare global {
|
|
|
37
37
|
returnCommand?: boolean;
|
|
38
38
|
checkBuildPragmas?: boolean;
|
|
39
39
|
checkInvalidSymbols?: DiagnosticType | "OFF";
|
|
40
|
+
sizeBasedPRE?: boolean | string;
|
|
40
41
|
_cache?: {
|
|
41
42
|
barrels?: Record<string, ResolvedJungle>;
|
|
42
43
|
barrelMap?: Record<string, Record<string, ResolvedJungle>>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@markw65/monkeyc-optimizer",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.29",
|
|
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",
|
|
@@ -37,11 +37,12 @@
|
|
|
37
37
|
"author": "markw65",
|
|
38
38
|
"license": "MIT",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@markw65/prettier-plugin-monkeyc": "^1.0.
|
|
40
|
+
"@markw65/prettier-plugin-monkeyc": "^1.0.32"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@types/glob": "^7.2.0",
|
|
44
44
|
"@types/prettier": "^2.6.1",
|
|
45
|
+
"@types/priorityqueuejs": "^1.0.1",
|
|
45
46
|
"@types/xml2js": "^0.4.11",
|
|
46
47
|
"@typescript-eslint/eslint-plugin": "^5.28.0",
|
|
47
48
|
"@typescript-eslint/parser": "^5.28.0",
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
"peggy": "^1.2.0",
|
|
52
53
|
"prettier": "^2.6.2",
|
|
53
54
|
"prettier-plugin-pegjs": "^0.5.0",
|
|
55
|
+
"priorityqueuejs": "^2.0.0",
|
|
54
56
|
"ts-loader": "^9.3.0",
|
|
55
57
|
"typescript": "^4.6.4",
|
|
56
58
|
"webpack": "^5.72.0",
|