@jhlagado/azm 0.2.1 → 0.2.3

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 (313) hide show
  1. package/README.md +16 -9
  2. package/dist/src/api-compile.d.ts +0 -2
  3. package/dist/src/api-compile.js +1 -8
  4. package/dist/src/assembly/address-planning.js +19 -1
  5. package/dist/src/cli/parse-args.d.ts +0 -1
  6. package/dist/src/cli/parse-args.js +0 -7
  7. package/dist/src/cli/write-artifacts.js +0 -11
  8. package/dist/src/core/compile.js +176 -9
  9. package/dist/src/expansion/op-expansion.js +1 -0
  10. package/dist/src/model/expression.d.ts +4 -0
  11. package/dist/src/model/source-item.d.ts +5 -0
  12. package/dist/src/outputs/index.js +0 -2
  13. package/dist/src/outputs/types.d.ts +3 -16
  14. package/dist/src/outputs/write-asm80.js +84 -0
  15. package/dist/src/semantics/expression-evaluation.d.ts +7 -3
  16. package/dist/src/semantics/expression-evaluation.js +57 -0
  17. package/dist/src/syntax/directive-aliases.js +9 -10
  18. package/dist/src/syntax/parse-expression.js +34 -9
  19. package/dist/src/syntax/parse-line.js +80 -44
  20. package/dist/src/tooling/case-style.js +3 -0
  21. package/docs/reference/cli.md +6 -4
  22. package/docs/reference/tooling-api.md +1 -4
  23. package/package.json +2 -6
  24. package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
  25. package/dist/legacy-root-azm/src/analysis.js +0 -41
  26. package/dist/legacy-root-azm/src/compile.d.ts +0 -10
  27. package/dist/legacy-root-azm/src/compile.js +0 -186
  28. package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
  29. package/dist/legacy-root-azm/src/compileShared.js +0 -7
  30. package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
  31. package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
  32. package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
  33. package/dist/legacy-root-azm/src/formats/index.js +0 -17
  34. package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
  35. package/dist/legacy-root-azm/src/formats/range.js +0 -45
  36. package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
  37. package/dist/legacy-root-azm/src/formats/types.js +0 -1
  38. package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
  39. package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
  40. package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
  41. package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
  42. package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
  43. package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
  44. package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
  45. package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
  46. package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
  47. package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
  48. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
  49. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
  50. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
  51. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
  52. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
  53. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
  54. package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
  55. package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
  56. package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
  57. package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
  58. package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
  59. package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
  60. package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
  61. package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
  62. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
  63. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
  64. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
  65. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
  66. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
  67. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
  68. package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
  69. package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
  70. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
  71. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
  72. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
  73. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
  74. package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
  75. package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
  76. package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
  77. package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
  78. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
  79. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
  80. package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
  81. package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
  82. package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
  83. package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
  84. package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
  85. package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
  86. package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
  87. package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
  88. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
  89. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
  90. package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
  91. package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
  92. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
  93. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
  94. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
  95. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
  96. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
  97. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
  98. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
  99. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
  100. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
  101. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
  102. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
  103. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
  104. package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
  105. package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
  106. package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
  107. package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
  108. package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
  109. package/dist/legacy-root-azm/src/frontend/source.js +0 -58
  110. package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
  111. package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
  112. package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
  113. package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
  114. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
  115. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
  116. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
  117. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
  118. package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
  119. package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
  120. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
  121. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
  122. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
  123. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
  124. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
  125. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
  126. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
  127. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
  128. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
  129. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
  130. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
  131. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
  132. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
  133. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
  134. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
  135. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
  136. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
  137. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
  138. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
  139. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
  140. package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
  141. package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
  142. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
  143. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
  144. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
  145. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
  146. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
  147. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
  148. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
  149. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
  150. package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
  151. package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
  152. package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
  153. package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
  154. package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
  155. package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
  156. package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
  157. package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
  158. package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
  159. package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
  160. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
  161. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
  162. package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
  163. package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
  164. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
  165. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
  166. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
  167. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
  168. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
  169. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
  170. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
  171. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
  172. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
  173. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
  174. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
  175. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
  176. package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
  177. package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
  178. package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
  179. package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
  180. package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
  181. package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
  182. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
  183. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
  184. package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
  185. package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
  186. package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
  187. package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
  188. package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
  189. package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
  190. package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
  191. package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
  192. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
  193. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
  194. package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
  195. package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
  196. package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
  197. package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
  198. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
  199. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
  200. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
  201. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
  202. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
  203. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
  204. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
  205. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
  206. package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
  207. package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
  208. package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
  209. package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
  210. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
  211. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
  212. package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
  213. package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
  214. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
  215. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
  216. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
  217. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
  218. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
  219. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
  220. package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
  221. package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
  222. package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
  223. package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
  224. package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
  225. package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
  226. package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
  227. package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
  228. package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
  229. package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
  230. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
  231. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
  232. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
  233. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
  234. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
  235. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
  236. package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
  237. package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
  238. package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
  239. package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
  240. package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
  241. package/dist/legacy-root-azm/src/packageInfo.js +0 -15
  242. package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
  243. package/dist/legacy-root-azm/src/pathCompare.js +0 -26
  244. package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
  245. package/dist/legacy-root-azm/src/pipeline.js +0 -1
  246. package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
  247. package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
  248. package/dist/legacy-root-azm/src/registerCare/annotate.d.ts +0 -11
  249. package/dist/legacy-root-azm/src/registerCare/annotate.js +0 -76
  250. package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
  251. package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
  252. package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
  253. package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
  254. package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
  255. package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
  256. package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
  257. package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
  258. package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
  259. package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
  260. package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
  261. package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
  262. package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
  263. package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
  264. package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
  265. package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
  266. package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
  267. package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
  268. package/dist/legacy-root-azm/src/registerCare/sourceText.d.ts +0 -8
  269. package/dist/legacy-root-azm/src/registerCare/sourceText.js +0 -15
  270. package/dist/legacy-root-azm/src/registerCare/summary.d.ts +0 -3
  271. package/dist/legacy-root-azm/src/registerCare/summary.js +0 -492
  272. package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
  273. package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
  274. package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
  275. package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
  276. package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
  277. package/dist/legacy-root-azm/src/semantics/env.js +0 -432
  278. package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
  279. package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
  280. package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
  281. package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
  282. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
  283. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
  284. package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
  285. package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
  286. package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
  287. package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
  288. package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
  289. package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
  290. package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
  291. package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
  292. package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
  293. package/dist/legacy-root-azm/src/z80/effects.js +0 -516
  294. package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
  295. package/dist/legacy-root-azm/src/z80/encode.js +0 -412
  296. package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
  297. package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
  298. package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
  299. package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
  300. package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
  301. package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
  302. package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
  303. package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
  304. package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
  305. package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
  306. package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
  307. package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
  308. package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
  309. package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
  310. package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
  311. package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
  312. package/dist/src/outputs/write-listing.d.ts +0 -2
  313. package/dist/src/outputs/write-listing.js +0 -79
@@ -1,327 +0,0 @@
1
- import { DiagnosticIds } from '../diagnosticTypes.js';
2
- import { annotateRegisterCareContracts } from './annotate.js';
3
- import { expandCarrierList } from './carriers.js';
4
- import { diagnosticsForRegisterCareConflicts, findAcceptedOutputCandidatesFromHints, findCallerOutputCandidates, findCallerOutputCandidateObservations, findRegisterCareConflicts, } from './liveness.js';
5
- import { applyExpectOutFixesToSource, findExpectOutFixes } from './fix.js';
6
- import { getRegisterCareProfile } from './profiles.js';
7
- import { buildRegisterCareProgramModel } from './programModel.js';
8
- import { renderRegisterCareInterface, renderRegisterCareReport } from './report.js';
9
- import { buildRoutineContracts, parseSmartComments } from './smartComments.js';
10
- import { applyRoutineContract, inferRoutineSummary } from './summary.js';
11
- function emptyRoutineSummary(name) {
12
- return {
13
- name,
14
- mayRead: [],
15
- mayWrite: [],
16
- preserved: [],
17
- valueRelations: [],
18
- stackBalanced: true,
19
- hasUnknownStackEffect: false,
20
- };
21
- }
22
- function unknownBoundaryForCall(call) {
23
- return {
24
- ...call,
25
- message: `Register-care cannot prove ${call.subject}; add a routine body or .asmi extern contract.`,
26
- };
27
- }
28
- function uniqueSortedTargets(boundaries) {
29
- return Array.from(new Set(boundaries.map((boundary) => boundary.target))).sort();
30
- }
31
- function diagnosticsForUnknownBoundaries(boundaries) {
32
- return boundaries.map((boundary) => ({
33
- id: DiagnosticIds.RegisterCareUnknownBoundary,
34
- severity: 'warning',
35
- message: boundary.message,
36
- file: boundary.file,
37
- line: boundary.line,
38
- column: boundary.column,
39
- }));
40
- }
41
- function isLocalLabel(name) {
42
- return name.startsWith('.');
43
- }
44
- function nonLocalLabels(labels) {
45
- return labels.filter((label) => !isLocalLabel(label));
46
- }
47
- function boundaryLabels(routine) {
48
- return routine.entryLabels ?? nonLocalLabels(routine.labels);
49
- }
50
- function contractForRoutine(routine, contracts) {
51
- return boundaryLabels(routine)
52
- .map((label) => contracts.get(label))
53
- .find((contract) => contract !== undefined);
54
- }
55
- function summariesWithExternalContracts(summaries, contracts, routineNames) {
56
- const out = [...summaries];
57
- for (const contract of contracts.values()) {
58
- if (!routineNames.has(contract.name)) {
59
- out.push(applyRoutineContract(emptyRoutineSummary(contract.name), contract));
60
- }
61
- }
62
- return out;
63
- }
64
- function externalContractsOnly(contracts, routineNames) {
65
- return new Map([...contracts].filter(([name]) => !routineNames.has(name)));
66
- }
67
- function buildBoundarySummaryMap(summaries, routineSummaries, profileSummaries) {
68
- const boundarySummaryMap = new Map(profileSummaries.map((summary) => [summary.name, summary]));
69
- for (const summary of summaries) {
70
- boundarySummaryMap.set(summary.name, summary);
71
- }
72
- for (const { routine, summary } of routineSummaries) {
73
- for (const label of boundaryLabels(routine)) {
74
- boundarySummaryMap.set(label, summary);
75
- }
76
- }
77
- return boundarySummaryMap;
78
- }
79
- function summarizeRoutines(routines, contracts, boundarySummaryMap = new Map()) {
80
- return routines.map((routine) => {
81
- const inferred = inferRoutineSummary(routine, boundarySummaryMap);
82
- const contract = contractForRoutine(routine, contracts);
83
- return { routine, summary: contract ? applyRoutineContract(inferred, contract) : inferred };
84
- });
85
- }
86
- function sortedUnique(values) {
87
- return Array.from(new Set(values)).sort();
88
- }
89
- function appendUniqueUnits(target, units) {
90
- for (const unit of units) {
91
- if (!target.includes(unit))
92
- target.push(unit);
93
- }
94
- }
95
- function summaryFingerprint(summary) {
96
- const relations = summary.valueRelations
97
- .map((relation) => `${relation.out.join(',')}<-${relation.from.join(',')}`)
98
- .sort();
99
- return JSON.stringify({
100
- name: summary.name,
101
- mayRead: sortedUnique(summary.mayRead),
102
- mayWrite: sortedUnique(summary.mayWrite),
103
- preserved: sortedUnique(summary.preserved),
104
- relations,
105
- stackBalanced: summary.stackBalanced,
106
- hasUnknownStackEffect: summary.hasUnknownStackEffect,
107
- });
108
- }
109
- function routineSummariesFingerprint(routineSummaries) {
110
- return routineSummaries.map((item) => summaryFingerprint(item.summary)).join('\n');
111
- }
112
- function inferRoutineSummariesToFixedPoint(routines, contracts, routineNames, profileSummaries) {
113
- let routineSummaries = summarizeRoutines(routines, contracts);
114
- const maxPasses = Math.max(2, routines.length + 2);
115
- for (let pass = 0; pass < maxPasses; pass += 1) {
116
- const summaries = summariesWithExternalContracts(routineSummaries.map((item) => item.summary), contracts, routineNames);
117
- const boundarySummaryMap = buildBoundarySummaryMap(summaries, routineSummaries, profileSummaries);
118
- const nextRoutineSummaries = summarizeRoutines(routines, contracts, boundarySummaryMap);
119
- if (routineSummariesFingerprint(nextRoutineSummaries) ===
120
- routineSummariesFingerprint(routineSummaries)) {
121
- return nextRoutineSummaries;
122
- }
123
- routineSummaries = nextRoutineSummaries;
124
- }
125
- return routineSummaries;
126
- }
127
- function withCallerOutputCandidates(routineSummaries, boundarySummaryMap, acceptOutputCandidates = new Map()) {
128
- const candidates = findCallerOutputCandidates(routineSummaries.map((item) => item.routine), new Map(boundarySummaryMap));
129
- return routineSummaries.map((item) => {
130
- const outputCandidates = candidates.get(item.summary.name);
131
- const written = new Set(item.summary.mayWrite);
132
- const accepted = (acceptOutputCandidates.get(item.summary.name) ?? []).filter((unit) => written.has(unit));
133
- const acceptedSet = new Set(accepted);
134
- const valueRelations = [...item.summary.valueRelations];
135
- for (const unit of accepted) {
136
- if (!valueRelations.some((relation) => relation.out.includes(unit))) {
137
- valueRelations.push({ out: [unit], from: [] });
138
- }
139
- }
140
- const remainingCandidates = outputCandidates?.filter((unit) => !acceptedSet.has(unit));
141
- return outputCandidates && outputCandidates.length > 0
142
- ? {
143
- ...item,
144
- summary: {
145
- ...item.summary,
146
- valueRelations,
147
- ...(remainingCandidates && remainingCandidates.length > 0
148
- ? { outputCandidates: remainingCandidates }
149
- : {}),
150
- },
151
- }
152
- : item;
153
- });
154
- }
155
- function autoAcceptedOutputCandidates(fixes) {
156
- const out = new Map();
157
- for (const fix of fixes) {
158
- const existing = out.get(fix.routine) ?? [];
159
- appendUniqueUnits(existing, fix.carriers);
160
- out.set(fix.routine, existing);
161
- }
162
- return out;
163
- }
164
- function parseAcceptedOutputCandidates(items = []) {
165
- const out = new Map();
166
- for (const item of items) {
167
- const sep = item.indexOf(':');
168
- if (sep <= 0 || sep === item.length - 1) {
169
- throw new Error(`Invalid --accept-out value "${item}" (expected ROUTINE:carriers)`);
170
- }
171
- const name = item.slice(0, sep).trim();
172
- if (!name)
173
- throw new Error(`Invalid --accept-out value "${item}" (missing routine name)`);
174
- const carrierParts = item.slice(sep + 1).split(',');
175
- const rawCarriers = carrierParts.map((part) => part.trim());
176
- if (rawCarriers.length === 0 || rawCarriers.some((part) => part.length === 0)) {
177
- throw new Error(`Invalid --accept-out value "${item}" (missing carriers)`);
178
- }
179
- const carriers = expandCarrierList(rawCarriers);
180
- if (!carriers) {
181
- throw new Error(`Invalid --accept-out value "${item}" (unknown carrier)`);
182
- }
183
- const existing = out.get(name) ?? [];
184
- appendUniqueUnits(existing, carriers);
185
- out.set(name, existing);
186
- }
187
- return out;
188
- }
189
- function mergeAcceptedOutputCandidates(...maps) {
190
- const out = new Map();
191
- for (const map of maps) {
192
- for (const [name, units] of map) {
193
- const existing = out.get(name) ?? [];
194
- appendUniqueUnits(existing, units);
195
- out.set(name, existing);
196
- }
197
- }
198
- return out;
199
- }
200
- function fixedSourceTexts(referenceSourceTexts, workingSourceTexts, fixes) {
201
- const byFile = new Map();
202
- for (const fix of fixes) {
203
- const items = byFile.get(fix.file) ?? [];
204
- items.push(fix);
205
- byFile.set(fix.file, items);
206
- }
207
- const out = new Map(workingSourceTexts);
208
- for (const [file, items] of byFile) {
209
- const source = workingSourceTexts.get(file);
210
- const referenceSource = referenceSourceTexts.get(file);
211
- if (source === undefined)
212
- continue;
213
- out.set(file, applyExpectOutFixesToSource(source, items, referenceSource));
214
- }
215
- return out;
216
- }
217
- function annotateAndFixRegisterCareContracts(sourceTexts, routines, fixes) {
218
- const annotated = annotateRegisterCareContracts(sourceTexts, routines);
219
- if (fixes.length === 0)
220
- return annotated;
221
- const workingTexts = new Map(sourceTexts);
222
- for (const file of annotated) {
223
- workingTexts.set(file.path, file.text);
224
- }
225
- const fixedTexts = fixedSourceTexts(sourceTexts, workingTexts, fixes);
226
- const out = [];
227
- for (const [path, text] of fixedTexts) {
228
- if (text !== sourceTexts.get(path))
229
- out.push({ path, text });
230
- }
231
- return out.sort((a, b) => a.path.localeCompare(b.path));
232
- }
233
- function candidateKey(item) {
234
- return `${item.file}:${item.line}:${item.column}:${item.routine}`;
235
- }
236
- function candidateExpectation(units) {
237
- const carriers = units.join(',');
238
- return units.length === 1 ? units[0] : `{${carriers}}`;
239
- }
240
- function candidateMessageWithFixability(candidate, autoFixable) {
241
- const carriers = candidate.carriers.join(',');
242
- const expectation = candidateExpectation(candidate.carriers);
243
- const base = `CALL ${candidate.routine} writes ${carriers} and caller reads it later`;
244
- return autoFixable
245
- ? `${base}; generated contracts promote this to \`out ${expectation}\` automatically.`
246
- : `${base}; manual review required before adding \`; expects out ${expectation}\` because the later read is not a simple direct continuation.`;
247
- }
248
- function withCandidateFixability(candidates, fixes) {
249
- const fixable = new Map(fixes.map((fix) => [candidateKey(fix), new Set(fix.carriers)]));
250
- return candidates.map((candidate) => {
251
- const fixableCarriers = fixable.get(candidateKey(candidate));
252
- const autoFixable = fixableCarriers !== undefined &&
253
- candidate.carriers.every((carrier) => fixableCarriers.has(carrier));
254
- return {
255
- ...candidate,
256
- autoFixable,
257
- message: candidateMessageWithFixability(candidate, autoFixable),
258
- };
259
- });
260
- }
261
- function inferenceOnlyOutputFixes(programRoutines, routineSummaries, profileSummaries) {
262
- const summaries = routineSummaries.map((item) => item.summary);
263
- const boundarySummaryMap = buildBoundarySummaryMap(summaries, routineSummaries, profileSummaries);
264
- const candidates = findCallerOutputCandidateObservations(programRoutines, boundarySummaryMap);
265
- return findExpectOutFixes(programRoutines, candidates);
266
- }
267
- export function analyzeRegisterCare(loaded, options) {
268
- const profile = getRegisterCareProfile(options.profile);
269
- const programModel = buildRegisterCareProgramModel(loaded.program);
270
- const smartComments = parseSmartComments(loaded.sourceLineComments);
271
- const contracts = buildRoutineContracts(smartComments, programModel.routines, loaded.sourceTexts);
272
- const cliAcceptedOutputCandidates = parseAcceptedOutputCandidates(options.acceptOutputCandidates);
273
- for (const contract of options.interfaceContracts ?? []) {
274
- contracts.set(contract.name, contract);
275
- }
276
- const routineNames = new Set(programModel.routines.flatMap((routine) => boundaryLabels(routine)));
277
- const profileSummaries = profile
278
- ? [...Array.from(profile.rst.values()), ...Array.from(profile.rstServices.values())]
279
- : [];
280
- const routineSummaries = inferRoutineSummariesToFixedPoint(programModel.routines, contracts, routineNames, profileSummaries);
281
- const summaries = routineSummaries.map((item) => item.summary);
282
- summaries.push(...summariesWithExternalContracts([], contracts, routineNames));
283
- const boundarySummaryMap = buildBoundarySummaryMap(summaries, routineSummaries, profileSummaries);
284
- const unknownBoundaries = programModel.directBoundaries
285
- .filter((boundary) => !boundarySummaryMap.has(boundary.target))
286
- .map(unknownBoundaryForCall);
287
- const conflicts = programModel.routines.flatMap((routine) => findRegisterCareConflicts(routine, boundarySummaryMap, smartComments));
288
- const rawOutputCandidates = findCallerOutputCandidateObservations(programModel.routines, boundarySummaryMap);
289
- const possibleExpectOutFixes = findExpectOutFixes(programModel.routines, rawOutputCandidates);
290
- const outputCandidates = withCandidateFixability(rawOutputCandidates, possibleExpectOutFixes);
291
- const conflictDiagnostics = options.mode === 'warn' || options.mode === 'strict'
292
- ? diagnosticsForRegisterCareConflicts(conflicts, 'warning')
293
- : options.mode === 'error'
294
- ? diagnosticsForRegisterCareConflicts(conflicts, 'error')
295
- : [];
296
- const diagnostics = options.mode === 'strict'
297
- ? [...conflictDiagnostics, ...diagnosticsForUnknownBoundaries(unknownBoundaries)]
298
- : conflictDiagnostics;
299
- const reportModel = {
300
- entryFile: loaded.program.entryFile,
301
- mode: options.mode,
302
- ...(profile ? { profile: profile.name } : {}),
303
- summaries,
304
- conflicts,
305
- outputCandidates,
306
- unknownCalls: uniqueSortedTargets(unknownBoundaries),
307
- };
308
- return {
309
- diagnostics,
310
- outputCandidates,
311
- ...(options.emitReport ? { reportText: renderRegisterCareReport(reportModel) } : {}),
312
- ...(options.emitInterface ? { interfaceText: renderRegisterCareInterface(summaries) } : {}),
313
- ...(options.emitAnnotations
314
- ? (() => {
315
- const annotationRoutineSummaries = inferRoutineSummariesToFixedPoint(programModel.routines, externalContractsOnly(contracts, routineNames), routineNames, profileSummaries);
316
- const annotationSummaries = annotationRoutineSummaries.map((item) => item.summary);
317
- const annotationBoundarySummaryMap = buildBoundarySummaryMap(annotationSummaries, annotationRoutineSummaries, profileSummaries);
318
- const expectOutFixes = options.fixRegisterContracts === true
319
- ? inferenceOnlyOutputFixes(programModel.routines, annotationRoutineSummaries, profileSummaries)
320
- : [];
321
- return {
322
- annotatedFiles: annotateAndFixRegisterCareContracts(loaded.sourceTexts, withCallerOutputCandidates(annotationRoutineSummaries, annotationBoundarySummaryMap, mergeAcceptedOutputCandidates(cliAcceptedOutputCandidates, findAcceptedOutputCandidatesFromHints(programModel.routines, annotationBoundarySummaryMap, smartComments), autoAcceptedOutputCandidates(expectOutFixes))), []),
323
- };
324
- })()
325
- : {}),
326
- };
327
- }
@@ -1,11 +0,0 @@
1
- import type { RegisterCareRoutine, RoutineSummary } from './types.js';
2
- export interface RegisterCareAnnotatedFile {
3
- path: string;
4
- text: string;
5
- }
6
- interface RegisterCareAnnotationInput {
7
- routine: RegisterCareRoutine;
8
- summary: RoutineSummary;
9
- }
10
- export declare function annotateRegisterCareContracts(sourceTexts: ReadonlyMap<string, string>, routines: RegisterCareAnnotationInput[]): RegisterCareAnnotatedFile[];
11
- export {};
@@ -1,76 +0,0 @@
1
- import { renderRegisterCareSourceBlock } from './report.js';
2
- import { joinSourceLines, splitSourceLines } from './sourceText.js';
3
- const GENERATED_COMPACT_LINE_RE = /^\s*;\s*!\s*(?:in|out|maybe-out|clobbers|preserves)(?:\s|$)/i;
4
- function isCommentLine(line) {
5
- return /^\s*;/.test(line);
6
- }
7
- function isGeneratedCompactLine(line) {
8
- return GENERATED_COMPACT_LINE_RE.test(line);
9
- }
10
- function precedingCommentBlockStart(lines, labelIndex) {
11
- let index = labelIndex - 1;
12
- if (index < 0 || !isCommentLine(lines[index] ?? ''))
13
- return undefined;
14
- while (index >= 0 && isCommentLine(lines[index] ?? ''))
15
- index -= 1;
16
- return index + 1;
17
- }
18
- function generatedBlockBeforeLabel(lines, labelIndex) {
19
- let compactStart = labelIndex;
20
- while (compactStart > 0 && isGeneratedCompactLine(lines[compactStart - 1] ?? '')) {
21
- compactStart -= 1;
22
- }
23
- if (compactStart < labelIndex)
24
- return { start: compactStart, end: labelIndex - 1 };
25
- return undefined;
26
- }
27
- function hasPrecedingCommentBlock(lines, labelIndex) {
28
- return precedingCommentBlockStart(lines, labelIndex) !== undefined;
29
- }
30
- function isExplicitEntryRoutine(routine) {
31
- return routine.entryLabels?.includes(routine.name) === true;
32
- }
33
- function annotateFile(source, routines) {
34
- const sourceLines = splitSourceLines(source);
35
- const { lines } = sourceLines;
36
- const sorted = [...routines].sort((a, b) => b.routine.span.start.line - a.routine.span.start.line);
37
- for (const item of sorted) {
38
- const labelIndex = item.routine.span.start.line - 1;
39
- if (labelIndex < 0 || labelIndex > lines.length)
40
- continue;
41
- const block = renderRegisterCareSourceBlock(item.summary);
42
- const hasContractContent = block.length > 0;
43
- const existing = generatedBlockBeforeLabel(lines, labelIndex);
44
- if (existing) {
45
- lines.splice(existing.start, existing.end - existing.start + 1, ...(hasContractContent ? block : []));
46
- continue;
47
- }
48
- if (!hasContractContent)
49
- continue;
50
- if (!isExplicitEntryRoutine(item.routine) && !hasPrecedingCommentBlock(lines, labelIndex)) {
51
- continue;
52
- }
53
- lines.splice(labelIndex, 0, ...block);
54
- }
55
- return joinSourceLines(sourceLines);
56
- }
57
- export function annotateRegisterCareContracts(sourceTexts, routines) {
58
- const byFile = new Map();
59
- for (const item of routines) {
60
- if (!sourceTexts.has(item.routine.span.file))
61
- continue;
62
- const items = byFile.get(item.routine.span.file) ?? [];
63
- items.push(item);
64
- byFile.set(item.routine.span.file, items);
65
- }
66
- const out = [];
67
- for (const [file, items] of [...byFile].sort(([a], [b]) => a.localeCompare(b))) {
68
- const source = sourceTexts.get(file);
69
- if (source === undefined)
70
- continue;
71
- const text = annotateFile(source, items);
72
- if (text !== source)
73
- out.push({ path: file, text });
74
- }
75
- return out;
76
- }
@@ -1,2 +0,0 @@
1
- import type { RegisterCareInstruction } from './types.js';
2
- export declare function precedingCServiceName(item: RegisterCareInstruction | undefined): string | undefined;
@@ -1,10 +0,0 @@
1
- export function precedingCServiceName(item) {
2
- const inst = item?.instruction;
3
- if (!inst || inst.head.toLowerCase() !== 'ld' || inst.operands.length !== 2)
4
- return undefined;
5
- const dst = inst.operands[0];
6
- const src = inst.operands[1];
7
- if (dst?.kind !== 'Reg' || dst.name.toUpperCase() !== 'C')
8
- return undefined;
9
- return src?.kind === 'Imm' && src.expr.kind === 'ImmName' ? src.expr.name : undefined;
10
- }
@@ -1,4 +0,0 @@
1
- import type { RegisterCareUnit } from './types.js';
2
- export declare function normalizeCarrierName(raw: string): RegisterCareUnit | undefined;
3
- export declare function expandCarrier(raw: string): RegisterCareUnit[] | undefined;
4
- export declare function expandCarrierList(raw: string[]): RegisterCareUnit[] | undefined;
@@ -1,78 +0,0 @@
1
- const FLAG_UNITS = ['carry', 'zero', 'sign', 'parity', 'halfCarry'];
2
- const SINGLE_UNITS = new Set([
3
- 'A',
4
- 'B',
5
- 'C',
6
- 'D',
7
- 'E',
8
- 'H',
9
- 'L',
10
- 'IXH',
11
- 'IXL',
12
- 'IYH',
13
- 'IYL',
14
- 'SPH',
15
- 'SPL',
16
- 'carry',
17
- 'zero',
18
- 'sign',
19
- 'parity',
20
- 'halfCarry',
21
- ]);
22
- const PAIRS = {
23
- AF: ['A', ...FLAG_UNITS],
24
- BC: ['B', 'C'],
25
- DE: ['D', 'E'],
26
- HL: ['H', 'L'],
27
- IX: ['IXH', 'IXL'],
28
- IY: ['IYH', 'IYL'],
29
- SP: ['SPH', 'SPL'],
30
- };
31
- const FLAG_ALIASES = {
32
- CARRY: 'carry',
33
- ZERO: 'zero',
34
- Z: 'zero',
35
- SIGN: 'sign',
36
- S: 'sign',
37
- PARITY: 'parity',
38
- PV: 'parity',
39
- 'P/V': 'parity',
40
- HALFCARRY: 'halfCarry',
41
- HFLAG: 'halfCarry',
42
- };
43
- export function normalizeCarrierName(raw) {
44
- const trimmed = raw.trim();
45
- const upper = trimmed.toUpperCase();
46
- const flag = FLAG_ALIASES[upper];
47
- if (flag)
48
- return flag;
49
- if (SINGLE_UNITS.has(upper))
50
- return upper;
51
- return undefined;
52
- }
53
- export function expandCarrier(raw) {
54
- const upper = raw.trim().toUpperCase();
55
- if (upper === 'F')
56
- return FLAG_UNITS;
57
- const pair = PAIRS[upper];
58
- if (pair)
59
- return pair;
60
- const single = normalizeCarrierName(raw);
61
- return single ? [single] : undefined;
62
- }
63
- export function expandCarrierList(raw) {
64
- const out = [];
65
- const seen = new Set();
66
- for (const item of raw) {
67
- const expanded = expandCarrier(item);
68
- if (!expanded)
69
- return undefined;
70
- for (const unit of expanded) {
71
- if (seen.has(unit))
72
- continue;
73
- seen.add(unit);
74
- out.push(unit);
75
- }
76
- }
77
- return out;
78
- }
@@ -1,5 +0,0 @@
1
- import type { InstructionEffect, RegisterCareRoutine } from './types.js';
2
- export declare function labelIndex(routine: RegisterCareRoutine): Map<string, number>;
3
- export declare function instructionSuccessors(routine: RegisterCareRoutine, index: number, effect: InstructionEffect, labels: ReadonlyMap<string, number>, options?: {
4
- boundaryFallthrough?: boolean;
5
- }): number[];
@@ -1,35 +0,0 @@
1
- function unique(items) {
2
- return [...new Set(items)];
3
- }
4
- export function labelIndex(routine) {
5
- const out = new Map();
6
- routine.instructions.forEach((item, index) => {
7
- for (const label of item.labels)
8
- out.set(label, index);
9
- });
10
- return out;
11
- }
12
- function localTargetIndex(labels, target) {
13
- if (!target)
14
- return undefined;
15
- return labels.get(target);
16
- }
17
- export function instructionSuccessors(routine, index, effect, labels, options = {}) {
18
- const next = index + 1 < routine.instructions.length ? index + 1 : undefined;
19
- if (effect.control.kind === 'fallthrough' ||
20
- (options.boundaryFallthrough &&
21
- (effect.control.kind === 'call' || effect.control.kind === 'rst'))) {
22
- return next === undefined ? [] : [next];
23
- }
24
- if (effect.control.kind === 'jump') {
25
- const target = localTargetIndex(labels, effect.control.target);
26
- if (effect.control.conditional) {
27
- return unique([
28
- ...(target === undefined ? [] : [target]),
29
- ...(next === undefined ? [] : [next]),
30
- ]);
31
- }
32
- return target === undefined ? [] : [target];
33
- }
34
- return [];
35
- }
@@ -1,11 +0,0 @@
1
- import type { RegisterCareOutputCandidate, RegisterCareRoutine, RegisterCareUnit } from './types.js';
2
- interface RegisterCareExpectOutFix {
3
- file: string;
4
- line: number;
5
- column: number;
6
- routine: string;
7
- carriers: RegisterCareUnit[];
8
- }
9
- export declare function findExpectOutFixes(routines: RegisterCareRoutine[], candidates: RegisterCareOutputCandidate[]): RegisterCareExpectOutFix[];
10
- export declare function applyExpectOutFixesToSource(source: string, fixes: RegisterCareExpectOutFix[], referenceSource?: string): string;
11
- export {};