@markw65/monkeyc-optimizer 1.1.32 → 1.1.33

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 CHANGED
@@ -922,3 +922,17 @@ No functional change, just fixes a typo that broke the typescript exports.
922
922
  - sdk-6.2.x fixes [this finally bug](https://forums.garmin.com/developer/connect-iq/i/bug-reports/finally-doesn-t-work-as-expected), so that now all the examples work correctly (ie the `finally` block always executes, as expected, no matter how you exit the `try` or `catch` blocks). I've updated the way the control flow graph is built to match this behavior.
923
923
 
924
924
  - sdk-6.2.x fixes [this continue in switch issue](https://forums.garmin.com/developer/connect-iq/i/bug-reports/continue-in-a-switch-statement-behaves-surprisingly), by making `continue` in a `switch` continue the loop containing the switch (or its a compile time error if there's no loop). This matches the behavior of C and C++, for example. I've updated the optimizer to interpret `continue` appropriately, depending on the sdk version.
925
+
926
+ ### 1.1.33
927
+
928
+ - Update to [@markw65/prettier-plugin-monkeyc@1.0.51](https://github.com/markw65/prettier-plugin-monkeyc#1051)
929
+
930
+ - Makes it compatible with prettier@3.0.0
931
+
932
+ - Bug fixes
933
+
934
+ - Fix a problem that could incorrectly optimize an array-init
935
+
936
+ - Optimizations
937
+
938
+ - Enable the array-init optimization in a few more cases
package/build/api.cjs CHANGED
@@ -18,44 +18,44 @@ 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_NUE3G2QE.checkCompilerVersion,
22
- collectNamespaces: () => import_chunk_NUE3G2QE.collectNamespaces,
23
- createDocumentationMap: () => import_chunk_NUE3G2QE.createDocumentationMap,
24
- diagnostic: () => import_chunk_NUE3G2QE.diagnostic,
25
- diagnosticHelper: () => import_chunk_NUE3G2QE.diagnosticHelper,
26
- findNamesInScope: () => import_chunk_NUE3G2QE.findNamesInScope,
27
- findUsingForNode: () => import_chunk_NUE3G2QE.findUsingForNode,
28
- formatAst: () => import_chunk_NUE3G2QE.formatAst,
29
- formatAstLongLines: () => import_chunk_NUE3G2QE.formatAstLongLines,
30
- getApiFunctionInfo: () => import_chunk_NUE3G2QE.getApiFunctionInfo,
31
- getApiMapping: () => import_chunk_NUE3G2QE.getApiMapping,
32
- getSuperClasses: () => import_chunk_NUE3G2QE.getSuperClasses,
21
+ checkCompilerVersion: () => import_chunk_7ANQTFGD.checkCompilerVersion,
22
+ collectNamespaces: () => import_chunk_7ANQTFGD.collectNamespaces,
23
+ createDocumentationMap: () => import_chunk_7ANQTFGD.createDocumentationMap,
24
+ diagnostic: () => import_chunk_7ANQTFGD.diagnostic,
25
+ diagnosticHelper: () => import_chunk_7ANQTFGD.diagnosticHelper,
26
+ findNamesInScope: () => import_chunk_7ANQTFGD.findNamesInScope,
27
+ findUsingForNode: () => import_chunk_7ANQTFGD.findUsingForNode,
28
+ formatAst: () => import_chunk_7ANQTFGD.formatAst,
29
+ formatAstLongLines: () => import_chunk_7ANQTFGD.formatAstLongLines,
30
+ getApiFunctionInfo: () => import_chunk_7ANQTFGD.getApiFunctionInfo,
31
+ getApiMapping: () => import_chunk_7ANQTFGD.getApiMapping,
32
+ getSuperClasses: () => import_chunk_7ANQTFGD.getSuperClasses,
33
33
  hasProperty: () => import_chunk_MBTLUWXR.hasProperty,
34
- isClassVariable: () => import_chunk_NUE3G2QE.isClassVariable,
35
- isLocal: () => import_chunk_NUE3G2QE.isLocal,
36
- isLookupCandidate: () => import_chunk_NUE3G2QE.isLookupCandidate,
37
- isStateNode: () => import_chunk_NUE3G2QE.isStateNode,
38
- lookupByFullName: () => import_chunk_NUE3G2QE.lookupByFullName,
39
- lookupNext: () => import_chunk_NUE3G2QE.lookupNext,
40
- lookupResultContains: () => import_chunk_NUE3G2QE.lookupResultContains,
41
- lookupWithType: () => import_chunk_NUE3G2QE.lookupWithType,
42
- makeToyboxLink: () => import_chunk_NUE3G2QE.makeToyboxLink,
43
- mapVarDeclsByType: () => import_chunk_NUE3G2QE.mapVarDeclsByType,
44
- markInvokeClassMethod: () => import_chunk_NUE3G2QE.markInvokeClassMethod,
45
- parseSdkVersion: () => import_chunk_NUE3G2QE.parseSdkVersion,
46
- sameLookupResult: () => import_chunk_NUE3G2QE.sameLookupResult,
34
+ isClassVariable: () => import_chunk_7ANQTFGD.isClassVariable,
35
+ isLocal: () => import_chunk_7ANQTFGD.isLocal,
36
+ isLookupCandidate: () => import_chunk_7ANQTFGD.isLookupCandidate,
37
+ isStateNode: () => import_chunk_7ANQTFGD.isStateNode,
38
+ lookupByFullName: () => import_chunk_7ANQTFGD.lookupByFullName,
39
+ lookupNext: () => import_chunk_7ANQTFGD.lookupNext,
40
+ lookupResultContains: () => import_chunk_7ANQTFGD.lookupResultContains,
41
+ lookupWithType: () => import_chunk_7ANQTFGD.lookupWithType,
42
+ makeToyboxLink: () => import_chunk_7ANQTFGD.makeToyboxLink,
43
+ mapVarDeclsByType: () => import_chunk_7ANQTFGD.mapVarDeclsByType,
44
+ markInvokeClassMethod: () => import_chunk_7ANQTFGD.markInvokeClassMethod,
45
+ parseSdkVersion: () => import_chunk_7ANQTFGD.parseSdkVersion,
46
+ sameLookupResult: () => import_chunk_7ANQTFGD.sameLookupResult,
47
47
  traverseAst: () => import_chunk_MBTLUWXR.traverseAst,
48
- variableDeclarationName: () => import_chunk_NUE3G2QE.variableDeclarationName,
49
- visitReferences: () => import_chunk_NUE3G2QE.visitReferences,
50
- visit_resources: () => import_chunk_NUE3G2QE.visit_resources,
51
- visitorNode: () => import_chunk_NUE3G2QE.visitorNode
48
+ variableDeclarationName: () => import_chunk_7ANQTFGD.variableDeclarationName,
49
+ visitReferences: () => import_chunk_7ANQTFGD.visitReferences,
50
+ visit_resources: () => import_chunk_7ANQTFGD.visit_resources,
51
+ visitorNode: () => import_chunk_7ANQTFGD.visitorNode
52
52
  });
53
53
  module.exports = __toCommonJS(api_exports);
54
- var import_chunk_NUE3G2QE = require("./chunk-NUE3G2QE.cjs");
54
+ var import_chunk_7ANQTFGD = require("./chunk-7ANQTFGD.cjs");
55
55
  var import_chunk_PVBIKZYZ = require("./chunk-PVBIKZYZ.cjs");
56
56
  var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
57
57
  var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
58
- (0, import_chunk_NUE3G2QE.init_api)();
58
+ (0, import_chunk_7ANQTFGD.init_api)();
59
59
  // Annotate the CommonJS export names for ESM import in node:
60
60
  0 && (module.exports = {
61
61
  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_NUE3G2QE_exports = {};
30
- __export(chunk_NUE3G2QE_exports, {
29
+ var chunk_7ANQTFGD_exports = {};
30
+ __export(chunk_7ANQTFGD_exports, {
31
31
  EnumTagsConst: () => EnumTagsConst,
32
32
  LastTypeTag: () => LastTypeTag,
33
33
  ObjectLikeTagsConst: () => ObjectLikeTagsConst,
@@ -122,7 +122,7 @@ __export(chunk_NUE3G2QE_exports, {
122
122
  visitorNode: () => visitorNode,
123
123
  xml_util_exports: () => xml_util_exports
124
124
  });
125
- module.exports = __toCommonJS(chunk_NUE3G2QE_exports);
125
+ module.exports = __toCommonJS(chunk_7ANQTFGD_exports);
126
126
  var import_chunk_PVBIKZYZ = require("./chunk-PVBIKZYZ.cjs");
127
127
  var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
128
128
  var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
@@ -22562,6 +22562,7 @@ function optimizeArrayInit(func, block, index, context, interpState) {
22562
22562
  interpState = cloneState2(null);
22563
22563
  }
22564
22564
  const putvStarts = [];
22565
+ const dupsToFix = [];
22565
22566
  let i;
22566
22567
  let initInst = null;
22567
22568
  let initType = null;
@@ -22594,6 +22595,12 @@ function optimizeArrayInit(func, block, index, context, interpState) {
22594
22595
  usedLocals |= 1n << BigInt(bc.arg);
22595
22596
  }
22596
22597
  const delta = interpState.stack.length - depth;
22598
+ if (delta < 0) {
22599
+ break;
22600
+ }
22601
+ if (bc.op === 46 && bc.arg >= delta - 1) {
22602
+ dupsToFix[k] = putvStarts.length;
22603
+ }
22597
22604
  if (delta === 3) {
22598
22605
  const t = interpState.stack[interpState.stack.length - 1].type;
22599
22606
  if (bc.op === 18) {
@@ -22607,9 +22614,6 @@ function optimizeArrayInit(func, block, index, context, interpState) {
22607
22614
  }
22608
22615
  thisInit = null;
22609
22616
  }
22610
- if (delta < 0 || bc.op === 46 && bc.arg >= delta - 1) {
22611
- break;
22612
- }
22613
22617
  }
22614
22618
  if (found === i)
22615
22619
  break;
@@ -22677,6 +22681,11 @@ function optimizeArrayInit(func, block, index, context, interpState) {
22677
22681
  /* aputv */
22678
22682
  );
22679
22683
  };
22684
+ dupsToFix.forEach((x, n) => {
22685
+ const bc = block.bytecodes[n];
22686
+ (0, import_node_assert9.default)(bc.op === 46 && bc.arg >= 2);
22687
+ bc.arg -= 2;
22688
+ });
22680
22689
  convertAputv(i - 1);
22681
22690
  for (let i2 = putvStarts.length; i2--; ) {
22682
22691
  const offset = putvStarts[i2];
@@ -22796,6 +22805,11 @@ ${blockToString(block, context)}`
22796
22805
  if (local >= 0) {
22797
22806
  block.bytecodes.splice(i, 0, bytecode(2, void 0));
22798
22807
  }
22808
+ dupsToFix.forEach((x, n) => {
22809
+ const bc = block.bytecodes[n];
22810
+ (0, import_node_assert9.default)(bc.op === 46 && bc.arg >= 2);
22811
+ bc.arg += (putvStarts.length - x - 1) * 2;
22812
+ });
22799
22813
  for (let i2 = putvStarts.length; i2-- > 1; ) {
22800
22814
  block.bytecodes.splice(putvStarts[i2], 2);
22801
22815
  }
@@ -29893,7 +29907,7 @@ async function generateOneConfig(buildConfig, manifestXML, dependencyFiles, conf
29893
29907
  const opt_time = await (0, import_chunk_PVBIKZYZ.first_modified)(
29894
29908
  Object.values(fnMap).map((v) => v.output)
29895
29909
  );
29896
- if (source_time < opt_time && 1690215897566 < opt_time) {
29910
+ if (source_time < opt_time && 1690936956222 < opt_time) {
29897
29911
  return {
29898
29912
  hasTests,
29899
29913
  diagnostics: prevDiagnostics,
@@ -29931,7 +29945,7 @@ async function generateOneConfig(buildConfig, manifestXML, dependencyFiles, conf
29931
29945
  hasTests: hasTests2,
29932
29946
  diagnostics,
29933
29947
  sdkVersion,
29934
- optimizerVersion: "1.1.32",
29948
+ optimizerVersion: "1.1.33",
29935
29949
  ...Object.fromEntries(
29936
29950
  configOptionsToCheck.map((option) => [option, config[option]])
29937
29951
  )
@@ -18,29 +18,29 @@ 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_NUE3G2QE.StateNodeAttributes,
22
- buildOptimizedProject: () => import_chunk_NUE3G2QE.buildOptimizedProject,
21
+ StateNodeAttributes: () => import_chunk_7ANQTFGD.StateNodeAttributes,
22
+ buildOptimizedProject: () => import_chunk_7ANQTFGD.buildOptimizedProject,
23
23
  copyRecursiveAsNeeded: () => import_chunk_PVBIKZYZ.copyRecursiveAsNeeded,
24
- defaultConfig: () => import_chunk_NUE3G2QE.defaultConfig,
25
- display: () => import_chunk_NUE3G2QE.display,
26
- generateApiMirTests: () => import_chunk_NUE3G2QE.generateApiMirTests,
27
- generateOneConfig: () => import_chunk_NUE3G2QE.generateOneConfig,
28
- generateOptimizedProject: () => import_chunk_NUE3G2QE.generateOptimizedProject,
29
- getConfig: () => import_chunk_NUE3G2QE.getConfig,
30
- getProjectAnalysis: () => import_chunk_NUE3G2QE.getProjectAnalysis,
31
- get_jungle: () => import_chunk_NUE3G2QE.get_jungle,
32
- isErrorWithLocation: () => import_chunk_NUE3G2QE.isErrorWithLocation,
33
- launchSimulator: () => import_chunk_NUE3G2QE.launchSimulator,
34
- manifestProducts: () => import_chunk_NUE3G2QE.manifestProducts,
35
- mctree: () => import_chunk_NUE3G2QE.mctree,
36
- simulateProgram: () => import_chunk_NUE3G2QE.simulateProgram
24
+ defaultConfig: () => import_chunk_7ANQTFGD.defaultConfig,
25
+ display: () => import_chunk_7ANQTFGD.display,
26
+ generateApiMirTests: () => import_chunk_7ANQTFGD.generateApiMirTests,
27
+ generateOneConfig: () => import_chunk_7ANQTFGD.generateOneConfig,
28
+ generateOptimizedProject: () => import_chunk_7ANQTFGD.generateOptimizedProject,
29
+ getConfig: () => import_chunk_7ANQTFGD.getConfig,
30
+ getProjectAnalysis: () => import_chunk_7ANQTFGD.getProjectAnalysis,
31
+ get_jungle: () => import_chunk_7ANQTFGD.get_jungle,
32
+ isErrorWithLocation: () => import_chunk_7ANQTFGD.isErrorWithLocation,
33
+ launchSimulator: () => import_chunk_7ANQTFGD.launchSimulator,
34
+ manifestProducts: () => import_chunk_7ANQTFGD.manifestProducts,
35
+ mctree: () => import_chunk_7ANQTFGD.mctree,
36
+ simulateProgram: () => import_chunk_7ANQTFGD.simulateProgram
37
37
  });
38
38
  module.exports = __toCommonJS(optimizer_exports);
39
- var import_chunk_NUE3G2QE = require("./chunk-NUE3G2QE.cjs");
39
+ var import_chunk_7ANQTFGD = require("./chunk-7ANQTFGD.cjs");
40
40
  var import_chunk_PVBIKZYZ = require("./chunk-PVBIKZYZ.cjs");
41
41
  var import_chunk_MBTLUWXR = require("./chunk-MBTLUWXR.cjs");
42
42
  var import_chunk_ABYVSU2C = require("./chunk-ABYVSU2C.cjs");
43
- (0, import_chunk_NUE3G2QE.init_optimizer)();
43
+ (0, import_chunk_7ANQTFGD.init_optimizer)();
44
44
  // Annotate the CommonJS export names for ESM import in node:
45
45
  0 && (module.exports = {
46
46
  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_NUE3G2QE.SectionKinds,
22
- appSupport: () => import_chunk_NUE3G2QE.appSupport,
23
- connectiq: () => import_chunk_NUE3G2QE.connectiq,
24
- getDeviceInfo: () => import_chunk_NUE3G2QE.getDeviceInfo,
25
- getFunctionDocumentation: () => import_chunk_NUE3G2QE.getFunctionDocumentation,
26
- getLanguages: () => import_chunk_NUE3G2QE.getLanguages,
27
- getSdkPath: () => import_chunk_NUE3G2QE.getSdkPath,
28
- isWin: () => import_chunk_NUE3G2QE.isWin,
29
- optimizeProgram: () => import_chunk_NUE3G2QE.optimizeProgram,
30
- readPrg: () => import_chunk_NUE3G2QE.readPrg,
31
- readPrgWithOffsets: () => import_chunk_NUE3G2QE.readPrgWithOffsets,
32
- xmlUtil: () => import_chunk_NUE3G2QE.xml_util_exports
21
+ SectionKinds: () => import_chunk_7ANQTFGD.SectionKinds,
22
+ appSupport: () => import_chunk_7ANQTFGD.appSupport,
23
+ connectiq: () => import_chunk_7ANQTFGD.connectiq,
24
+ getDeviceInfo: () => import_chunk_7ANQTFGD.getDeviceInfo,
25
+ getFunctionDocumentation: () => import_chunk_7ANQTFGD.getFunctionDocumentation,
26
+ getLanguages: () => import_chunk_7ANQTFGD.getLanguages,
27
+ getSdkPath: () => import_chunk_7ANQTFGD.getSdkPath,
28
+ isWin: () => import_chunk_7ANQTFGD.isWin,
29
+ optimizeProgram: () => import_chunk_7ANQTFGD.optimizeProgram,
30
+ readPrg: () => import_chunk_7ANQTFGD.readPrg,
31
+ readPrgWithOffsets: () => import_chunk_7ANQTFGD.readPrgWithOffsets,
32
+ xmlUtil: () => import_chunk_7ANQTFGD.xml_util_exports
33
33
  });
34
34
  module.exports = __toCommonJS(sdk_util_exports);
35
- var import_chunk_NUE3G2QE = require("./chunk-NUE3G2QE.cjs");
35
+ var import_chunk_7ANQTFGD = require("./chunk-7ANQTFGD.cjs");
36
36
  var import_chunk_PVBIKZYZ = require("./chunk-PVBIKZYZ.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_NUE3G2QE.init_sdk_util)();
39
+ (0, import_chunk_7ANQTFGD.init_sdk_util)();
40
40
  // Annotate the CommonJS export names for ESM import in node:
41
41
  0 && (module.exports = {
42
42
  SectionKinds,
@@ -14,6 +14,7 @@ export type RemoteProject = string | {
14
14
  jungleContent?: string[];
15
15
  garminOptLevel?: number;
16
16
  test?: boolean | string[];
17
+ branch?: string;
17
18
  };
18
19
  export declare const githubProjects: RemoteProject[];
19
20
  export declare function fetchGitProjects(projects: RemoteProject[], testOnly: boolean, skipRemote: boolean): Promise<(string | {
@@ -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_NUE3G2QE = require("./chunk-NUE3G2QE.cjs");
24
+ var import_chunk_7ANQTFGD = require("./chunk-7ANQTFGD.cjs");
25
25
  var import_chunk_PVBIKZYZ = require("./chunk-PVBIKZYZ.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_NUE3G2QE.init_worker_task)();
31
+ (0, import_chunk_7ANQTFGD.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_NUE3G2QE.performTask)(task));
34
+ return import_node_worker_threads.parentPort.postMessage(await (0, import_chunk_7ANQTFGD.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.32",
4
+ "version": "1.1.33",
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",
@@ -48,7 +48,7 @@
48
48
  "author": "markw65",
49
49
  "license": "MIT",
50
50
  "dependencies": {
51
- "@markw65/prettier-plugin-monkeyc": "^1.0.49"
51
+ "@markw65/prettier-plugin-monkeyc": "^1.0.51"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/chai": "^4.3.4",