@jhlagado/azm 0.2.0 → 0.2.2

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.
Files changed (334) hide show
  1. package/README.md +110 -78
  2. package/dist/src/api-compile.d.ts +0 -2
  3. package/dist/src/api-compile.js +2 -9
  4. package/dist/src/assembly/address-planning.js +21 -1
  5. package/dist/src/assembly/program-emission.js +1 -0
  6. package/dist/src/cli/parse-args.d.ts +0 -1
  7. package/dist/src/cli/parse-args.js +0 -7
  8. package/dist/src/cli/write-artifacts.js +0 -11
  9. package/dist/src/core/compile.js +192 -9
  10. package/dist/src/expansion/op-expansion.js +2 -0
  11. package/dist/src/model/expression.d.ts +4 -0
  12. package/dist/src/model/source-item.d.ts +11 -0
  13. package/dist/src/outputs/index.js +0 -2
  14. package/dist/src/outputs/types.d.ts +3 -16
  15. package/dist/src/outputs/write-asm80.js +206 -5
  16. package/dist/src/register-care/analyze.js +36 -8
  17. package/dist/src/register-care/annotations.js +33 -146
  18. package/dist/src/register-care/fix.d.ts +2 -0
  19. package/dist/src/register-care/fix.js +52 -0
  20. package/dist/src/register-care/instruction-shape.d.ts +11 -0
  21. package/dist/src/register-care/instruction-shape.js +129 -0
  22. package/dist/src/register-care/liveness.js +15 -7
  23. package/dist/src/register-care/profiles.js +4 -0
  24. package/dist/src/register-care/programModel.js +79 -13
  25. package/dist/src/register-care/report.d.ts +2 -1
  26. package/dist/src/register-care/report.js +91 -34
  27. package/dist/src/register-care/routine-summaries.d.ts +6 -0
  28. package/dist/src/register-care/routine-summaries.js +89 -0
  29. package/dist/src/register-care/summaries.d.ts +3 -3
  30. package/dist/src/register-care/summaries.js +42 -75
  31. package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.js +33 -51
  32. package/dist/src/register-care/types.d.ts +6 -1
  33. package/dist/src/semantics/expression-evaluation.d.ts +7 -3
  34. package/dist/src/semantics/expression-evaluation.js +57 -0
  35. package/dist/src/source/strip-line-comment.d.ts +2 -0
  36. package/dist/src/source/strip-line-comment.js +26 -0
  37. package/dist/src/syntax/directive-aliases.js +9 -10
  38. package/dist/src/syntax/parse-diagnostics.d.ts +12 -0
  39. package/dist/src/syntax/parse-diagnostics.js +18 -0
  40. package/dist/src/syntax/parse-expression.js +34 -9
  41. package/dist/src/syntax/parse-line.js +150 -54
  42. package/dist/src/tooling/case-style.js +3 -0
  43. package/docs/reference/cli.md +6 -4
  44. package/docs/reference/tooling-api.md +13 -9
  45. package/package.json +4 -6
  46. package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
  47. package/dist/legacy-root-azm/src/analysis.js +0 -41
  48. package/dist/legacy-root-azm/src/compile.d.ts +0 -10
  49. package/dist/legacy-root-azm/src/compile.js +0 -186
  50. package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
  51. package/dist/legacy-root-azm/src/compileShared.js +0 -7
  52. package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
  53. package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
  54. package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
  55. package/dist/legacy-root-azm/src/formats/index.js +0 -17
  56. package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
  57. package/dist/legacy-root-azm/src/formats/range.js +0 -45
  58. package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
  59. package/dist/legacy-root-azm/src/formats/types.js +0 -1
  60. package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
  61. package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
  62. package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
  63. package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
  64. package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
  65. package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
  66. package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
  67. package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
  68. package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
  69. package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
  70. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
  71. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
  72. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
  73. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
  74. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
  75. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
  76. package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
  77. package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
  78. package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
  79. package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
  80. package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
  81. package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
  82. package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
  83. package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
  84. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
  85. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
  86. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
  87. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
  88. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
  89. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
  90. package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
  91. package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
  92. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
  93. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
  94. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
  95. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
  96. package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
  97. package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
  98. package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
  99. package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
  100. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
  101. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
  102. package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
  103. package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
  104. package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
  105. package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
  106. package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
  107. package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
  108. package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
  109. package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
  110. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
  111. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
  112. package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
  113. package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
  114. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
  115. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
  116. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
  117. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
  118. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
  119. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
  120. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
  121. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
  122. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
  123. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
  124. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
  125. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
  126. package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
  127. package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
  128. package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
  129. package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
  130. package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
  131. package/dist/legacy-root-azm/src/frontend/source.js +0 -58
  132. package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
  133. package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
  134. package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
  135. package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
  136. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
  137. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
  138. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
  139. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
  140. package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
  141. package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
  142. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
  143. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
  144. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
  145. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
  146. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
  147. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
  148. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
  149. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
  150. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
  151. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
  152. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
  153. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
  154. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
  155. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
  156. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
  157. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
  158. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
  159. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
  160. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
  161. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
  162. package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
  163. package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
  164. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
  165. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
  166. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
  167. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
  168. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
  169. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
  170. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
  171. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
  172. package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
  173. package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
  174. package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
  175. package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
  176. package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
  177. package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
  178. package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
  179. package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
  180. package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
  181. package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
  182. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
  183. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
  184. package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
  185. package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
  186. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
  187. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
  188. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
  189. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
  190. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
  191. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
  192. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
  193. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
  194. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
  195. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
  196. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
  197. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
  198. package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
  199. package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
  200. package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
  201. package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
  202. package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
  203. package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
  204. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
  205. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
  206. package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
  207. package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
  208. package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
  209. package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
  210. package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
  211. package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
  212. package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
  213. package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
  214. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
  215. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
  216. package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
  217. package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
  218. package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
  219. package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
  220. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
  221. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
  222. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
  223. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
  224. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
  225. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
  226. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
  227. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
  228. package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
  229. package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
  230. package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
  231. package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
  232. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
  233. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
  234. package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
  235. package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
  236. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
  237. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
  238. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
  239. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
  240. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
  241. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
  242. package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
  243. package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
  244. package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
  245. package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
  246. package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
  247. package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
  248. package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
  249. package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
  250. package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
  251. package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
  252. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
  253. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
  254. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
  255. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
  256. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
  257. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
  258. package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
  259. package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
  260. package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
  261. package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
  262. package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
  263. package/dist/legacy-root-azm/src/packageInfo.js +0 -15
  264. package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
  265. package/dist/legacy-root-azm/src/pathCompare.js +0 -26
  266. package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
  267. package/dist/legacy-root-azm/src/pipeline.js +0 -1
  268. package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
  269. package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
  270. package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
  271. package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
  272. package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
  273. package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
  274. package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
  275. package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
  276. package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
  277. package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
  278. package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
  279. package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
  280. package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
  281. package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
  282. package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
  283. package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
  284. package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
  285. package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
  286. package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
  287. package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
  288. package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
  289. package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
  290. package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
  291. package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
  292. package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
  293. package/dist/legacy-root-azm/src/semantics/env.js +0 -432
  294. package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
  295. package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
  296. package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
  297. package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
  298. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
  299. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
  300. package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
  301. package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
  302. package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
  303. package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
  304. package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
  305. package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
  306. package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
  307. package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
  308. package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
  309. package/dist/legacy-root-azm/src/z80/effects.js +0 -516
  310. package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
  311. package/dist/legacy-root-azm/src/z80/encode.js +0 -412
  312. package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
  313. package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
  314. package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
  315. package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
  316. package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
  317. package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
  318. package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
  319. package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
  320. package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
  321. package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
  322. package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
  323. package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
  324. package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
  325. package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
  326. package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
  327. package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
  328. package/dist/src/outputs/write-listing.d.ts +0 -2
  329. package/dist/src/outputs/write-listing.js +0 -79
  330. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.d.ts +0 -0
  331. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.js +0 -0
  332. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.d.ts +0 -0
  333. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.js +0 -0
  334. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.d.ts +0 -0
@@ -1,186 +0,0 @@
1
- import { dirname, extname } from 'node:path';
2
- import { readFile } from 'node:fs/promises';
3
- import { analyzeLoadedProgram } from './analysis.js';
4
- import { hasErrors, normalizePath } from './compileShared.js';
5
- import { DiagnosticIds } from './diagnosticTypes.js';
6
- import { buildDirectiveAliasPolicy, defaultDirectiveAliasProfileName, readDirectiveAliasProfile, } from './frontend/directiveAliases.js';
7
- import { isSupportedSourcePath } from './frontend/sourceExtensions.js';
8
- import { emitProgram } from './lowering/emit.js';
9
- import { loadProgram } from './sourceLoader.js';
10
- import { analyzeRegisterCare } from './registerCare/analyze.js';
11
- import { parseInterfaceContracts } from './registerCare/smartComments.js';
12
- import { readPackageVersion } from './packageInfo.js';
13
- function withDefaults(options) {
14
- const anyPrimaryEmitSpecified = [options.emitBin, options.emitHex, options.emitD8m].some((v) => v !== undefined);
15
- const emitBin = anyPrimaryEmitSpecified ? (options.emitBin ?? false) : true;
16
- const emitHex = anyPrimaryEmitSpecified ? (options.emitHex ?? false) : true;
17
- const emitD8m = anyPrimaryEmitSpecified ? (options.emitD8m ?? false) : true;
18
- // Listing is a sidecar artifact: default to on unless explicitly suppressed.
19
- const emitListing = options.emitListing ?? true;
20
- const emitAsm80 = options.emitAsm80 ?? false;
21
- return { emitBin, emitHex, emitD8m, emitListing, emitAsm80 };
22
- }
23
- /**
24
- * Compile an AZM/ASM80-family program starting from an entry file.
25
- *
26
- * - Expands textual includes transitively with deterministic cycle checks.
27
- * - Runs parse → semantics → lowering → format writers.
28
- * - Produces artifacts in-memory via `deps.formats`.
29
- * - Defaults to emitting BIN + HEX + D8M unless an emit flag is explicitly provided.
30
- */
31
- export const compile = async (entryFile, options, deps) => {
32
- const entryPath = normalizePath(entryFile);
33
- const diagnostics = [];
34
- const artifacts = [];
35
- if (!isSupportedSourcePath(entryPath)) {
36
- diagnostics.push({
37
- id: DiagnosticIds.Unknown,
38
- severity: 'error',
39
- message: 'Unsupported source file extension (expected .asm or .z80)',
40
- file: entryPath,
41
- });
42
- return { diagnostics, artifacts };
43
- }
44
- const projectAliasProfiles = [];
45
- for (const path of options.directiveAliasFiles ?? []) {
46
- projectAliasProfiles.push(await readDirectiveAliasProfile(normalizePath(path)));
47
- }
48
- const directiveAliasPolicy = buildDirectiveAliasPolicy(defaultDirectiveAliasProfileName(), projectAliasProfiles);
49
- const loaded = await loadProgram(entryPath, diagnostics, {
50
- ...options,
51
- directiveAliasPolicy,
52
- });
53
- if (!loaded)
54
- return { diagnostics, artifacts };
55
- const { program, sourceTexts, sourceLineComments } = loaded;
56
- if (hasErrors(diagnostics)) {
57
- return { diagnostics, artifacts };
58
- }
59
- const analysis = analyzeLoadedProgram(loaded, {
60
- ...(options.caseStyle !== undefined ? { caseStyle: options.caseStyle } : {}),
61
- ...(options.requireMain !== undefined ? { requireMain: options.requireMain } : {}),
62
- });
63
- diagnostics.push(...analysis.diagnostics);
64
- if (hasErrors(diagnostics) || !analysis.env)
65
- return { diagnostics, artifacts };
66
- const env = analysis.env;
67
- const registerCareMode = options.registerCare ?? 'off';
68
- const shouldAnalyzeRegisterCare = registerCareMode !== 'off' ||
69
- options.emitRegisterReport === true ||
70
- options.emitRegisterInterface === true ||
71
- options.emitRegisterAnnotations === true ||
72
- options.fixRegisterContracts === true ||
73
- (options.acceptRegisterOutputCandidates?.length ?? 0) > 0 ||
74
- (options.registerCareInterfaces?.length ?? 0) > 0;
75
- if (shouldAnalyzeRegisterCare) {
76
- const interfaceContracts = [];
77
- for (const path of options.registerCareInterfaces ?? []) {
78
- const resolved = normalizePath(path);
79
- if (extname(resolved).toLowerCase() !== '.asmi') {
80
- diagnostics.push({
81
- id: DiagnosticIds.Unknown,
82
- severity: 'error',
83
- message: 'Register-care interface files must use the .asmi extension',
84
- file: resolved,
85
- });
86
- continue;
87
- }
88
- const text = await readFile(resolved, 'utf8');
89
- interfaceContracts.push(...parseInterfaceContracts(text, resolved).values());
90
- }
91
- if (hasErrors(diagnostics))
92
- return { diagnostics, artifacts };
93
- const registerCare = analyzeRegisterCare(loaded, {
94
- mode: registerCareMode,
95
- emitReport: options.emitRegisterReport === true,
96
- emitInterface: options.emitRegisterInterface === true,
97
- emitAnnotations: options.emitRegisterAnnotations === true || options.fixRegisterContracts === true,
98
- fixRegisterContracts: options.fixRegisterContracts === true,
99
- ...(options.acceptRegisterOutputCandidates !== undefined
100
- ? { acceptOutputCandidates: options.acceptRegisterOutputCandidates }
101
- : {}),
102
- ...(options.registerCareProfile !== undefined
103
- ? { profile: options.registerCareProfile }
104
- : {}),
105
- ...(interfaceContracts.length > 0 ? { interfaceContracts } : {}),
106
- });
107
- diagnostics.push(...registerCare.diagnostics);
108
- if (registerCare.reportText !== undefined) {
109
- artifacts.push({ kind: 'register-care-report', text: registerCare.reportText });
110
- }
111
- if (registerCare.interfaceText !== undefined) {
112
- artifacts.push({ kind: 'register-care-interface', text: registerCare.interfaceText });
113
- }
114
- if (registerCare.annotatedFiles !== undefined) {
115
- artifacts.push({ kind: 'register-care-annotations', files: registerCare.annotatedFiles });
116
- }
117
- if (hasErrors(diagnostics)) {
118
- return { diagnostics, artifacts };
119
- }
120
- }
121
- const { map, symbols, placedLoweredAsmProgram } = emitProgram(program, env, diagnostics, {
122
- ...(options.includeDirs ? { includeDirs: options.includeDirs } : {}),
123
- ...(options.defaultCodeBase !== undefined ? { defaultCodeBase: options.defaultCodeBase } : {}),
124
- sourceTexts,
125
- sourceLineComments,
126
- });
127
- if (hasErrors(diagnostics)) {
128
- return { diagnostics, artifacts };
129
- }
130
- const emit = withDefaults(options);
131
- if (emit.emitBin) {
132
- artifacts.push(deps.formats.writeBin(map, symbols));
133
- }
134
- if (emit.emitHex) {
135
- artifacts.push(deps.formats.writeHex(map, symbols));
136
- }
137
- if (emit.emitD8m) {
138
- const mainEntry = symbols.find((s) => s.kind === 'label' && s.name.toLowerCase() === 'main');
139
- const d8mRoot = options.sourceRoot ?? dirname(entryPath);
140
- artifacts.push(deps.formats.writeD8m(map, symbols, {
141
- rootDir: d8mRoot,
142
- packageVersion: readPackageVersion(),
143
- inputs: {
144
- entry: entryPath,
145
- ...(options.d8mInputs?.listing !== undefined
146
- ? { listing: options.d8mInputs.listing }
147
- : {}),
148
- ...(options.d8mInputs?.hex !== undefined ? { hex: options.d8mInputs.hex } : {}),
149
- ...(options.d8mInputs?.bin !== undefined ? { bin: options.d8mInputs.bin } : {}),
150
- },
151
- ...(mainEntry
152
- ? {
153
- entrySymbol: mainEntry.name,
154
- entryAddress: mainEntry.address & 0xffff,
155
- }
156
- : {}),
157
- }));
158
- }
159
- if (emit.emitListing) {
160
- if (deps.formats.writeListing) {
161
- artifacts.push(deps.formats.writeListing(map, symbols));
162
- }
163
- else {
164
- diagnostics.push({
165
- id: DiagnosticIds.Unknown,
166
- severity: 'warning',
167
- message: 'emitListing=true but no listing writer is configured; skipping .lst artifact.',
168
- file: program.entryFile,
169
- });
170
- }
171
- }
172
- if (emit.emitAsm80) {
173
- if (deps.formats.writeAsm80) {
174
- artifacts.push(deps.formats.writeAsm80(placedLoweredAsmProgram));
175
- }
176
- else {
177
- diagnostics.push({
178
- id: DiagnosticIds.Unknown,
179
- severity: 'warning',
180
- message: 'emitAsm80=true but no asm80 writer is configured; skipping .asm artifact.',
181
- file: program.entryFile,
182
- });
183
- }
184
- }
185
- return { diagnostics, artifacts };
186
- };
@@ -1,3 +0,0 @@
1
- import type { Diagnostic } from './diagnosticTypes.js';
2
- export declare function hasErrors(diagnostics: Diagnostic[]): boolean;
3
- export declare function normalizePath(p: string): string;
@@ -1,7 +0,0 @@
1
- import { resolve } from 'node:path';
2
- export function hasErrors(diagnostics) {
3
- return diagnostics.some((d) => d.severity === 'error');
4
- }
5
- export function normalizePath(p) {
6
- return resolve(p);
7
- }
@@ -1,77 +0,0 @@
1
- /**
2
- * Severity level for a diagnostic.
3
- */
4
- export type DiagnosticSeverity = 'error' | 'warning' | 'info';
5
- /**
6
- * A compiler diagnostic (error/warning/info) with an optional source location.
7
- *
8
- * Diagnostics must have stable IDs so downstream tooling can rely on them.
9
- */
10
- export interface Diagnostic {
11
- /** Stable diagnostic identifier (e.g., `AZM001`). */
12
- id: DiagnosticId;
13
- severity: DiagnosticSeverity;
14
- message: string;
15
- file: string;
16
- /** 1-based line number, when known. */
17
- line?: number;
18
- /** 1-based column number, when known. */
19
- column?: number;
20
- }
21
- /**
22
- * Known diagnostic IDs.
23
- *
24
- * PR0 started with a minimal set; later PRs should extend this via contract changes.
25
- */
26
- export declare const DiagnosticIds: {
27
- /**
28
- * Unknown/unclassified diagnostic.
29
- *
30
- * Use a more specific ID when possible; this remains for forward compatibility.
31
- */
32
- readonly Unknown: "AZM000";
33
- /** Failed to read a source file from disk. */
34
- readonly IoReadFailed: "AZM001";
35
- /** Internal error during parsing (unexpected exception). */
36
- readonly InternalParseError: "AZM002";
37
- /** Include could not be resolved on any search path. */
38
- readonly IncludeNotFound: "AZM003";
39
- /** Generic parse error (syntax / unsupported in current PR subset). */
40
- readonly ParseError: "AZM100";
41
- /** Generic instruction encoding error (unsupported mnemonic/operands, out-of-range imm, etc.). */
42
- readonly EncodeError: "AZM200";
43
- /** Generic emission/lowering error (layout/packing/symbol collisions, etc.). */
44
- readonly EmitError: "AZM300";
45
- /** Generic emission/lowering warning. */
46
- readonly EmitWarning: "AZM301";
47
- /** Op invocation arity mismatch against available overload set. */
48
- readonly OpArityMismatch: "AZM310";
49
- /** No overload match for an op invocation with the provided operands. */
50
- readonly OpNoMatchingOverload: "AZM311";
51
- /** Ambiguous overload resolution for an op invocation. */
52
- readonly OpAmbiguousOverload: "AZM312";
53
- /** Cyclic op expansion detected in inline expansion graph. */
54
- readonly OpExpansionCycle: "AZM313";
55
- /** Op expansion produced an invalid concrete instruction after substitution. */
56
- readonly OpInvalidExpansion: "AZM314";
57
- /** Generic semantic evaluation error (env building, imm evaluation, etc.). */
58
- readonly SemanticsError: "AZM400";
59
- /** Divide by zero in an imm expression. */
60
- readonly ImmDivideByZero: "AZM401";
61
- /** Modulo by zero in an imm expression. */
62
- readonly ImmModuloByZero: "AZM402";
63
- /** Type/layout error (unknown type, recursion, missing array length, etc.). */
64
- readonly TypeError: "AZM403";
65
- /** Case-style lint warning for keyword/register casing policy. */
66
- readonly CaseStyleLint: "AZM500";
67
- /** Redundant outer parentheses in a constant-only array index expression. */
68
- readonly IndexParenRedundant: "AZM501";
69
- /** Register-care conflict where a call may destroy a live caller value. */
70
- readonly RegisterCareConflict: "AZM600";
71
- /** Register-care analysis cannot prove an external or indirect call contract. */
72
- readonly RegisterCareUnknownBoundary: "AZM601";
73
- };
74
- /**
75
- * Union type of all defined diagnostic IDs.
76
- */
77
- export type DiagnosticId = (typeof DiagnosticIds)[keyof typeof DiagnosticIds];
@@ -1,53 +0,0 @@
1
- /**
2
- * Known diagnostic IDs.
3
- *
4
- * PR0 started with a minimal set; later PRs should extend this via contract changes.
5
- */
6
- export const DiagnosticIds = {
7
- /**
8
- * Unknown/unclassified diagnostic.
9
- *
10
- * Use a more specific ID when possible; this remains for forward compatibility.
11
- */
12
- Unknown: 'AZM000',
13
- /** Failed to read a source file from disk. */
14
- IoReadFailed: 'AZM001',
15
- /** Internal error during parsing (unexpected exception). */
16
- InternalParseError: 'AZM002',
17
- /** Include could not be resolved on any search path. */
18
- IncludeNotFound: 'AZM003',
19
- /** Generic parse error (syntax / unsupported in current PR subset). */
20
- ParseError: 'AZM100',
21
- /** Generic instruction encoding error (unsupported mnemonic/operands, out-of-range imm, etc.). */
22
- EncodeError: 'AZM200',
23
- /** Generic emission/lowering error (layout/packing/symbol collisions, etc.). */
24
- EmitError: 'AZM300',
25
- /** Generic emission/lowering warning. */
26
- EmitWarning: 'AZM301',
27
- /** Op invocation arity mismatch against available overload set. */
28
- OpArityMismatch: 'AZM310',
29
- /** No overload match for an op invocation with the provided operands. */
30
- OpNoMatchingOverload: 'AZM311',
31
- /** Ambiguous overload resolution for an op invocation. */
32
- OpAmbiguousOverload: 'AZM312',
33
- /** Cyclic op expansion detected in inline expansion graph. */
34
- OpExpansionCycle: 'AZM313',
35
- /** Op expansion produced an invalid concrete instruction after substitution. */
36
- OpInvalidExpansion: 'AZM314',
37
- /** Generic semantic evaluation error (env building, imm evaluation, etc.). */
38
- SemanticsError: 'AZM400',
39
- /** Divide by zero in an imm expression. */
40
- ImmDivideByZero: 'AZM401',
41
- /** Modulo by zero in an imm expression. */
42
- ImmModuloByZero: 'AZM402',
43
- /** Type/layout error (unknown type, recursion, missing array length, etc.). */
44
- TypeError: 'AZM403',
45
- /** Case-style lint warning for keyword/register casing policy. */
46
- CaseStyleLint: 'AZM500',
47
- /** Redundant outer parentheses in a constant-only array index expression. */
48
- IndexParenRedundant: 'AZM501',
49
- /** Register-care conflict where a call may destroy a live caller value. */
50
- RegisterCareConflict: 'AZM600',
51
- /** Register-care analysis cannot prove an external or indirect call contract. */
52
- RegisterCareUnknownBoundary: 'AZM601',
53
- };
@@ -1,7 +0,0 @@
1
- import type { FormatWriters } from './types.js';
2
- /**
3
- * Default in-memory artifact writers.
4
- *
5
- * These writers implement the `FormatWriters` contract and return artifacts without writing to disk.
6
- */
7
- export declare const defaultFormatWriters: FormatWriters;
@@ -1,17 +0,0 @@
1
- import { writeBin } from './writeBin.js';
2
- import { writeD8m } from './writeD8m.js';
3
- import { writeHex } from './writeHex.js';
4
- import { writeListing } from './writeListing.js';
5
- import { writeAsm80 } from './writeAsm80.js';
6
- /**
7
- * Default in-memory artifact writers.
8
- *
9
- * These writers implement the `FormatWriters` contract and return artifacts without writing to disk.
10
- */
11
- export const defaultFormatWriters = {
12
- writeHex,
13
- writeBin,
14
- writeD8m,
15
- writeListing,
16
- writeAsm80,
17
- };
@@ -1,17 +0,0 @@
1
- import type { AddressRange, EmittedByteMap } from './types.js';
2
- /**
3
- * Compute contiguous written segments from an emitted byte map.
4
- *
5
- * - Segments are half-open `[start, end)`.
6
- * - Segment boundaries are based on concrete written byte addresses.
7
- * - For an empty map, `[]` is returned.
8
- */
9
- export declare function getWrittenSegments(map: EmittedByteMap): AddressRange[];
10
- /**
11
- * Compute the effective written range for an emitted byte map.
12
- *
13
- * - If `map.writtenRange` is present, it is returned directly.
14
- * - Otherwise, the range is derived from the min/max written addresses.
15
- * - For an empty map, `{ start: 0, end: 0 }` is returned.
16
- */
17
- export declare function getWrittenRange(map: EmittedByteMap): AddressRange;
@@ -1,45 +0,0 @@
1
- /**
2
- * Compute contiguous written segments from an emitted byte map.
3
- *
4
- * - Segments are half-open `[start, end)`.
5
- * - Segment boundaries are based on concrete written byte addresses.
6
- * - For an empty map, `[]` is returned.
7
- */
8
- export function getWrittenSegments(map) {
9
- if (map.bytes.size === 0)
10
- return [];
11
- const sorted = [...new Set(map.bytes.keys())].sort((a, b) => a - b);
12
- const segments = [];
13
- let start = sorted[0];
14
- let prev = start;
15
- for (let index = 1; index < sorted.length; index++) {
16
- const addr = sorted[index];
17
- if (addr <= prev + 1) {
18
- prev = addr;
19
- continue;
20
- }
21
- segments.push({ start, end: prev + 1 });
22
- start = addr;
23
- prev = addr;
24
- }
25
- segments.push({ start, end: prev + 1 });
26
- return segments;
27
- }
28
- /**
29
- * Compute the effective written range for an emitted byte map.
30
- *
31
- * - If `map.writtenRange` is present, it is returned directly.
32
- * - Otherwise, the range is derived from the min/max written addresses.
33
- * - For an empty map, `{ start: 0, end: 0 }` is returned.
34
- */
35
- export function getWrittenRange(map) {
36
- if (map.writtenRange)
37
- return map.writtenRange;
38
- const segments = getWrittenSegments(map);
39
- if (segments.length === 0)
40
- return { start: 0, end: 0 };
41
- return {
42
- start: segments[0].start,
43
- end: segments[segments.length - 1].end,
44
- };
45
- }