@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 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: () => import_chunk_BJHWDTEM.checkCompilerVersion,
22
- collectNamespaces: () => import_chunk_BJHWDTEM.collectNamespaces,
23
- createDocumentationMap: () => import_chunk_BJHWDTEM.createDocumentationMap,
24
- diagnostic: () => import_chunk_BJHWDTEM.diagnostic,
25
- diagnosticHelper: () => import_chunk_BJHWDTEM.diagnosticHelper,
26
- findNamesInScope: () => import_chunk_BJHWDTEM.findNamesInScope,
27
- findUsingForNode: () => import_chunk_BJHWDTEM.findUsingForNode,
28
- formatAst: () => import_chunk_BJHWDTEM.formatAst,
29
- formatAstLongLines: () => import_chunk_BJHWDTEM.formatAstLongLines,
30
- formatScopedName: () => import_chunk_BJHWDTEM.formatScopedName,
31
- getApiFunctionInfo: () => import_chunk_BJHWDTEM.getApiFunctionInfo,
32
- getApiMapping: () => import_chunk_BJHWDTEM.getApiMapping,
33
- getSuperClasses: () => import_chunk_BJHWDTEM.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: () => import_chunk_BJHWDTEM.isClassVariable,
36
- isLocal: () => import_chunk_BJHWDTEM.isLocal,
37
- isLookupCandidate: () => import_chunk_BJHWDTEM.isLookupCandidate,
38
- isStateNode: () => import_chunk_BJHWDTEM.isStateNode,
39
- lookupByFullName: () => import_chunk_BJHWDTEM.lookupByFullName,
40
- lookupNext: () => import_chunk_BJHWDTEM.lookupNext,
41
- lookupResultContains: () => import_chunk_BJHWDTEM.lookupResultContains,
42
- lookupWithType: () => import_chunk_BJHWDTEM.lookupWithType,
43
- makeToyboxLink: () => import_chunk_BJHWDTEM.makeToyboxLink,
44
- mapVarDeclsByType: () => import_chunk_BJHWDTEM.mapVarDeclsByType,
45
- markInvokeClassMethod: () => import_chunk_BJHWDTEM.markInvokeClassMethod,
46
- parseSdkVersion: () => import_chunk_BJHWDTEM.parseSdkVersion,
47
- resolveDiagnostics: () => import_chunk_BJHWDTEM.resolveDiagnostics,
48
- resolveDiagnosticsMap: () => import_chunk_BJHWDTEM.resolveDiagnosticsMap,
49
- sameLookupResult: () => import_chunk_BJHWDTEM.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: () => import_chunk_BJHWDTEM.variableDeclarationName,
52
- visitReferences: () => import_chunk_BJHWDTEM.visitReferences,
53
- visit_resources: () => import_chunk_BJHWDTEM.visit_resources,
54
- visitorNode: () => import_chunk_BJHWDTEM.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 import_chunk_BJHWDTEM = require("./chunk-BJHWDTEM.cjs");
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, import_chunk_BJHWDTEM.init_api)();
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 chunk_BJHWDTEM_exports = {};
30
- __export(chunk_BJHWDTEM_exports, {
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(chunk_BJHWDTEM_exports);
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 && callees[0].type === "FunctionDeclaration") {
17155
+ if (callees.length === 1) {
17156
17156
  const callee = callees[0].node;
17157
- if (!context && callee.optimizable && !callee.hasOverride && node.arguments.every((n) => (0, import_chunk_MBTLUWXR.getNodeValue)(n)[0] !== null)) {
17158
- const ret = evaluateFunction(istate, callee, node.arguments);
17159
- if (ret) {
17160
- inlineDiagnostic(state, callees[0], node, null);
17161
- return (0, import_chunk_MBTLUWXR.withLoc)(ret, node, node);
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
- if (shouldInline(state, callees[0], node, context)) {
17165
- const ret = inlineFunction(state, callees[0], node, context);
17166
- if (ret) {
17167
- return ret;
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
- bc.arg += (putvStarts.length - x - 1) * 2;
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 && 1707701537178 < 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.41",
28363
+ optimizerVersion: "1.1.42",
28352
28364
  ...Object.fromEntries(
28353
28365
  configOptionsToCheck.map((option) => [option, config[option]])
28354
28366
  )
@@ -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: () => import_chunk_BJHWDTEM.StateNodeAttributes,
22
- buildOptimizedProject: () => import_chunk_BJHWDTEM.buildOptimizedProject,
21
+ StateNodeAttributes: () => import_chunk_MWCHENAG.StateNodeAttributes,
22
+ buildOptimizedProject: () => import_chunk_MWCHENAG.buildOptimizedProject,
23
23
  copyRecursiveAsNeeded: () => import_chunk_SG7ODKRM.copyRecursiveAsNeeded,
24
- defaultConfig: () => import_chunk_BJHWDTEM.defaultConfig,
25
- display: () => import_chunk_BJHWDTEM.display,
26
- generateOneConfig: () => import_chunk_BJHWDTEM.generateOneConfig,
27
- generateOptimizedProject: () => import_chunk_BJHWDTEM.generateOptimizedProject,
28
- getConfig: () => import_chunk_BJHWDTEM.getConfig,
29
- getProjectAnalysis: () => import_chunk_BJHWDTEM.getProjectAnalysis,
30
- get_jungle: () => import_chunk_BJHWDTEM.get_jungle,
31
- isErrorWithLocation: () => import_chunk_BJHWDTEM.isErrorWithLocation,
32
- launchSimulator: () => import_chunk_BJHWDTEM.launchSimulator,
33
- manifestProducts: () => import_chunk_BJHWDTEM.manifestProducts,
34
- mctree: () => import_chunk_BJHWDTEM.mctree,
35
- simulateProgram: () => import_chunk_BJHWDTEM.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 import_chunk_BJHWDTEM = require("./chunk-BJHWDTEM.cjs");
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, import_chunk_BJHWDTEM.init_optimizer)();
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,
@@ -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: () => import_chunk_BJHWDTEM.SectionKinds,
22
- appSupport: () => import_chunk_BJHWDTEM.appSupport,
23
- connectiq: () => import_chunk_BJHWDTEM.connectiq,
24
- getDeviceInfo: () => import_chunk_BJHWDTEM.getDeviceInfo,
25
- getFunctionDocumentation: () => import_chunk_BJHWDTEM.getFunctionDocumentation,
26
- getLanguages: () => import_chunk_BJHWDTEM.getLanguages,
27
- getSdkPath: () => import_chunk_BJHWDTEM.getSdkPath,
28
- isWin: () => import_chunk_BJHWDTEM.isWin,
29
- optimizeProgram: () => import_chunk_BJHWDTEM.optimizeProgram,
30
- readPrg: () => import_chunk_BJHWDTEM.readPrg,
31
- readPrgWithOffsets: () => import_chunk_BJHWDTEM.readPrgWithOffsets,
32
- xmlUtil: () => import_chunk_BJHWDTEM.xml_util_exports
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 import_chunk_BJHWDTEM = require("./chunk-BJHWDTEM.cjs");
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, import_chunk_BJHWDTEM.init_sdk_util)();
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,
@@ -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 import_chunk_BJHWDTEM = require("./chunk-BJHWDTEM.cjs");
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, import_chunk_BJHWDTEM.init_worker_task)();
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, import_chunk_BJHWDTEM.performTask)(task));
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.41",
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": {