@jhlagado/azm 0.1.0 → 0.2.0

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 (412) hide show
  1. package/README.md +9 -1
  2. package/dist/{src → legacy-root-azm/src}/compile.js +12 -1
  3. package/dist/{src → legacy-root-azm/src}/formats/index.d.ts +1 -1
  4. package/dist/{src → legacy-root-azm/src}/formats/index.js +1 -1
  5. package/dist/{src → legacy-root-azm/src}/formats/types.d.ts +82 -7
  6. package/dist/{src → legacy-root-azm/src}/formats/writeD8m.js +17 -11
  7. package/dist/{src → legacy-root-azm/src}/formats/writeHex.d.ts +0 -1
  8. package/dist/{src → legacy-root-azm/src}/formats/writeHex.js +0 -1
  9. package/dist/legacy-root-azm/src/packageInfo.d.ts +1 -0
  10. package/dist/legacy-root-azm/src/packageInfo.js +15 -0
  11. package/dist/{src → legacy-root-azm/src}/pipeline.d.ts +18 -5
  12. package/dist/legacy-root-azm/src/z80/effects.d.ts +3 -0
  13. package/dist/legacy-root-azm/src/z80/effects.js +516 -0
  14. package/dist/legacy-root-azm/src/z80/encode.d.ts +10 -0
  15. package/dist/legacy-root-azm/src/z80/encode.js +412 -0
  16. package/dist/src/api-compile.d.ts +49 -8
  17. package/dist/src/api-compile.js +313 -3
  18. package/dist/src/api-tooling.d.ts +7 -25
  19. package/dist/src/api-tooling.js +3 -21
  20. package/dist/src/assembly/address-planning.d.ts +19 -0
  21. package/dist/src/assembly/address-planning.js +266 -0
  22. package/dist/src/assembly/assemble-program.d.ts +13 -0
  23. package/dist/src/assembly/assemble-program.js +34 -0
  24. package/dist/src/assembly/fixup-emission.d.ts +10 -0
  25. package/dist/src/assembly/fixup-emission.js +247 -0
  26. package/dist/src/assembly/placement.d.ts +26 -0
  27. package/dist/src/assembly/placement.js +79 -0
  28. package/dist/src/assembly/program-emission.d.ts +13 -0
  29. package/dist/src/assembly/program-emission.js +267 -0
  30. package/dist/src/cli/parse-args.d.ts +29 -0
  31. package/dist/src/cli/parse-args.js +372 -0
  32. package/dist/src/cli/run.d.ts +2 -0
  33. package/dist/src/cli/run.js +35 -0
  34. package/dist/src/cli/write-artifacts.d.ts +21 -0
  35. package/dist/src/cli/write-artifacts.js +175 -0
  36. package/dist/src/cli.d.ts +1 -29
  37. package/dist/src/cli.js +20 -508
  38. package/dist/src/core/compile-artifacts.d.ts +26 -0
  39. package/dist/src/core/compile-artifacts.js +17 -0
  40. package/dist/src/core/compile.d.ts +26 -0
  41. package/dist/src/core/compile.js +164 -0
  42. package/dist/src/diagnostics/format.d.ts +4 -0
  43. package/dist/src/diagnostics/format.js +9 -0
  44. package/dist/src/expansion/op-expansion.d.ts +96 -0
  45. package/dist/src/expansion/op-expansion.js +912 -0
  46. package/dist/src/index.d.ts +14 -3
  47. package/dist/src/index.js +7 -2
  48. package/dist/src/model/diagnostic.d.ts +50 -0
  49. package/dist/src/model/diagnostic.js +29 -0
  50. package/dist/src/model/expression.d.ts +51 -0
  51. package/dist/src/model/expression.js +1 -0
  52. package/dist/src/model/fixup.d.ts +18 -0
  53. package/dist/src/model/fixup.js +1 -0
  54. package/dist/src/model/source-item.d.ts +81 -0
  55. package/dist/src/model/source-item.js +1 -0
  56. package/dist/src/model/symbol.d.ts +1 -0
  57. package/dist/src/model/symbol.js +1 -0
  58. package/dist/src/node/source-host.d.ts +19 -0
  59. package/dist/src/node/source-host.js +146 -0
  60. package/dist/src/outputs/hex.d.ts +1 -0
  61. package/dist/src/outputs/hex.js +75 -0
  62. package/dist/src/outputs/index.d.ts +3 -0
  63. package/dist/src/outputs/index.js +13 -0
  64. package/dist/src/outputs/range.d.ts +3 -0
  65. package/dist/src/outputs/range.js +31 -0
  66. package/dist/src/outputs/types.d.ts +182 -0
  67. package/dist/src/outputs/types.js +1 -0
  68. package/dist/src/outputs/write-asm80.d.ts +7 -0
  69. package/dist/src/outputs/write-asm80.js +549 -0
  70. package/dist/src/outputs/write-bin.d.ts +2 -0
  71. package/dist/src/outputs/write-bin.js +27 -0
  72. package/dist/src/outputs/write-d8.d.ts +2 -0
  73. package/dist/src/outputs/write-d8.js +257 -0
  74. package/dist/src/outputs/write-hex.d.ts +2 -0
  75. package/dist/src/outputs/write-hex.js +53 -0
  76. package/dist/src/outputs/write-listing.d.ts +2 -0
  77. package/dist/src/outputs/write-listing.js +79 -0
  78. package/dist/src/register-care/accept-output.d.ts +2 -0
  79. package/dist/src/register-care/accept-output.js +35 -0
  80. package/dist/src/register-care/analyze.d.ts +26 -0
  81. package/dist/src/register-care/analyze.js +87 -0
  82. package/dist/src/register-care/annotations.d.ts +8 -0
  83. package/dist/src/register-care/annotations.js +154 -0
  84. package/dist/src/register-care/boundaryHints.d.ts +2 -0
  85. package/dist/src/register-care/boundaryHints.js +11 -0
  86. package/dist/src/register-care/carriers.d.ts +2 -0
  87. package/dist/src/register-care/carriers.js +78 -0
  88. package/dist/src/register-care/controlFlow.d.ts +5 -0
  89. package/dist/src/register-care/controlFlow.js +38 -0
  90. package/dist/src/register-care/fix.d.ts +9 -0
  91. package/dist/src/register-care/fix.js +78 -0
  92. package/dist/src/register-care/liveness.d.ts +3 -0
  93. package/dist/src/register-care/liveness.js +189 -0
  94. package/dist/src/register-care/profiles.d.ts +9 -0
  95. package/dist/src/register-care/profiles.js +43 -0
  96. package/dist/src/register-care/programModel.d.ts +3 -0
  97. package/dist/src/register-care/programModel.js +122 -0
  98. package/dist/src/register-care/report.d.ts +4 -0
  99. package/dist/src/register-care/report.js +82 -0
  100. package/dist/src/register-care/smartComments.d.ts +5 -0
  101. package/dist/src/register-care/smartComments.js +243 -0
  102. package/dist/src/register-care/summaries.d.ts +12 -0
  103. package/dist/src/register-care/summaries.js +154 -0
  104. package/dist/src/{registerCare → register-care}/tooling.d.ts +7 -6
  105. package/dist/src/{registerCare → register-care}/tooling.js +17 -6
  106. package/dist/src/register-care/types.d.ts +165 -0
  107. package/dist/src/register-care/types.js +1 -0
  108. package/dist/src/semantics/expression-evaluation.d.ts +29 -0
  109. package/dist/src/semantics/expression-evaluation.js +409 -0
  110. package/dist/src/source/logical-lines.d.ts +7 -0
  111. package/dist/src/source/logical-lines.js +11 -0
  112. package/dist/src/source/source-file.d.ts +5 -0
  113. package/dist/src/source/source-file.js +3 -0
  114. package/dist/src/source/source-span.d.ts +5 -0
  115. package/dist/src/source/source-span.js +1 -0
  116. package/dist/src/source/strip-line-comment.d.ts +4 -0
  117. package/dist/src/source/strip-line-comment.js +27 -0
  118. package/dist/src/syntax/directive-aliases.d.ts +10 -0
  119. package/dist/src/syntax/directive-aliases.js +199 -0
  120. package/dist/src/syntax/parse-expression.d.ts +3 -0
  121. package/dist/src/syntax/parse-expression.js +551 -0
  122. package/dist/src/syntax/parse-line.d.ts +12 -0
  123. package/dist/src/syntax/parse-line.js +329 -0
  124. package/dist/src/tooling/api.d.ts +42 -0
  125. package/dist/src/tooling/api.js +42 -0
  126. package/dist/src/tooling/case-style.d.ts +8 -0
  127. package/dist/src/tooling/case-style.js +163 -0
  128. package/dist/src/z80/effects.d.ts +3 -3
  129. package/dist/src/z80/effects.js +349 -302
  130. package/dist/src/z80/encode.d.ts +2 -10
  131. package/dist/src/z80/encode.js +951 -374
  132. package/dist/src/z80/instruction.d.ts +226 -0
  133. package/dist/src/z80/instruction.js +1 -0
  134. package/dist/src/z80/parse-instruction.d.ts +7 -0
  135. package/dist/src/z80/parse-instruction.js +1068 -0
  136. package/docs/reference/cli.md +15 -0
  137. package/docs/reference/tooling-api.md +67 -3
  138. package/package.json +20 -3
  139. /package/dist/{src → legacy-root-azm/src}/analysis.d.ts +0 -0
  140. /package/dist/{src → legacy-root-azm/src}/analysis.js +0 -0
  141. /package/dist/{src → legacy-root-azm/src}/compile.d.ts +0 -0
  142. /package/dist/{src → legacy-root-azm/src}/compileShared.d.ts +0 -0
  143. /package/dist/{src → legacy-root-azm/src}/compileShared.js +0 -0
  144. /package/dist/{src → legacy-root-azm/src}/diagnosticTypes.d.ts +0 -0
  145. /package/dist/{src → legacy-root-azm/src}/diagnosticTypes.js +0 -0
  146. /package/dist/{src → legacy-root-azm/src}/formats/range.d.ts +0 -0
  147. /package/dist/{src → legacy-root-azm/src}/formats/range.js +0 -0
  148. /package/dist/{src → legacy-root-azm/src}/formats/types.js +0 -0
  149. /package/dist/{src → legacy-root-azm/src}/formats/writeAsm80.d.ts +0 -0
  150. /package/dist/{src → legacy-root-azm/src}/formats/writeAsm80.js +0 -0
  151. /package/dist/{src → legacy-root-azm/src}/formats/writeBin.d.ts +0 -0
  152. /package/dist/{src → legacy-root-azm/src}/formats/writeBin.js +0 -0
  153. /package/dist/{src → legacy-root-azm/src}/formats/writeD8m.d.ts +0 -0
  154. /package/dist/{src → legacy-root-azm/src}/formats/writeListing.d.ts +0 -0
  155. /package/dist/{src → legacy-root-azm/src}/formats/writeListing.js +0 -0
  156. /package/dist/{src → legacy-root-azm/src}/frontend/asm80/asmLine.d.ts +0 -0
  157. /package/dist/{src → legacy-root-azm/src}/frontend/asm80/asmLine.js +0 -0
  158. /package/dist/{src → legacy-root-azm/src}/frontend/asm80/parseAsmRawValues.d.ts +0 -0
  159. /package/dist/{src → legacy-root-azm/src}/frontend/asm80/parseAsmRawValues.js +0 -0
  160. /package/dist/{src → legacy-root-azm/src}/frontend/asm80/quoteScan.d.ts +0 -0
  161. /package/dist/{src → legacy-root-azm/src}/frontend/asm80/quoteScan.js +0 -0
  162. /package/dist/{src → legacy-root-azm/src}/frontend/ast.d.ts +0 -0
  163. /package/dist/{src → legacy-root-azm/src}/frontend/ast.js +0 -0
  164. /package/dist/{src → legacy-root-azm/src}/frontend/directiveAliases.d.ts +0 -0
  165. /package/dist/{src → legacy-root-azm/src}/frontend/directiveAliases.js +0 -0
  166. /package/dist/{src → legacy-root-azm/src}/frontend/grammarData.d.ts +0 -0
  167. /package/dist/{src → legacy-root-azm/src}/frontend/grammarData.js +0 -0
  168. /package/dist/{src → legacy-root-azm/src}/frontend/immExprUtils.d.ts +0 -0
  169. /package/dist/{src → legacy-root-azm/src}/frontend/immExprUtils.js +0 -0
  170. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmFlatDirectiveLine.d.ts +0 -0
  171. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmFlatDirectiveLine.js +0 -0
  172. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmInstruction.d.ts +0 -0
  173. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmInstruction.js +0 -0
  174. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStatements.d.ts +0 -0
  175. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStatements.js +0 -0
  176. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStream.d.ts +0 -0
  177. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStream.js +0 -0
  178. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmTopLevel.d.ts +0 -0
  179. /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmTopLevel.js +0 -0
  180. /package/dist/{src → legacy-root-azm/src}/frontend/parseDiagnostics.d.ts +0 -0
  181. /package/dist/{src → legacy-root-azm/src}/frontend/parseDiagnostics.js +0 -0
  182. /package/dist/{src → legacy-root-azm/src}/frontend/parseEnum.d.ts +0 -0
  183. /package/dist/{src → legacy-root-azm/src}/frontend/parseEnum.js +0 -0
  184. /package/dist/{src → legacy-root-azm/src}/frontend/parseImm.d.ts +0 -0
  185. /package/dist/{src → legacy-root-azm/src}/frontend/parseImm.js +0 -0
  186. /package/dist/{src → legacy-root-azm/src}/frontend/parseLogicalLines.d.ts +0 -0
  187. /package/dist/{src → legacy-root-azm/src}/frontend/parseLogicalLines.js +0 -0
  188. /package/dist/{src → legacy-root-azm/src}/frontend/parseOp.d.ts +0 -0
  189. /package/dist/{src → legacy-root-azm/src}/frontend/parseOp.js +0 -0
  190. /package/dist/{src → legacy-root-azm/src}/frontend/parseOpHeader.d.ts +0 -0
  191. /package/dist/{src → legacy-root-azm/src}/frontend/parseOpHeader.js +0 -0
  192. /package/dist/{src → legacy-root-azm/src}/frontend/parseOperands.d.ts +0 -0
  193. /package/dist/{src → legacy-root-azm/src}/frontend/parseOperands.js +0 -0
  194. /package/dist/{src → legacy-root-azm/src}/frontend/parseParams.d.ts +0 -0
  195. /package/dist/{src → legacy-root-azm/src}/frontend/parseParams.js +0 -0
  196. /package/dist/{src → legacy-root-azm/src}/frontend/parseParserRecovery.d.ts +0 -0
  197. /package/dist/{src → legacy-root-azm/src}/frontend/parseParserRecovery.js +0 -0
  198. /package/dist/{src → legacy-root-azm/src}/frontend/parseParserShared.d.ts +0 -0
  199. /package/dist/{src → legacy-root-azm/src}/frontend/parseParserShared.js +0 -0
  200. /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectiveStart.d.ts +0 -0
  201. /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectiveStart.js +0 -0
  202. /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectives.d.ts +0 -0
  203. /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectives.js +0 -0
  204. /package/dist/{src → legacy-root-azm/src}/frontend/parseRecordFieldDecl.d.ts +0 -0
  205. /package/dist/{src → legacy-root-azm/src}/frontend/parseRecordFieldDecl.js +0 -0
  206. /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemDispatch.d.ts +0 -0
  207. /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemDispatch.js +0 -0
  208. /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemTable.d.ts +0 -0
  209. /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemTable.js +0 -0
  210. /package/dist/{src → legacy-root-azm/src}/frontend/parseTopLevelCommon.d.ts +0 -0
  211. /package/dist/{src → legacy-root-azm/src}/frontend/parseTopLevelCommon.js +0 -0
  212. /package/dist/{src → legacy-root-azm/src}/frontend/parseTypes.d.ts +0 -0
  213. /package/dist/{src → legacy-root-azm/src}/frontend/parseTypes.js +0 -0
  214. /package/dist/{src → legacy-root-azm/src}/frontend/parser.d.ts +0 -0
  215. /package/dist/{src → legacy-root-azm/src}/frontend/parser.js +0 -0
  216. /package/dist/{src → legacy-root-azm/src}/frontend/source.d.ts +0 -0
  217. /package/dist/{src → legacy-root-azm/src}/frontend/source.js +0 -0
  218. /package/dist/{src → legacy-root-azm/src}/frontend/sourceExtensions.d.ts +0 -0
  219. /package/dist/{src → legacy-root-azm/src}/frontend/sourceExtensions.js +0 -0
  220. /package/dist/{src → legacy-root-azm/src}/lintCaseStyle.d.ts +0 -0
  221. /package/dist/{src → legacy-root-azm/src}/lintCaseStyle.js +0 -0
  222. /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveLowering.d.ts +0 -0
  223. /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveLowering.js +0 -0
  224. /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveTraversal.d.ts +0 -0
  225. /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveTraversal.js +0 -0
  226. /package/dist/{src → legacy-root-azm/src}/lowering/asmEquResolution.d.ts +0 -0
  227. /package/dist/{src → legacy-root-azm/src}/lowering/asmEquResolution.js +0 -0
  228. /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLdHelpers.d.ts +0 -0
  229. /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLdHelpers.js +0 -0
  230. /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLowering.d.ts +0 -0
  231. /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLowering.js +0 -0
  232. /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionStream.d.ts +0 -0
  233. /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionStream.js +0 -0
  234. /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringBranchCall.d.ts +0 -0
  235. /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringBranchCall.js +0 -0
  236. /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringHost.d.ts +0 -0
  237. /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringHost.js +0 -0
  238. /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringLd.d.ts +0 -0
  239. /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringLd.js +0 -0
  240. /package/dist/{src → legacy-root-azm/src}/lowering/asmRangeLowering.d.ts +0 -0
  241. /package/dist/{src → legacy-root-azm/src}/lowering/asmRangeLowering.js +0 -0
  242. /package/dist/{src → legacy-root-azm/src}/lowering/asmRawDataLowering.d.ts +0 -0
  243. /package/dist/{src → legacy-root-azm/src}/lowering/asmRawDataLowering.js +0 -0
  244. /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceEmitter.d.ts +0 -0
  245. /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceEmitter.js +0 -0
  246. /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceInstructionLowering.d.ts +0 -0
  247. /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceInstructionLowering.js +0 -0
  248. /package/dist/{src → legacy-root-azm/src}/lowering/asmUtils.d.ts +0 -0
  249. /package/dist/{src → legacy-root-azm/src}/lowering/asmUtils.js +0 -0
  250. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerFlowSetup.d.ts +0 -0
  251. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerFlowSetup.js +0 -0
  252. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContext.d.ts +0 -0
  253. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContext.js +0 -0
  254. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContextSplit.d.ts +0 -0
  255. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContextSplit.js +0 -0
  256. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringPhases.d.ts +0 -0
  257. /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringPhases.js +0 -0
  258. /package/dist/{src → legacy-root-azm/src}/lowering/bytePlacement.d.ts +0 -0
  259. /package/dist/{src → legacy-root-azm/src}/lowering/bytePlacement.js +0 -0
  260. /package/dist/{src → legacy-root-azm/src}/lowering/capabilities.d.ts +0 -0
  261. /package/dist/{src → legacy-root-azm/src}/lowering/capabilities.js +0 -0
  262. /package/dist/{src → legacy-root-azm/src}/lowering/eaResolution.d.ts +0 -0
  263. /package/dist/{src → legacy-root-azm/src}/lowering/eaResolution.js +0 -0
  264. /package/dist/{src → legacy-root-azm/src}/lowering/emissionCore.d.ts +0 -0
  265. /package/dist/{src → legacy-root-azm/src}/lowering/emissionCore.js +0 -0
  266. /package/dist/{src → legacy-root-azm/src}/lowering/emit.d.ts +0 -0
  267. /package/dist/{src → legacy-root-azm/src}/lowering/emit.js +0 -0
  268. /package/dist/{src → legacy-root-azm/src}/lowering/emitContextBuilder.d.ts +0 -0
  269. /package/dist/{src → legacy-root-azm/src}/lowering/emitContextBuilder.js +0 -0
  270. /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalization.d.ts +0 -0
  271. /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalization.js +0 -0
  272. /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalizationSetup.d.ts +0 -0
  273. /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalizationSetup.js +0 -0
  274. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -0
  275. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1BuildProgramLoweringContext.js +0 -0
  276. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Helpers.d.ts +0 -0
  277. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Helpers.js +0 -0
  278. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Types.d.ts +0 -0
  279. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Types.js +0 -0
  280. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1WirePipeline.d.ts +0 -0
  281. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1WirePipeline.js +0 -0
  282. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Workspace.d.ts +0 -0
  283. /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Workspace.js +0 -0
  284. /package/dist/{src → legacy-root-azm/src}/lowering/emitPipeline.d.ts +0 -0
  285. /package/dist/{src → legacy-root-azm/src}/lowering/emitPipeline.js +0 -0
  286. /package/dist/{src → legacy-root-azm/src}/lowering/emitProgramContext.d.ts +0 -0
  287. /package/dist/{src → legacy-root-azm/src}/lowering/emitProgramContext.js +0 -0
  288. /package/dist/{src → legacy-root-azm/src}/lowering/emitState.d.ts +0 -0
  289. /package/dist/{src → legacy-root-azm/src}/lowering/emitState.js +0 -0
  290. /package/dist/{src → legacy-root-azm/src}/lowering/fixupBaseResolution.d.ts +0 -0
  291. /package/dist/{src → legacy-root-azm/src}/lowering/fixupBaseResolution.js +0 -0
  292. /package/dist/{src → legacy-root-azm/src}/lowering/fixupEmission.d.ts +0 -0
  293. /package/dist/{src → legacy-root-azm/src}/lowering/fixupEmission.js +0 -0
  294. /package/dist/{src → legacy-root-azm/src}/lowering/immMath.d.ts +0 -0
  295. /package/dist/{src → legacy-root-azm/src}/lowering/immMath.js +0 -0
  296. /package/dist/{src → legacy-root-azm/src}/lowering/inputAssets.d.ts +0 -0
  297. /package/dist/{src → legacy-root-azm/src}/lowering/inputAssets.js +0 -0
  298. /package/dist/{src → legacy-root-azm/src}/lowering/ldEncoding.d.ts +0 -0
  299. /package/dist/{src → legacy-root-azm/src}/lowering/ldEncoding.js +0 -0
  300. /package/dist/{src → legacy-root-azm/src}/lowering/ldEncodingRegMemHelpers.d.ts +0 -0
  301. /package/dist/{src → legacy-root-azm/src}/lowering/ldEncodingRegMemHelpers.js +0 -0
  302. /package/dist/{src → legacy-root-azm/src}/lowering/ldFormSelection.d.ts +0 -0
  303. /package/dist/{src → legacy-root-azm/src}/lowering/ldFormSelection.js +0 -0
  304. /package/dist/{src → legacy-root-azm/src}/lowering/ldLowering.d.ts +0 -0
  305. /package/dist/{src → legacy-root-azm/src}/lowering/ldLowering.js +0 -0
  306. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmByteEmission.d.ts +0 -0
  307. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmByteEmission.js +0 -0
  308. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmPlacement.d.ts +0 -0
  309. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmPlacement.js +0 -0
  310. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmStreamRecording.d.ts +0 -0
  311. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmStreamRecording.js +0 -0
  312. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmTypes.d.ts +0 -0
  313. /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmTypes.js +0 -0
  314. /package/dist/{src → legacy-root-azm/src}/lowering/loweredFormat.d.ts +0 -0
  315. /package/dist/{src → legacy-root-azm/src}/lowering/loweredFormat.js +0 -0
  316. /package/dist/{src → legacy-root-azm/src}/lowering/loweredItemSize.d.ts +0 -0
  317. /package/dist/{src → legacy-root-azm/src}/lowering/loweredItemSize.js +0 -0
  318. /package/dist/{src → legacy-root-azm/src}/lowering/loweringDiagnostics.d.ts +0 -0
  319. /package/dist/{src → legacy-root-azm/src}/lowering/loweringDiagnostics.js +0 -0
  320. /package/dist/{src → legacy-root-azm/src}/lowering/loweringTypes.d.ts +0 -0
  321. /package/dist/{src → legacy-root-azm/src}/lowering/loweringTypes.js +0 -0
  322. /package/dist/{src → legacy-root-azm/src}/lowering/opCandidateRegistry.d.ts +0 -0
  323. /package/dist/{src → legacy-root-azm/src}/lowering/opCandidateRegistry.js +0 -0
  324. /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionExecution.d.ts +0 -0
  325. /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionExecution.js +0 -0
  326. /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionOrchestration.d.ts +0 -0
  327. /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionOrchestration.js +0 -0
  328. /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionStream.d.ts +0 -0
  329. /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionStream.js +0 -0
  330. /package/dist/{src → legacy-root-azm/src}/lowering/opMatching.d.ts +0 -0
  331. /package/dist/{src → legacy-root-azm/src}/lowering/opMatching.js +0 -0
  332. /package/dist/{src → legacy-root-azm/src}/lowering/opSubstitution.d.ts +0 -0
  333. /package/dist/{src → legacy-root-azm/src}/lowering/opSubstitution.js +0 -0
  334. /package/dist/{src → legacy-root-azm/src}/lowering/prescanTypes.d.ts +0 -0
  335. /package/dist/{src → legacy-root-azm/src}/lowering/prescanTypes.js +0 -0
  336. /package/dist/{src → legacy-root-azm/src}/lowering/programLowering.d.ts +0 -0
  337. /package/dist/{src → legacy-root-azm/src}/lowering/programLowering.js +0 -0
  338. /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringDeclarations.d.ts +0 -0
  339. /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringDeclarations.js +0 -0
  340. /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringFinalize.d.ts +0 -0
  341. /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringFinalize.js +0 -0
  342. /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringTraversal.d.ts +0 -0
  343. /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringTraversal.js +0 -0
  344. /package/dist/{src → legacy-root-azm/src}/lowering/programPrescan.d.ts +0 -0
  345. /package/dist/{src → legacy-root-azm/src}/lowering/programPrescan.js +0 -0
  346. /package/dist/{src → legacy-root-azm/src}/lowering/traceFormat.d.ts +0 -0
  347. /package/dist/{src → legacy-root-azm/src}/lowering/traceFormat.js +0 -0
  348. /package/dist/{src → legacy-root-azm/src}/pathCompare.d.ts +0 -0
  349. /package/dist/{src → legacy-root-azm/src}/pathCompare.js +0 -0
  350. /package/dist/{src → legacy-root-azm/src}/pipeline.js +0 -0
  351. /package/dist/{src → legacy-root-azm/src}/registerCare/analyze.d.ts +0 -0
  352. /package/dist/{src → legacy-root-azm/src}/registerCare/analyze.js +0 -0
  353. /package/dist/{src → legacy-root-azm/src}/registerCare/annotate.d.ts +0 -0
  354. /package/dist/{src → legacy-root-azm/src}/registerCare/annotate.js +0 -0
  355. /package/dist/{src → legacy-root-azm/src}/registerCare/boundaryHints.d.ts +0 -0
  356. /package/dist/{src → legacy-root-azm/src}/registerCare/boundaryHints.js +0 -0
  357. /package/dist/{src → legacy-root-azm/src}/registerCare/carriers.d.ts +0 -0
  358. /package/dist/{src → legacy-root-azm/src}/registerCare/carriers.js +0 -0
  359. /package/dist/{src → legacy-root-azm/src}/registerCare/controlFlow.d.ts +0 -0
  360. /package/dist/{src → legacy-root-azm/src}/registerCare/controlFlow.js +0 -0
  361. /package/dist/{src → legacy-root-azm/src}/registerCare/fix.d.ts +0 -0
  362. /package/dist/{src → legacy-root-azm/src}/registerCare/fix.js +0 -0
  363. /package/dist/{src → legacy-root-azm/src}/registerCare/liveness.d.ts +0 -0
  364. /package/dist/{src → legacy-root-azm/src}/registerCare/liveness.js +0 -0
  365. /package/dist/{src → legacy-root-azm/src}/registerCare/profiles.d.ts +0 -0
  366. /package/dist/{src → legacy-root-azm/src}/registerCare/profiles.js +0 -0
  367. /package/dist/{src → legacy-root-azm/src}/registerCare/programModel.d.ts +0 -0
  368. /package/dist/{src → legacy-root-azm/src}/registerCare/programModel.js +0 -0
  369. /package/dist/{src → legacy-root-azm/src}/registerCare/report.d.ts +0 -0
  370. /package/dist/{src → legacy-root-azm/src}/registerCare/report.js +0 -0
  371. /package/dist/{src → legacy-root-azm/src}/registerCare/smartComments.d.ts +0 -0
  372. /package/dist/{src → legacy-root-azm/src}/registerCare/smartComments.js +0 -0
  373. /package/dist/{src → legacy-root-azm/src}/registerCare/sourceText.d.ts +0 -0
  374. /package/dist/{src → legacy-root-azm/src}/registerCare/sourceText.js +0 -0
  375. /package/dist/{src → legacy-root-azm/src}/registerCare/summary.d.ts +0 -0
  376. /package/dist/{src → legacy-root-azm/src}/registerCare/summary.js +0 -0
  377. /package/dist/{src → legacy-root-azm/src}/registerCare/types.d.ts +0 -0
  378. /package/dist/{src → legacy-root-azm/src}/registerCare/types.js +0 -0
  379. /package/dist/{src → legacy-root-azm/src}/semantics/declVisitor.d.ts +0 -0
  380. /package/dist/{src → legacy-root-azm/src}/semantics/declVisitor.js +0 -0
  381. /package/dist/{src → legacy-root-azm/src}/semantics/env.d.ts +0 -0
  382. /package/dist/{src → legacy-root-azm/src}/semantics/env.js +0 -0
  383. /package/dist/{src → legacy-root-azm/src}/semantics/layout.d.ts +0 -0
  384. /package/dist/{src → legacy-root-azm/src}/semantics/layout.js +0 -0
  385. /package/dist/{src → legacy-root-azm/src}/semantics/layoutCastFold.d.ts +0 -0
  386. /package/dist/{src → legacy-root-azm/src}/semantics/layoutCastFold.js +0 -0
  387. /package/dist/{src → legacy-root-azm/src}/semantics/semanticsDiagnostics.d.ts +0 -0
  388. /package/dist/{src → legacy-root-azm/src}/semantics/semanticsDiagnostics.js +0 -0
  389. /package/dist/{src → legacy-root-azm/src}/semantics/typeQueries.d.ts +0 -0
  390. /package/dist/{src → legacy-root-azm/src}/semantics/typeQueries.js +0 -0
  391. /package/dist/{src → legacy-root-azm/src}/sourceIncludeExpansion.d.ts +0 -0
  392. /package/dist/{src → legacy-root-azm/src}/sourceIncludeExpansion.js +0 -0
  393. /package/dist/{src → legacy-root-azm/src}/sourceIncludePaths.d.ts +0 -0
  394. /package/dist/{src → legacy-root-azm/src}/sourceIncludePaths.js +0 -0
  395. /package/dist/{src → legacy-root-azm/src}/sourceLoader.d.ts +0 -0
  396. /package/dist/{src → legacy-root-azm/src}/sourceLoader.js +0 -0
  397. /package/dist/{src → legacy-root-azm/src}/z80/encodeAlu.d.ts +0 -0
  398. /package/dist/{src → legacy-root-azm/src}/z80/encodeAlu.js +0 -0
  399. /package/dist/{src → legacy-root-azm/src}/z80/encodeBitOps.d.ts +0 -0
  400. /package/dist/{src → legacy-root-azm/src}/z80/encodeBitOps.js +0 -0
  401. /package/dist/{src → legacy-root-azm/src}/z80/encodeContext.d.ts +0 -0
  402. /package/dist/{src → legacy-root-azm/src}/z80/encodeContext.js +0 -0
  403. /package/dist/{src → legacy-root-azm/src}/z80/encodeControl.d.ts +0 -0
  404. /package/dist/{src → legacy-root-azm/src}/z80/encodeControl.js +0 -0
  405. /package/dist/{src → legacy-root-azm/src}/z80/encodeCoreOps.d.ts +0 -0
  406. /package/dist/{src → legacy-root-azm/src}/z80/encodeCoreOps.js +0 -0
  407. /package/dist/{src → legacy-root-azm/src}/z80/encodeIo.d.ts +0 -0
  408. /package/dist/{src → legacy-root-azm/src}/z80/encodeIo.js +0 -0
  409. /package/dist/{src → legacy-root-azm/src}/z80/encodeLd.d.ts +0 -0
  410. /package/dist/{src → legacy-root-azm/src}/z80/encodeLd.js +0 -0
  411. /package/dist/{src → legacy-root-azm/src}/z80/encoderRegistry.d.ts +0 -0
  412. /package/dist/{src → legacy-root-azm/src}/z80/encoderRegistry.js +0 -0
@@ -0,0 +1,29 @@
1
+ import type { RegisterCareMode } from '../register-care/types.js';
2
+ import type { CaseStyleMode } from '../tooling/case-style.js';
3
+ export type CliExit = {
4
+ code: number;
5
+ };
6
+ export type CliOptions = {
7
+ entryFile: string;
8
+ outputPath?: string;
9
+ outputType: 'hex' | 'bin';
10
+ sourceRoot?: string | undefined;
11
+ emitBin: boolean;
12
+ emitHex: boolean;
13
+ emitD8m: boolean;
14
+ emitListing: boolean;
15
+ emitAsm80: boolean;
16
+ caseStyle: CaseStyleMode;
17
+ registerCare: RegisterCareMode;
18
+ emitRegisterReport: boolean;
19
+ emitRegisterInterface: boolean;
20
+ emitRegisterAnnotations: boolean;
21
+ fixRegisterContracts: boolean;
22
+ acceptRegisterOutputCandidates: string[];
23
+ registerCareProfile?: 'mon3';
24
+ registerCareInterfaces: string[];
25
+ includeDirs: string[];
26
+ directiveAliasFiles: string[];
27
+ };
28
+ export declare function cliUsage(): string;
29
+ export declare function parseCliArgs(argv: string[]): CliOptions | CliExit;
@@ -0,0 +1,372 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { extname } from 'node:path';
3
+ export function cliUsage() {
4
+ return [
5
+ 'azm [options] <entry.asm|entry.z80>',
6
+ '',
7
+ 'Options:',
8
+ ' -o, --output <file> Primary output path (must match --type extension)',
9
+ ' -t, --type <type> Primary output type: hex|bin (default: hex)',
10
+ ' -n, --nolist Suppress .lst',
11
+ ' --nobin Suppress .bin',
12
+ ' --nohex Suppress .hex',
13
+ ' --nod8m Suppress .d8.json',
14
+ ' --asm80 Emit lowered source (.z80)',
15
+ ' --register-care Register-care mode: off|audit|warn|error|strict',
16
+ ' --rc <m> Register-care mode alias for --register-care',
17
+ ' --reg-report Emit register-care report artifact',
18
+ ' --reg-interface Emit inferred register-care interface (.asmi)',
19
+ ' --contracts Rewrite source with inferred register-care contracts',
20
+ ' --fix Enable contract rewrite and conservative fixes',
21
+ ' --accept-out <x> Accept register-care output candidates',
22
+ ' --interface <file> Load .asmi contract file',
23
+ ' --reg-profile <p> Register-care profile (currently mon3)',
24
+ ' --source-root <d> Normalize D8 source paths relative to this directory',
25
+ ' --case-style <m> Case-style lint mode: off|upper|lower|consistent',
26
+ ' --aliases <file> Load project directive alias JSON (repeatable)',
27
+ ' -I, --include <dir> Add include search path (repeatable)',
28
+ ' -V, --version Print version',
29
+ ' -h, --help Show help',
30
+ '',
31
+ 'Notes:',
32
+ ' - <entry.asm|entry.z80> must be the last argument (assembler-style).',
33
+ ' - Output artifacts are written using the primary output stem with standard suffixes.',
34
+ '',
35
+ ].join('\n');
36
+ }
37
+ function fail(message) {
38
+ throw new Error(message);
39
+ }
40
+ function createDefaultCliState() {
41
+ return {
42
+ outputPath: undefined,
43
+ outputType: 'hex',
44
+ emitBin: true,
45
+ emitHex: true,
46
+ emitD8m: true,
47
+ emitListing: true,
48
+ emitAsm80: false,
49
+ caseStyle: 'off',
50
+ registerCare: 'off',
51
+ emitRegisterReport: false,
52
+ emitRegisterInterface: false,
53
+ emitRegisterAnnotations: false,
54
+ fixRegisterContracts: false,
55
+ acceptRegisterOutputCandidates: [],
56
+ registerCareInterfaces: [],
57
+ sourceRoot: undefined,
58
+ includeDirs: [],
59
+ directiveAliasFiles: [],
60
+ entryFile: undefined,
61
+ };
62
+ }
63
+ function readFlagValueFromEquals(arg, flag, valueProvider) {
64
+ if (arg.startsWith(`${flag}=`)) {
65
+ const value = arg.slice(flag.length + 1);
66
+ if (!value) {
67
+ fail(`${flag} expects a value`);
68
+ }
69
+ return value;
70
+ }
71
+ const value = valueProvider();
72
+ if (!value) {
73
+ fail(`${flag} expects a value`);
74
+ }
75
+ return value;
76
+ }
77
+ function readValue(argv, indexRef, flag) {
78
+ indexRef.current += 1;
79
+ const value = argv[indexRef.current];
80
+ if (!value) {
81
+ fail(`${flag} expects a value`);
82
+ }
83
+ return value;
84
+ }
85
+ function parseOutputPathArg(arg, argv, indexRef, state) {
86
+ if (arg !== '-o' && arg !== '--output' && !arg.startsWith('--output='))
87
+ return false;
88
+ state.outputPath = readFlagValueFromEquals(arg, '--output', () => readValue(argv, indexRef, '--output'));
89
+ return true;
90
+ }
91
+ function parseOutputTypeArg(arg, argv, indexRef, state) {
92
+ if (arg !== '-t' && arg !== '--type' && !arg.startsWith('--type='))
93
+ return false;
94
+ const value = arg.startsWith('--type=') ? arg.slice('--type='.length) : readValue(argv, indexRef, '--type');
95
+ if (!value) {
96
+ fail('--type expects a value');
97
+ }
98
+ if (value !== 'hex' && value !== 'bin') {
99
+ fail(`Unsupported --type "${value}" (expected hex|bin)`);
100
+ }
101
+ state.outputType = value;
102
+ return true;
103
+ }
104
+ function parseIncludeArg(arg, argv, indexRef, state) {
105
+ if (arg !== '-I' && arg !== '--include' && !arg.startsWith('--include='))
106
+ return false;
107
+ const includeArg = arg.startsWith('--include=')
108
+ ? arg.slice('--include='.length)
109
+ : readValue(argv, indexRef, arg);
110
+ if (!includeArg) {
111
+ fail(`${arg.startsWith('--include=') ? '--include' : arg} expects a value`);
112
+ }
113
+ state.includeDirs.push(includeArg);
114
+ return true;
115
+ }
116
+ function parseDirectiveAliasFileArg(arg, argv, indexRef, state) {
117
+ if (arg !== '--aliases' && !arg.startsWith('--aliases='))
118
+ return false;
119
+ const value = arg.startsWith('--aliases=')
120
+ ? arg.slice('--aliases='.length)
121
+ : readValue(argv, indexRef, '--aliases');
122
+ if (!value)
123
+ fail('--aliases expects a value');
124
+ state.directiveAliasFiles.push(value);
125
+ return true;
126
+ }
127
+ function parseCaseStyleArg(arg, argv, indexRef, state) {
128
+ if (arg !== '--case-style' && !arg.startsWith('--case-style='))
129
+ return false;
130
+ const value = arg.startsWith('--case-style=')
131
+ ? arg.slice('--case-style='.length)
132
+ : readValue(argv, indexRef, '--case-style');
133
+ if (!value)
134
+ fail('--case-style expects a value');
135
+ if (value !== 'off' && value !== 'upper' && value !== 'lower' && value !== 'consistent') {
136
+ fail(`Unsupported --case-style "${value}" (expected off|upper|lower|consistent)`);
137
+ }
138
+ state.caseStyle = value;
139
+ return true;
140
+ }
141
+ function readMatchedFlagValue(arg, argv, indexRef, flags) {
142
+ const flag = flags.find((candidate) => arg === candidate || arg.startsWith(`${candidate}=`));
143
+ if (!flag)
144
+ return undefined;
145
+ const value = arg.startsWith(`${flag}=`)
146
+ ? arg.slice(flag.length + 1)
147
+ : readValue(argv, indexRef, flag);
148
+ if (!value) {
149
+ fail(`${flag} expects a value`);
150
+ }
151
+ return { flag, value };
152
+ }
153
+ function parseRegisterCareArg(arg, argv, indexRef, state) {
154
+ const parsed = readMatchedFlagValue(arg, argv, indexRef, ['--register-care', '--rc']);
155
+ if (!parsed)
156
+ return false;
157
+ const { value, flag } = parsed;
158
+ if (value !== 'off' &&
159
+ value !== 'audit' &&
160
+ value !== 'warn' &&
161
+ value !== 'error' &&
162
+ value !== 'strict') {
163
+ fail(`Unsupported ${flag} "${value}" (expected off|audit|warn|error|strict)`);
164
+ }
165
+ state.registerCare = value;
166
+ return true;
167
+ }
168
+ function parseRegisterProfileArg(arg, argv, indexRef, state) {
169
+ const parsed = readMatchedFlagValue(arg, argv, indexRef, ['--register-profile', '--reg-profile']);
170
+ if (!parsed)
171
+ return false;
172
+ if (parsed.value !== 'mon3') {
173
+ fail(`Unsupported ${parsed.flag} "${parsed.value}" (expected mon3)`);
174
+ }
175
+ state.registerCareProfile = parsed.value;
176
+ return true;
177
+ }
178
+ function parseRegisterInterfaceArg(arg, argv, indexRef, state) {
179
+ if (arg !== '--interface' && !arg.startsWith('--interface='))
180
+ return false;
181
+ const value = arg.startsWith('--interface=')
182
+ ? arg.slice('--interface='.length)
183
+ : readValue(argv, indexRef, '--interface');
184
+ if (!value)
185
+ fail('--interface expects a value');
186
+ state.registerCareInterfaces.push(value);
187
+ return true;
188
+ }
189
+ function parseAcceptOutputArg(arg, argv, indexRef, state) {
190
+ const parsed = readMatchedFlagValue(arg, argv, indexRef, [
191
+ '--accept-register-output',
192
+ '--accept-out',
193
+ ]);
194
+ if (!parsed)
195
+ return false;
196
+ state.acceptRegisterOutputCandidates.push(parsed.value);
197
+ return true;
198
+ }
199
+ function parseSourceRootArg(arg, argv, indexRef, state) {
200
+ if (arg !== '--source-root' && !arg.startsWith('--source-root='))
201
+ return false;
202
+ state.sourceRoot = readFlagValueFromEquals(arg, '--source-root', () => readValue(argv, indexRef, '--source-root'));
203
+ return true;
204
+ }
205
+ function handleFastPath(arg) {
206
+ if (arg === '-h' || arg === '--help') {
207
+ process.stdout.write(cliUsage());
208
+ return { code: 0 };
209
+ }
210
+ if (arg === '-V' || arg === '--version') {
211
+ process.stdout.write(`${readPackageVersion()}\n`);
212
+ return { code: 0 };
213
+ }
214
+ return undefined;
215
+ }
216
+ function finalizeCliOptions(state) {
217
+ if (!state.entryFile) {
218
+ fail(`Expected exactly one <entry.asm|entry.z80> argument (and it must be last)`);
219
+ }
220
+ const ext = extname(state.entryFile).toLowerCase();
221
+ if (ext !== '.asm' && ext !== '.z80') {
222
+ fail(`Unsupported entry extension "${ext || '<none>'}" (expected .asm, .z80)`);
223
+ }
224
+ if (state.outputPath !== undefined) {
225
+ const wantExt = state.outputType === 'hex' ? '.hex' : '.bin';
226
+ const providedExt = extname(state.outputPath).toLowerCase();
227
+ if (providedExt !== wantExt) {
228
+ fail(`--output must end with "${wantExt}" when --type is "${state.outputType}"`);
229
+ }
230
+ }
231
+ const emitsRegisterCare = state.registerCare !== 'off' ||
232
+ state.emitRegisterReport ||
233
+ state.emitRegisterInterface ||
234
+ state.emitRegisterAnnotations ||
235
+ state.fixRegisterContracts ||
236
+ state.acceptRegisterOutputCandidates.length > 0 ||
237
+ state.registerCareInterfaces.length > 0;
238
+ if (state.outputType === 'hex' && !state.emitHex && !emitsRegisterCare) {
239
+ fail(`--type hex requires HEX output to be enabled`);
240
+ }
241
+ if (state.outputType === 'bin' && !state.emitBin && !emitsRegisterCare) {
242
+ fail(`--type bin requires BIN output to be enabled`);
243
+ }
244
+ return {
245
+ entryFile: state.entryFile,
246
+ ...(state.outputPath ? { outputPath: state.outputPath } : {}),
247
+ outputType: state.outputType,
248
+ ...(state.sourceRoot !== undefined ? { sourceRoot: state.sourceRoot } : {}),
249
+ emitBin: state.emitBin,
250
+ emitHex: state.emitHex,
251
+ emitD8m: state.emitD8m,
252
+ emitListing: state.emitListing,
253
+ emitAsm80: state.emitAsm80,
254
+ caseStyle: state.caseStyle,
255
+ registerCare: state.registerCare,
256
+ emitRegisterReport: state.emitRegisterReport,
257
+ emitRegisterInterface: state.emitRegisterInterface,
258
+ emitRegisterAnnotations: state.emitRegisterAnnotations,
259
+ fixRegisterContracts: state.fixRegisterContracts,
260
+ acceptRegisterOutputCandidates: state.acceptRegisterOutputCandidates,
261
+ ...(state.registerCareProfile !== undefined
262
+ ? { registerCareProfile: state.registerCareProfile }
263
+ : {}),
264
+ registerCareInterfaces: state.registerCareInterfaces,
265
+ includeDirs: state.includeDirs,
266
+ directiveAliasFiles: state.directiveAliasFiles,
267
+ };
268
+ }
269
+ export function parseCliArgs(argv) {
270
+ const state = createDefaultCliState();
271
+ const indexRef = { current: 0 };
272
+ for (; indexRef.current < argv.length; indexRef.current += 1) {
273
+ const arg = argv[indexRef.current];
274
+ const fastPath = handleFastPath(arg);
275
+ if (fastPath)
276
+ return fastPath;
277
+ if (parseOutputPathArg(arg, argv, indexRef, state))
278
+ continue;
279
+ if (parseOutputTypeArg(arg, argv, indexRef, state))
280
+ continue;
281
+ if (arg === '-n' || arg === '--nolist') {
282
+ state.emitListing = false;
283
+ continue;
284
+ }
285
+ if (arg === '--nobin') {
286
+ state.emitBin = false;
287
+ continue;
288
+ }
289
+ if (arg === '--nohex') {
290
+ state.emitHex = false;
291
+ continue;
292
+ }
293
+ if (arg === '--nod8m') {
294
+ state.emitD8m = false;
295
+ continue;
296
+ }
297
+ if (arg === '--asm80') {
298
+ state.emitAsm80 = true;
299
+ continue;
300
+ }
301
+ if (arg === '--emit-register-report' || arg === '--reg-report') {
302
+ state.emitRegisterReport = true;
303
+ continue;
304
+ }
305
+ if (arg === '--emit-register-interface' || arg === '--reg-interface') {
306
+ state.emitRegisterInterface = true;
307
+ continue;
308
+ }
309
+ if (arg === '--fix') {
310
+ state.fixRegisterContracts = true;
311
+ state.emitRegisterAnnotations = true;
312
+ continue;
313
+ }
314
+ if (arg === '--contracts' || arg === '--annotate-register-contracts') {
315
+ state.emitRegisterAnnotations = true;
316
+ continue;
317
+ }
318
+ if (parseSourceRootArg(arg, argv, indexRef, state))
319
+ continue;
320
+ if (parseCaseStyleArg(arg, argv, indexRef, state))
321
+ continue;
322
+ if (parseDirectiveAliasFileArg(arg, argv, indexRef, state))
323
+ continue;
324
+ if (parseRegisterCareArg(arg, argv, indexRef, state))
325
+ continue;
326
+ if (parseRegisterProfileArg(arg, argv, indexRef, state))
327
+ continue;
328
+ if (parseAcceptOutputArg(arg, argv, indexRef, state))
329
+ continue;
330
+ if (parseRegisterInterfaceArg(arg, argv, indexRef, state))
331
+ continue;
332
+ if (parseIncludeArg(arg, argv, indexRef, state))
333
+ continue;
334
+ if (arg.startsWith('-')) {
335
+ fail(`Unknown option "${arg}"`);
336
+ }
337
+ if (state.entryFile !== undefined) {
338
+ fail(`Expected exactly one <entry.asm|entry.z80> argument (and it must be last)`);
339
+ }
340
+ if (indexRef.current !== argv.length - 1) {
341
+ fail(`Expected exactly one <entry.asm|entry.z80> argument (and it must be last)`);
342
+ }
343
+ state.entryFile = arg;
344
+ }
345
+ return finalizeCliOptions(state);
346
+ }
347
+ let cachedPackageVersion;
348
+ function readPackageVersion() {
349
+ if (cachedPackageVersion !== undefined) {
350
+ return cachedPackageVersion;
351
+ }
352
+ const candidatePaths = [
353
+ new URL('../package.json', import.meta.url),
354
+ new URL('../../package.json', import.meta.url),
355
+ new URL('../../../package.json', import.meta.url),
356
+ ];
357
+ for (const path of candidatePaths) {
358
+ try {
359
+ const raw = readFileSync(path, 'utf8');
360
+ const parsed = JSON.parse(raw);
361
+ if (parsed.version !== undefined) {
362
+ cachedPackageVersion = parsed.version;
363
+ return cachedPackageVersion;
364
+ }
365
+ }
366
+ catch {
367
+ // continue
368
+ }
369
+ }
370
+ cachedPackageVersion = '0.0.0';
371
+ return cachedPackageVersion;
372
+ }
@@ -0,0 +1,2 @@
1
+ export { parseCliArgs } from './parse-args.js';
2
+ export declare function runCli(argv: string[]): Promise<number>;
@@ -0,0 +1,35 @@
1
+ import { compile } from '../api-compile.js';
2
+ import { formatDiagnostic } from '../diagnostics/format.js';
3
+ import { cliUsage, parseCliArgs } from './parse-args.js';
4
+ import { artifactBase, buildCompileOptions, compareDiagnosticsForCli, writeArtifacts } from './write-artifacts.js';
5
+ export { parseCliArgs } from './parse-args.js';
6
+ export async function runCli(argv) {
7
+ try {
8
+ const parsed = parseCliArgs(argv);
9
+ if ('code' in parsed) {
10
+ return parsed.code;
11
+ }
12
+ const base = artifactBase(parsed.entryFile, parsed.outputType, parsed.outputPath);
13
+ const compileResult = await compile(parsed.entryFile, buildCompileOptions(parsed, base));
14
+ const sortedDiagnostics = [...compileResult.diagnostics].sort(compareDiagnosticsForCli);
15
+ if (sortedDiagnostics.length > 0) {
16
+ for (const diagnostic of sortedDiagnostics) {
17
+ process.stderr.write(`${formatDiagnostic(diagnostic)}\n`);
18
+ }
19
+ }
20
+ if (sortedDiagnostics.some((diagnostic) => diagnostic.severity === 'error')) {
21
+ return 1;
22
+ }
23
+ const primaryPath = await writeArtifacts(base, compileResult.artifacts, parsed.outputType);
24
+ if (primaryPath !== undefined) {
25
+ process.stdout.write(primaryPath);
26
+ }
27
+ return 0;
28
+ }
29
+ catch (error) {
30
+ const msg = error instanceof Error ? error.message : String(error);
31
+ process.stderr.write(`azm: ${msg}\n`);
32
+ process.stderr.write(`${cliUsage()}\n`);
33
+ return 2;
34
+ }
35
+ }
@@ -0,0 +1,21 @@
1
+ import type { CompileNextFunctionOptions } from '../api-compile.js';
2
+ import type { Artifact } from '../outputs/types.js';
3
+ import type { CliOptions } from './parse-args.js';
4
+ export declare function compareDiagnosticsForCli(a: {
5
+ sourceName?: string;
6
+ line?: number;
7
+ column?: number;
8
+ severity: 'error' | 'warning' | 'info';
9
+ code: string;
10
+ message: string;
11
+ }, b: {
12
+ sourceName?: string;
13
+ line?: number;
14
+ column?: number;
15
+ severity: 'error' | 'warning' | 'info';
16
+ code: string;
17
+ message: string;
18
+ }): number;
19
+ export declare function artifactBase(entryFile: string, outputType: 'hex' | 'bin', outputPath?: string): string;
20
+ export declare function writeArtifacts(base: string, artifacts: readonly Artifact[], outputType: 'hex' | 'bin'): Promise<string | undefined>;
21
+ export declare function buildCompileOptions(parsed: CliOptions, base: string): CompileNextFunctionOptions;
@@ -0,0 +1,175 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import { dirname, extname, resolve } from 'node:path';
3
+ function normalizeDiagnosticPath(file) {
4
+ const normalized = file.replace(/\\/g, '/');
5
+ return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
6
+ }
7
+ function compareDiagnostics(aSource, bSource) {
8
+ const aNormalized = normalizeDiagnosticPath(aSource || '');
9
+ const bNormalized = normalizeDiagnosticPath(bSource || '');
10
+ return aNormalized.localeCompare(bNormalized);
11
+ }
12
+ export function compareDiagnosticsForCli(a, b) {
13
+ const sourceCmp = compareDiagnostics(a.sourceName ?? '', b.sourceName ?? '');
14
+ if (sourceCmp !== 0)
15
+ return sourceCmp;
16
+ const lineCmp = (a.line ?? Number.POSITIVE_INFINITY) - (b.line ?? Number.POSITIVE_INFINITY);
17
+ if (lineCmp !== 0)
18
+ return lineCmp;
19
+ const columnCmp = (a.column ?? Number.POSITIVE_INFINITY) - (b.column ?? Number.POSITIVE_INFINITY);
20
+ if (columnCmp !== 0)
21
+ return columnCmp;
22
+ const severityRank = (severity) => {
23
+ if (severity === 'error')
24
+ return 0;
25
+ if (severity === 'warning')
26
+ return 1;
27
+ return 2;
28
+ };
29
+ const severityCmp = severityRank(a.severity) - severityRank(b.severity);
30
+ if (severityCmp !== 0)
31
+ return severityCmp;
32
+ const codeCmp = a.code.localeCompare(b.code);
33
+ if (codeCmp !== 0)
34
+ return codeCmp;
35
+ return a.message.localeCompare(b.message);
36
+ }
37
+ export function artifactBase(entryFile, outputType, outputPath) {
38
+ if (outputPath !== undefined) {
39
+ const resolvedOutputPath = resolve(outputPath);
40
+ const providedExt = extname(resolvedOutputPath);
41
+ return providedExt.length > 0 ? resolvedOutputPath.slice(0, -providedExt.length) : resolvedOutputPath;
42
+ }
43
+ const resolvedEntry = resolve(entryFile);
44
+ const entryExt = extname(resolvedEntry);
45
+ return entryExt.length > 0 ? resolvedEntry.slice(0, -entryExt.length) : resolvedEntry;
46
+ }
47
+ export async function writeArtifacts(base, artifacts, outputType) {
48
+ const byKind = new Map();
49
+ for (const artifact of artifacts) {
50
+ byKind.set(artifact.kind, artifact);
51
+ }
52
+ const hexPath = `${base}.hex`;
53
+ const binPath = `${base}.bin`;
54
+ const d8mPath = `${base}.d8.json`;
55
+ const lstPath = `${base}.lst`;
56
+ const asm80Path = `${base}.z80`;
57
+ const registerCareReportPath = `${base}.regcare.txt`;
58
+ const registerCareInterfacePath = `${base}.asmi`;
59
+ const writes = [];
60
+ const ensureDir = async (path) => {
61
+ await mkdir(dirname(path), { recursive: true });
62
+ };
63
+ let primaryPath;
64
+ let registerCarePath;
65
+ const bin = byKind.get('bin');
66
+ if (bin && bin.kind === 'bin') {
67
+ writes.push((async () => {
68
+ await ensureDir(binPath);
69
+ await writeFile(binPath, Buffer.from(bin.bytes));
70
+ })());
71
+ if (outputType === 'bin') {
72
+ primaryPath = binPath;
73
+ }
74
+ }
75
+ const hex = byKind.get('hex');
76
+ if (hex && hex.kind === 'hex') {
77
+ writes.push((async () => {
78
+ await ensureDir(hexPath);
79
+ await writeFile(hexPath, hex.text, 'utf8');
80
+ })());
81
+ if (outputType === 'hex') {
82
+ primaryPath = hexPath;
83
+ }
84
+ }
85
+ const d8m = byKind.get('d8m');
86
+ if (d8m && d8m.kind === 'd8m') {
87
+ writes.push((async () => {
88
+ await ensureDir(d8mPath);
89
+ const text = JSON.stringify(d8m.json, null, 2);
90
+ await writeFile(d8mPath, `${text}\n`, 'utf8');
91
+ })());
92
+ }
93
+ const lst = byKind.get('lst');
94
+ if (lst && lst.kind === 'lst') {
95
+ writes.push((async () => {
96
+ await ensureDir(lstPath);
97
+ await writeFile(lstPath, lst.text, 'utf8');
98
+ })());
99
+ }
100
+ const asm80 = byKind.get('asm80');
101
+ if (asm80 && asm80.kind === 'asm80') {
102
+ writes.push((async () => {
103
+ await ensureDir(asm80Path);
104
+ await writeFile(asm80Path, asm80.text, 'utf8');
105
+ })());
106
+ }
107
+ const registerCareReport = byKind.get('register-care-report');
108
+ if (registerCareReport && registerCareReport.kind === 'register-care-report') {
109
+ writes.push((async () => {
110
+ await ensureDir(registerCareReportPath);
111
+ await writeFile(registerCareReportPath, registerCareReport.text, 'utf8');
112
+ })());
113
+ registerCarePath = registerCareReportPath;
114
+ }
115
+ const registerCareInterface = byKind.get('register-care-interface');
116
+ if (registerCareInterface && registerCareInterface.kind === 'register-care-interface') {
117
+ writes.push((async () => {
118
+ await ensureDir(registerCareInterfacePath);
119
+ await writeFile(registerCareInterfacePath, registerCareInterface.text, 'utf8');
120
+ })());
121
+ registerCarePath ??= registerCareInterfacePath;
122
+ }
123
+ const registerCareAnnotations = byKind.get('register-care-annotations');
124
+ if (registerCareAnnotations && registerCareAnnotations.kind === 'register-care-annotations') {
125
+ for (const item of registerCareAnnotations.files) {
126
+ writes.push((async () => {
127
+ await ensureDir(item.path);
128
+ await writeFile(item.path, item.text, 'utf8');
129
+ })());
130
+ if (primaryPath === undefined) {
131
+ primaryPath = item.path;
132
+ }
133
+ }
134
+ }
135
+ await Promise.all(writes);
136
+ if (primaryPath !== undefined) {
137
+ return primaryPath;
138
+ }
139
+ return registerCarePath;
140
+ }
141
+ export function buildCompileOptions(parsed, base) {
142
+ const hexPath = `${base}.hex`;
143
+ const binPath = `${base}.bin`;
144
+ const lstPath = `${base}.lst`;
145
+ return {
146
+ includeDirs: parsed.includeDirs,
147
+ directiveAliasFiles: parsed.directiveAliasFiles,
148
+ emitBin: parsed.emitBin,
149
+ emitHex: parsed.emitHex,
150
+ emitD8m: parsed.emitD8m,
151
+ emitListing: parsed.emitListing,
152
+ emitAsm80: parsed.emitAsm80,
153
+ caseStyle: parsed.caseStyle,
154
+ registerCare: parsed.registerCare,
155
+ emitRegisterReport: parsed.emitRegisterReport,
156
+ emitRegisterInterface: parsed.emitRegisterInterface,
157
+ emitRegisterAnnotations: parsed.emitRegisterAnnotations,
158
+ fixRegisterContracts: parsed.fixRegisterContracts,
159
+ acceptRegisterOutputCandidates: parsed.acceptRegisterOutputCandidates,
160
+ ...(parsed.registerCareProfile !== undefined
161
+ ? { registerCareProfile: parsed.registerCareProfile }
162
+ : {}),
163
+ registerCareInterfaces: parsed.registerCareInterfaces,
164
+ ...(parsed.sourceRoot !== undefined ? { sourceRoot: parsed.sourceRoot } : {}),
165
+ ...(parsed.sourceRoot !== undefined
166
+ ? {
167
+ d8mInputs: {
168
+ ...(parsed.emitListing ? { listing: lstPath } : {}),
169
+ ...(parsed.emitHex ? { hex: hexPath } : {}),
170
+ ...(parsed.emitBin ? { bin: binPath } : {}),
171
+ },
172
+ }
173
+ : {}),
174
+ };
175
+ }
package/dist/src/cli.d.ts CHANGED
@@ -1,30 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import type { CaseStyleMode } from './pipeline.js';
3
- import type { RegisterCareMode } from './registerCare/types.js';
4
- type CliExit = {
5
- code: number;
6
- };
7
- type CliOptions = {
8
- entryFile: string;
9
- outputPath?: string;
10
- outputType: 'hex' | 'bin';
11
- emitBin: boolean;
12
- emitHex: boolean;
13
- emitD8m: boolean;
14
- emitListing: boolean;
15
- emitAsm80: boolean;
16
- caseStyle: CaseStyleMode;
17
- includeDirs: string[];
18
- directiveAliasFiles: string[];
19
- registerCare: RegisterCareMode;
20
- emitRegisterReport: boolean;
21
- emitRegisterInterface: boolean;
22
- annotateRegisterContracts: boolean;
23
- fixRegisterContracts: boolean;
24
- acceptRegisterOutputCandidates: string[];
25
- registerCareProfile?: 'mon3';
26
- registerCareInterfaces: string[];
27
- };
28
- export declare function parseCliArgs(argv: string[]): CliOptions | CliExit;
29
- export declare function runCli(argv: string[]): Promise<number>;
30
- export {};
2
+ export { parseCliArgs, runCli } from './cli/run.js';