@markw65/monkeyc-optimizer 1.1.8 → 1.1.10

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.
@@ -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 | EnumStateNode | mctree.EnumStringMember | mctree.Identifier | mctree.AsIdentifier | import("./optimizer-types").BlockStateNode | VariableStateNode)[];
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 | mctree.EnumStringMember | mctree.Identifier | mctree.AsIdentifier)[];
30
30
  export declare function formatAstLongLines(node: mctree.Node): string;
31
31
  export declare function createDocumentationMap(functionDocumentation: {
32
32
  name: string;
@@ -45,6 +45,7 @@ export declare function findUsingForNode(state: ProgramStateLive, stack: Program
45
45
  export declare function getApiFunctionInfo(state: ProgramState, func: FunctionStateNode): FunctionInfo | false;
46
46
  export declare function markInvokeClassMethod(state: ProgramStateAnalysis, func: FunctionStateNode): void;
47
47
  export declare function isLocal(v: VariableStateNode): boolean;
48
+ export declare function isClassVariable(v: VariableStateNode): boolean;
48
49
  export declare function diagnostic(state: ProgramState, node: mctree.Node, message: string | null, type?: DiagnosticType, extra?: Diagnostic["extra"]): void;
49
50
  export declare function diagnosticHelper(diagnostics: Record<string, Diagnostic[]>, node: mctree.Node, message: string | null, type: DiagnosticType | undefined, extra: Diagnostic["extra"] | undefined, uniqueLocs: boolean): void;
50
51
  export declare function getSuperClasses(klass: ClassStateNode): Set<StateNode> | null;
@@ -2,12 +2,13 @@ import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
2
  import { BaseEvent, Block } from "./control-flow";
3
3
  import { FunctionStateNode, ProgramStateAnalysis, StateNodeDecl } from "./optimizer-types";
4
4
  export declare type RefNode = mctree.Identifier | mctree.MemberExpression | mctree.Literal;
5
- export declare type EventDecl = StateNodeDecl | StateNodeDecl[] | mctree.Literal | {
5
+ export declare type MemberDecl = {
6
6
  type: "MemberDecl";
7
7
  node: mctree.MemberExpression;
8
8
  base: StateNodeDecl | StateNodeDecl[];
9
9
  path: mctree.MemberExpression[];
10
- } | {
10
+ };
11
+ export declare type EventDecl = StateNodeDecl | StateNodeDecl[] | mctree.Literal | MemberDecl | {
11
12
  type: "Unknown";
12
13
  node: mctree.MemberExpression | mctree.Identifier | mctree.ThisExpression;
13
14
  };
@@ -47,7 +48,7 @@ export declare enum FlowKind {
47
48
  INSTANCEOF = 6,
48
49
  NOTINSTANCE = 7
49
50
  }
50
- interface FlowEventDecl extends BaseEvent {
51
+ export interface FlowEventDecl extends BaseEvent {
51
52
  type: "flw";
52
53
  node: mctree.BinaryExpression | mctree.UnaryExpression;
53
54
  decl?: undefined;
@@ -56,7 +57,7 @@ interface FlowEventDecl extends BaseEvent {
56
57
  right_decl: EventDecl;
57
58
  right_node?: undefined;
58
59
  }
59
- interface FlowEventNode extends BaseEvent {
60
+ export interface FlowEventNode extends BaseEvent {
60
61
  type: "flw";
61
62
  node: mctree.BinaryExpression | mctree.UnaryExpression;
62
63
  decl?: undefined;
@@ -65,7 +66,7 @@ interface FlowEventNode extends BaseEvent {
65
66
  right_decl?: undefined;
66
67
  right_node: mctree.Expression;
67
68
  }
68
- interface FlowEventTruthy extends BaseEvent {
69
+ export interface FlowEventTruthy extends BaseEvent {
69
70
  type: "flw";
70
71
  node: mctree.Node;
71
72
  decl?: undefined;
@@ -74,7 +75,7 @@ interface FlowEventTruthy extends BaseEvent {
74
75
  right_decl?: undefined;
75
76
  right_node?: undefined;
76
77
  }
77
- interface FlowEventInstanceof extends BaseEvent {
78
+ export interface FlowEventInstanceof extends BaseEvent {
78
79
  type: "flw";
79
80
  node: mctree.InstanceofExpression | mctree.UnaryExpression;
80
81
  decl?: undefined;
@@ -106,4 +107,3 @@ export declare class DataflowQueue {
106
107
  dequeue(): DataFlowBlock;
107
108
  empty(): boolean;
108
109
  }
109
- export {};
@@ -5,6 +5,7 @@ export declare function shouldInline(state: ProgramStateAnalysis, func: Function
5
5
  declare type InlineBody = mctree.BlockStatement | mctree.ExpressionStatement["expression"];
6
6
  export declare function unused(state: ProgramStateAnalysis, expression: mctree.ExpressionStatement["expression"]): mctree.Statement[];
7
7
  export declare function unused(state: ProgramStateAnalysis, expression: mctree.ExpressionStatement["expression"], top: true): mctree.Statement[] | null;
8
+ export declare function inlineDiagnostic(state: ProgramStateAnalysis, func: FunctionStateNode, call: mctree.CallExpression, message: string | null): void;
8
9
  export declare type InlineContext = mctree.ReturnStatement | mctree.IfStatement | mctree.AssignmentExpression | mctree.ExpressionStatement | mctree.VariableDeclarator;
9
10
  export declare function inlineFunction(state: ProgramStateAnalysis, func: FunctionStateNode, call: mctree.CallExpression, context: InlineContext | null): InlineBody | null;
10
11
  export declare function applyTypeIfNeeded(node: mctree.Node): mctree.Node;
@@ -7,6 +7,7 @@ import { xmlUtil } from "./sdk-util";
7
7
  import { TypeMap } from "./type-flow/interp";
8
8
  import { copyRecursiveAsNeeded } from "./util";
9
9
  export * from "./optimizer-types";
10
+ export { display } from "./type-flow/types";
10
11
  export { copyRecursiveAsNeeded, get_jungle, JungleBuildDependencies, JungleError, JungleResourceMap, launchSimulator, manifestProducts, mctree, ResolvedJungle, simulateProgram, };
11
12
  export declare const defaultConfig: {
12
13
  outputPath: string;
@@ -1,3 +1,5 @@
1
1
  import { ExactOrUnion } from "./types";
2
+ export declare function couldBeHelper(a: ExactOrUnion, b: ExactOrUnion, shallow: boolean): boolean;
2
3
  export declare function couldBe(a: ExactOrUnion, b: ExactOrUnion): boolean;
3
4
  export declare function couldBeWeak(a: ExactOrUnion, b: ExactOrUnion): boolean;
5
+ export declare function couldBeShallow(a: ExactOrUnion, b: ExactOrUnion): boolean;
@@ -1,5 +1,10 @@
1
1
  import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
+ import { NodeEquivMap } from "src/type-flow";
2
3
  import { FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
3
- import { TypeFlowBlock } from "./type-flow-util";
4
- export declare function findDeadStores(graph: TypeFlowBlock, logThisRun: boolean): Set<mctree.Node>;
4
+ import { TypeFlowBlock, TypeStateKey } from "./type-flow-util";
5
+ export declare function findDeadStores(func: FunctionStateNode, graph: TypeFlowBlock, nodeEquivs: NodeEquivMap | null, logThisRun: boolean): {
6
+ deadStores: Set<mctree.Node>;
7
+ locals: Set<TypeStateKey>;
8
+ localConflicts: Map<TypeStateKey, Set<TypeStateKey>> | null;
9
+ };
5
10
  export declare function eliminateDeadStores(state: ProgramStateAnalysis, func: FunctionStateNode, graph: TypeFlowBlock, logThisRun: boolean): boolean;
File without changes
@@ -0,0 +1,2 @@
1
+ import { FunctionStateNode, ProgramStateAnalysis } from "../optimizer-types";
2
+ export declare function minimizeLocals(state: ProgramStateAnalysis, func: FunctionStateNode): void;
@@ -1,6 +1,8 @@
1
1
  import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
2
  import { DataFlowBlock as TypeFlowBlock, Event, EventDecl } from "../data-flow";
3
- import { VariableStateNode } from "../optimizer-types";
3
+ import { ProgramStateAnalysis, StateNode, VariableStateNode } from "../optimizer-types";
4
+ import { InterpState } from "./interp";
5
+ import { ExactOrUnion } from "./types";
4
6
  export { TypeFlowBlock };
5
7
  export declare function isTypeStateKey(decl: EventDecl): decl is TypeStateKey;
6
8
  export declare function declIsLocal(decl: EventDecl): decl is VariableStateNode | VariableStateNode[] | mctree.TypedIdentifier;
@@ -14,3 +16,11 @@ export declare function printBlockHeader(block: TypeFlowBlock): void;
14
16
  export declare function describeEvent(event: Event): string;
15
17
  export declare function printBlockEvents(block: TypeFlowBlock, extra?: (event: Event) => string): void;
16
18
  export declare function printBlockTrailer(block: TypeFlowBlock): void;
19
+ export declare function findObjectDeclsByProperty(state: ProgramStateAnalysis, object: ExactOrUnion, next: mctree.DottedMemberExpression): [StateNode[], StateNode[]] | readonly [null, null];
20
+ export declare function refineObjectTypeByDecls(istate: InterpState, object: ExactOrUnion, trueDecls: StateNode[]): ExactOrUnion;
21
+ 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;
22
+ export declare function resolveDottedMember(istate: InterpState, object: ExactOrUnion, next: mctree.DottedMemberExpression): {
23
+ mayThrow: boolean;
24
+ object: ExactOrUnion;
25
+ 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;
26
+ } | null;
@@ -1,12 +1,18 @@
1
1
  import { mctree } from "@markw65/prettier-plugin-monkeyc";
2
- import { FunctionStateNode, ProgramStateAnalysis, StateNode } from "./optimizer-types";
2
+ import { EventDecl } from "./data-flow";
3
+ import { FunctionStateNode, ProgramStateAnalysis } from "./optimizer-types";
3
4
  import { InterpState } from "./type-flow/interp";
4
- import { ExactOrUnion } from "./type-flow/types";
5
+ import { TypeStateKey } from "./type-flow/type-flow-util";
5
6
  export declare const missingNullWorkaround = true;
7
+ export declare type NodeEquivMap = Map<mctree.Node, {
8
+ decl: EventDecl;
9
+ equiv: Array<EventDecl>;
10
+ }>;
6
11
  export declare function buildTypeInfo(state: ProgramStateAnalysis, func: FunctionStateNode, optimizeEquivalencies: boolean): InterpState | undefined;
7
- export declare function findObjectDeclsByProperty(state: ProgramStateAnalysis, object: ExactOrUnion, next: mctree.DottedMemberExpression): readonly [null, null] | [StateNode[], StateNode[]];
8
- export declare function resolveDottedMember(istate: InterpState, object: ExactOrUnion, next: mctree.DottedMemberExpression): {
9
- mayThrow: boolean;
10
- object: ExactOrUnion;
11
- property: import("./type-flow/types").UnionType | import("./type-flow/types").NumberType | import("./type-flow/types").LongType | import("./type-flow/types").FloatType | import("./type-flow/types").DoubleType | import("./type-flow/types").CharType | import("./type-flow/types").StringType | import("./type-flow/types").ArrayType | import("./type-flow/types").DictionaryType | import("./type-flow/types").MethodType | import("./type-flow/types").ModuleType | import("./type-flow/types").FunctionType | import("./type-flow/types").ClassType | import("./type-flow/types").ObjectType | import("./type-flow/types").EnumType | import("./type-flow/types").SymbolType | import("./type-flow/types").TypedefType;
12
- } | null;
12
+ export declare function buildConflictGraph(state: ProgramStateAnalysis, func: FunctionStateNode): {
13
+ graph: import("./control-flow").Block<import("./data-flow").RefEvent | import("./data-flow").KillEvent | import("./data-flow").DefEvent | import("./data-flow").ModEvent | import("./data-flow").FlowEventDecl | import("./data-flow").FlowEventNode | import("./data-flow").FlowEventTruthy | import("./data-flow").FlowEventInstanceof | import("./data-flow").ExnEvent>;
14
+ localConflicts: Map<TypeStateKey, Set<TypeStateKey>> | null;
15
+ locals: Set<TypeStateKey>;
16
+ identifiers: Set<string>;
17
+ logThisRun: boolean;
18
+ } | undefined;
@@ -1,2 +1,4 @@
1
+ import { mctree } from "@markw65/prettier-plugin-monkeyc";
1
2
  import { ProgramStateAnalysis } from "./optimizer-types";
3
+ export declare function renameIdentifier(ident: mctree.Identifier, newName: string): void;
2
4
  export declare function renameVariable(state: ProgramStateAnalysis, locals: NonNullable<ProgramStateAnalysis["localsStack"]>[number], declName: string | null): string | null;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@markw65/monkeyc-optimizer",
3
3
  "type": "module",
4
- "version": "1.1.8",
4
+ "version": "1.1.10",
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.42"
43
+ "@markw65/prettier-plugin-monkeyc": "^1.0.43"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/chai": "^4.3.4",