@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,119 +0,0 @@
1
- import { getZ80InstructionEffect } from '../z80/effects.js';
2
- import { instructionSuccessors, labelIndex } from './controlFlow.js';
3
- import { contractCarrierList } from './report.js';
4
- import { joinSourceLines, splitSourceLines } from './sourceText.js';
5
- function sameLocation(a, b) {
6
- return a.file === b.file && a.line === b.line && a.column === b.column;
7
- }
8
- function isUnconditionalDirectCall(item) {
9
- const effect = getZ80InstructionEffect(item.instruction);
10
- return (effect.control.kind === 'call' &&
11
- effect.control.target !== undefined &&
12
- !effect.control.conditional);
13
- }
14
- function continuationReads(routine, callIndex, carriers) {
15
- const labels = labelIndex(routine);
16
- const confirmed = new Set();
17
- const work = callIndex + 1 < routine.instructions.length
18
- ? [{ index: callIndex + 1, pending: [...new Set(carriers)] }]
19
- : [];
20
- const seen = new Set();
21
- let steps = 0;
22
- while (work.length > 0 && steps < 512) {
23
- steps += 1;
24
- const state = work.pop();
25
- const pending = state.pending.filter((unit) => !confirmed.has(unit));
26
- if (pending.length === 0)
27
- continue;
28
- const key = `${state.index}:${pending.join(',')}`;
29
- if (seen.has(key))
30
- continue;
31
- seen.add(key);
32
- const item = routine.instructions[state.index];
33
- if (!item)
34
- continue;
35
- const effect = getZ80InstructionEffect(item.instruction);
36
- const reads = new Set(effect.reads);
37
- const writes = new Set(effect.writes);
38
- const remaining = [];
39
- for (const unit of pending) {
40
- if (reads.has(unit)) {
41
- confirmed.add(unit);
42
- continue;
43
- }
44
- if (!writes.has(unit))
45
- remaining.push(unit);
46
- }
47
- if (remaining.length === 0)
48
- continue;
49
- for (const next of instructionSuccessors(routine, state.index, effect, labels)) {
50
- work.push({ index: next, pending: remaining });
51
- }
52
- }
53
- return carriers.filter((unit) => confirmed.has(unit));
54
- }
55
- export function findExpectOutFixes(routines, candidates) {
56
- const out = [];
57
- for (const routine of routines) {
58
- for (let index = 0; index < routine.instructions.length; index += 1) {
59
- const item = routine.instructions[index];
60
- if (!isUnconditionalDirectCall(item))
61
- continue;
62
- const candidate = candidates.find((entry) => sameLocation(item, entry));
63
- if (!candidate)
64
- continue;
65
- const carriers = continuationReads(routine, index, candidate.carriers);
66
- if (carriers.length === 0)
67
- continue;
68
- out.push({ ...candidate, carriers });
69
- }
70
- }
71
- return out;
72
- }
73
- function isExpectOutLine(line) {
74
- return /^\s*;\s*expects\s+out\b/i.test(line);
75
- }
76
- function expectedCallLine(originalLines, fix) {
77
- return originalLines[fix.line - 1]?.trim();
78
- }
79
- function findCallLineIndex(lines, originalLines, fix) {
80
- const expected = expectedCallLine(originalLines, fix);
81
- if (!expected)
82
- return undefined;
83
- const preferred = fix.line - 1;
84
- if (lines[preferred]?.trim() === expected)
85
- return preferred;
86
- let best;
87
- let bestDistance = Number.POSITIVE_INFINITY;
88
- for (let index = 0; index < lines.length; index += 1) {
89
- if (lines[index]?.trim() !== expected)
90
- continue;
91
- const distance = Math.abs(index - preferred);
92
- if (distance < bestDistance) {
93
- best = index;
94
- bestDistance = distance;
95
- }
96
- }
97
- return best;
98
- }
99
- function indentation(line) {
100
- return line.match(/^\s*/)?.[0] ?? '';
101
- }
102
- export function applyExpectOutFixesToSource(source, fixes, referenceSource = source) {
103
- if (fixes.length === 0)
104
- return source;
105
- const originalLines = referenceSource.split(/\r?\n/);
106
- const sourceLines = splitSourceLines(source);
107
- const { lines } = sourceLines;
108
- const sorted = [...fixes].sort((a, b) => b.line - a.line || b.column - a.column);
109
- for (const fix of sorted) {
110
- const index = findCallLineIndex(lines, originalLines, fix);
111
- if (index === undefined)
112
- continue;
113
- if (index > 0 && isExpectOutLine(lines[index - 1] ?? ''))
114
- continue;
115
- const prefix = indentation(lines[index] ?? '');
116
- lines.splice(index, 0, `${prefix}; expects out ${contractCarrierList(fix.carriers)}`);
117
- }
118
- return joinSourceLines(sourceLines);
119
- }
@@ -1,7 +0,0 @@
1
- import { type Diagnostic } from '../diagnosticTypes.js';
2
- import type { LocatedSmartComment, RegisterCareConflict, RegisterCareOutputCandidate, RegisterCareRoutine, RegisterCareUnit, RoutineSummary } from './types.js';
3
- export declare function findRegisterCareConflicts(routine: RegisterCareRoutine, summaries: Map<string, RoutineSummary>, hints: LocatedSmartComment[]): RegisterCareConflict[];
4
- export declare function findCallerOutputCandidateObservations(routines: RegisterCareRoutine[], summaries: Map<string, RoutineSummary>): RegisterCareOutputCandidate[];
5
- export declare function findCallerOutputCandidates(routines: RegisterCareRoutine[], summaries: Map<string, RoutineSummary>): Map<string, RegisterCareUnit[]>;
6
- export declare function findAcceptedOutputCandidatesFromHints(routines: RegisterCareRoutine[], summaries: Map<string, RoutineSummary>, hints: LocatedSmartComment[]): Map<string, RegisterCareUnit[]>;
7
- export declare function diagnosticsForRegisterCareConflicts(conflicts: RegisterCareConflict[], severity: 'warning' | 'error'): Diagnostic[];
@@ -1,227 +0,0 @@
1
- import { DiagnosticIds } from '../diagnosticTypes.js';
2
- import { getZ80InstructionEffect } from '../z80/effects.js';
3
- import { precedingCServiceName } from './boundaryHints.js';
4
- import { instructionSuccessors, labelIndex } from './controlFlow.js';
5
- import { rstServiceTargetName, rstTargetName } from './profiles.js';
6
- function unique(units) {
7
- return [...new Set(units)];
8
- }
9
- function withImpliedFlagUnits(units) {
10
- return unique(units);
11
- }
12
- function boundaryTarget(routine, index, effect) {
13
- const item = routine.instructions[index];
14
- if (effect.control.kind === 'call' && effect.control.target) {
15
- return {
16
- targets: [effect.control.target],
17
- conditional: effect.control.conditional,
18
- subject: `CALL ${effect.control.target}`,
19
- };
20
- }
21
- if (effect.control.kind === 'jump' &&
22
- item?.head.toLowerCase() === 'jp' &&
23
- !effect.control.conditional &&
24
- effect.control.target &&
25
- !effect.control.target.startsWith('.')) {
26
- return {
27
- targets: [effect.control.target],
28
- conditional: false,
29
- subject: `JP ${effect.control.target}`,
30
- };
31
- }
32
- if (effect.control.kind === 'rst' && effect.control.vector !== undefined) {
33
- const target = rstTargetName(effect.control.vector);
34
- const service = precedingCServiceName(routine.instructions[index - 1]);
35
- const targets = service
36
- ? [rstServiceTargetName(effect.control.vector, service), target]
37
- : [target];
38
- return { targets, conditional: false, subject: target };
39
- }
40
- return undefined;
41
- }
42
- function summaryForBoundary(boundary, summaries) {
43
- for (const target of boundary.targets) {
44
- const summary = summaries.get(target);
45
- if (summary)
46
- return { target, summary };
47
- }
48
- return undefined;
49
- }
50
- function hintUnitsForLine(hints, file, callLine) {
51
- const prior = hints.find((hint) => hint.file === file && hint.line === callLine - 1 && hint.comment.kind === 'expectOut');
52
- return prior?.comment.kind === 'expectOut' ? withImpliedFlagUnits(prior.comment.carriers) : [];
53
- }
54
- function outputUnits(summary) {
55
- return withImpliedFlagUnits(summary.valueRelations.flatMap((relation) => relation.out));
56
- }
57
- function setEqual(left, right) {
58
- if (left.size !== right.size)
59
- return false;
60
- for (const item of left)
61
- if (!right.has(item))
62
- return false;
63
- return true;
64
- }
65
- function unionLive(sets) {
66
- const out = new Set();
67
- for (const set of sets) {
68
- for (const unit of set)
69
- out.add(unit);
70
- }
71
- return out;
72
- }
73
- function transferLiveBefore(item, effect, boundary, summary, liveAfter, hints) {
74
- const live = new Set(liveAfter);
75
- if (boundary && summary) {
76
- const accepted = new Set();
77
- for (const unit of hintUnitsForLine(hints, item.file, item.line))
78
- accepted.add(unit);
79
- for (const unit of outputUnits(summary))
80
- accepted.add(unit);
81
- if (!boundary.conditional) {
82
- for (const unit of summary.mayWrite)
83
- live.delete(unit);
84
- for (const unit of accepted)
85
- live.delete(unit);
86
- }
87
- for (const unit of summary.mayRead)
88
- live.add(unit);
89
- }
90
- const instructionWritesAreConditional = effect.control.kind === 'call' && effect.control.conditional;
91
- if (!instructionWritesAreConditional) {
92
- for (const unit of effect.writes)
93
- live.delete(unit);
94
- }
95
- for (const unit of effect.reads)
96
- live.add(unit);
97
- return live;
98
- }
99
- function liveSetsForRoutine(routine, summaries, hints = []) {
100
- const labels = labelIndex(routine);
101
- const effects = routine.instructions.map((item) => getZ80InstructionEffect(item.instruction));
102
- const boundaries = effects.map((effect, index) => boundaryTarget(routine, index, effect));
103
- const resolvedSummaries = boundaries.map((boundary) => boundary ? summaryForBoundary(boundary, summaries)?.summary : undefined);
104
- const successorIndexes = effects.map((effect, index) => instructionSuccessors(routine, index, effect, labels, { boundaryFallthrough: true }));
105
- const liveIn = routine.instructions.map(() => new Set());
106
- const liveOut = routine.instructions.map(() => new Set());
107
- let changed = true;
108
- let passes = 0;
109
- while (changed && passes < Math.max(8, routine.instructions.length * 4)) {
110
- changed = false;
111
- passes += 1;
112
- for (let index = routine.instructions.length - 1; index >= 0; index -= 1) {
113
- const nextOut = unionLive(successorIndexes[index].map((successor) => liveIn[successor]));
114
- const nextIn = transferLiveBefore(routine.instructions[index], effects[index], boundaries[index], resolvedSummaries[index], nextOut, hints);
115
- if (!setEqual(nextOut, liveOut[index])) {
116
- liveOut[index] = nextOut;
117
- changed = true;
118
- }
119
- if (!setEqual(nextIn, liveIn[index])) {
120
- liveIn[index] = nextIn;
121
- changed = true;
122
- }
123
- }
124
- }
125
- return { liveIn, liveOut };
126
- }
127
- function resolvedBoundariesForRoutine(routine, summaries) {
128
- const out = [];
129
- for (let index = 0; index < routine.instructions.length; index += 1) {
130
- const item = routine.instructions[index];
131
- const effect = getZ80InstructionEffect(item.instruction);
132
- const boundary = boundaryTarget(routine, index, effect);
133
- if (!boundary)
134
- continue;
135
- const resolved = summaryForBoundary(boundary, summaries);
136
- if (!resolved)
137
- continue;
138
- out.push({ item, index, boundary, target: resolved.target, summary: resolved.summary });
139
- }
140
- return out;
141
- }
142
- export function findRegisterCareConflicts(routine, summaries, hints) {
143
- const conflicts = [];
144
- const { liveOut } = liveSetsForRoutine(routine, summaries, hints);
145
- for (const { item, index, boundary, target, summary } of resolvedBoundariesForRoutine(routine, summaries)) {
146
- const accepted = new Set();
147
- for (const unit of hintUnitsForLine(hints, item.file, item.line))
148
- accepted.add(unit);
149
- for (const unit of outputUnits(summary))
150
- accepted.add(unit);
151
- const carriers = unique(summary.mayWrite.filter((unit) => liveOut[index].has(unit) && !accepted.has(unit)));
152
- if (carriers.length > 0) {
153
- conflicts.push({
154
- file: item.file,
155
- line: item.line,
156
- column: item.column,
157
- callTarget: target,
158
- carriers,
159
- message: `${boundary.subject} may modify ${carriers.join(',')}, but the pre-call value is used later.`,
160
- });
161
- }
162
- }
163
- return conflicts;
164
- }
165
- function appendMapUnits(out, target, units) {
166
- const existing = out.get(target) ?? [];
167
- for (const unit of units) {
168
- if (!existing.includes(unit))
169
- existing.push(unit);
170
- }
171
- out.set(target, existing);
172
- }
173
- function candidateMessage(boundary, units) {
174
- const carriers = units.join(',');
175
- const expectation = units.length === 1 ? units[0] : `{${carriers}}`;
176
- return `${boundary.subject} writes ${carriers} and caller reads it later; review the call site and add \`; expects out ${expectation}\` above the call if this is intentional.`;
177
- }
178
- export function findCallerOutputCandidateObservations(routines, summaries) {
179
- const out = [];
180
- for (const routine of routines) {
181
- const { liveOut } = liveSetsForRoutine(routine, summaries);
182
- for (const { item, index, boundary, target, summary } of resolvedBoundariesForRoutine(routine, summaries)) {
183
- const alreadyOutput = new Set(outputUnits(summary));
184
- const carriers = unique(summary.mayWrite.filter((unit) => liveOut[index].has(unit) && !alreadyOutput.has(unit)));
185
- if (carriers.length > 0) {
186
- out.push({
187
- file: item.file,
188
- line: item.line,
189
- column: item.column,
190
- routine: target,
191
- carriers,
192
- message: candidateMessage(boundary, carriers),
193
- });
194
- }
195
- }
196
- }
197
- return out;
198
- }
199
- export function findCallerOutputCandidates(routines, summaries) {
200
- const candidates = new Map();
201
- for (const item of findCallerOutputCandidateObservations(routines, summaries)) {
202
- appendMapUnits(candidates, item.routine, item.carriers);
203
- }
204
- return candidates;
205
- }
206
- export function findAcceptedOutputCandidatesFromHints(routines, summaries, hints) {
207
- const accepted = new Map();
208
- for (const routine of routines) {
209
- for (const { item, target } of resolvedBoundariesForRoutine(routine, summaries)) {
210
- const units = hintUnitsForLine(hints, item.file, item.line);
211
- if (units.length === 0)
212
- continue;
213
- appendMapUnits(accepted, target, units);
214
- }
215
- }
216
- return accepted;
217
- }
218
- export function diagnosticsForRegisterCareConflicts(conflicts, severity) {
219
- return conflicts.map((conflict) => ({
220
- id: DiagnosticIds.RegisterCareConflict,
221
- severity,
222
- message: conflict.message,
223
- file: conflict.file,
224
- line: conflict.line,
225
- column: conflict.column,
226
- }));
227
- }
@@ -1,11 +0,0 @@
1
- import type { RoutineSummary } from './types.js';
2
- export type RegisterCareProfileName = 'mon3';
3
- interface RegisterCareProfile {
4
- name: RegisterCareProfileName;
5
- rst: Map<number, RoutineSummary>;
6
- rstServices: Map<string, RoutineSummary>;
7
- }
8
- export declare function rstTargetName(vector: number): string;
9
- export declare function rstServiceTargetName(vector: number, service: string): string;
10
- export declare function getRegisterCareProfile(name: RegisterCareProfileName | undefined): RegisterCareProfile | undefined;
11
- export {};
@@ -1,45 +0,0 @@
1
- const FLAG_UNITS = ['carry', 'zero', 'sign', 'parity', 'halfCarry'];
2
- export function rstTargetName(vector) {
3
- return `RST_$${vector.toString(16).toUpperCase().padStart(2, '0')}`;
4
- }
5
- function normalizeServiceName(service) {
6
- return service.replace(/[^A-Za-z0-9]/gu, '').toUpperCase();
7
- }
8
- export function rstServiceTargetName(vector, service) {
9
- return `${rstTargetName(vector)}:${normalizeServiceName(service)}`;
10
- }
11
- export function getRegisterCareProfile(name) {
12
- if (name !== 'mon3')
13
- return undefined;
14
- return {
15
- name: 'mon3',
16
- rst: new Map([
17
- [
18
- 0x10,
19
- {
20
- name: rstTargetName(0x10),
21
- mayRead: [],
22
- mayWrite: ['A', ...FLAG_UNITS],
23
- preserved: ['B', 'C', 'D', 'E', 'H', 'L'],
24
- valueRelations: [],
25
- stackBalanced: true,
26
- hasUnknownStackEffect: false,
27
- },
28
- ],
29
- ]),
30
- rstServices: new Map([
31
- [
32
- rstServiceTargetName(0x10, 'API_SCANKEYS'),
33
- {
34
- name: rstServiceTargetName(0x10, 'API_SCANKEYS'),
35
- mayRead: ['C'],
36
- mayWrite: ['sign', 'parity', 'halfCarry'],
37
- preserved: ['B', 'C', 'D', 'E', 'H', 'L'],
38
- valueRelations: [{ out: ['A', 'carry', 'zero'], from: [] }],
39
- stackBalanced: true,
40
- hasUnknownStackEffect: false,
41
- },
42
- ],
43
- ]),
44
- };
45
- }
@@ -1,3 +0,0 @@
1
- import type { ProgramNode } from '../frontend/ast.js';
2
- import type { RegisterCareProgramModel } from './types.js';
3
- export declare function buildRegisterCareProgramModel(program: ProgramNode): RegisterCareProgramModel;
@@ -1,181 +0,0 @@
1
- import { createInlineOpInstructionStreamExpander } from '../lowering/opExpansionStream.js';
2
- function flattenItems(items, out, expandInstruction) {
3
- for (const item of items) {
4
- if (item.kind === 'AsmLabel') {
5
- out.push({ kind: 'label', label: item });
6
- continue;
7
- }
8
- if (item.kind === 'AsmInstruction') {
9
- out.push(...expandInstruction(item));
10
- }
11
- }
12
- }
13
- function directCallTarget(inst) {
14
- if (inst.head.toLowerCase() !== 'call')
15
- return undefined;
16
- if (inst.operands.length !== 1 && inst.operands.length !== 2)
17
- return undefined;
18
- const op = inst.operands[inst.operands.length - 1];
19
- if (op?.kind !== 'Imm' || op.expr.kind !== 'ImmName')
20
- return undefined;
21
- return op.expr.name;
22
- }
23
- function directTailJumpTarget(inst, entryNames) {
24
- if (inst.head.toLowerCase() !== 'jp')
25
- return undefined;
26
- if (inst.operands.length !== 1 && inst.operands.length !== 2)
27
- return undefined;
28
- if (inst.operands.length === 2 && entryNames === undefined)
29
- return undefined;
30
- const op = inst.operands[inst.operands.length - 1];
31
- if (op?.kind !== 'Imm' || op.expr.kind !== 'ImmName')
32
- return undefined;
33
- if (op.expr.name.startsWith('.'))
34
- return undefined;
35
- if (entryNames !== undefined && !entryNames.has(op.expr.name))
36
- return undefined;
37
- return op.expr.name;
38
- }
39
- function toInstruction(inst, labels = []) {
40
- return {
41
- instruction: inst,
42
- head: inst.head.toLowerCase(),
43
- file: inst.span.file,
44
- line: inst.span.start.line,
45
- column: inst.span.start.column,
46
- labels,
47
- };
48
- }
49
- function spanFrom(start, end) {
50
- if (start.file !== end.file)
51
- return start;
52
- return {
53
- file: start.file,
54
- start: start.start,
55
- end: end.end,
56
- };
57
- }
58
- function isLocalLabel(name) {
59
- return name.startsWith('.');
60
- }
61
- function isEntryLabel(label) {
62
- return label.isEntry === true;
63
- }
64
- function flatItemFile(item) {
65
- return item.kind === 'label' ? item.label.span.file : item.instruction.span.file;
66
- }
67
- function isTerminalReturn(inst) {
68
- const head = inst.head.toLowerCase();
69
- if (head === 'ret')
70
- return inst.operands.length === 0;
71
- return head === 'retn' || head === 'reti';
72
- }
73
- export function buildRegisterCareProgramModel(program) {
74
- const flat = [];
75
- const { expandInstruction } = createInlineOpInstructionStreamExpander(program);
76
- for (const file of program.files) {
77
- flattenItems(file.items, flat, expandInstruction);
78
- }
79
- const labelItems = flat.filter((item) => item.kind === 'label');
80
- const filesWithEntryLabels = new Set(labelItems.filter((item) => isEntryLabel(item.label)).map((item) => item.label.span.file));
81
- const entryLabelNames = new Set(labelItems
82
- .filter((item) => isEntryLabel(item.label) ||
83
- (!filesWithEntryLabels.has(item.label.span.file) && !isLocalLabel(item.label.name)))
84
- .map((item) => item.label.name));
85
- const directCalls = flat.flatMap((item) => {
86
- if (item.kind !== 'instruction')
87
- return [];
88
- const target = directCallTarget(item.instruction);
89
- if (target === undefined)
90
- return [];
91
- return [
92
- {
93
- target,
94
- subject: `CALL ${target}`,
95
- file: item.instruction.span.file,
96
- line: item.instruction.span.start.line,
97
- column: item.instruction.span.start.column,
98
- },
99
- ];
100
- });
101
- const directTailJumps = flat.flatMap((item) => {
102
- if (item.kind !== 'instruction')
103
- return [];
104
- const sourceFileUsesEntryLabels = filesWithEntryLabels.has(item.instruction.span.file);
105
- const target = directTailJumpTarget(item.instruction, sourceFileUsesEntryLabels ? entryLabelNames : undefined);
106
- if (target === undefined)
107
- return [];
108
- return [
109
- {
110
- target,
111
- subject: `JP ${target}`,
112
- file: item.instruction.span.file,
113
- line: item.instruction.span.start.line,
114
- column: item.instruction.span.start.column,
115
- },
116
- ];
117
- });
118
- const directBoundaries = [...directCalls, ...directTailJumps];
119
- const directCallTargets = Array.from(new Set(directCalls.map((call) => call.target))).sort();
120
- const routines = [];
121
- const coalescedGlobalLabelIndexes = new Set();
122
- for (let index = 0; index < flat.length; index += 1) {
123
- const item = flat[index];
124
- if (coalescedGlobalLabelIndexes.has(index))
125
- continue;
126
- if (item?.kind !== 'label' || isLocalLabel(item.label.name))
127
- continue;
128
- const routineFile = item.label.span.file;
129
- const fileUsesEntryLabels = filesWithEntryLabels.has(routineFile);
130
- if (fileUsesEntryLabels && !isEntryLabel(item.label))
131
- continue;
132
- const labels = [item.label.name];
133
- const entryLabels = isEntryLabel(item.label) ? [item.label.name] : undefined;
134
- const instructions = [];
135
- let pendingInstructionLabels = [item.label.name];
136
- let endSpan = item.label.span;
137
- for (let rangeIndex = index + 1; rangeIndex < flat.length; rangeIndex += 1) {
138
- const rangeItem = flat[rangeIndex];
139
- if (!rangeItem)
140
- break;
141
- if (flatItemFile(rangeItem) !== routineFile)
142
- break;
143
- if (rangeItem.kind === 'label') {
144
- if (fileUsesEntryLabels && isEntryLabel(rangeItem.label)) {
145
- if (instructions.length > 0)
146
- break;
147
- labels.push(rangeItem.label.name);
148
- entryLabels?.push(rangeItem.label.name);
149
- coalescedGlobalLabelIndexes.add(rangeIndex);
150
- endSpan = rangeItem.label.span;
151
- continue;
152
- }
153
- if (!fileUsesEntryLabels && !isLocalLabel(rangeItem.label.name)) {
154
- if (instructions.length > 0)
155
- break;
156
- labels.push(rangeItem.label.name);
157
- coalescedGlobalLabelIndexes.add(rangeIndex);
158
- endSpan = rangeItem.label.span;
159
- continue;
160
- }
161
- labels.push(rangeItem.label.name);
162
- pendingInstructionLabels.push(rangeItem.label.name);
163
- endSpan = rangeItem.label.span;
164
- continue;
165
- }
166
- instructions.push(toInstruction(rangeItem.instruction, pendingInstructionLabels));
167
- pendingInstructionLabels = [];
168
- endSpan = rangeItem.instruction.span;
169
- if (isTerminalReturn(rangeItem.instruction))
170
- break;
171
- }
172
- routines.push({
173
- name: item.label.name,
174
- span: spanFrom(item.label.span, endSpan),
175
- labels,
176
- ...(entryLabels ? { entryLabels } : {}),
177
- instructions,
178
- });
179
- }
180
- return { routines, directCallTargets, directCalls, directBoundaries };
181
- }
@@ -1,5 +0,0 @@
1
- import type { RegisterCareReportModel, RegisterCareUnit, RoutineSummary } from './types.js';
2
- export declare function contractCarrierList(units: RegisterCareUnit[]): string;
3
- export declare function renderRegisterCareReport(model: RegisterCareReportModel): string;
4
- export declare function renderRegisterCareInterface(summaries: RoutineSummary[]): string;
5
- export declare function renderRegisterCareSourceBlock(summary: RoutineSummary): string[];