@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,118 +0,0 @@
1
- import { DiagnosticIds } from '../diagnosticTypes.js';
2
- import { ALL_REGISTER_NAMES } from '../frontend/grammarData.js';
3
- import { offsetPathInTypeExpr } from './layout.js';
4
- function containsLayoutCast(ea) {
5
- switch (ea.kind) {
6
- case 'EaName':
7
- case 'EaImm':
8
- return false;
9
- case 'EaLayoutCast':
10
- return true;
11
- case 'EaField':
12
- case 'EaAdd':
13
- case 'EaSub':
14
- case 'EaIndex':
15
- return containsLayoutCast(ea.base);
16
- }
17
- }
18
- function hasRuntimeIndexInLayoutCast(ea) {
19
- switch (ea.kind) {
20
- case 'EaName':
21
- case 'EaImm':
22
- return false;
23
- case 'EaLayoutCast':
24
- return hasRuntimeIndexInLayoutCast(ea.base);
25
- case 'EaField':
26
- case 'EaAdd':
27
- case 'EaSub':
28
- return hasRuntimeIndexInLayoutCast(ea.base);
29
- case 'EaIndex':
30
- if (containsLayoutCast(ea.base) &&
31
- (ea.index.kind === 'IndexReg8' ||
32
- ea.index.kind === 'IndexReg16' ||
33
- ea.index.kind === 'IndexMemHL' ||
34
- ea.index.kind === 'IndexMemIxIy' ||
35
- ea.index.kind === 'IndexEa')) {
36
- return true;
37
- }
38
- return hasRuntimeIndexInLayoutCast(ea.base);
39
- }
40
- }
41
- export function isConstantLayoutCastEa(ea) {
42
- return containsLayoutCast(ea) && !hasRuntimeIndexInLayoutCast(ea);
43
- }
44
- /** Label or label +/- imm base for `<Type>base[path]`. */
45
- export function isLayoutCastLabelBase(ea) {
46
- switch (ea.kind) {
47
- case 'EaName': {
48
- if (ALL_REGISTER_NAMES.has(ea.name.toUpperCase()))
49
- return false;
50
- return true;
51
- }
52
- case 'EaAdd':
53
- case 'EaSub':
54
- return isLayoutCastLabelBase(ea.base);
55
- default:
56
- return false;
57
- }
58
- }
59
- function decomposeLayoutCastEa(ea) {
60
- const steps = [];
61
- let cur = ea;
62
- while (cur.kind === 'EaField' || cur.kind === 'EaIndex') {
63
- if (cur.kind === 'EaField') {
64
- steps.unshift({ kind: 'OffsetField', span: cur.span, name: cur.field });
65
- cur = cur.base;
66
- continue;
67
- }
68
- if (cur.index.kind !== 'IndexImm')
69
- return undefined;
70
- steps.unshift({ kind: 'OffsetIndex', span: cur.span, expr: cur.index.value });
71
- cur = cur.base;
72
- }
73
- if (cur.kind !== 'EaLayoutCast')
74
- return undefined;
75
- return {
76
- cast: cur,
77
- path: { kind: 'OffsetPath', span: cur.span, steps },
78
- };
79
- }
80
- /**
81
- * Fold `<Type>label[path]` to a label fixup addend when the cast uses a label base
82
- * and compile-time indexes only.
83
- */
84
- export function foldLayoutCastAbsEa(ea, params) {
85
- if (!isConstantLayoutCastEa(ea))
86
- return undefined;
87
- const decomposed = decomposeLayoutCastEa(ea);
88
- if (!decomposed)
89
- return undefined;
90
- if (!isLayoutCastLabelBase(decomposed.cast.base))
91
- return undefined;
92
- const pathOffset = offsetPathInTypeExpr(decomposed.cast.typeExpr, decomposed.path, params.env, params.evalImm, params.diagnostics);
93
- if (pathOffset === undefined)
94
- return undefined;
95
- const base = params.resolveAbsBase(decomposed.cast.base);
96
- if (!base)
97
- return undefined;
98
- return {
99
- baseLower: base.baseLower,
100
- addend: (base.addend + pathOffset) & 0xffff,
101
- };
102
- }
103
- function layoutCastRuntimeIndexMessage() {
104
- return `Layout-cast address expressions require compile-time constant indexes; runtime index registers require explicit address arithmetic with sizeof/offset constants.`;
105
- }
106
- export function diagLayoutCastRuntimeIndex(diagnostics, span, ea) {
107
- if (!hasRuntimeIndexInLayoutCast(ea))
108
- return false;
109
- diagnostics.push({
110
- id: DiagnosticIds.TypeError,
111
- severity: 'error',
112
- message: layoutCastRuntimeIndexMessage(),
113
- file: span.file,
114
- line: span.start.line,
115
- column: span.start.column,
116
- });
117
- return true;
118
- }
@@ -1,2 +0,0 @@
1
- import type { Diagnostic } from '../diagnosticTypes.js';
2
- export declare function diagSemanticsError(diagnostics: Diagnostic[], file: string, message: string): void;
@@ -1,4 +0,0 @@
1
- import { DiagnosticIds } from '../diagnosticTypes.js';
2
- export function diagSemanticsError(diagnostics, file, message) {
3
- diagnostics.push({ id: DiagnosticIds.SemanticsError, severity: 'error', message, file });
4
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * typeQueries.ts — semantic-layer type-resolution helpers.
3
- *
4
- * These helpers are purely semantic: they walk type expressions and EA paths
5
- * using the compile environment and explicit layout casts, but they know
6
- * nothing about placed/lowered program state or code-generation concerns.
7
- *
8
- * The lowering layer imports these helpers directly.
9
- */
10
- import type { EaExprNode, RecordFieldNode, TypeExprNode } from '../frontend/ast.js';
11
- import type { CompileEnv } from './env.js';
12
- export type ScalarKind = 'byte' | 'word' | 'addr';
13
- export type AggregateType = {
14
- kind: 'record' | 'union';
15
- fields: RecordFieldNode[];
16
- };
17
- type TypeResolutionContext = {
18
- env: CompileEnv;
19
- };
20
- export declare function createTypeResolutionHelpers(ctx: TypeResolutionContext): {
21
- resolveScalarKind: (typeExpr: TypeExprNode) => ScalarKind | undefined;
22
- resolveAggregateType: (te: TypeExprNode) => AggregateType | undefined;
23
- resolveArrayType: (te: TypeExprNode) => {
24
- element: TypeExprNode;
25
- length?: number;
26
- } | undefined;
27
- resolveEaTypeExpr: (ea: EaExprNode) => TypeExprNode | undefined;
28
- sameTypeShape: (left: TypeExprNode, right: TypeExprNode) => boolean;
29
- typeDisplay: (te: TypeExprNode) => string;
30
- };
31
- export {};
@@ -1,124 +0,0 @@
1
- /**
2
- * typeQueries.ts — semantic-layer type-resolution helpers.
3
- *
4
- * These helpers are purely semantic: they walk type expressions and EA paths
5
- * using the compile environment and explicit layout casts, but they know
6
- * nothing about placed/lowered program state or code-generation concerns.
7
- *
8
- * The lowering layer imports these helpers directly.
9
- */
10
- export function createTypeResolutionHelpers(ctx) {
11
- const resolveScalarKind = (typeExpr) => {
12
- if (typeExpr.kind !== 'TypeName')
13
- return undefined;
14
- const lower = typeExpr.name.toLowerCase();
15
- if (lower === 'byte' || lower === 'word' || lower === 'addr')
16
- return lower;
17
- return undefined;
18
- };
19
- const resolveAggregateType = (te) => {
20
- if (te.kind === 'RecordType')
21
- return { kind: 'record', fields: te.fields };
22
- if (te.kind === 'TypeName') {
23
- const decl = ctx.env.types.get(te.name);
24
- if (!decl)
25
- return undefined;
26
- if (decl.kind === 'UnionDecl')
27
- return { kind: 'union', fields: decl.fields };
28
- if (decl.typeExpr.kind === 'RecordType') {
29
- return { kind: 'record', fields: decl.typeExpr.fields };
30
- }
31
- }
32
- return undefined;
33
- };
34
- const resolveArrayType = (te) => {
35
- if (te.kind !== 'ArrayType')
36
- return undefined;
37
- return te.length === undefined
38
- ? { element: te.element }
39
- : { element: te.element, length: te.length };
40
- };
41
- const typeDisplay = (te) => {
42
- const render = (x) => {
43
- if (x.kind === 'TypeName')
44
- return x.name;
45
- if (x.kind === 'ArrayType') {
46
- const inner = render(x.element);
47
- return `${inner}[${x.length === undefined ? '' : x.length}]`;
48
- }
49
- if (x.kind === 'RecordType') {
50
- return `record{${x.fields.map((f) => `${f.name}:${render(f.typeExpr)}`).join(',')}}`;
51
- }
52
- return 'type';
53
- };
54
- return render(te);
55
- };
56
- const sameTypeShape = (left, right) => {
57
- if (left.kind !== right.kind)
58
- return false;
59
- switch (left.kind) {
60
- case 'TypeName':
61
- return right.kind === 'TypeName' && left.name.toLowerCase() === right.name.toLowerCase();
62
- case 'ArrayType':
63
- if (right.kind !== 'ArrayType')
64
- return false;
65
- if (left.length !== right.length)
66
- return false;
67
- return sameTypeShape(left.element, right.element);
68
- case 'RecordType':
69
- if (right.kind !== 'RecordType')
70
- return false;
71
- if (left.fields.length !== right.fields.length)
72
- return false;
73
- for (let i = 0; i < left.fields.length; i++) {
74
- const lf = left.fields[i];
75
- const rf = right.fields[i];
76
- if (lf.name !== rf.name || !sameTypeShape(lf.typeExpr, rf.typeExpr))
77
- return false;
78
- }
79
- return true;
80
- }
81
- };
82
- const resolveEaTypeExprInternal = (ea) => {
83
- switch (ea.kind) {
84
- case 'EaName':
85
- return undefined;
86
- case 'EaAdd':
87
- case 'EaSub':
88
- return resolveEaTypeExprInternal(ea.base);
89
- case 'EaLayoutCast': {
90
- return ea.typeExpr;
91
- }
92
- case 'EaField': {
93
- const baseType = resolveEaTypeExprInternal(ea.base);
94
- if (!baseType)
95
- return undefined;
96
- const agg = resolveAggregateType(baseType);
97
- if (!agg)
98
- return undefined;
99
- for (const f of agg.fields) {
100
- if (f.name === ea.field)
101
- return f.typeExpr;
102
- }
103
- return undefined;
104
- }
105
- case 'EaIndex': {
106
- const baseType = resolveEaTypeExprInternal(ea.base);
107
- if (!baseType)
108
- return undefined;
109
- return resolveArrayType(baseType)?.element;
110
- }
111
- case 'EaImm':
112
- return undefined;
113
- }
114
- };
115
- const resolveEaTypeExpr = (ea) => resolveEaTypeExprInternal(ea);
116
- return {
117
- resolveScalarKind,
118
- resolveAggregateType,
119
- resolveArrayType,
120
- resolveEaTypeExpr,
121
- sameTypeShape,
122
- typeDisplay,
123
- };
124
- }
@@ -1,17 +0,0 @@
1
- import type { Diagnostic } from './diagnosticTypes.js';
2
- import type { DirectiveAliasPolicy } from './frontend/directiveAliases.js';
3
- export type ExpandedSource = {
4
- text: string;
5
- lineFiles: string[];
6
- lineBaseLines: number[];
7
- };
8
- export declare function expandTextIncludesForFile(args: {
9
- sourcePath: string;
10
- sourceText: string;
11
- includeDirs: string[];
12
- diagnostics: Diagnostic[];
13
- sourceTexts: Map<string, string>;
14
- includeStack: string[];
15
- aliasPolicy?: DirectiveAliasPolicy;
16
- signal?: AbortSignal;
17
- }): Promise<ExpandedSource | undefined>;
@@ -1,124 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import { normalizePath } from './compileShared.js';
3
- import { DiagnosticIds } from './diagnosticTypes.js';
4
- import { resolveDirectiveAlias } from './frontend/directiveAliases.js';
5
- import { stripLineComment } from './frontend/parseParserShared.js';
6
- import { resolveIncludeCandidates } from './sourceIncludePaths.js';
7
- const INCLUDE_DIRECTIVE_RE = /^\s*([.]?[A-Za-z][A-Za-z0-9_]*)\b\s+"([^"]+)"\s*$/i;
8
- function throwIfAborted(signal) {
9
- signal?.throwIfAborted();
10
- }
11
- function isIgnorableIncludeProbeError(err) {
12
- if (!err || typeof err !== 'object')
13
- return false;
14
- const code = err.code;
15
- return code === 'ENOENT' || code === 'ENOTDIR';
16
- }
17
- function includeDirectiveForLine(raw, aliasPolicy) {
18
- const stripped = stripLineComment(raw).trim();
19
- const match = INCLUDE_DIRECTIVE_RE.exec(stripped);
20
- if (!match)
21
- return undefined;
22
- return resolveDirectiveAlias(match[1], aliasPolicy) === '.include' ? match[2] : undefined;
23
- }
24
- async function resolveIncludeSource(sourcePath, rawLine, spec, lineNo, includeDirs, diagnostics, sourceTexts, signal) {
25
- const candidates = resolveIncludeCandidates(sourcePath, spec, includeDirs);
26
- for (const c of candidates) {
27
- throwIfAborted(signal);
28
- try {
29
- const resolvedText = await readFile(c, 'utf8');
30
- const resolvedKey = normalizePath(c);
31
- if (!sourceTexts.has(resolvedKey))
32
- sourceTexts.set(resolvedKey, resolvedText);
33
- return { resolved: c, resolvedText };
34
- }
35
- catch (err) {
36
- if (isIgnorableIncludeProbeError(err))
37
- continue;
38
- diagnostics.push({
39
- id: DiagnosticIds.IoReadFailed,
40
- severity: 'error',
41
- message: `Failed to read include candidate "${c}" while resolving includes for "${sourcePath}": ${String(err)}`,
42
- file: sourcePath,
43
- line: lineNo,
44
- column: rawLine.indexOf('include') + 1 || 1,
45
- });
46
- return 'hard-failure';
47
- }
48
- }
49
- diagnostics.push({
50
- id: DiagnosticIds.IncludeNotFound,
51
- severity: 'error',
52
- message: `Failed to resolve include "${spec}" from "${sourcePath}". Tried:\n${candidates
53
- .map((c) => `- ${c}`)
54
- .join('\n')}`,
55
- file: sourcePath,
56
- line: lineNo,
57
- column: rawLine.indexOf('include') + 1 || 1,
58
- });
59
- return undefined;
60
- }
61
- export async function expandTextIncludesForFile(args) {
62
- const { sourcePath, sourceText, includeDirs, diagnostics, sourceTexts, includeStack, aliasPolicy, signal, } = args;
63
- const sourceKey = normalizePath(sourcePath);
64
- if (!sourceTexts.has(sourceKey))
65
- sourceTexts.set(sourceKey, sourceText);
66
- const lines = sourceText.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
67
- const out = [];
68
- const lineFiles = [];
69
- const lineBaseLines = [];
70
- for (let i = 0; i < lines.length; i++) {
71
- throwIfAborted(signal);
72
- const raw = lines[i] ?? '';
73
- const lineNo = i + 1;
74
- const spec = includeDirectiveForLine(raw, aliasPolicy);
75
- if (!spec) {
76
- out.push(raw);
77
- lineFiles.push(sourcePath);
78
- lineBaseLines.push(lineNo);
79
- continue;
80
- }
81
- const resolvedInclude = await resolveIncludeSource(sourcePath, raw, spec, lineNo, includeDirs, diagnostics, sourceTexts, signal);
82
- if (resolvedInclude === 'hard-failure')
83
- return undefined;
84
- if (!resolvedInclude) {
85
- out.push(raw);
86
- lineFiles.push(sourcePath);
87
- lineBaseLines.push(lineNo);
88
- continue;
89
- }
90
- if (includeStack.includes(resolvedInclude.resolved)) {
91
- diagnostics.push({
92
- id: DiagnosticIds.SemanticsError,
93
- severity: 'error',
94
- message: `Include cycle detected: "${resolvedInclude.resolved}" is already active in the include stack.`,
95
- file: sourcePath,
96
- line: lineNo,
97
- column: raw.indexOf('include') + 1 || 1,
98
- });
99
- out.push(raw);
100
- lineFiles.push(sourcePath);
101
- lineBaseLines.push(lineNo);
102
- continue;
103
- }
104
- const expanded = await expandTextIncludesForFile({
105
- sourcePath: resolvedInclude.resolved,
106
- sourceText: resolvedInclude.resolvedText,
107
- includeDirs,
108
- diagnostics,
109
- sourceTexts,
110
- includeStack: [...includeStack, resolvedInclude.resolved],
111
- ...(aliasPolicy ? { aliasPolicy } : {}),
112
- ...(signal ? { signal } : {}),
113
- });
114
- if (expanded === undefined)
115
- return undefined;
116
- const expandedLines = expanded.text.split('\n');
117
- for (let j = 0; j < expandedLines.length; j++) {
118
- out.push(expandedLines[j]);
119
- lineFiles.push(expanded.lineFiles[j] ?? resolvedInclude.resolved);
120
- lineBaseLines.push(expanded.lineBaseLines[j] ?? j + 1);
121
- }
122
- }
123
- return { text: out.join('\n'), lineFiles, lineBaseLines };
124
- }
@@ -1 +0,0 @@
1
- export declare function resolveIncludeCandidates(fromSourcePath: string, specifier: string, includeDirs: string[]): string[];
@@ -1,12 +0,0 @@
1
- import { dirname, resolve } from 'node:path';
2
- import { normalizePath } from './compileShared.js';
3
- export function resolveIncludeCandidates(fromSourcePath, specifier, includeDirs) {
4
- const fromDir = dirname(fromSourcePath);
5
- const out = [];
6
- out.push(normalizePath(resolve(fromDir, specifier)));
7
- for (const inc of includeDirs) {
8
- out.push(normalizePath(resolve(inc, specifier)));
9
- }
10
- const seen = new Set();
11
- return out.filter((p) => (seen.has(p) ? false : (seen.add(p), true)));
12
- }
@@ -1,15 +0,0 @@
1
- import type { Diagnostic } from './diagnosticTypes.js';
2
- import type { ProgramNode } from './frontend/ast.js';
3
- import type { DirectiveAliasPolicy } from './frontend/directiveAliases.js';
4
- import type { CompilerOptions } from './pipeline.js';
5
- export type LoadedProgram = {
6
- program: ProgramNode;
7
- sourceTexts: Map<string, string>;
8
- sourceLineComments: Map<string, Map<number, string>>;
9
- };
10
- export interface LoadProgramOptions extends Pick<CompilerOptions, 'includeDirs'> {
11
- directiveAliasPolicy?: DirectiveAliasPolicy;
12
- preloadedText?: string;
13
- signal?: AbortSignal;
14
- }
15
- export declare function loadProgram(entryFile: string, diagnostics: Diagnostic[], options: LoadProgramOptions): Promise<LoadedProgram | undefined>;
@@ -1,118 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import { hasErrors, normalizePath } from './compileShared.js';
3
- import { DiagnosticIds } from './diagnosticTypes.js';
4
- import { buildDirectiveAliasPolicy, defaultDirectiveAliasProfileName, } from './frontend/directiveAliases.js';
5
- import { parseSourceFile } from './frontend/parser.js';
6
- import { makeSourceFile } from './frontend/source.js';
7
- import { isSupportedSourcePath } from './frontend/sourceExtensions.js';
8
- import { expandTextIncludesForFile } from './sourceIncludeExpansion.js';
9
- function throwIfAborted(signal) {
10
- signal?.throwIfAborted();
11
- }
12
- async function readSourceFileText(sourcePath, diagnostics, importer, preloadedText, signal) {
13
- throwIfAborted(signal);
14
- try {
15
- return preloadedText ?? (await readFile(sourcePath, 'utf8'));
16
- }
17
- catch (err) {
18
- diagnostics.push({
19
- id: DiagnosticIds.IoReadFailed,
20
- severity: 'error',
21
- message: importer
22
- ? `Failed to read included source file "${sourcePath}" (included by "${importer}"): ${String(err)}`
23
- : `Failed to read entry file: ${String(err)}`,
24
- file: importer ?? sourcePath,
25
- });
26
- return undefined;
27
- }
28
- }
29
- function recordSourceLineComments(sourceLineComments, expanded) {
30
- const lines = expanded.text.split(/\r?\n/);
31
- for (let i = 0; i < lines.length; i++) {
32
- const line = lines[i] ?? '';
33
- const semi = line.indexOf(';');
34
- if (semi < 0)
35
- continue;
36
- const commentText = line.slice(semi + 1).trim();
37
- if (!commentText)
38
- continue;
39
- const fileRaw = expanded.lineFiles[i];
40
- if (!fileRaw)
41
- continue;
42
- const file = normalizePath(fileRaw);
43
- const lineNo = expanded.lineBaseLines[i] ?? i + 1;
44
- let lineMap = sourceLineComments.get(file);
45
- if (!lineMap) {
46
- lineMap = new Map();
47
- sourceLineComments.set(file, lineMap);
48
- }
49
- lineMap.set(lineNo, commentText);
50
- }
51
- }
52
- function parseExpandedSourceFile(sourcePath, expanded, diagnostics, aliasPolicy) {
53
- try {
54
- const sourceFile = makeSourceFile(sourcePath, expanded.text);
55
- sourceFile.lineFiles = expanded.lineFiles;
56
- sourceFile.lineBaseLines = expanded.lineBaseLines;
57
- return parseSourceFile(sourcePath, expanded.text, diagnostics, sourceFile, aliasPolicy);
58
- }
59
- catch (err) {
60
- diagnostics.push({
61
- id: DiagnosticIds.InternalParseError,
62
- severity: 'error',
63
- message: `Internal error during parse: ${String(err)}`,
64
- file: sourcePath,
65
- });
66
- return undefined;
67
- }
68
- }
69
- export async function loadProgram(entryFile, diagnostics, options) {
70
- const entryPath = normalizePath(entryFile);
71
- const sourceTexts = new Map();
72
- const sourceLineComments = new Map();
73
- const includeDirs = (options.includeDirs ?? []).map(normalizePath);
74
- const aliasPolicy = options.directiveAliasPolicy ?? buildDirectiveAliasPolicy(defaultDirectiveAliasProfileName());
75
- const signal = options.signal;
76
- throwIfAborted(signal);
77
- const sourceText = await readSourceFileText(entryPath, diagnostics, undefined, options.preloadedText, signal);
78
- if (sourceText === undefined)
79
- return undefined;
80
- sourceTexts.set(entryPath, sourceText);
81
- if (!isSupportedSourcePath(entryPath)) {
82
- diagnostics.push({
83
- id: DiagnosticIds.Unknown,
84
- severity: 'error',
85
- message: 'Unsupported source file extension (expected .asm or .z80)',
86
- file: entryPath,
87
- });
88
- return undefined;
89
- }
90
- const expanded = await expandTextIncludesForFile({
91
- sourcePath: entryPath,
92
- sourceText,
93
- includeDirs,
94
- diagnostics,
95
- sourceTexts,
96
- includeStack: [entryPath],
97
- ...(aliasPolicy ? { aliasPolicy } : {}),
98
- ...(signal ? { signal } : {}),
99
- });
100
- if (expanded === undefined)
101
- return undefined;
102
- if (hasErrors(diagnostics))
103
- return undefined;
104
- const entrySource = parseExpandedSourceFile(entryPath, expanded, diagnostics, aliasPolicy);
105
- if (!entrySource)
106
- return undefined;
107
- recordSourceLineComments(sourceLineComments, expanded);
108
- return {
109
- program: {
110
- kind: 'Program',
111
- span: entrySource.span,
112
- entryFile: entryPath,
113
- files: [entrySource],
114
- },
115
- sourceTexts,
116
- sourceLineComments,
117
- };
118
- }
@@ -1,3 +0,0 @@
1
- import type { AsmInstructionNode } from '../frontend/ast.js';
2
- import type { InstructionEffect } from '../registerCare/types.js';
3
- export declare function getZ80InstructionEffect(inst: AsmInstructionNode): InstructionEffect;