@markw65/monkeyc-optimizer 1.1.41 → 1.1.42
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/CHANGELOG.md +5 -0
- package/build/api.cjs +34 -34
- package/build/{chunk-BJHWDTEM.cjs → chunk-MWCHENAG.cjs} +29 -17
- package/build/optimizer.cjs +16 -16
- package/build/sdk-util.cjs +14 -14
- package/build/worker-thread.cjs +3 -3
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the "monkeyc-optimizer" package will be documented in this file.
|
|
4
4
|
|
|
5
|
+
### 1.1.42
|
|
6
|
+
|
|
7
|
+
- Fix a stack overflow caused by the post build array init optimization
|
|
8
|
+
- Fix a bug allowing overridden methods to be inlined
|
|
9
|
+
|
|
5
10
|
### 1.1.41
|
|
6
11
|
|
|
7
12
|
- Add proper support for tuple types (Sdk-7.x)
|
package/build/api.cjs
CHANGED
|
@@ -18,47 +18,47 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var api_exports = {};
|
|
20
20
|
__export(api_exports, {
|
|
21
|
-
checkCompilerVersion: () =>
|
|
22
|
-
collectNamespaces: () =>
|
|
23
|
-
createDocumentationMap: () =>
|
|
24
|
-
diagnostic: () =>
|
|
25
|
-
diagnosticHelper: () =>
|
|
26
|
-
findNamesInScope: () =>
|
|
27
|
-
findUsingForNode: () =>
|
|
28
|
-
formatAst: () =>
|
|
29
|
-
formatAstLongLines: () =>
|
|
30
|
-
formatScopedName: () =>
|
|
31
|
-
getApiFunctionInfo: () =>
|
|
32
|
-
getApiMapping: () =>
|
|
33
|
-
getSuperClasses: () =>
|
|
21
|
+
checkCompilerVersion: () => import_chunk_MWCHENAG.checkCompilerVersion,
|
|
22
|
+
collectNamespaces: () => import_chunk_MWCHENAG.collectNamespaces,
|
|
23
|
+
createDocumentationMap: () => import_chunk_MWCHENAG.createDocumentationMap,
|
|
24
|
+
diagnostic: () => import_chunk_MWCHENAG.diagnostic,
|
|
25
|
+
diagnosticHelper: () => import_chunk_MWCHENAG.diagnosticHelper,
|
|
26
|
+
findNamesInScope: () => import_chunk_MWCHENAG.findNamesInScope,
|
|
27
|
+
findUsingForNode: () => import_chunk_MWCHENAG.findUsingForNode,
|
|
28
|
+
formatAst: () => import_chunk_MWCHENAG.formatAst,
|
|
29
|
+
formatAstLongLines: () => import_chunk_MWCHENAG.formatAstLongLines,
|
|
30
|
+
formatScopedName: () => import_chunk_MWCHENAG.formatScopedName,
|
|
31
|
+
getApiFunctionInfo: () => import_chunk_MWCHENAG.getApiFunctionInfo,
|
|
32
|
+
getApiMapping: () => import_chunk_MWCHENAG.getApiMapping,
|
|
33
|
+
getSuperClasses: () => import_chunk_MWCHENAG.getSuperClasses,
|
|
34
34
|
hasProperty: () => import_chunk_MBTLUWXR.hasProperty,
|
|
35
|
-
isClassVariable: () =>
|
|
36
|
-
isLocal: () =>
|
|
37
|
-
isLookupCandidate: () =>
|
|
38
|
-
isStateNode: () =>
|
|
39
|
-
lookupByFullName: () =>
|
|
40
|
-
lookupNext: () =>
|
|
41
|
-
lookupResultContains: () =>
|
|
42
|
-
lookupWithType: () =>
|
|
43
|
-
makeToyboxLink: () =>
|
|
44
|
-
mapVarDeclsByType: () =>
|
|
45
|
-
markInvokeClassMethod: () =>
|
|
46
|
-
parseSdkVersion: () =>
|
|
47
|
-
resolveDiagnostics: () =>
|
|
48
|
-
resolveDiagnosticsMap: () =>
|
|
49
|
-
sameLookupResult: () =>
|
|
35
|
+
isClassVariable: () => import_chunk_MWCHENAG.isClassVariable,
|
|
36
|
+
isLocal: () => import_chunk_MWCHENAG.isLocal,
|
|
37
|
+
isLookupCandidate: () => import_chunk_MWCHENAG.isLookupCandidate,
|
|
38
|
+
isStateNode: () => import_chunk_MWCHENAG.isStateNode,
|
|
39
|
+
lookupByFullName: () => import_chunk_MWCHENAG.lookupByFullName,
|
|
40
|
+
lookupNext: () => import_chunk_MWCHENAG.lookupNext,
|
|
41
|
+
lookupResultContains: () => import_chunk_MWCHENAG.lookupResultContains,
|
|
42
|
+
lookupWithType: () => import_chunk_MWCHENAG.lookupWithType,
|
|
43
|
+
makeToyboxLink: () => import_chunk_MWCHENAG.makeToyboxLink,
|
|
44
|
+
mapVarDeclsByType: () => import_chunk_MWCHENAG.mapVarDeclsByType,
|
|
45
|
+
markInvokeClassMethod: () => import_chunk_MWCHENAG.markInvokeClassMethod,
|
|
46
|
+
parseSdkVersion: () => import_chunk_MWCHENAG.parseSdkVersion,
|
|
47
|
+
resolveDiagnostics: () => import_chunk_MWCHENAG.resolveDiagnostics,
|
|
48
|
+
resolveDiagnosticsMap: () => import_chunk_MWCHENAG.resolveDiagnosticsMap,
|
|
49
|
+
sameLookupResult: () => import_chunk_MWCHENAG.sameLookupResult,
|
|
50
50
|
traverseAst: () => import_chunk_MBTLUWXR.traverseAst,
|
|
51
|
-
variableDeclarationName: () =>
|
|
52
|
-
visitReferences: () =>
|
|
53
|
-
visit_resources: () =>
|
|
54
|
-
visitorNode: () =>
|
|
51
|
+
variableDeclarationName: () => import_chunk_MWCHENAG.variableDeclarationName,
|
|
52
|
+
visitReferences: () => import_chunk_MWCHENAG.visitReferences,
|
|
53
|
+
visit_resources: () => import_chunk_MWCHENAG.visit_resources,
|
|
54
|
+
visitorNode: () => import_chunk_MWCHENAG.visitorNode
|
|
55
55
|
});
|
|
56
56
|
module.exports = __toCommonJS(api_exports);
|
|
57
|
-
var
|
|
57
|
+
var import_chunk_MWCHENAG = require("./chunk-MWCHENAG.cjs");
|
|
58
58
|
var import_chunk_SG7ODKRM = require("./chunk-SG7ODKRM.cjs");
|
|
59
59
|
var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
|
|
60
60
|
var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
|
|
61
|
-
(0,
|
|
61
|
+
(0, import_chunk_MWCHENAG.init_api)();
|
|
62
62
|
// Annotate the CommonJS export names for ESM import in node:
|
|
63
63
|
0 && (module.exports = {
|
|
64
64
|
checkCompilerVersion,
|
|
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var chunk_MWCHENAG_exports = {};
|
|
30
|
+
__export(chunk_MWCHENAG_exports, {
|
|
31
31
|
EnumTagsConst: () => EnumTagsConst,
|
|
32
32
|
LastTypeTag: () => LastTypeTag,
|
|
33
33
|
ObjectLikeTagsConst: () => ObjectLikeTagsConst,
|
|
@@ -133,7 +133,7 @@ __export(chunk_BJHWDTEM_exports, {
|
|
|
133
133
|
visitorNode: () => visitorNode,
|
|
134
134
|
xml_util_exports: () => xml_util_exports
|
|
135
135
|
});
|
|
136
|
-
module.exports = __toCommonJS(
|
|
136
|
+
module.exports = __toCommonJS(chunk_MWCHENAG_exports);
|
|
137
137
|
var import_chunk_SG7ODKRM = require("./chunk-SG7ODKRM.cjs");
|
|
138
138
|
var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
|
|
139
139
|
var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
|
|
@@ -17152,19 +17152,21 @@ function optimizeCall(istate, node, context) {
|
|
|
17152
17152
|
if (state.currentFunction) {
|
|
17153
17153
|
recordCalledFuncs(state.currentFunction, callees);
|
|
17154
17154
|
}
|
|
17155
|
-
if (callees.length === 1
|
|
17155
|
+
if (callees.length === 1) {
|
|
17156
17156
|
const callee = callees[0].node;
|
|
17157
|
-
if (
|
|
17158
|
-
|
|
17159
|
-
|
|
17160
|
-
|
|
17161
|
-
|
|
17157
|
+
if (callees[0].type === "FunctionDeclaration" && !callee.hasOverride) {
|
|
17158
|
+
if (!context && callee.optimizable && node.arguments.every((n) => (0, import_chunk_MBTLUWXR.getNodeValue)(n)[0] !== null)) {
|
|
17159
|
+
const ret = evaluateFunction(istate, callee, node.arguments);
|
|
17160
|
+
if (ret) {
|
|
17161
|
+
inlineDiagnostic(state, callees[0], node, null);
|
|
17162
|
+
return (0, import_chunk_MBTLUWXR.withLoc)(ret, node, node);
|
|
17163
|
+
}
|
|
17162
17164
|
}
|
|
17163
|
-
|
|
17164
|
-
|
|
17165
|
-
|
|
17166
|
-
|
|
17167
|
-
|
|
17165
|
+
if (shouldInline(state, callees[0], node, context)) {
|
|
17166
|
+
const ret = inlineFunction(state, callees[0], node, context);
|
|
17167
|
+
if (ret) {
|
|
17168
|
+
return ret;
|
|
17169
|
+
}
|
|
17168
17170
|
}
|
|
17169
17171
|
}
|
|
17170
17172
|
}
|
|
@@ -21399,6 +21401,14 @@ ${blockToString(block, context)}`
|
|
|
21399
21401
|
loop2.taken = loopOffset2;
|
|
21400
21402
|
return true;
|
|
21401
21403
|
}
|
|
21404
|
+
const max = Math.floor(
|
|
21405
|
+
(100 - interpState.stack.length - interpState.locals.length) / 2
|
|
21406
|
+
);
|
|
21407
|
+
if (max < 0)
|
|
21408
|
+
return false;
|
|
21409
|
+
if (putvStarts.length > max) {
|
|
21410
|
+
putvStarts.splice(max);
|
|
21411
|
+
}
|
|
21402
21412
|
if (!tryLocal(3) && putvStarts.length < 4)
|
|
21403
21413
|
return false;
|
|
21404
21414
|
if (local >= 0) {
|
|
@@ -21407,7 +21417,9 @@ ${blockToString(block, context)}`
|
|
|
21407
21417
|
dupsToFix.forEach((x, n) => {
|
|
21408
21418
|
const bc = block.bytecodes[n];
|
|
21409
21419
|
(0, import_node_assert8.default)(bc.op === 46 && bc.arg >= 2);
|
|
21410
|
-
|
|
21420
|
+
if (putvStarts.length > x) {
|
|
21421
|
+
bc.arg += (putvStarts.length - x - 1) * 2;
|
|
21422
|
+
}
|
|
21411
21423
|
});
|
|
21412
21424
|
for (let i2 = putvStarts.length; i2-- > 1; ) {
|
|
21413
21425
|
block.bytecodes.splice(putvStarts[i2], 2);
|
|
@@ -28309,7 +28321,7 @@ async function generateOneConfig(buildConfig, manifestXML, dependencyFiles, conf
|
|
|
28309
28321
|
const opt_time = await (0, import_chunk_SG7ODKRM.first_modified)(
|
|
28310
28322
|
Object.values(fnMap).map((v) => v.output)
|
|
28311
28323
|
);
|
|
28312
|
-
if (source_time < opt_time &&
|
|
28324
|
+
if (source_time < opt_time && 1707955700789 < opt_time) {
|
|
28313
28325
|
return {
|
|
28314
28326
|
hasTests,
|
|
28315
28327
|
diagnostics: prevDiagnostics,
|
|
@@ -28348,7 +28360,7 @@ async function generateOneConfig(buildConfig, manifestXML, dependencyFiles, conf
|
|
|
28348
28360
|
hasTests: hasTests2,
|
|
28349
28361
|
diagnostics,
|
|
28350
28362
|
sdkVersion,
|
|
28351
|
-
optimizerVersion: "1.1.
|
|
28363
|
+
optimizerVersion: "1.1.42",
|
|
28352
28364
|
...Object.fromEntries(
|
|
28353
28365
|
configOptionsToCheck.map((option) => [option, config[option]])
|
|
28354
28366
|
)
|
package/build/optimizer.cjs
CHANGED
|
@@ -18,28 +18,28 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var optimizer_exports = {};
|
|
20
20
|
__export(optimizer_exports, {
|
|
21
|
-
StateNodeAttributes: () =>
|
|
22
|
-
buildOptimizedProject: () =>
|
|
21
|
+
StateNodeAttributes: () => import_chunk_MWCHENAG.StateNodeAttributes,
|
|
22
|
+
buildOptimizedProject: () => import_chunk_MWCHENAG.buildOptimizedProject,
|
|
23
23
|
copyRecursiveAsNeeded: () => import_chunk_SG7ODKRM.copyRecursiveAsNeeded,
|
|
24
|
-
defaultConfig: () =>
|
|
25
|
-
display: () =>
|
|
26
|
-
generateOneConfig: () =>
|
|
27
|
-
generateOptimizedProject: () =>
|
|
28
|
-
getConfig: () =>
|
|
29
|
-
getProjectAnalysis: () =>
|
|
30
|
-
get_jungle: () =>
|
|
31
|
-
isErrorWithLocation: () =>
|
|
32
|
-
launchSimulator: () =>
|
|
33
|
-
manifestProducts: () =>
|
|
34
|
-
mctree: () =>
|
|
35
|
-
simulateProgram: () =>
|
|
24
|
+
defaultConfig: () => import_chunk_MWCHENAG.defaultConfig,
|
|
25
|
+
display: () => import_chunk_MWCHENAG.display,
|
|
26
|
+
generateOneConfig: () => import_chunk_MWCHENAG.generateOneConfig,
|
|
27
|
+
generateOptimizedProject: () => import_chunk_MWCHENAG.generateOptimizedProject,
|
|
28
|
+
getConfig: () => import_chunk_MWCHENAG.getConfig,
|
|
29
|
+
getProjectAnalysis: () => import_chunk_MWCHENAG.getProjectAnalysis,
|
|
30
|
+
get_jungle: () => import_chunk_MWCHENAG.get_jungle,
|
|
31
|
+
isErrorWithLocation: () => import_chunk_MWCHENAG.isErrorWithLocation,
|
|
32
|
+
launchSimulator: () => import_chunk_MWCHENAG.launchSimulator,
|
|
33
|
+
manifestProducts: () => import_chunk_MWCHENAG.manifestProducts,
|
|
34
|
+
mctree: () => import_chunk_MWCHENAG.mctree,
|
|
35
|
+
simulateProgram: () => import_chunk_MWCHENAG.simulateProgram
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(optimizer_exports);
|
|
38
|
-
var
|
|
38
|
+
var import_chunk_MWCHENAG = require("./chunk-MWCHENAG.cjs");
|
|
39
39
|
var import_chunk_SG7ODKRM = require("./chunk-SG7ODKRM.cjs");
|
|
40
40
|
var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
|
|
41
41
|
var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
|
|
42
|
-
(0,
|
|
42
|
+
(0, import_chunk_MWCHENAG.init_optimizer)();
|
|
43
43
|
// Annotate the CommonJS export names for ESM import in node:
|
|
44
44
|
0 && (module.exports = {
|
|
45
45
|
StateNodeAttributes,
|
package/build/sdk-util.cjs
CHANGED
|
@@ -18,25 +18,25 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var sdk_util_exports = {};
|
|
20
20
|
__export(sdk_util_exports, {
|
|
21
|
-
SectionKinds: () =>
|
|
22
|
-
appSupport: () =>
|
|
23
|
-
connectiq: () =>
|
|
24
|
-
getDeviceInfo: () =>
|
|
25
|
-
getFunctionDocumentation: () =>
|
|
26
|
-
getLanguages: () =>
|
|
27
|
-
getSdkPath: () =>
|
|
28
|
-
isWin: () =>
|
|
29
|
-
optimizeProgram: () =>
|
|
30
|
-
readPrg: () =>
|
|
31
|
-
readPrgWithOffsets: () =>
|
|
32
|
-
xmlUtil: () =>
|
|
21
|
+
SectionKinds: () => import_chunk_MWCHENAG.SectionKinds,
|
|
22
|
+
appSupport: () => import_chunk_MWCHENAG.appSupport,
|
|
23
|
+
connectiq: () => import_chunk_MWCHENAG.connectiq,
|
|
24
|
+
getDeviceInfo: () => import_chunk_MWCHENAG.getDeviceInfo,
|
|
25
|
+
getFunctionDocumentation: () => import_chunk_MWCHENAG.getFunctionDocumentation,
|
|
26
|
+
getLanguages: () => import_chunk_MWCHENAG.getLanguages,
|
|
27
|
+
getSdkPath: () => import_chunk_MWCHENAG.getSdkPath,
|
|
28
|
+
isWin: () => import_chunk_MWCHENAG.isWin,
|
|
29
|
+
optimizeProgram: () => import_chunk_MWCHENAG.optimizeProgram,
|
|
30
|
+
readPrg: () => import_chunk_MWCHENAG.readPrg,
|
|
31
|
+
readPrgWithOffsets: () => import_chunk_MWCHENAG.readPrgWithOffsets,
|
|
32
|
+
xmlUtil: () => import_chunk_MWCHENAG.xml_util_exports
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(sdk_util_exports);
|
|
35
|
-
var
|
|
35
|
+
var import_chunk_MWCHENAG = require("./chunk-MWCHENAG.cjs");
|
|
36
36
|
var import_chunk_SG7ODKRM = require("./chunk-SG7ODKRM.cjs");
|
|
37
37
|
var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
|
|
38
38
|
var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
|
|
39
|
-
(0,
|
|
39
|
+
(0, import_chunk_MWCHENAG.init_sdk_util)();
|
|
40
40
|
// Annotate the CommonJS export names for ESM import in node:
|
|
41
41
|
0 && (module.exports = {
|
|
42
42
|
SectionKinds,
|
package/build/worker-thread.cjs
CHANGED
|
@@ -21,17 +21,17 @@ __export(worker_thread_exports, {
|
|
|
21
21
|
default: () => worker_thread_default
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(worker_thread_exports);
|
|
24
|
-
var
|
|
24
|
+
var import_chunk_MWCHENAG = require("./chunk-MWCHENAG.cjs");
|
|
25
25
|
var import_chunk_SG7ODKRM = require("./chunk-SG7ODKRM.cjs");
|
|
26
26
|
var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
|
|
27
27
|
var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
|
|
28
28
|
var import_node_worker_threads = require("node:worker_threads");
|
|
29
29
|
var require_worker_thread = (0, import_chunk_ABYVSU2C.__commonJS)({
|
|
30
30
|
"src/worker-thread.ts"() {
|
|
31
|
-
(0,
|
|
31
|
+
(0, import_chunk_MWCHENAG.init_worker_task)();
|
|
32
32
|
if (import_node_worker_threads.parentPort) {
|
|
33
33
|
import_node_worker_threads.parentPort.on("message", async (task) => {
|
|
34
|
-
return import_node_worker_threads.parentPort.postMessage(await (0,
|
|
34
|
+
return import_node_worker_threads.parentPort.postMessage(await (0, import_chunk_MWCHENAG.performTask)(task));
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@markw65/monkeyc-optimizer",
|
|
3
3
|
"type": "commonjs",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.42",
|
|
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",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"build-debug": "node esbuild.mjs",
|
|
23
23
|
"build-release": "node esbuild.mjs --release",
|
|
24
24
|
"prepack": "node esbuild.mjs --release && mkdir -p bin && cp test/cft-font-info.js bin",
|
|
25
|
-
"test": "npm run test-mocha && npm run test-analysis && npm run test-optimized && npm run test-unopt && npm run test-post-only && npm run test-remote && npm run test-remote-tests && npm run test-personality",
|
|
25
|
+
"test": "npm run test-mocha && npm run test-analysis && npm run test-optimized && npm run test-unopt && npm run test-post-only && npm run test-tiny && npm run test-remote && npm run test-remote-tests && npm run test-personality",
|
|
26
26
|
"test-mocha": "npx mocha --timeout 999999 build/mocha.cjs",
|
|
27
27
|
"test-remote": "node ./test/test.js --showInfo --postOptimize --product=pick-one --github",
|
|
28
28
|
"test-remote-tests": "node ./test/test.js --showInfo --postOptimize --product=pick-one --run-tests --github",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"test-garmin-opt": "node test/test.js --typeCheckLevel Strict --skipOptimization --garminOptLevel=2 --run-tests --product=fenix5 --product=fr235 --jungle ./test/OptimizerTests/monkey.jungle",
|
|
33
33
|
"test-personality": "node test/test-personality.js",
|
|
34
34
|
"test-analysis": "node test/test.js --showInfo --typeCheckLevel Strict --product=fr955 --sourceFile 'test/analysis/*.mc'",
|
|
35
|
+
"test-tiny": "node test/test.js --postOptimize --showInfo --typeCheckLevel Strict --run-tests --product=pick-one --jungle test/tiny/array-overflow/monkey.jungle",
|
|
35
36
|
"eslint": "npx eslint ."
|
|
36
37
|
},
|
|
37
38
|
"bin": {
|