@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,175 +0,0 @@
1
- export function createOpSubstitutionHelpers(ctx) {
2
- const substituteOffsetPath = (path, substituteImmExpr) => ({
3
- ...path,
4
- steps: path.steps.map((step) => step.kind === 'OffsetIndex' ? { ...step, expr: substituteImmExpr(step.expr) } : { ...step }),
5
- });
6
- const bindingAsImmExpr = (bound, span) => {
7
- if (!bound)
8
- return undefined;
9
- if (bound.kind === 'Imm')
10
- return ctx.cloneImmExpr(bound.expr);
11
- if (bound.kind !== 'Ea')
12
- return undefined;
13
- const name = ctx.flattenEaDottedName(bound.expr);
14
- if (!name || !ctx.env.enums.has(name))
15
- return undefined;
16
- return { kind: 'ImmName', span, name };
17
- };
18
- const substituteImm = (expr) => {
19
- if (expr.kind === 'ImmName') {
20
- const bound = ctx.bindings.get(expr.name.toLowerCase());
21
- const immBound = bindingAsImmExpr(bound, expr.span);
22
- if (immBound)
23
- return immBound;
24
- return { ...expr };
25
- }
26
- if (expr.kind === 'ImmOffset') {
27
- return { ...expr, path: substituteOffsetPath(expr.path, substituteImm) };
28
- }
29
- if (expr.kind === 'ImmUnary')
30
- return { ...expr, expr: substituteImm(expr.expr) };
31
- if (expr.kind === 'ImmBinary') {
32
- return {
33
- ...expr,
34
- left: substituteImm(expr.left),
35
- right: substituteImm(expr.right),
36
- };
37
- }
38
- return { ...expr };
39
- };
40
- const substituteOperand = (operand) => {
41
- if (operand.kind === 'Imm' && operand.expr.kind === 'ImmName') {
42
- const bound = ctx.bindings.get(operand.expr.name.toLowerCase());
43
- const immBound = bindingAsImmExpr(bound, operand.span);
44
- if (immBound)
45
- return { kind: 'Imm', span: operand.span, expr: immBound };
46
- if (bound)
47
- return ctx.cloneOperand(bound);
48
- return { ...operand, expr: substituteImm(operand.expr) };
49
- }
50
- if (operand.kind === 'Imm')
51
- return { ...operand, expr: substituteImm(operand.expr) };
52
- if (operand.kind === 'PortImm8') {
53
- return { ...operand, expr: substituteImm(operand.expr) };
54
- }
55
- if ((operand.kind === 'Ea' || operand.kind === 'Mem') && operand.expr.kind === 'EaName') {
56
- const bound = ctx.bindings.get(operand.expr.name.toLowerCase());
57
- if (bound?.kind === 'Ea')
58
- return ctx.cloneOperand(bound);
59
- if (bound?.kind === 'Reg') {
60
- return {
61
- ...operand,
62
- expr: { kind: 'EaName', span: operand.expr.span, name: bound.name },
63
- };
64
- }
65
- if (bound?.kind === 'Imm' && bound.expr.kind === 'ImmName') {
66
- return {
67
- ...operand,
68
- expr: { kind: 'EaName', span: operand.expr.span, name: bound.expr.name },
69
- };
70
- }
71
- return ctx.cloneOperand(operand);
72
- }
73
- return ctx.cloneOperand(operand);
74
- };
75
- const substituteImmWithOpLabels = (expr, localLabelMap) => {
76
- if (expr.kind === 'ImmName') {
77
- const bound = ctx.bindings.get(expr.name.toLowerCase());
78
- const immBound = bindingAsImmExpr(bound, expr.span);
79
- if (immBound)
80
- return immBound;
81
- const mapped = localLabelMap.get(expr.name.toLowerCase());
82
- if (mapped)
83
- return { kind: 'ImmName', span: expr.span, name: mapped };
84
- return { ...expr };
85
- }
86
- if (expr.kind === 'ImmOffset') {
87
- return {
88
- ...expr,
89
- path: substituteOffsetPath(expr.path, (inner) => substituteImmWithOpLabels(inner, localLabelMap)),
90
- };
91
- }
92
- if (expr.kind === 'ImmUnary') {
93
- return { ...expr, expr: substituteImmWithOpLabels(expr.expr, localLabelMap) };
94
- }
95
- if (expr.kind === 'ImmBinary') {
96
- return {
97
- ...expr,
98
- left: substituteImmWithOpLabels(expr.left, localLabelMap),
99
- right: substituteImmWithOpLabels(expr.right, localLabelMap),
100
- };
101
- }
102
- return { ...expr };
103
- };
104
- const substituteOperandWithOpLabels = (operand, localLabelMap) => {
105
- const substituteEaWithOpLabels = (ea) => {
106
- if (ea.kind === 'EaName') {
107
- const bound = ctx.bindings.get(ea.name.toLowerCase());
108
- if (bound?.kind === 'Ea')
109
- return ctx.cloneEaExpr(bound.expr);
110
- if (bound?.kind === 'Reg') {
111
- return { kind: 'EaName', span: ea.span, name: bound.name };
112
- }
113
- if (bound?.kind === 'Imm' && bound.expr.kind === 'ImmName') {
114
- return { kind: 'EaName', span: ea.span, name: bound.expr.name };
115
- }
116
- const mapped = localLabelMap.get(ea.name.toLowerCase());
117
- if (mapped)
118
- return { kind: 'EaName', span: ea.span, name: mapped };
119
- return { ...ea };
120
- }
121
- if (ea.kind === 'EaImm') {
122
- return { ...ea, expr: substituteImmWithOpLabels(ea.expr, localLabelMap) };
123
- }
124
- if (ea.kind === 'EaField') {
125
- return { ...ea, base: substituteEaWithOpLabels(ea.base) };
126
- }
127
- if (ea.kind === 'EaIndex') {
128
- const index = ea.index.kind === 'IndexEa'
129
- ? { ...ea.index, expr: substituteEaWithOpLabels(ea.index.expr) }
130
- : ea.index.kind === 'IndexImm'
131
- ? { ...ea.index, value: substituteImmWithOpLabels(ea.index.value, localLabelMap) }
132
- : ea.index.kind === 'IndexMemIxIy' && ea.index.disp
133
- ? { ...ea.index, disp: substituteImmWithOpLabels(ea.index.disp, localLabelMap) }
134
- : { ...ea.index };
135
- return { ...ea, base: substituteEaWithOpLabels(ea.base), index };
136
- }
137
- if (ea.kind === 'EaAdd' || ea.kind === 'EaSub') {
138
- return {
139
- ...ea,
140
- base: substituteEaWithOpLabels(ea.base),
141
- offset: substituteImmWithOpLabels(ea.offset, localLabelMap),
142
- };
143
- }
144
- return ctx.cloneEaExpr(ea);
145
- };
146
- if (operand.kind === 'Imm') {
147
- if (operand.expr.kind === 'ImmName') {
148
- const bound = ctx.bindings.get(operand.expr.name.toLowerCase());
149
- const immBound = bindingAsImmExpr(bound, operand.span);
150
- if (immBound)
151
- return { kind: 'Imm', span: operand.span, expr: immBound };
152
- if (bound)
153
- return ctx.cloneOperand(bound);
154
- }
155
- return { ...operand, expr: substituteImmWithOpLabels(operand.expr, localLabelMap) };
156
- }
157
- if (operand.kind === 'Ea' || operand.kind === 'Mem') {
158
- return {
159
- ...operand,
160
- expr: substituteEaWithOpLabels(operand.expr),
161
- };
162
- }
163
- if (operand.kind === 'PortImm8') {
164
- return { ...operand, expr: substituteImmWithOpLabels(operand.expr, localLabelMap) };
165
- }
166
- return substituteOperand(operand);
167
- };
168
- return {
169
- bindingAsImmExpr,
170
- substituteImm,
171
- substituteOperand,
172
- substituteImmWithOpLabels,
173
- substituteOperandWithOpLabels,
174
- };
175
- }
@@ -1,7 +0,0 @@
1
- import type { OpDeclNode } from '../frontend/ast.js';
2
- export interface PrescanResult {
3
- /** Frozen per-file op maps. */
4
- readonly localOpsByFile: ReadonlyMap<string, ReadonlyMap<string, OpDeclNode[]>>;
5
- /** Declared `op` names (lowercased). */
6
- readonly declaredOpNames: ReadonlySet<string>;
7
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,144 +0,0 @@
1
- import type { ImmExprNode, OpDeclNode, ProgramNode, SourceSpan, TypeExprNode } from '../frontend/ast.js';
2
- import type { Diagnostic } from '../diagnosticTypes.js';
3
- import type { AddressRange, EmittedSourceSegment, SymbolEntry } from '../formats/types.js';
4
- import type { CompileEnv } from '../semantics/env.js';
5
- import type { AssemblerLoweringSharedContext } from './assemblerLoweringContext.js';
6
- import type { PendingSymbol, PlacementKind } from './loweringTypes.js';
7
- import type { LoweredAsmItem, LoweredImmExpr } from './loweredAsmTypes.js';
8
- import type { PrescanResult } from './prescanTypes.js';
9
- import type { AggregateType } from '../semantics/typeQueries.js';
10
- export type Context = AssemblerLoweringSharedContext & {
11
- /** Full program AST being lowered. */
12
- program: ProgramNode;
13
- /** Resolved include directories for asset loads. */
14
- includeDirs: string[];
15
- /** Per-file op overload maps. */
16
- localOpsByFile: Map<string, Map<string, OpDeclNode[]>>;
17
- /** All declared `op` names (lowercased). */
18
- declaredOpNames: Set<string>;
19
- /** Symbols with absolute addresses. */
20
- absoluteSymbols: SymbolEntry[];
21
- /** Running symbol table. */
22
- symbols: SymbolEntry[];
23
- /** Data-placement byte map. */
24
- dataBytes: Map<number, number>;
25
- /** Code-placement byte map. */
26
- codeBytes: Map<number, number>;
27
- /** Currently selected code/data placement for emission. */
28
- activePlacementRef: {
29
- current: PlacementKind;
30
- };
31
- /** Next code allocation offset (mutable cursor). */
32
- codeOffsetRef: {
33
- current: number;
34
- };
35
- /** Next data allocation offset. */
36
- dataOffsetRef: {
37
- current: number;
38
- };
39
- /** Optional base imm per placement. */
40
- baseExprs: Partial<Record<PlacementKind, ImmExprNode>>;
41
- /** Advances alignment state for `align` directives. */
42
- advanceAlign: (a: number) => void;
43
- /** Rounds `n` up to `alignment` bytes. */
44
- alignTo: (n: number, alignment: number) => number;
45
- /** Loads a binary asset; `undefined` on failure (diagnostics via `diag`). */
46
- loadBinInput: (file: string, fromPath: string, includeDirs: string[], diag: (file: string, message: string) => void) => Uint8Array | undefined;
47
- /** Structural type resolver for records/unions. */
48
- resolveAggregateType: (type: TypeExprNode) => AggregateType | undefined;
49
- /** Layout size helper; `undefined` if type cannot be sized. */
50
- sizeOfTypeExpr: (typeExpr: TypeExprNode, env: CompileEnv, diagnostics: Diagnostic[]) => number | undefined;
51
- /** Records one lowered asm item for tracing; `span` optional for synthetic items. */
52
- recordLoweredAsmItem: (item: LoweredAsmItem, span?: SourceSpan) => void;
53
- /** Lowers an imm AST node to the trace IR. */
54
- lowerImmExprForLoweredAsm: (expr: ImmExprNode) => LoweredImmExpr;
55
- };
56
- /** Phase 1 — inputs mutated while discovering ops and source-order metadata. */
57
- export type PrescanContext = Pick<Context, 'program' | 'env' | 'diagnostics' | 'localOpsByFile' | 'declaredOpNames' | 'resolveScalarKind'>;
58
- /**
59
- * Phase 2 — full program-lowering context after prescan. Prescan outputs are frozen in
60
- * {@link PrescanResult}; the same map instances remain on `ctx` for lowering (shared refs).
61
- */
62
- export type LoweringContext = Context & {
63
- /** Frozen prescan result; map refs alias `ctx` for shared mutation during lowering. */
64
- readonly prescan: PrescanResult;
65
- };
66
- export type LoweringResult = {
67
- /** Final code-placement size cursor. */
68
- codeOffset: number;
69
- /** Final data-placement size cursor. */
70
- dataOffset: number;
71
- /** Still-unresolved symbols after lowering. */
72
- pending: Context['pending'];
73
- /** Emitted symbol table. */
74
- symbols: Context['symbols'];
75
- /** Absolute-address symbols. */
76
- absoluteSymbols: Context['absoluteSymbols'];
77
- /** Emitted code bytes. */
78
- codeBytes: Context['codeBytes'];
79
- /** Emitted data bytes. */
80
- dataBytes: Context['dataBytes'];
81
- };
82
- /**
83
- * Phase 3 — inputs for placement, fixup resolution, and merged byte emission
84
- * (`finalizeProgramEmission`).
85
- */
86
- export type ProgramEmissionFinalizeContext = {
87
- /** Diagnostics for placement and merge. */
88
- diagnostics: Diagnostic[];
89
- /** File-scoped diagnostic helper. */
90
- diag: (diagnostics: Diagnostic[], file: string, message: string) => void;
91
- /** Primary source path. */
92
- primaryFile: string;
93
- /** Code/data placement base imm expressions. */
94
- baseExprs: Partial<Record<PlacementKind, ImmExprNode>>;
95
- /** Imm evaluator; `undefined` when expression is not const. */
96
- evalImmExpr: (expr: ImmExprNode, env: CompileEnv, diagnostics: Diagnostic[]) => number | undefined;
97
- /** Compile environment. */
98
- env: CompileEnv;
99
- /** Code size after lowering. */
100
- codeOffset: number;
101
- /** Data size after lowering. */
102
- dataOffset: number;
103
- /** Pending symbols. */
104
- pending: PendingSymbol[];
105
- /** Symbol table (may grow during placement). */
106
- symbols: SymbolEntry[];
107
- /** Absolute symbols. */
108
- absoluteSymbols: SymbolEntry[];
109
- /** Absolute fixup records. */
110
- fixups: Array<{
111
- offset: number;
112
- baseLower: string;
113
- addend: number;
114
- file: string;
115
- }>;
116
- /** Relative fixup records. */
117
- rel8Fixups: Array<{
118
- offset: number;
119
- origin: number;
120
- baseLower: string;
121
- addend: number;
122
- file: string;
123
- mnemonic: string;
124
- }>;
125
- /** Code bytes. */
126
- codeBytes: Map<number, number>;
127
- /** Data bytes. */
128
- dataBytes: Map<number, number>;
129
- /** Merged working byte map. */
130
- bytes: Map<number, number>;
131
- /** Code source segments for listing. */
132
- codeSourceSegments: EmittedSourceSegment[];
133
- /** Optional default code load address. */
134
- defaultCodeBase?: number;
135
- /** Alignment helper. */
136
- alignTo: (n: number, alignment: number) => number;
137
- /** Copies one byte-offset map into the merged `bytes` map. */
138
- writeBytePlacement: (base: number, byteOffsets: Map<number, number>, bytes: Map<number, number>, report: (message: string) => void) => void;
139
- /** Min/max written addresses for overlap checks. */
140
- computeWrittenRange: (bytes: Map<number, number>) => AddressRange;
141
- /** Rebases listing segments after code base is fixed. */
142
- rebaseCodeSourceSegments: (codeBase: number, segments: EmittedSourceSegment[]) => EmittedSourceSegment[];
143
- };
144
- export { finalizeProgramEmission } from './programLoweringFinalize.js';
@@ -1,2 +0,0 @@
1
- // --- Phase 3: finalization (placement, fixups, emission) ---
2
- export { finalizeProgramEmission } from './programLoweringFinalize.js';
@@ -1,5 +0,0 @@
1
- import type { Context } from './programLowering.js';
2
- import { type RawDataLike } from './asmRawDataLowering.js';
3
- export declare function createProgramLoweringDeclarationHelpers(ctx: Context): {
4
- lowerAsmRawDataDirective: (decl: RawDataLike) => void;
5
- };
@@ -1,5 +0,0 @@
1
- import { createAsmRawDataLowerer } from './asmRawDataLowering.js';
2
- export function createProgramLoweringDeclarationHelpers(ctx) {
3
- const lowerAsmRawDataDirective = createAsmRawDataLowerer(ctx);
4
- return { lowerAsmRawDataDirective };
5
- }
@@ -1,18 +0,0 @@
1
- import type { AddressRange, EmittedSourceSegment } from '../formats/types.js';
2
- import type { ProgramEmissionFinalizeContext } from './programLowering.js';
3
- export declare function computePlacementBases(ctx: Pick<ProgramEmissionFinalizeContext, 'baseExprs' | 'evalImmExpr' | 'env' | 'diagnostics' | 'diag' | 'primaryFile' | 'alignTo' | 'codeOffset' | 'dataOffset'>, defaultCodeBase?: number, options?: {
4
- quiet?: boolean;
5
- }): {
6
- codeBase: number;
7
- dataBase: number;
8
- codeOk: boolean;
9
- dataOk: boolean;
10
- };
11
- export declare function finalizeProgramEmission(ctx: ProgramEmissionFinalizeContext): {
12
- codeBase: number;
13
- dataBase: number;
14
- codeOk: boolean;
15
- dataOk: boolean;
16
- writtenRange: AddressRange;
17
- sourceSegments: EmittedSourceSegment[];
18
- };
@@ -1,115 +0,0 @@
1
- import { createFixupBaseResolver } from './fixupBaseResolution.js';
2
- export function computePlacementBases(ctx, defaultCodeBase, options) {
3
- const diagnostics = options?.quiet ? [] : ctx.diagnostics;
4
- const diagFn = options?.quiet ? () => { } : ctx.diag;
5
- const evalBase = (kind) => {
6
- const at = ctx.baseExprs[kind];
7
- if (!at)
8
- return undefined;
9
- const value = ctx.evalImmExpr(at, ctx.env, diagnostics);
10
- if (value === undefined) {
11
- diagFn(diagnostics, at.span.file, `Failed to evaluate placement "${kind}" base address.`);
12
- return undefined;
13
- }
14
- if (value < 0 || value > 0xffff) {
15
- diagFn(diagnostics, at.span.file, `Placement "${kind}" base address out of range (0..65535).`);
16
- return undefined;
17
- }
18
- return value;
19
- };
20
- const explicitCodeBase = evalBase('code');
21
- const explicitDataBase = evalBase('data');
22
- const codeOk = explicitCodeBase !== undefined || !ctx.baseExprs.code;
23
- const codeBase = explicitCodeBase ?? defaultCodeBase ?? 0;
24
- const dataBase = explicitDataBase ??
25
- (codeOk
26
- ? ctx.alignTo(codeBase + ctx.codeOffset, 2)
27
- : (diagFn(diagnostics, ctx.primaryFile, `Cannot compute default data base address because code base address is invalid.`),
28
- 0));
29
- const dataOk = explicitDataBase !== undefined || (ctx.baseExprs.data === undefined && codeOk);
30
- return { codeBase, dataBase, codeOk, dataOk };
31
- }
32
- export function finalizeProgramEmission(ctx) {
33
- const { codeBase, dataBase, codeOk, dataOk } = computePlacementBases(ctx, ctx.defaultCodeBase);
34
- const addrByNameLower = new Map();
35
- for (const ps of ctx.pending) {
36
- const base = ps.placement === 'code' ? codeBase : dataBase;
37
- const ok = ps.placement === 'code' ? codeOk : dataOk;
38
- if (!ok)
39
- continue;
40
- addrByNameLower.set(ps.name.toLowerCase(), base + ps.offset);
41
- }
42
- for (const [name, value] of ctx.env.equates) {
43
- addrByNameLower.set(name.toLowerCase(), value);
44
- }
45
- for (const sym of ctx.symbols) {
46
- if (sym.kind === 'constant')
47
- continue;
48
- addrByNameLower.set(sym.name.toLowerCase(), sym.address);
49
- }
50
- for (const sym of ctx.absoluteSymbols) {
51
- if (sym.kind === 'constant' || sym.address === undefined)
52
- continue;
53
- addrByNameLower.set(sym.name.toLowerCase(), sym.address);
54
- }
55
- const resolveFixupBase = createFixupBaseResolver({ env: ctx.env, addrByNameLower });
56
- for (const fx of ctx.fixups) {
57
- const base = resolveFixupBase(fx.baseLower);
58
- const addr = base === undefined ? undefined : base + fx.addend;
59
- if (addr === undefined) {
60
- ctx.diag(ctx.diagnostics, fx.file, `Unresolved symbol "${fx.baseLower}" in 16-bit fixup.`);
61
- continue;
62
- }
63
- if (addr < 0 || addr > 0xffff) {
64
- ctx.diag(ctx.diagnostics, fx.file, `16-bit fixup address out of range for "${fx.baseLower}" with addend ${fx.addend}: ${addr}.`);
65
- continue;
66
- }
67
- ctx.codeBytes.set(fx.offset, addr & 0xff);
68
- ctx.codeBytes.set(fx.offset + 1, (addr >> 8) & 0xff);
69
- }
70
- for (const fx of ctx.rel8Fixups) {
71
- const base = resolveFixupBase(fx.baseLower);
72
- const target = base === undefined ? undefined : base + fx.addend;
73
- if (target === undefined) {
74
- ctx.diag(ctx.diagnostics, fx.file, `Unresolved symbol "${fx.baseLower}" in rel8 ${fx.mnemonic} fixup.`);
75
- continue;
76
- }
77
- const origin = codeBase + fx.origin;
78
- const disp = target - origin;
79
- if (disp < -128 || disp > 127) {
80
- ctx.diag(ctx.diagnostics, fx.file, `${fx.mnemonic} target out of range for rel8 branch (${disp}, expected -128..127).`);
81
- continue;
82
- }
83
- ctx.codeBytes.set(fx.offset, disp & 0xff);
84
- }
85
- if (codeOk) {
86
- ctx.writeBytePlacement(codeBase, ctx.codeBytes, ctx.bytes, (message) => ctx.diag(ctx.diagnostics, ctx.primaryFile, message));
87
- }
88
- if (dataOk) {
89
- ctx.writeBytePlacement(dataBase, ctx.dataBytes, ctx.bytes, (message) => ctx.diag(ctx.diagnostics, ctx.primaryFile, message));
90
- }
91
- for (const ps of ctx.pending) {
92
- const base = ps.placement === 'code' ? codeBase : dataBase;
93
- const ok = ps.placement === 'code' ? codeOk : dataOk;
94
- if (!ok)
95
- continue;
96
- ctx.symbols.push({
97
- kind: ps.kind,
98
- name: ps.name,
99
- address: base + ps.offset,
100
- ...(ps.file !== undefined ? { file: ps.file } : {}),
101
- ...(ps.line !== undefined ? { line: ps.line } : {}),
102
- ...(ps.scope !== undefined ? { scope: ps.scope } : {}),
103
- ...(ps.size !== undefined ? { size: ps.size } : {}),
104
- });
105
- }
106
- ctx.symbols.push(...ctx.absoluteSymbols);
107
- return {
108
- codeBase,
109
- dataBase,
110
- codeOk,
111
- dataOk,
112
- writtenRange: ctx.computeWrittenRange(ctx.bytes),
113
- sourceSegments: codeOk ? ctx.rebaseCodeSourceSegments(codeBase, ctx.codeSourceSegments) : [],
114
- };
115
- }
@@ -1,2 +0,0 @@
1
- import type { LoweringContext, LoweringResult } from './programLowering.js';
2
- export declare function lowerProgramDeclarations(ctx: LoweringContext): LoweringResult;
@@ -1,93 +0,0 @@
1
- import { createProgramLoweringDeclarationHelpers } from './programLoweringDeclarations.js';
2
- import { tryLowerAsmDirective } from './asmDirectiveLowering.js';
3
- import { lowerAsmSourceInstruction } from './asmSourceInstructionLowering.js';
4
- import { isAsmBinFromDirective, isAsmBinToDirective, isAsmEndDirective, isAsmOrgDirective, isAsmRawDataDirective, } from './asmDirectiveTraversal.js';
5
- function placementForAsmOrg(items, index) {
6
- for (let lookahead = index + 1; lookahead < items.length; lookahead++) {
7
- const next = items[lookahead];
8
- if (!next?.kind)
9
- continue;
10
- if (isAsmRawDataDirective(next))
11
- return 'data';
12
- if (next.kind === 'AsmLabel' || next.kind === 'AsmEqu')
13
- continue;
14
- return 'code';
15
- }
16
- return 'code';
17
- }
18
- function lowerItem(ctx, lowerAsmRawDataDirective, item) {
19
- if (tryLowerAsmDirective(ctx, item))
20
- return;
21
- if (item.kind === 'AsmInstruction') {
22
- lowerAsmSourceInstruction(ctx, item);
23
- return;
24
- }
25
- if (isAsmRawDataDirective(item)) {
26
- lowerAsmRawDataDirective(item);
27
- return;
28
- }
29
- if (item.kind === 'EnumDecl') {
30
- const enumDecl = item;
31
- for (let idx = 0; idx < enumDecl.members.length; idx++) {
32
- const member = enumDecl.members[idx];
33
- const name = `${enumDecl.name}.${member}`;
34
- if (ctx.env.enums.get(name) !== idx)
35
- continue;
36
- if (ctx.taken.has(name)) {
37
- ctx.diag(ctx.diagnostics, enumDecl.span.file, `Duplicate symbol name "${name}".`);
38
- continue;
39
- }
40
- ctx.taken.add(name);
41
- ctx.symbols.push({
42
- kind: 'constant',
43
- name,
44
- value: idx,
45
- file: enumDecl.span.file,
46
- line: enumDecl.span.start.line,
47
- scope: 'global',
48
- });
49
- }
50
- return;
51
- }
52
- if (item.kind === 'OpDecl') {
53
- const op = item;
54
- const key = op.name.toLowerCase();
55
- if (ctx.taken.has(op.name) && !ctx.declaredOpNames.has(key)) {
56
- ctx.diag(ctx.diagnostics, op.span.file, `Duplicate symbol name "${op.name}".`);
57
- }
58
- else {
59
- ctx.taken.add(op.name);
60
- ctx.declaredOpNames.add(key);
61
- }
62
- return;
63
- }
64
- }
65
- export function lowerProgramDeclarations(ctx) {
66
- const { lowerAsmRawDataDirective } = createProgramLoweringDeclarationHelpers(ctx);
67
- for (const sourceFile of ctx.program.files) {
68
- ctx.activePlacementRef.current = 'code';
69
- let asmEndReached = false;
70
- for (let index = 0; index < sourceFile.items.length; index++) {
71
- const item = sourceFile.items[index];
72
- if (isAsmEndDirective(item)) {
73
- asmEndReached = true;
74
- continue;
75
- }
76
- if (asmEndReached && !isAsmBinFromDirective(item) && !isAsmBinToDirective(item))
77
- continue;
78
- if (isAsmOrgDirective(item)) {
79
- ctx.activePlacementRef.current = placementForAsmOrg(sourceFile.items, index);
80
- }
81
- lowerItem(ctx, lowerAsmRawDataDirective, item);
82
- }
83
- }
84
- return {
85
- codeOffset: ctx.codeOffsetRef.current,
86
- dataOffset: ctx.dataOffsetRef.current,
87
- pending: ctx.pending,
88
- symbols: ctx.symbols,
89
- absoluteSymbols: ctx.absoluteSymbols,
90
- codeBytes: ctx.codeBytes,
91
- dataBytes: ctx.dataBytes,
92
- };
93
- }
@@ -1,3 +0,0 @@
1
- import type { PrescanResult } from './prescanTypes.js';
2
- import type { PrescanContext } from './programLowering.js';
3
- export declare function preScanProgramDeclarations(ctx: PrescanContext): PrescanResult;
@@ -1,37 +0,0 @@
1
- function getOrCreateFileOps(ctx, file) {
2
- const existing = ctx.localOpsByFile.get(file);
3
- if (existing)
4
- return existing;
5
- const created = new Map();
6
- ctx.localOpsByFile.set(file, created);
7
- return created;
8
- }
9
- function addFileOp(ctx, file, key, op) {
10
- const fileOps = getOrCreateFileOps(ctx, file);
11
- const existing = fileOps.get(key);
12
- if (existing)
13
- existing.push(op);
14
- else
15
- fileOps.set(key, [op]);
16
- }
17
- function preScanItem(ctx, item, sourceUnitFile) {
18
- const localSourceUnitFile = sourceUnitFile ?? item.span?.file ?? ctx.program.entryFile;
19
- if (item.kind === 'OpDecl') {
20
- const op = item;
21
- const key = op.name.toLowerCase();
22
- addFileOp(ctx, localSourceUnitFile, key, op);
23
- if (op.span.file !== localSourceUnitFile)
24
- addFileOp(ctx, op.span.file, key, op);
25
- return;
26
- }
27
- }
28
- export function preScanProgramDeclarations(ctx) {
29
- for (const sourceFile of ctx.program.files) {
30
- for (const item of sourceFile.items)
31
- preScanItem(ctx, item, sourceFile.path);
32
- }
33
- return {
34
- localOpsByFile: ctx.localOpsByFile,
35
- declaredOpNames: ctx.declaredOpNames,
36
- };
37
- }
@@ -1,13 +0,0 @@
1
- import type { AsmOperandNode, EaExprNode, ImmExprNode } from '../frontend/ast.js';
2
- export declare const formatImmExprForAsm: (expr: ImmExprNode) => string;
3
- type EaExprFormatOptions = {
4
- formatImmExpr: (expr: ImmExprNode) => string;
5
- wrapImmEa?: boolean;
6
- };
7
- export declare const formatEaExpr: (ea: EaExprNode, { formatImmExpr, wrapImmEa }: EaExprFormatOptions) => string;
8
- export declare const formatAsmInstrForTrace: (head: string, operands: AsmOperandNode[]) => string;
9
- export declare const formatAbs16FixupAsm: (opcode: number, baseLower: string, addend: number) => string;
10
- export declare const formatAbs16FixupEdAsm: (opcode2: number, baseLower: string, addend: number) => string;
11
- export declare const formatAbs16FixupPrefixedAsm: (prefix: number, opcode2: number, baseLower: string, addend: number) => string;
12
- export declare const formatIxDisp: (disp: number) => string;
13
- export {};