@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,492 +0,0 @@
1
- import { getZ80InstructionEffect } from '../z80/effects.js';
2
- import { precedingCServiceName } from './boundaryHints.js';
3
- import { expandCarrier } from './carriers.js';
4
- import { rstServiceTargetName, rstTargetName } from './profiles.js';
5
- const FLAG_UNIT_LIST = ['carry', 'zero', 'sign', 'parity', 'halfCarry'];
6
- const TRACKED_UNITS = [
7
- 'A',
8
- 'B',
9
- 'C',
10
- 'D',
11
- 'E',
12
- 'H',
13
- 'L',
14
- 'IXH',
15
- 'IXL',
16
- 'IYH',
17
- 'IYL',
18
- ...FLAG_UNIT_LIST,
19
- ];
20
- const GENERAL_REGISTER_UNITS = new Set(['A', 'B', 'C', 'D', 'E', 'H', 'L']);
21
- const CONTRACT_FLAG_UNITS = new Set(['carry', 'zero']);
22
- const STACK_POINTER_UNITS = new Set(['SPH', 'SPL']);
23
- const REGISTER_PAIRS = [
24
- ['B', 'C'],
25
- ['D', 'E'],
26
- ['H', 'L'],
27
- ];
28
- function unique(items) {
29
- return [...new Set(items)];
30
- }
31
- function isTrackedUnit(unit) {
32
- return TRACKED_UNITS.includes(unit);
33
- }
34
- function getRegisterUnits(name) {
35
- return expandCarrier(name);
36
- }
37
- function readToken(tokens, unit) {
38
- return tokens.get(unit) ?? { origin: 'unknown' };
39
- }
40
- function semanticReadOrigins(tokens, units) {
41
- const origins = [];
42
- for (const unit of units) {
43
- if (!isTrackedUnit(unit)) {
44
- origins.push(unit);
45
- continue;
46
- }
47
- const token = readToken(tokens, unit);
48
- if (token.origin !== 'unknown' && token.origin !== 'produced')
49
- origins.push(token.origin);
50
- }
51
- return origins;
52
- }
53
- function markProducedReadsConsumed(tokens, consumedProduced, reads, writes, item) {
54
- for (const unit of reads) {
55
- if (!isTrackedUnit(unit) || writes.has(unit))
56
- continue;
57
- if (item?.head.toLowerCase() === 'cp' && unit === 'A')
58
- continue;
59
- if (readToken(tokens, unit).origin === 'produced')
60
- consumedProduced.add(unit);
61
- }
62
- }
63
- function tokenPreservesUnit(token, unit) {
64
- return token?.origin === unit;
65
- }
66
- function isOpaqueBoundary(item, effect) {
67
- if (effect.control.kind === 'call' || effect.control.kind === 'rst')
68
- return true;
69
- return (effect.control.kind === 'jump' &&
70
- item.head.toLowerCase() === 'jp' &&
71
- !effect.control.conditional &&
72
- Boolean(effect.control.target) &&
73
- !effect.control.target?.startsWith('.'));
74
- }
75
- function boundarySummary(routine, index, summaries) {
76
- const item = routine.instructions[index];
77
- if (!item)
78
- return undefined;
79
- const effect = getZ80InstructionEffect(item.instruction);
80
- if (effect.control.kind === 'call' && effect.control.target) {
81
- return summaries.get(effect.control.target);
82
- }
83
- if (effect.control.kind === 'jump' &&
84
- item.head.toLowerCase() === 'jp' &&
85
- effect.control.target &&
86
- !effect.control.target.startsWith('.') &&
87
- !routine.labels.includes(effect.control.target)) {
88
- return summaries.get(effect.control.target);
89
- }
90
- if (effect.control.kind === 'rst' && effect.control.vector !== undefined) {
91
- const service = precedingCServiceName(routine.instructions[index - 1]);
92
- if (service) {
93
- const serviceSummary = summaries.get(rstServiceTargetName(effect.control.vector, service));
94
- if (serviceSummary)
95
- return serviceSummary;
96
- }
97
- return summaries.get(rstTargetName(effect.control.vector));
98
- }
99
- return undefined;
100
- }
101
- function relationKey(relation) {
102
- return `${relation.out.join(',')}<- ${relation.from.join(',')}`;
103
- }
104
- function addRelation(out, relation) {
105
- if (relation.out.length === 0 || relation.from.length === 0)
106
- return;
107
- const key = relationKey(relation);
108
- if (!out.some((existing) => relationKey(existing) === key))
109
- out.push(relation);
110
- }
111
- function addContractRelation(out, relation) {
112
- if (relation.out.length === 0)
113
- return;
114
- const key = relationKey(relation);
115
- if (!out.some((existing) => relationKey(existing) === key))
116
- out.push(relation);
117
- }
118
- function pairRelation(tokens, out) {
119
- const from = [];
120
- for (const unit of out) {
121
- const token = tokens.get(unit);
122
- if (!token || token.origin === 'unknown' || token.origin === 'produced')
123
- return undefined;
124
- from.push(token.origin);
125
- }
126
- if (out.every((unit, idx) => unit === from[idx]))
127
- return undefined;
128
- if (out.some((unit, idx) => unit === from[idx]))
129
- return undefined;
130
- return { out, from };
131
- }
132
- function producedPairRelation(tokens, consumedProduced, out) {
133
- if (out.some((unit) => tokens.get(unit)?.origin !== 'produced' || consumedProduced.has(unit))) {
134
- return undefined;
135
- }
136
- return { out, from: [] };
137
- }
138
- function withImpliedFlagUnits(units) {
139
- return unique(units);
140
- }
141
- function contractOutRelation(contractIn, contractOut) {
142
- if (contractOut.length === 0)
143
- return undefined;
144
- return {
145
- out: contractOut,
146
- from: contractIn.length === contractOut.length ? contractIn : [],
147
- };
148
- }
149
- function isUnconditionalReturn(item) {
150
- const head = item.head.toLowerCase();
151
- if (head === 'ret')
152
- return item.instruction.operands.length === 0;
153
- return head === 'retn' || head === 'reti';
154
- }
155
- function isPureTokenTransfer(item) {
156
- const inst = item.instruction;
157
- const head = item.head.toLowerCase();
158
- if (head === 'ex')
159
- return true;
160
- if (head !== 'ld' || inst.operands.length !== 2)
161
- return false;
162
- const dst = inst.operands[0];
163
- const src = inst.operands[1];
164
- if (dst?.kind !== 'Reg')
165
- return false;
166
- return src?.kind === 'Reg' || src?.kind === 'Imm';
167
- }
168
- function isAccumulatorSelfOperand(item) {
169
- const operand = item.instruction.operands[0];
170
- return operand?.kind === 'Reg' && operand.name.toUpperCase() === 'A';
171
- }
172
- function isImmediateZeroOperand(item) {
173
- const operand = item.instruction.operands[0];
174
- return operand?.kind === 'Imm' && operand.expr.kind === 'ImmLiteral' && operand.expr.value === 0;
175
- }
176
- function isRegisterOperand(item, index, name) {
177
- const operand = item?.instruction.operands[index];
178
- return operand?.kind === 'Reg' && operand.name.toUpperCase() === name;
179
- }
180
- function isCarryClearBeforeSbcHl(item, next) {
181
- const head = item.head.toLowerCase();
182
- if (head !== 'or' && head !== 'and')
183
- return false;
184
- if (!isAccumulatorSelfOperand(item))
185
- return false;
186
- return next?.head.toLowerCase() === 'sbc' && isRegisterOperand(next, 0, 'HL');
187
- }
188
- function intentOutputUnits(item) {
189
- const head = item.head.toLowerCase();
190
- if (head === 'scf' || head === 'ccf')
191
- return ['carry'];
192
- if (head === 'cp')
193
- return isImmediateZeroOperand(item) ? ['A', 'carry', 'zero'] : ['carry', 'zero'];
194
- if ((head === 'or' || head === 'and' || head === 'xor') && isAccumulatorSelfOperand(item)) {
195
- return ['A', 'carry', 'zero'];
196
- }
197
- return [];
198
- }
199
- function isMechanicalResidueWrite(item, unit) {
200
- const head = item.head.toLowerCase();
201
- if (head === 'djnz')
202
- return unit === 'B';
203
- if (head === 'ldi' || head === 'ldir' || head === 'ldd' || head === 'lddr') {
204
- return (unit === 'B' || unit === 'C' || unit === 'D' || unit === 'E' || unit === 'H' || unit === 'L');
205
- }
206
- return false;
207
- }
208
- function applyPureTokenTransfer(tokens, consumedProduced, item) {
209
- const inst = item.instruction;
210
- const head = item.head.toLowerCase();
211
- if (head === 'ld' && inst.operands.length === 2) {
212
- const dst = inst.operands[0];
213
- const src = inst.operands[1];
214
- if (dst?.kind !== 'Reg')
215
- return [];
216
- const dstUnits = dst.kind === 'Reg' ? getRegisterUnits(dst.name) : undefined;
217
- if (!dstUnits)
218
- return [];
219
- const srcUnits = src?.kind === 'Reg' ? getRegisterUnits(src.name) : undefined;
220
- if (srcUnits && srcUnits.length === dstUnits.length) {
221
- dstUnits.forEach((unit, index) => {
222
- tokens.set(unit, readToken(tokens, srcUnits[index]));
223
- if (readToken(tokens, srcUnits[index]).origin === 'produced') {
224
- consumedProduced.add(srcUnits[index]);
225
- }
226
- consumedProduced.delete(unit);
227
- });
228
- }
229
- else {
230
- for (const unit of dstUnits) {
231
- tokens.set(unit, { origin: 'produced' });
232
- consumedProduced.delete(unit);
233
- }
234
- }
235
- return dstUnits;
236
- }
237
- if (head === 'ex' && inst.operands.length === 2) {
238
- const left = inst.operands[0];
239
- const right = inst.operands[1];
240
- if (left?.kind !== 'Reg' || right?.kind !== 'Reg')
241
- return [];
242
- const leftUnits = getRegisterUnits(left.name);
243
- const rightUnits = getRegisterUnits(right.name);
244
- if (!leftUnits || !rightUnits || leftUnits.length !== rightUnits.length)
245
- return [];
246
- const leftTokens = leftUnits.map((unit) => readToken(tokens, unit));
247
- const rightTokens = rightUnits.map((unit) => readToken(tokens, unit));
248
- leftUnits.forEach((unit, index) => tokens.set(unit, rightTokens[index] ?? { origin: 'unknown' }));
249
- rightUnits.forEach((unit, index) => tokens.set(unit, leftTokens[index] ?? { origin: 'unknown' }));
250
- return unique([...leftUnits, ...rightUnits]);
251
- }
252
- return [];
253
- }
254
- function applyKnownBoundarySummary(tokens, consumedProduced, intendedProduced, directMayWrite, summary) {
255
- for (const relation of summary.valueRelations) {
256
- const sameCarrierRelation = relation.out.length === relation.from.length &&
257
- relation.out.every((unit, index) => unit === relation.from[index]);
258
- relation.out.forEach((unit, index) => {
259
- if (!sameCarrierRelation &&
260
- relation.from.length === relation.out.length &&
261
- relation.from[index]) {
262
- tokens.set(unit, readToken(tokens, relation.from[index]));
263
- }
264
- else {
265
- tokens.set(unit, { origin: 'produced' });
266
- consumedProduced.delete(unit);
267
- if (CONTRACT_FLAG_UNITS.has(unit))
268
- intendedProduced.add(unit);
269
- }
270
- });
271
- }
272
- for (const unit of summary.mayWrite) {
273
- if (STACK_POINTER_UNITS.has(unit))
274
- continue;
275
- if (isTrackedUnit(unit)) {
276
- tokens.set(unit, { origin: 'unknown' });
277
- consumedProduced.delete(unit);
278
- intendedProduced.delete(unit);
279
- }
280
- else {
281
- directMayWrite.push(unit);
282
- }
283
- }
284
- }
285
- export function inferRoutineSummary(routine, boundarySummaries = new Map()) {
286
- const tokens = new Map();
287
- for (const unit of TRACKED_UNITS)
288
- tokens.set(unit, { origin: unit });
289
- const stack = [];
290
- const mayRead = [];
291
- const directMayWrite = [];
292
- const consumedProduced = new Set();
293
- const intendedProduced = new Set();
294
- let stackBalanced = true;
295
- let hasUnknownStackEffect = false;
296
- for (let index = 0; index < routine.instructions.length; index += 1) {
297
- const item = routine.instructions[index];
298
- const effect = getZ80InstructionEffect(item.instruction);
299
- const knownBoundary = boundarySummary(routine, index, boundarySummaries);
300
- const carryClearBeforeSbcHl = isCarryClearBeforeSbcHl(item, routine.instructions[index + 1]);
301
- const expectedTerminalReturn = index === routine.instructions.length - 1 && isUnconditionalReturn(item);
302
- const effectWrites = new Set(effect.writes);
303
- const instructionIntentOutputs = carryClearBeforeSbcHl ? [] : intentOutputUnits(item);
304
- const semanticReads = carryClearBeforeSbcHl
305
- ? effect.reads.filter((unit) => unit !== 'A')
306
- : effect.reads;
307
- if (effect.stack.kind !== 'push' && !isPureTokenTransfer(item)) {
308
- mayRead.push(...semanticReadOrigins(tokens, semanticReads));
309
- markProducedReadsConsumed(tokens, consumedProduced, semanticReads, effectWrites, item);
310
- }
311
- if (item.head.toLowerCase() === 'djnz') {
312
- for (const unit of TRACKED_UNITS) {
313
- if (readToken(tokens, unit).origin === 'produced')
314
- consumedProduced.add(unit);
315
- intendedProduced.delete(unit);
316
- }
317
- }
318
- if (knownBoundary) {
319
- mayRead.push(...semanticReadOrigins(tokens, knownBoundary.mayRead));
320
- markProducedReadsConsumed(tokens, consumedProduced, knownBoundary.mayRead, new Set());
321
- }
322
- if (effect.stack.kind === 'push') {
323
- stack.push(effect.stack.units.map((unit) => readToken(tokens, unit)));
324
- }
325
- else if (effect.stack.kind === 'pop') {
326
- const popped = stack.pop();
327
- if (!popped) {
328
- stackBalanced = false;
329
- for (const unit of effect.stack.units) {
330
- tokens.set(unit, { origin: 'unknown' });
331
- intendedProduced.delete(unit);
332
- }
333
- }
334
- else if (popped.length !== effect.stack.units.length) {
335
- for (const unit of effect.stack.units) {
336
- tokens.set(unit, { origin: 'unknown' });
337
- consumedProduced.delete(unit);
338
- intendedProduced.delete(unit);
339
- }
340
- }
341
- else {
342
- effect.stack.units.forEach((unit, idx) => {
343
- tokens.set(unit, popped[idx] ?? { origin: 'unknown' });
344
- consumedProduced.delete(unit);
345
- intendedProduced.delete(unit);
346
- });
347
- }
348
- }
349
- else if (effect.stack.kind === 'exchangeTop') {
350
- hasUnknownStackEffect = true;
351
- for (const unit of effect.stack.units) {
352
- tokens.set(unit, { origin: 'unknown' });
353
- consumedProduced.delete(unit);
354
- intendedProduced.delete(unit);
355
- }
356
- }
357
- else if (effect.stack.kind === 'unknown' &&
358
- !expectedTerminalReturn &&
359
- (!knownBoundary || !knownBoundary.stackBalanced || knownBoundary.hasUnknownStackEffect)) {
360
- hasUnknownStackEffect = true;
361
- }
362
- const transferWrites = new Set(isPureTokenTransfer(item) ? applyPureTokenTransfer(tokens, consumedProduced, item) : []);
363
- if (knownBoundary) {
364
- applyKnownBoundarySummary(tokens, consumedProduced, intendedProduced, directMayWrite, knownBoundary);
365
- }
366
- else if (isOpaqueBoundary(item, effect)) {
367
- for (const unit of TRACKED_UNITS) {
368
- tokens.set(unit, { origin: 'unknown' });
369
- consumedProduced.delete(unit);
370
- intendedProduced.delete(unit);
371
- }
372
- }
373
- for (const unit of effect.writes) {
374
- if (STACK_POINTER_UNITS.has(unit))
375
- continue;
376
- if (effect.stack.kind === 'pop' && effect.stack.units.includes(unit) && isTrackedUnit(unit)) {
377
- continue;
378
- }
379
- if (transferWrites.has(unit) && isTrackedUnit(unit))
380
- continue;
381
- if (unit === 'A' &&
382
- (item.head.toLowerCase() === 'or' || item.head.toLowerCase() === 'and') &&
383
- isAccumulatorSelfOperand(item)) {
384
- if (!carryClearBeforeSbcHl)
385
- intendedProduced.add(unit);
386
- continue;
387
- }
388
- if (isTrackedUnit(unit)) {
389
- tokens.set(unit, { origin: isMechanicalResidueWrite(item, unit) ? 'unknown' : 'produced' });
390
- consumedProduced.delete(unit);
391
- if (instructionIntentOutputs.includes(unit))
392
- intendedProduced.add(unit);
393
- else
394
- intendedProduced.delete(unit);
395
- }
396
- else {
397
- directMayWrite.push(unit);
398
- }
399
- }
400
- for (const unit of instructionIntentOutputs) {
401
- if (!isTrackedUnit(unit) || effectWrites.has(unit))
402
- continue;
403
- intendedProduced.add(unit);
404
- }
405
- }
406
- if (stack.length !== 0)
407
- stackBalanced = false;
408
- const mayWrite = [...directMayWrite];
409
- const preserved = [];
410
- const valueRelations = [];
411
- const outputUnits = new Set();
412
- for (const pair of REGISTER_PAIRS) {
413
- const relation = producedPairRelation(tokens, consumedProduced, pair);
414
- if (relation) {
415
- addContractRelation(valueRelations, relation);
416
- for (const unit of pair)
417
- outputUnits.add(unit);
418
- }
419
- }
420
- for (const unit of TRACKED_UNITS) {
421
- if (outputUnits.has(unit))
422
- continue;
423
- const current = tokens.get(unit);
424
- const eligibleProduced = current?.origin === 'produced' &&
425
- (GENERAL_REGISTER_UNITS.has(unit) ||
426
- (CONTRACT_FLAG_UNITS.has(unit) && intendedProduced.has(unit)));
427
- const eligiblePreservedIntent = current?.origin === unit && GENERAL_REGISTER_UNITS.has(unit) && intendedProduced.has(unit);
428
- if ((eligibleProduced || eligiblePreservedIntent) && !consumedProduced.has(unit)) {
429
- addContractRelation(valueRelations, {
430
- out: [unit],
431
- from: eligiblePreservedIntent ? [unit] : [],
432
- });
433
- outputUnits.add(unit);
434
- }
435
- }
436
- for (const unit of TRACKED_UNITS) {
437
- const current = tokens.get(unit);
438
- if (tokenPreservesUnit(current, unit)) {
439
- preserved.push(unit);
440
- continue;
441
- }
442
- if (outputUnits.has(unit))
443
- continue;
444
- mayWrite.push(unit);
445
- }
446
- for (const pair of REGISTER_PAIRS) {
447
- const relation = pairRelation(tokens, pair);
448
- if (relation)
449
- addRelation(valueRelations, relation);
450
- }
451
- mayRead.push(...valueRelations.flatMap((relation) => relation.from));
452
- return {
453
- name: routine.name,
454
- mayRead: unique(mayRead),
455
- mayWrite: unique(mayWrite),
456
- preserved: unique(preserved),
457
- valueRelations,
458
- stackBalanced,
459
- hasUnknownStackEffect,
460
- };
461
- }
462
- export function applyRoutineContract(summary, contract) {
463
- const contractIn = withImpliedFlagUnits(contract.in);
464
- const contractOut = withImpliedFlagUnits(contract.out);
465
- const contractClobbers = withImpliedFlagUnits(contract.clobbers);
466
- const contractPreserves = withImpliedFlagUnits(contract.preserves);
467
- const outputSet = new Set(contractOut);
468
- const preservedSet = new Set(contractPreserves);
469
- const inferredWrites = withImpliedFlagUnits(summary.mayWrite);
470
- const baseMayWrite = contract.complete
471
- ? inferredWrites.filter((unit) => FLAG_UNIT_LIST.includes(unit))
472
- : inferredWrites;
473
- const mayWrite = baseMayWrite.filter((unit) => !outputSet.has(unit) && !preservedSet.has(unit));
474
- for (const unit of contractClobbers) {
475
- if (!outputSet.has(unit) && !preservedSet.has(unit) && !mayWrite.includes(unit)) {
476
- mayWrite.push(unit);
477
- }
478
- }
479
- const mayWriteSet = new Set(withImpliedFlagUnits(mayWrite));
480
- const preserved = unique([...summary.preserved, ...contractPreserves]).filter((unit) => !outputSet.has(unit) && !mayWriteSet.has(unit));
481
- const valueRelations = [...summary.valueRelations];
482
- const relation = contractOutRelation(contractIn, contractOut);
483
- if (relation)
484
- addContractRelation(valueRelations, relation);
485
- return {
486
- ...summary,
487
- mayRead: unique(contractIn),
488
- mayWrite,
489
- preserved,
490
- valueRelations,
491
- };
492
- }
@@ -1,154 +0,0 @@
1
- import type { AsmInstructionNode, SourceSpan } from '../frontend/ast.js';
2
- export type RegisterCareMode = 'off' | 'audit' | 'warn' | 'error' | 'strict';
3
- export type RegisterCareUnit = 'A' | 'B' | 'C' | 'D' | 'E' | 'H' | 'L' | 'IXH' | 'IXL' | 'IYH' | 'IYL' | 'SPH' | 'SPL' | 'carry' | 'zero' | 'sign' | 'parity' | 'halfCarry';
4
- type StackEffect = {
5
- kind: 'none';
6
- } | {
7
- kind: 'push';
8
- units: RegisterCareUnit[];
9
- } | {
10
- kind: 'pop';
11
- units: RegisterCareUnit[];
12
- } | {
13
- kind: 'exchangeTop';
14
- units: RegisterCareUnit[];
15
- } | {
16
- kind: 'unknown';
17
- };
18
- export type ControlEffect = {
19
- kind: 'fallthrough';
20
- } | {
21
- kind: 'call';
22
- target?: string;
23
- conditional: boolean;
24
- } | {
25
- kind: 'rst';
26
- vector?: number;
27
- } | {
28
- kind: 'return';
29
- } | {
30
- kind: 'jump';
31
- target?: string;
32
- conditional: boolean;
33
- } | {
34
- kind: 'unknown';
35
- };
36
- export interface InstructionEffect {
37
- reads: RegisterCareUnit[];
38
- writes: RegisterCareUnit[];
39
- stack: StackEffect;
40
- control: ControlEffect;
41
- }
42
- export type SmartComment = {
43
- kind: 'extern';
44
- name: string;
45
- } | {
46
- kind: 'end';
47
- } | {
48
- kind: 'in';
49
- carriers: RegisterCareUnit[];
50
- name?: string;
51
- } | {
52
- kind: 'out';
53
- carriers: RegisterCareUnit[];
54
- name?: string;
55
- } | {
56
- kind: 'clobbers';
57
- carriers: RegisterCareUnit[];
58
- } | {
59
- kind: 'preserves';
60
- carriers: RegisterCareUnit[];
61
- } | {
62
- kind: 'expectOut';
63
- carriers: RegisterCareUnit[];
64
- name?: string;
65
- };
66
- export interface LocatedSmartComment {
67
- file: string;
68
- line: number;
69
- comment: SmartComment;
70
- }
71
- export interface RoutineContract {
72
- name: string;
73
- in: RegisterCareUnit[];
74
- out: RegisterCareUnit[];
75
- clobbers: RegisterCareUnit[];
76
- preserves: RegisterCareUnit[];
77
- complete?: boolean;
78
- }
79
- export interface RegisterCareInstruction {
80
- instruction: AsmInstructionNode;
81
- head: string;
82
- file: string;
83
- line: number;
84
- column: number;
85
- labels: string[];
86
- }
87
- export interface RegisterCareRoutine {
88
- name: string;
89
- span: SourceSpan;
90
- labels: string[];
91
- entryLabels?: string[];
92
- instructions: RegisterCareInstruction[];
93
- }
94
- export interface RegisterCareDirectCall {
95
- target: string;
96
- subject: string;
97
- file: string;
98
- line: number;
99
- column: number;
100
- }
101
- export interface RegisterCareProgramModel {
102
- routines: RegisterCareRoutine[];
103
- directCallTargets: string[];
104
- directCalls: RegisterCareDirectCall[];
105
- directBoundaries: RegisterCareDirectCall[];
106
- }
107
- export interface ValueRelation {
108
- out: RegisterCareUnit[];
109
- from: RegisterCareUnit[];
110
- }
111
- export interface RoutineSummary {
112
- name: string;
113
- mayRead: RegisterCareUnit[];
114
- mayWrite: RegisterCareUnit[];
115
- preserved: RegisterCareUnit[];
116
- valueRelations: ValueRelation[];
117
- outputCandidates?: RegisterCareUnit[];
118
- stackBalanced: boolean;
119
- hasUnknownStackEffect: boolean;
120
- }
121
- export interface RegisterCareConflict {
122
- file: string;
123
- line: number;
124
- column: number;
125
- callTarget: string;
126
- carriers: RegisterCareUnit[];
127
- message: string;
128
- }
129
- export interface RegisterCareUnknownBoundary {
130
- file: string;
131
- line: number;
132
- column: number;
133
- target: string;
134
- message: string;
135
- }
136
- export interface RegisterCareOutputCandidate {
137
- file: string;
138
- line: number;
139
- column: number;
140
- routine: string;
141
- carriers: RegisterCareUnit[];
142
- autoFixable?: boolean;
143
- message: string;
144
- }
145
- export interface RegisterCareReportModel {
146
- entryFile: string;
147
- mode: RegisterCareMode;
148
- profile?: string;
149
- summaries: RoutineSummary[];
150
- conflicts: RegisterCareConflict[];
151
- outputCandidates?: RegisterCareOutputCandidate[];
152
- unknownCalls: string[];
153
- }
154
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +0,0 @@
1
- import type { SourceItemNode } from '../frontend/ast.js';
2
- type DeclNode = SourceItemNode;
3
- type DeclVisitContext = Record<string, never>;
4
- export declare function visitDeclTree(items: SourceItemNode[], visit: (item: DeclNode, ctx: DeclVisitContext) => void): void;
5
- export {};
@@ -1,11 +0,0 @@
1
- export function visitDeclTree(items, visit) {
2
- const walkEntry = (entry, ctx) => {
3
- if (entry.kind === 'AsmLabel' || entry.kind === 'AsmInstruction') {
4
- return;
5
- }
6
- visit(entry, ctx);
7
- };
8
- for (const item of items) {
9
- walkEntry(item, {});
10
- }
11
- }
@@ -1,28 +0,0 @@
1
- import type { Diagnostic } from '../diagnosticTypes.js';
2
- import type { ImmExprNode, ProgramNode, TypeDeclNode, UnionDeclNode } from '../frontend/ast.js';
3
- export interface CompileEnv {
4
- /**
5
- * Map of equate name -> evaluated numeric value.
6
- *
7
- * Values are plain JavaScript numbers; interpretation (imm8/imm16 wrapping, etc.) happens at use sites.
8
- */
9
- equates: Map<string, number>;
10
- /**
11
- * Map of enum member name -> evaluated numeric value.
12
- */
13
- enums: Map<string, number>;
14
- /**
15
- * Map of type name -> type declaration.
16
- *
17
- * Layout declarations used by sizeof/offset and layout casts.
18
- */
19
- types: Map<string, TypeDeclNode | UnionDeclNode>;
20
- asmEquExprs?: Map<string, {
21
- expr: ImmExprNode;
22
- currentLocation?: number;
23
- }>;
24
- }
25
- export declare function evalImmExpr(expr: ImmExprNode, env: CompileEnv, diagnostics?: Diagnostic[], options?: {
26
- currentLocation?: number;
27
- }): number | undefined;
28
- export declare function buildEnv(program: ProgramNode, diagnostics: Diagnostic[]): CompileEnv;