@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,144 +0,0 @@
1
- import { diagLayoutCastRuntimeIndex, isConstantLayoutCastEa } from '../semantics/layoutCastFold.js';
2
- function eaOperandExpr(op) {
3
- if (op.kind === 'Ea')
4
- return op.expr;
5
- if (op.kind === 'Mem')
6
- return op.expr;
7
- return undefined;
8
- }
9
- function ldImmediateOpcode(dst) {
10
- switch (dst) {
11
- case 'BC':
12
- return 0x01;
13
- case 'DE':
14
- return 0x11;
15
- case 'HL':
16
- return 0x21;
17
- case 'SP':
18
- return 0x31;
19
- default:
20
- return undefined;
21
- }
22
- }
23
- function tryEmitUnresolvedSymbolicImmLd(asmItem, ctx, dst, srcOp) {
24
- if (srcOp.kind !== 'Imm')
25
- return false;
26
- if (ctx.evalImmExpr(srcOp.expr) !== undefined)
27
- return false;
28
- const symbolic = ctx.symbolicTargetFromExpr(srcOp.expr);
29
- if (!symbolic)
30
- return false;
31
- const baseLower = ctx.resolveRawLabelName(symbolic.baseLower).toLowerCase();
32
- const opcode = ldImmediateOpcode(dst);
33
- if (opcode !== undefined) {
34
- ctx.emitAbs16Fixup(opcode, baseLower, symbolic.addend, asmItem.span);
35
- return true;
36
- }
37
- if (dst === 'IX' || dst === 'IY') {
38
- ctx.emitAbs16FixupPrefixed(dst === 'IX' ? 0xdd : 0xfd, 0x21, baseLower, symbolic.addend, asmItem.span);
39
- return true;
40
- }
41
- return false;
42
- }
43
- /** Emit ordinary abs16 fixups for folded layout-cast address expressions. */
44
- function tryLdFoldedLayoutCast(asmItem, ctx) {
45
- if (asmItem.operands.length !== 2)
46
- return false;
47
- const dstOp = asmItem.operands[0];
48
- const srcOp = asmItem.operands[1];
49
- const span = asmItem.span;
50
- const emitFromAbs = (opcode, resolved, prefixed) => {
51
- if (resolved.kind !== 'abs')
52
- return;
53
- if (prefixed) {
54
- ctx.emitAbs16FixupPrefixed(prefixed.prefix, prefixed.opcode2, resolved.baseLower, resolved.addend, span);
55
- }
56
- else {
57
- ctx.emitAbs16Fixup(opcode, resolved.baseLower, resolved.addend, span);
58
- }
59
- };
60
- const dstName = dstOp.kind === 'Reg' ? dstOp.name.toUpperCase() : undefined;
61
- const srcEa = eaOperandExpr(srcOp);
62
- const dstEa = eaOperandExpr(dstOp);
63
- if (srcEa && isConstantLayoutCastEa(srcEa)) {
64
- const resolved = ctx.resolveEa(srcEa, span);
65
- if (resolved?.kind === 'abs') {
66
- if (dstName === 'A' && srcOp.kind === 'Mem') {
67
- emitFromAbs(0x3a, resolved);
68
- return true;
69
- }
70
- if (dstName === 'HL') {
71
- emitFromAbs(0x21, resolved);
72
- return true;
73
- }
74
- if (dstName === 'DE') {
75
- emitFromAbs(0x11, resolved);
76
- return true;
77
- }
78
- if (dstName === 'BC') {
79
- emitFromAbs(0x01, resolved);
80
- return true;
81
- }
82
- if (dstName === 'SP') {
83
- emitFromAbs(0x31, resolved);
84
- return true;
85
- }
86
- if (dstName === 'IX') {
87
- emitFromAbs(0x21, resolved, { prefix: 0xdd, opcode2: 0x21 });
88
- return true;
89
- }
90
- if (dstName === 'IY') {
91
- emitFromAbs(0x21, resolved, { prefix: 0xfd, opcode2: 0x21 });
92
- return true;
93
- }
94
- }
95
- }
96
- if (dstEa && isConstantLayoutCastEa(dstEa)) {
97
- const resolved = ctx.resolveEa(dstEa, span);
98
- if (resolved?.kind === 'abs' && srcOp.kind === 'Reg' && srcOp.name.toUpperCase() === 'A') {
99
- emitFromAbs(0x32, resolved);
100
- return true;
101
- }
102
- }
103
- return false;
104
- }
105
- export function tryLowerLdInstruction(asmItem, ctx) {
106
- const head = asmItem.head.toLowerCase();
107
- if (head !== 'ld')
108
- return undefined;
109
- for (const op of asmItem.operands) {
110
- const ea = eaOperandExpr(op);
111
- if (ea && diagLayoutCastRuntimeIndex(ctx.diagnostics, asmItem.span, ea)) {
112
- ctx.syncToFlow();
113
- return true;
114
- }
115
- }
116
- if (asmItem.operands.length === 2) {
117
- const dstOp = asmItem.operands[0];
118
- const srcOp = asmItem.operands[1];
119
- const dst = dstOp.kind === 'Reg' ? dstOp.name.toUpperCase() : undefined;
120
- if (tryEmitUnresolvedSymbolicImmLd(asmItem, ctx, dst, srcOp)) {
121
- ctx.syncToFlow();
122
- return true;
123
- }
124
- if (ctx.emitAbs16LdFixup(dstOp, srcOp, asmItem.span)) {
125
- ctx.syncToFlow();
126
- return true;
127
- }
128
- if (tryLdFoldedLayoutCast(asmItem, ctx)) {
129
- ctx.syncToFlow();
130
- return true;
131
- }
132
- }
133
- if (asmItem.operands.some((op) => op.kind === 'Mem' && op.expr.kind !== 'EaImm' && !ctx.isRegisterLikeMemEa(op.expr))) {
134
- if (ctx.lowerLdWithEa(asmItem)) {
135
- ctx.syncToFlow();
136
- return true;
137
- }
138
- }
139
- if (asmItem.operands.some(ctx.isUnresolvedLayoutLdOperand)) {
140
- ctx.diagAt(ctx.diagnostics, asmItem.span, `"ld" does not accept unresolved layout operands; use explicit labels, directives, and constant layout expressions.`);
141
- return true;
142
- }
143
- return undefined;
144
- }
@@ -1,17 +0,0 @@
1
- import type { AsmInstructionNode, AsmItemNode, SourceSpan } from '../frontend/ast.js';
2
- import type { FlowState } from './assemblerFlowSetup.js';
3
- type Context<TCodeSegmentTag> = {
4
- sourceTagForSpan: (span: SourceSpan) => TCodeSegmentTag;
5
- getCurrentCodeSegmentTag: () => TCodeSegmentTag | undefined;
6
- setCurrentCodeSegmentTag: (tag: TCodeSegmentTag | undefined) => void;
7
- defineCodeLabel: (name: string, span: SourceSpan, scope: 'global' | 'local') => void;
8
- emitAsmInstruction: (item: AsmInstructionNode) => void;
9
- flowRef: {
10
- readonly current: FlowState;
11
- };
12
- syncFromFlow: () => void;
13
- };
14
- export declare function createAsmRangeLoweringHelpers<TCodeSegmentTag>(ctx: Context<TCodeSegmentTag>): {
15
- lowerAsmRange: (asmItems: readonly AsmItemNode[], startIndex: number, stopKinds: Set<string>) => number;
16
- };
17
- export {};
@@ -1,39 +0,0 @@
1
- export function createAsmRangeLoweringHelpers(ctx) {
2
- const lowerAsmRange = (asmItems, startIndex, stopKinds) => {
3
- let i = startIndex;
4
- while (i < asmItems.length) {
5
- const item = asmItems[i];
6
- if (stopKinds.has(item.kind))
7
- return i;
8
- const prevTag = ctx.getCurrentCodeSegmentTag();
9
- ctx.setCurrentCodeSegmentTag(ctx.sourceTagForSpan(item.span));
10
- try {
11
- if (item.kind === 'AsmLabel') {
12
- ctx.defineCodeLabel(item.name, item.span, 'global');
13
- if (!ctx.flowRef.current.reachable) {
14
- ctx.flowRef.current.reachable = true;
15
- ctx.flowRef.current.spValid = false;
16
- ctx.flowRef.current.spDelta = 0;
17
- ctx.flowRef.current.spInvalidDueToMutation = false;
18
- ctx.syncFromFlow();
19
- }
20
- i++;
21
- continue;
22
- }
23
- if (item.kind === 'AsmInstruction') {
24
- ctx.emitAsmInstruction(item);
25
- i++;
26
- continue;
27
- }
28
- }
29
- finally {
30
- ctx.setCurrentCodeSegmentTag(prevTag);
31
- }
32
- i++;
33
- }
34
- return i;
35
- };
36
- return {
37
- lowerAsmRange,
38
- };
39
- }
@@ -1,16 +0,0 @@
1
- import type { ImmExprNode, SourceSpan } from '../frontend/ast.js';
2
- import type { Context } from './programLowering.js';
3
- type RawValueLike = ImmExprNode | string | {
4
- kind: string;
5
- value?: unknown;
6
- };
7
- export type RawDataLike = {
8
- span: SourceSpan;
9
- name?: string;
10
- directive: 'db' | 'dw' | 'ds' | 'cstr' | 'pstr' | 'istr';
11
- values?: RawValueLike[];
12
- size?: ImmExprNode;
13
- fill?: ImmExprNode;
14
- };
15
- export declare function createAsmRawDataLowerer(ctx: Context): (decl: RawDataLike) => void;
16
- export {};
@@ -1,209 +0,0 @@
1
- import { sizeOfTypeExpr } from '../semantics/layout.js';
2
- import { containsCurrentLocation, evalAsmImmAtCurrent, placementAddressAtOffset, publishAsmAddressConst, } from './asmDirectiveTraversal.js';
3
- function rawStringValue(value) {
4
- if (typeof value === 'string')
5
- return value;
6
- if (!('kind' in value))
7
- return undefined;
8
- if (value.kind === 'AsmString') {
9
- return typeof value.value === 'string' ? value.value : undefined;
10
- }
11
- return undefined;
12
- }
13
- function rawImmValue(value) {
14
- if (typeof value === 'string')
15
- return undefined;
16
- if (!('kind' in value))
17
- return undefined;
18
- return value.kind.startsWith('Imm') ? value : undefined;
19
- }
20
- function evalRawDataSize(ctx, size) {
21
- if (size.kind === 'ImmName') {
22
- const constValue = ctx.env.equates.get(size.name) ?? ctx.env.equates.get(size.name.toLowerCase());
23
- const enumValue = ctx.env.enums.get(size.name);
24
- if (constValue === undefined && enumValue === undefined) {
25
- const typeExpr = { kind: 'TypeName', span: size.span, name: size.name };
26
- const typeSize = sizeOfTypeExpr(typeExpr, ctx.env, undefined);
27
- if (typeSize !== undefined)
28
- return typeSize;
29
- }
30
- }
31
- return ctx.evalImmExpr(size, ctx.env, ctx.diagnostics);
32
- }
33
- export function createAsmRawDataLowerer(ctx) {
34
- return (decl) => {
35
- const activePlacement = ctx.activePlacementRef.current;
36
- const name = decl.name ?? '';
37
- if (name.length > 0) {
38
- const lower = name.toLowerCase();
39
- if (ctx.taken.has(lower)) {
40
- const alreadyPending = ctx.pending.some((symbol) => symbol.name.toLowerCase() === lower);
41
- if (!alreadyPending)
42
- ctx.diag(ctx.diagnostics, decl.span.file, `Duplicate symbol name "${name}".`);
43
- }
44
- else {
45
- ctx.taken.add(lower);
46
- const offset = activePlacement === 'code' ? ctx.codeOffsetRef.current : ctx.dataOffsetRef.current;
47
- const address = placementAddressAtOffset(ctx, activePlacement, offset);
48
- if (address !== undefined)
49
- publishAsmAddressConst(ctx, name, address);
50
- const pending = {
51
- kind: 'label',
52
- name,
53
- placement: activePlacement,
54
- offset,
55
- file: decl.span.file,
56
- line: decl.span.start.line,
57
- scope: 'global',
58
- };
59
- ctx.pending.push(pending);
60
- ctx.recordLoweredAsmItem({ kind: 'label', name }, decl.span);
61
- }
62
- }
63
- const writeByte = (value) => {
64
- if (activePlacement === 'code') {
65
- const offset = ctx.codeOffsetRef.current;
66
- ctx.codeBytes.set(offset, value & 0xff);
67
- ctx.codeOffsetRef.current = offset + 1;
68
- }
69
- else {
70
- const offset = ctx.dataOffsetRef.current;
71
- ctx.dataBytes.set(offset, value & 0xff);
72
- ctx.dataOffsetRef.current = offset + 1;
73
- }
74
- };
75
- const writeWord = (value) => {
76
- writeByte(value & 0xff);
77
- writeByte((value >> 8) & 0xff);
78
- };
79
- const currentAddress = () => {
80
- const offset = activePlacement === 'code' ? ctx.codeOffsetRef.current : ctx.dataOffsetRef.current;
81
- return placementAddressAtOffset(ctx, activePlacement, offset);
82
- };
83
- if (decl.directive === 'ds') {
84
- if (!decl.size) {
85
- ctx.diag(ctx.diagnostics, decl.span.file, `Raw data size is missing for "${name}".`);
86
- return;
87
- }
88
- const size = evalRawDataSize(ctx, decl.size);
89
- if (size === undefined || size < 0) {
90
- ctx.diag(ctx.diagnostics, decl.span.file, `Failed to evaluate raw data size for "${name}".`);
91
- return;
92
- }
93
- const fill = decl.fill ? ctx.evalImmExpr(decl.fill, ctx.env, ctx.diagnostics) : undefined;
94
- if (decl.fill && fill === undefined) {
95
- ctx.diag(ctx.diagnostics, decl.span.file, `Failed to evaluate raw data fill for "${name}".`);
96
- return;
97
- }
98
- ctx.recordLoweredAsmItem({
99
- kind: 'ds',
100
- size: { kind: 'literal', value: size },
101
- ...(decl.fill ? { fill: ctx.lowerImmExprForLoweredAsm(decl.fill) } : {}),
102
- }, decl.span);
103
- if (fill === undefined) {
104
- if (activePlacement === 'code') {
105
- ctx.codeOffsetRef.current += size;
106
- }
107
- else {
108
- ctx.dataOffsetRef.current += size;
109
- }
110
- return;
111
- }
112
- for (let i = 0; i < size; i++)
113
- writeByte(fill);
114
- return;
115
- }
116
- if (decl.directive === 'cstr' || decl.directive === 'pstr' || decl.directive === 'istr') {
117
- const stringValue = rawStringValue((decl.values ?? [])[0] ?? '');
118
- if (stringValue === undefined) {
119
- ctx.diag(ctx.diagnostics, decl.span.file, `"${decl.directive}" expects a string value.`);
120
- return;
121
- }
122
- const bytes = [...stringValue].map((char) => char.codePointAt(0) ?? 0);
123
- const emittedBytes = [];
124
- const writeStringByte = (value) => {
125
- const byte = value & 0xff;
126
- writeByte(byte);
127
- emittedBytes.push(byte);
128
- };
129
- if (decl.directive === 'cstr') {
130
- for (const byte of bytes)
131
- writeStringByte(byte);
132
- writeStringByte(0);
133
- }
134
- else if (decl.directive === 'pstr') {
135
- writeStringByte(bytes.length);
136
- for (const byte of bytes)
137
- writeStringByte(byte);
138
- }
139
- else if (bytes.length > 0) {
140
- for (let i = 0; i < bytes.length; i++) {
141
- const isLast = i === bytes.length - 1;
142
- writeStringByte(bytes[i] | (isLast ? 0x80 : 0));
143
- }
144
- }
145
- if (emittedBytes.length > 0) {
146
- ctx.recordLoweredAsmItem({
147
- kind: 'db',
148
- values: emittedBytes.map((value) => ({ kind: 'literal', value })),
149
- }, decl.span);
150
- }
151
- return;
152
- }
153
- const loweredValues = [];
154
- for (const value of decl.values ?? []) {
155
- const stringValue = rawStringValue(value);
156
- if (stringValue !== undefined) {
157
- if (decl.directive !== 'db') {
158
- ctx.diag(ctx.diagnostics, decl.span.file, `String raw data values are only valid for "db".`);
159
- continue;
160
- }
161
- for (const char of stringValue) {
162
- const byte = char.codePointAt(0) ?? 0;
163
- writeByte(byte);
164
- loweredValues.push({ kind: 'literal', value: byte & 0xff });
165
- }
166
- continue;
167
- }
168
- const imm = rawImmValue(value);
169
- if (!imm) {
170
- ctx.diag(ctx.diagnostics, decl.span.file, `Failed to evaluate raw data value for "${name}".`);
171
- if (decl.directive === 'db')
172
- writeByte(0);
173
- else
174
- writeWord(0);
175
- continue;
176
- }
177
- const usesCurrentLocation = containsCurrentLocation(imm);
178
- const current = usesCurrentLocation ? currentAddress() : undefined;
179
- if (usesCurrentLocation && current === undefined) {
180
- ctx.diag(ctx.diagnostics, decl.span.file, `Failed to evaluate current location.`);
181
- if (decl.directive === 'db')
182
- writeByte(0);
183
- else
184
- writeWord(0);
185
- continue;
186
- }
187
- const evaluated = current === undefined
188
- ? ctx.evalImmExpr(imm, ctx.env, ctx.diagnostics)
189
- : evalAsmImmAtCurrent(ctx, imm, current);
190
- loweredValues.push(evaluated === undefined
191
- ? ctx.lowerImmExprForLoweredAsm(imm)
192
- : { kind: 'literal', value: evaluated });
193
- if (evaluated !== undefined) {
194
- if (decl.directive === 'db')
195
- writeByte(evaluated);
196
- else
197
- writeWord(evaluated);
198
- continue;
199
- }
200
- if (decl.directive === 'db')
201
- writeByte(0);
202
- else
203
- writeWord(0);
204
- }
205
- ctx.recordLoweredAsmItem(decl.directive === 'db'
206
- ? { kind: 'db', values: loweredValues }
207
- : { kind: 'dw', values: loweredValues }, decl.span);
208
- };
209
- }
@@ -1,4 +0,0 @@
1
- import type { LoweringContext } from './programLowering.js';
2
- import { createAssemblerInstructionEmitters } from './assemblerLoweringPhases.js';
3
- export type AsmSourceEmitter = ReturnType<typeof createAssemblerInstructionEmitters>;
4
- export declare function createAsmSourceEmitter(ctx: LoweringContext): AsmSourceEmitter;
@@ -1,9 +0,0 @@
1
- import { createAssemblerInstructionEmitters, createAsmSourceFlowPhase, prepareAssemblerInstructionSetupPhase, } from './assemblerLoweringPhases.js';
2
- function createAsmSourceSetup(ctx) {
3
- return prepareAssemblerInstructionSetupPhase(ctx);
4
- }
5
- export function createAsmSourceEmitter(ctx) {
6
- const setup = createAsmSourceSetup(ctx);
7
- const flow = createAsmSourceFlowPhase(setup);
8
- return createAssemblerInstructionEmitters(setup, flow);
9
- }
@@ -1,4 +0,0 @@
1
- import type { AsmInstructionNode } from '../frontend/ast.js';
2
- import type { LoweringContext } from './programLowering.js';
3
- /** Lowers one top-level instruction in ASM source via op expansion and full ld/ea pipelines. */
4
- export declare function lowerAsmSourceInstruction(ctx: LoweringContext, item: AsmInstructionNode): void;
@@ -1,14 +0,0 @@
1
- import { createAsmSourceEmitter } from './asmSourceEmitter.js';
2
- const asmSourceEmitterByContext = new WeakMap();
3
- function asmSourceEmitterForContext(ctx) {
4
- let emitter = asmSourceEmitterByContext.get(ctx);
5
- if (emitter)
6
- return emitter;
7
- emitter = createAsmSourceEmitter(ctx);
8
- asmSourceEmitterByContext.set(ctx, emitter);
9
- return emitter;
10
- }
11
- /** Lowers one top-level instruction in ASM source via op expansion and full ld/ea pipelines. */
12
- export function lowerAsmSourceInstruction(ctx, item) {
13
- asmSourceEmitterForContext(ctx).emitAsmInstruction(item);
14
- }
@@ -1,13 +0,0 @@
1
- import type { AsmOperandNode, EaExprNode, ImmExprNode } from '../frontend/ast.js';
2
- type AsmUtilsContext = {
3
- /** Returns true when `name` matches a declared enum (used to normalize asm tokens); callback must stay pure. */
4
- isEnumName: (name: string) => boolean;
5
- };
6
- export declare function cloneImmExpr(expr: ImmExprNode): ImmExprNode;
7
- export declare function cloneEaExpr(ea: EaExprNode): EaExprNode;
8
- export declare function cloneOperand(op: AsmOperandNode): AsmOperandNode;
9
- export declare function flattenEaDottedName(ea: EaExprNode): string | undefined;
10
- export declare function createAsmUtilityHelpers(ctx: AsmUtilsContext): {
11
- normalizeFixedToken: (op: AsmOperandNode) => string | undefined;
12
- };
13
- export {};
@@ -1,105 +0,0 @@
1
- function cloneOffsetPath(path) {
2
- return {
3
- ...path,
4
- steps: path.steps.map((step) => step.kind === 'OffsetIndex' ? { ...step, expr: cloneImmExpr(step.expr) } : { ...step }),
5
- };
6
- }
7
- export function cloneImmExpr(expr) {
8
- if (expr.kind === 'ImmLiteral')
9
- return { ...expr };
10
- if (expr.kind === 'ImmCurrentLocation')
11
- return { ...expr };
12
- if (expr.kind === 'ImmName')
13
- return { ...expr };
14
- if (expr.kind === 'ImmSizeof')
15
- return { ...expr };
16
- if (expr.kind === 'ImmOffset')
17
- return { ...expr, path: cloneOffsetPath(expr.path) };
18
- if (expr.kind === 'ImmUnary')
19
- return { ...expr, expr: cloneImmExpr(expr.expr) };
20
- return { ...expr, left: cloneImmExpr(expr.left), right: cloneImmExpr(expr.right) };
21
- }
22
- export function cloneEaExpr(ea) {
23
- switch (ea.kind) {
24
- case 'EaName':
25
- return { ...ea };
26
- case 'EaImm':
27
- return { ...ea, expr: cloneImmExpr(ea.expr) };
28
- case 'EaLayoutCast':
29
- return { ...ea, base: cloneEaExpr(ea.base) };
30
- case 'EaField':
31
- return { ...ea, base: cloneEaExpr(ea.base) };
32
- case 'EaIndex':
33
- return {
34
- ...ea,
35
- base: cloneEaExpr(ea.base),
36
- index: ea.index.kind === 'IndexEa'
37
- ? { ...ea.index, expr: cloneEaExpr(ea.index.expr) }
38
- : ea.index.kind === 'IndexImm'
39
- ? { ...ea.index, value: cloneImmExpr(ea.index.value) }
40
- : ea.index.kind === 'IndexMemIxIy' && ea.index.disp
41
- ? { ...ea.index, disp: cloneImmExpr(ea.index.disp) }
42
- : { ...ea.index },
43
- };
44
- case 'EaAdd':
45
- case 'EaSub':
46
- return { ...ea, base: cloneEaExpr(ea.base), offset: cloneImmExpr(ea.offset) };
47
- }
48
- }
49
- export function cloneOperand(op) {
50
- switch (op.kind) {
51
- case 'Reg':
52
- case 'PortC':
53
- return { ...op };
54
- case 'Imm':
55
- case 'PortImm8':
56
- return { ...op, expr: cloneImmExpr(op.expr) };
57
- case 'Ea':
58
- case 'Mem':
59
- return { ...op, expr: cloneEaExpr(op.expr) };
60
- }
61
- }
62
- export function flattenEaDottedName(ea) {
63
- if (ea.kind === 'EaName')
64
- return ea.name;
65
- if (ea.kind === 'EaImm')
66
- return undefined;
67
- if (ea.kind === 'EaLayoutCast')
68
- return undefined;
69
- if (ea.kind === 'EaField') {
70
- const base = flattenEaDottedName(ea.base);
71
- return base ? `${base}.${ea.field}` : undefined;
72
- }
73
- return undefined;
74
- }
75
- export function createAsmUtilityHelpers(ctx) {
76
- const enumImmExprFromOperand = (op) => {
77
- if (op.kind === 'Imm')
78
- return op.expr;
79
- if (op.kind !== 'Ea')
80
- return undefined;
81
- const name = flattenEaDottedName(op.expr);
82
- if (!name || !ctx.isEnumName(name))
83
- return undefined;
84
- return { kind: 'ImmName', span: op.span, name };
85
- };
86
- const normalizeFixedToken = (op) => {
87
- switch (op.kind) {
88
- case 'Reg':
89
- return op.name.toUpperCase();
90
- case 'Imm':
91
- if (op.expr.kind === 'ImmName')
92
- return op.expr.name.toUpperCase();
93
- return undefined;
94
- case 'Ea': {
95
- const enumExpr = enumImmExprFromOperand(op);
96
- return enumExpr?.kind === 'ImmName' ? enumExpr.name.toUpperCase() : undefined;
97
- }
98
- default:
99
- return undefined;
100
- }
101
- };
102
- return {
103
- normalizeFixedToken,
104
- };
105
- }
@@ -1,54 +0,0 @@
1
- import type { Diagnostic, DiagnosticId } from '../diagnosticTypes.js';
2
- import type { AsmInstructionNode, AsmOperandNode, SourceSpan } from '../frontend/ast.js';
3
- import type { PendingSymbol, SourceSegmentTag } from './loweringTypes.js';
4
- export type FlowState = {
5
- reachable: boolean;
6
- spDelta: number;
7
- spValid: boolean;
8
- spInvalidDueToMutation: boolean;
9
- };
10
- export type OpExpansionFrame = {
11
- key: string;
12
- name: string;
13
- declSpan: SourceSpan;
14
- callSiteSpan: SourceSpan;
15
- };
16
- type AssemblerFlowSetupContext = {
17
- diagnostics: Diagnostic[];
18
- diagAt: (diagnostics: Diagnostic[], span: SourceSpan, message: string) => void;
19
- diagAtWithId: (diagnostics: Diagnostic[], span: SourceSpan, id: DiagnosticId, message: string) => void;
20
- getCurrentCodeSegmentTag: () => SourceSegmentTag | undefined;
21
- setCurrentCodeSegmentTag: (tag: SourceSegmentTag | undefined) => void;
22
- taken: Set<string>;
23
- traceLabel: (offset: number, name: string, span?: SourceSpan) => void;
24
- pending: PendingSymbol[];
25
- getCodeOffset: () => number;
26
- emitInstr: (head: string, operands: AsmOperandNode[], span: SourceSpan) => boolean;
27
- generatedLabelCounterRef: {
28
- current: number;
29
- };
30
- formatAsmOperandForOpDiag: (op: AsmOperandNode) => string;
31
- };
32
- export declare function createAssemblerFlowSetupHelpers({ diagnostics, diagAt, diagAtWithId, getCurrentCodeSegmentTag, setCurrentCodeSegmentTag, taken, traceLabel, pending, getCodeOffset, emitInstr, generatedLabelCounterRef, formatAsmOperandForOpDiag, }: AssemblerFlowSetupContext): {
33
- currentOpExpansionFrame: (opExpansionStack: OpExpansionFrame[]) => OpExpansionFrame | undefined;
34
- rootOpExpansionFrame: (opExpansionStack: OpExpansionFrame[]) => OpExpansionFrame | undefined;
35
- currentMacroCallSiteSpan: (opExpansionStack: OpExpansionFrame[]) => SourceSpan | undefined;
36
- formatInstructionForOpExpansionDiag: (inst: AsmInstructionNode) => string;
37
- appendInvalidOpExpansionDiagnostic: (inst: AsmInstructionNode, diagnosticsStart: number, opExpansionStack: OpExpansionFrame[]) => void;
38
- sourceTagForSpan: (span: SourceSpan, opExpansionStack: OpExpansionFrame[]) => SourceSegmentTag;
39
- withCodeSourceTag: <T>(tag: SourceSegmentTag, fn: () => T) => T;
40
- syncFromFlow: (flow: FlowState, tracked: {
41
- delta: number;
42
- valid: boolean;
43
- invalid: boolean;
44
- }) => void;
45
- syncToFlow: (flow: FlowState, tracked: {
46
- delta: number;
47
- valid: boolean;
48
- invalid: boolean;
49
- }) => void;
50
- newHiddenLabel: (prefix: string) => string;
51
- defineCodeLabel: (name: string, span: SourceSpan, scope: "global" | "local") => void;
52
- emitVirtualReg16Transfer: (asmItem: AsmInstructionNode) => boolean;
53
- };
54
- export {};