@jhlagado/azm 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +192 -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 +87 -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,176 +0,0 @@
1
- import { cloneEaExpr, cloneImmExpr, cloneOperand, flattenEaDottedName } from './asmUtils.js';
2
- import { expandInlineOpBodyItems } from './opExpansionExecution.js';
3
- import { createOpMatchingHelpers } from './opMatching.js';
4
- import { createOpSubstitutionHelpers } from './opSubstitution.js';
5
- const REG8_NAMES = new Set(['A', 'B', 'C', 'D', 'E', 'H', 'L']);
6
- const CONDITION_CODES = new Set(['NZ', 'Z', 'NC', 'C', 'PO', 'PE', 'P', 'M']);
7
- const MAX_OP_EXPANSION_DEPTH = 64;
8
- const EMPTY_OP_SUBSTITUTION_ENV = {
9
- equates: new Map(),
10
- enums: new Map(),
11
- types: new Map(),
12
- };
13
- function isIxIyIndexedMem(op) {
14
- return (op.kind === 'Mem' &&
15
- ((op.expr.kind === 'EaName' && /^(IX|IY)$/i.test(op.expr.name)) ||
16
- ((op.expr.kind === 'EaAdd' || op.expr.kind === 'EaSub') &&
17
- op.expr.base.kind === 'EaName' &&
18
- /^(IX|IY)$/i.test(op.expr.base.name))));
19
- }
20
- function normalizeFixedToken(op) {
21
- switch (op.kind) {
22
- case 'Reg':
23
- return op.name.toUpperCase();
24
- case 'Imm':
25
- return op.expr.kind === 'ImmName' ? op.expr.name.toUpperCase() : undefined;
26
- case 'Ea': {
27
- const name = flattenEaDottedName(op.expr);
28
- return name ? name.toUpperCase() : undefined;
29
- }
30
- default:
31
- return undefined;
32
- }
33
- }
34
- function evalImmNoDiag(expr) {
35
- switch (expr.kind) {
36
- case 'ImmLiteral':
37
- return expr.value;
38
- case 'ImmUnary': {
39
- const value = evalImmNoDiag(expr.expr);
40
- if (value === undefined)
41
- return undefined;
42
- if (expr.op === '-')
43
- return -value;
44
- if (expr.op === '+')
45
- return value;
46
- return undefined;
47
- }
48
- case 'ImmBinary': {
49
- const left = evalImmNoDiag(expr.left);
50
- const right = evalImmNoDiag(expr.right);
51
- if (left === undefined || right === undefined)
52
- return undefined;
53
- if (expr.op === '+')
54
- return left + right;
55
- if (expr.op === '-')
56
- return left - right;
57
- if (expr.op === '*')
58
- return left * right;
59
- return undefined;
60
- }
61
- default:
62
- return undefined;
63
- }
64
- }
65
- const { selectOpOverload } = createOpMatchingHelpers({
66
- reg8: REG8_NAMES,
67
- isIxIyIndexedMem,
68
- flattenEaDottedName,
69
- isEnumName: () => false,
70
- normalizeFixedToken,
71
- conditionOpcodeFromName: (name) => (CONDITION_CODES.has(name.toUpperCase()) ? 0 : undefined),
72
- evalImmNoDiag,
73
- inferMemWidth: () => undefined,
74
- });
75
- function addOpDeclForFile(ctx, file, key, op) {
76
- let fileOps = ctx.localOpsByFile.get(file);
77
- if (!fileOps) {
78
- fileOps = new Map();
79
- ctx.localOpsByFile.set(file, fileOps);
80
- }
81
- const local = fileOps.get(key);
82
- if (local)
83
- local.push(op);
84
- else
85
- fileOps.set(key, [op]);
86
- }
87
- function collectOpDeclsFromItems(items, ctx, sourceUnitFile) {
88
- for (const item of items) {
89
- if (item.kind !== 'OpDecl')
90
- continue;
91
- const op = item;
92
- const key = op.name.toLowerCase();
93
- addOpDeclForFile(ctx, sourceUnitFile, key, op);
94
- if (op.span.file !== sourceUnitFile)
95
- addOpDeclForFile(ctx, op.span.file, key, op);
96
- }
97
- }
98
- function buildOpExpansionContext(program) {
99
- const ctx = {
100
- localOpsByFile: new Map(),
101
- nextSyntheticLabelId: 0,
102
- };
103
- for (const file of program.files) {
104
- collectOpDeclsFromItems(file.items, ctx, file.path);
105
- }
106
- return ctx;
107
- }
108
- function resolveOpCandidates(inst, ctx) {
109
- const lower = inst.head.toLowerCase();
110
- return ctx.localOpsByFile.get(inst.span.file)?.get(lower);
111
- }
112
- export function createInlineOpInstructionStreamExpander(program) {
113
- const ctx = buildOpExpansionContext(program);
114
- function expandInstruction(inst, stack = new Set()) {
115
- if (stack.size >= MAX_OP_EXPANSION_DEPTH)
116
- return [{ kind: 'instruction', instruction: inst }];
117
- const candidates = resolveOpCandidates(inst, ctx);
118
- if (!candidates || candidates.length === 0)
119
- return [{ kind: 'instruction', instruction: inst }];
120
- const selection = selectOpOverload(candidates, inst.operands);
121
- if (selection.kind !== 'selected')
122
- return [{ kind: 'instruction', instruction: inst }];
123
- const opDecl = selection.overload;
124
- const opKey = `${opDecl.name.toLowerCase()}:${opDecl.span.file}:${opDecl.span.start.line}`;
125
- if (stack.has(opKey))
126
- return [{ kind: 'instruction', instruction: inst }];
127
- const nextStack = new Set(stack);
128
- nextStack.add(opKey);
129
- const bindings = new Map();
130
- for (let index = 0; index < opDecl.params.length; index += 1) {
131
- bindings.set(opDecl.params[index].name.toLowerCase(), inst.operands[index]);
132
- }
133
- const { substituteOperandWithOpLabels } = createOpSubstitutionHelpers({
134
- bindings,
135
- env: EMPTY_OP_SUBSTITUTION_ENV,
136
- diagnostics: [],
137
- diagAt: () => { },
138
- cloneImmExpr,
139
- cloneEaExpr,
140
- cloneOperand,
141
- flattenEaDottedName,
142
- });
143
- const out = [];
144
- const expansionId = ctx.nextSyntheticLabelId;
145
- ctx.nextSyntheticLabelId += 1;
146
- const expandedItems = expandInlineOpBodyItems({
147
- opDecl,
148
- allocateLocalLabel: (labelName) => `.__azm_op_${opDecl.name.toLowerCase()}_${expansionId}_${labelName.replace(/^\.+/, '')}`,
149
- substituteOperandWithOpLabels,
150
- });
151
- for (const bodyItem of expandedItems) {
152
- if (bodyItem.kind === 'AsmLabel') {
153
- out.push({
154
- kind: 'label',
155
- label: {
156
- kind: 'AsmLabel',
157
- span: inst.span,
158
- name: bodyItem.name,
159
- },
160
- });
161
- continue;
162
- }
163
- if (bodyItem.kind !== 'AsmInstruction')
164
- continue;
165
- const expanded = {
166
- kind: 'AsmInstruction',
167
- span: inst.span,
168
- head: bodyItem.head,
169
- operands: bodyItem.operands,
170
- };
171
- out.push(...expandInstruction(expanded, nextStack));
172
- }
173
- return out;
174
- }
175
- return { expandInstruction };
176
- }
@@ -1,52 +0,0 @@
1
- import type { AsmOperandNode, EaExprNode, ImmExprNode, OpDeclNode, OpMatcherNode } from '../frontend/ast.js';
2
- type OpMatchingContext = {
3
- /** 8-bit register names for matching. */
4
- reg8: Set<string>;
5
- /** True when operand uses IX/IY indexed memory form. */
6
- isIxIyIndexedMem: (operand: AsmOperandNode) => boolean;
7
- /** Flattens dotted EA; `undefined` if not expressible as dotted. */
8
- flattenEaDottedName: (ea: EaExprNode) => string | undefined;
9
- /** True for declared enum names. */
10
- isEnumName: (name: string) => boolean;
11
- /** Normalizes fixed tokens for overload keys. */
12
- normalizeFixedToken: (operand: AsmOperandNode) => string | undefined;
13
- /** Maps condition name to opcode; `undefined` if unknown. */
14
- conditionOpcodeFromName: (name: string) => number | undefined;
15
- /** Best-effort imm evaluation. */
16
- evalImmNoDiag: (expr: ImmExprNode) => number | undefined;
17
- /** Infers memory operand width in bytes; `undefined` if unknown. */
18
- inferMemWidth: (operand: AsmOperandNode) => number | undefined;
19
- };
20
- export type OpOverloadSelection = {
21
- kind: 'arity_mismatch';
22
- /** Candidate overloads. */
23
- overloads: OpDeclNode[];
24
- /** Rendered arity signatures for diagnostics. */
25
- signatures: string[];
26
- } | {
27
- kind: 'no_match';
28
- /** Candidate overloads. */
29
- overloads: OpDeclNode[];
30
- /** Per-operand mismatch notes. */
31
- mismatchDetails: string[];
32
- } | {
33
- kind: 'ambiguous';
34
- /** Competing overloads. */
35
- overloads: OpDeclNode[];
36
- /** Rendered definitions for diagnostics. */
37
- definitions: string[];
38
- } | {
39
- kind: 'selected';
40
- /** Chosen overload. */
41
- overload: OpDeclNode;
42
- };
43
- export declare function createOpMatchingHelpers(ctx: OpMatchingContext): {
44
- matcherMatchesOperand: (matcher: OpMatcherNode, operand: AsmOperandNode) => boolean;
45
- selectMostSpecificOpOverload: (candidates: OpDeclNode[], operands: AsmOperandNode[]) => OpDeclNode | undefined;
46
- selectOpOverload: (overloads: OpDeclNode[], operands: AsmOperandNode[]) => OpOverloadSelection;
47
- formatAsmOperandForOpDiag: (operand: AsmOperandNode) => string;
48
- formatOpSignature: (opDecl: OpDeclNode) => string;
49
- formatOpDefinitionForDiag: (opDecl: OpDeclNode) => string;
50
- firstOpOverloadMismatchReason: (opDecl: OpDeclNode, operands: AsmOperandNode[]) => string | undefined;
51
- };
52
- export {};
@@ -1,355 +0,0 @@
1
- import { formatEaExpr } from './traceFormat.js';
2
- const fitsImm8 = (value) => value >= -0x80 && value <= 0xff;
3
- const fitsImm16 = (value) => value >= -0x8000 && value <= 0xffff;
4
- export function createOpMatchingHelpers(ctx) {
5
- const enumImmExprFromOperand = (op) => {
6
- switch (op.kind) {
7
- case 'Imm':
8
- return op.expr;
9
- case 'Reg':
10
- return { kind: 'ImmName', span: op.span, name: op.name };
11
- case 'Ea': {
12
- const name = ctx.flattenEaDottedName(op.expr);
13
- if (!name || !ctx.isEnumName(name))
14
- return undefined;
15
- return { kind: 'ImmName', span: op.span, name };
16
- }
17
- default:
18
- return undefined;
19
- }
20
- };
21
- const matcherMatchesOperand = (matcher, operand) => {
22
- switch (matcher.kind) {
23
- case 'MatcherReg8':
24
- return operand.kind === 'Reg' && ctx.reg8.has(operand.name.toUpperCase());
25
- case 'MatcherReg16':
26
- return (operand.kind === 'Reg' &&
27
- (operand.name.toUpperCase() === 'BC' ||
28
- operand.name.toUpperCase() === 'DE' ||
29
- operand.name.toUpperCase() === 'HL' ||
30
- operand.name.toUpperCase() === 'SP'));
31
- case 'MatcherIdx16':
32
- return ctx.isIxIyIndexedMem(operand);
33
- case 'MatcherCc': {
34
- const token = ctx.normalizeFixedToken(operand);
35
- return token !== undefined && ctx.conditionOpcodeFromName(token) !== undefined;
36
- }
37
- case 'MatcherImm8': {
38
- const expr = enumImmExprFromOperand(operand);
39
- if (!expr)
40
- return false;
41
- const v = ctx.evalImmNoDiag(expr);
42
- return v !== undefined && fitsImm8(v);
43
- }
44
- case 'MatcherImm16': {
45
- const expr = enumImmExprFromOperand(operand);
46
- if (!expr)
47
- return false;
48
- const v = ctx.evalImmNoDiag(expr);
49
- return v !== undefined && fitsImm16(v);
50
- }
51
- case 'MatcherEa':
52
- return operand.kind === 'Ea';
53
- case 'MatcherMem8': {
54
- if (operand.kind !== 'Mem')
55
- return false;
56
- const width = ctx.inferMemWidth(operand);
57
- return width === undefined ? true : width === 1;
58
- }
59
- case 'MatcherMem16': {
60
- if (operand.kind !== 'Mem')
61
- return false;
62
- const width = ctx.inferMemWidth(operand);
63
- return width === undefined ? true : width === 2;
64
- }
65
- case 'MatcherFixed': {
66
- const got = ctx.normalizeFixedToken(operand);
67
- return got !== undefined && got === matcher.token.toUpperCase();
68
- }
69
- default:
70
- return false;
71
- }
72
- };
73
- const fixedTokenBeatsClassMatcher = (fixed, other, operand) => {
74
- const fixedToken = fixed.token.toUpperCase();
75
- switch (other.kind) {
76
- case 'MatcherReg8':
77
- return (operand.kind === 'Reg' &&
78
- operand.name.toUpperCase() === fixedToken &&
79
- ctx.reg8.has(fixedToken));
80
- case 'MatcherReg16':
81
- return (operand.kind === 'Reg' &&
82
- operand.name.toUpperCase() === fixedToken &&
83
- (fixedToken === 'BC' || fixedToken === 'DE' || fixedToken === 'HL' || fixedToken === 'SP'));
84
- case 'MatcherCc':
85
- return ctx.conditionOpcodeFromName(fixedToken) !== undefined;
86
- default:
87
- return false;
88
- }
89
- };
90
- const compareMatcherSpecificity = (matcherX, matcherY, operand) => {
91
- if (matcherX.kind === matcherY.kind)
92
- return 'equal';
93
- if (matcherX.kind === 'MatcherFixed' &&
94
- fixedTokenBeatsClassMatcher(matcherX, matcherY, operand)) {
95
- return 'x_more_specific';
96
- }
97
- if (matcherY.kind === 'MatcherFixed' &&
98
- fixedTokenBeatsClassMatcher(matcherY, matcherX, operand)) {
99
- return 'y_more_specific';
100
- }
101
- if (matcherX.kind === 'MatcherImm8' && matcherY.kind === 'MatcherImm16') {
102
- const expr = enumImmExprFromOperand(operand);
103
- if (!expr)
104
- return 'equal';
105
- const value = ctx.evalImmNoDiag(expr);
106
- return value !== undefined && fitsImm8(value) ? 'x_more_specific' : 'equal';
107
- }
108
- if (matcherX.kind === 'MatcherImm16' && matcherY.kind === 'MatcherImm8') {
109
- const expr = enumImmExprFromOperand(operand);
110
- if (!expr)
111
- return 'equal';
112
- const value = ctx.evalImmNoDiag(expr);
113
- return value !== undefined && fitsImm8(value) ? 'y_more_specific' : 'equal';
114
- }
115
- if ((matcherX.kind === 'MatcherMem8' || matcherX.kind === 'MatcherMem16') &&
116
- matcherY.kind === 'MatcherEa' &&
117
- operand.kind === 'Mem') {
118
- return 'x_more_specific';
119
- }
120
- if (matcherX.kind === 'MatcherEa' &&
121
- (matcherY.kind === 'MatcherMem8' || matcherY.kind === 'MatcherMem16') &&
122
- operand.kind === 'Mem') {
123
- return 'y_more_specific';
124
- }
125
- return 'equal';
126
- };
127
- const compareOpOverloadSpecificity = (overloadX, overloadY, operands) => {
128
- let xBetter = 0;
129
- let yBetter = 0;
130
- for (let i = 0; i < operands.length; i++) {
131
- const xMatcher = overloadX.params[i].matcher;
132
- const yMatcher = overloadY.params[i].matcher;
133
- const cmp = compareMatcherSpecificity(xMatcher, yMatcher, operands[i]);
134
- if (cmp === 'x_more_specific')
135
- xBetter++;
136
- if (cmp === 'y_more_specific')
137
- yBetter++;
138
- }
139
- if (xBetter > 0 && yBetter === 0)
140
- return 'x_wins';
141
- if (yBetter > 0 && xBetter === 0)
142
- return 'y_wins';
143
- if (xBetter === 0 && yBetter === 0)
144
- return 'equal';
145
- return 'incomparable';
146
- };
147
- const selectMostSpecificOpOverload = (candidates, operands) => {
148
- if (candidates.length === 0)
149
- return undefined;
150
- if (candidates.length === 1)
151
- return candidates[0];
152
- for (let i = 0; i < candidates.length; i++) {
153
- const candidate = candidates[i];
154
- let beatsAll = true;
155
- for (let j = 0; j < candidates.length; j++) {
156
- if (i === j)
157
- continue;
158
- const cmp = compareOpOverloadSpecificity(candidate, candidates[j], operands);
159
- if (cmp !== 'x_wins') {
160
- beatsAll = false;
161
- break;
162
- }
163
- }
164
- if (beatsAll)
165
- return candidate;
166
- }
167
- return undefined;
168
- };
169
- const formatOpMatcher = (matcher) => {
170
- switch (matcher.kind) {
171
- case 'MatcherReg8':
172
- return 'reg8';
173
- case 'MatcherReg16':
174
- return 'reg16';
175
- case 'MatcherIdx16':
176
- return 'idx16';
177
- case 'MatcherCc':
178
- return 'cc';
179
- case 'MatcherImm8':
180
- return 'imm8';
181
- case 'MatcherImm16':
182
- return 'imm16';
183
- case 'MatcherEa':
184
- return 'ea';
185
- case 'MatcherMem8':
186
- return 'mem8';
187
- case 'MatcherMem16':
188
- return 'mem16';
189
- case 'MatcherFixed':
190
- return matcher.token;
191
- default:
192
- return 'unknown';
193
- }
194
- };
195
- const formatImmExprForOpDiag = (expr) => {
196
- switch (expr.kind) {
197
- case 'ImmLiteral':
198
- return String(expr.value);
199
- case 'ImmName':
200
- return expr.name;
201
- case 'ImmSizeof':
202
- return 'sizeof(...)';
203
- case 'ImmOffset':
204
- return 'offset(...)';
205
- case 'ImmUnary':
206
- return `${expr.op}${formatImmExprForOpDiag(expr.expr)}`;
207
- case 'ImmBinary':
208
- return `${formatImmExprForOpDiag(expr.left)} ${expr.op} ${formatImmExprForOpDiag(expr.right)}`;
209
- default:
210
- return 'imm';
211
- }
212
- };
213
- const formatAsmOperandForOpDiag = (operand) => {
214
- switch (operand.kind) {
215
- case 'Reg':
216
- return operand.name;
217
- case 'Imm':
218
- return formatImmExprForOpDiag(operand.expr);
219
- case 'Ea':
220
- return formatEaExpr(operand.expr, {
221
- formatImmExpr: formatImmExprForOpDiag,
222
- wrapImmEa: true,
223
- });
224
- case 'Mem':
225
- return `(${formatEaExpr(operand.expr, { formatImmExpr: formatImmExprForOpDiag, wrapImmEa: true })})`;
226
- case 'PortC':
227
- return '(C)';
228
- case 'PortImm8':
229
- return `(${formatImmExprForOpDiag(operand.expr)})`;
230
- default:
231
- return '?';
232
- }
233
- };
234
- const formatOpSignature = (opDecl) => {
235
- const params = opDecl.params.map((p) => `${p.name} ${formatOpMatcher(p.matcher)}`).join(', ');
236
- return `${opDecl.name}(${params})`;
237
- };
238
- const formatOpDefinitionForDiag = (opDecl) => `${formatOpSignature(opDecl)} (${opDecl.span.file}:${opDecl.span.start.line})`;
239
- const matcherMismatchReason = (matcher, operand) => {
240
- const got = formatAsmOperandForOpDiag(operand);
241
- switch (matcher.kind) {
242
- case 'MatcherReg8':
243
- return `expects reg8, got ${got}`;
244
- case 'MatcherReg16':
245
- return `expects reg16, got ${got}`;
246
- case 'MatcherIdx16':
247
- return `expects IX/IY indexed memory operand, got ${got}`;
248
- case 'MatcherCc':
249
- return 'expects condition token NZ/Z/NC/C/PO/PE/P/M, got ' + got;
250
- case 'MatcherImm8': {
251
- const expr = enumImmExprFromOperand(operand);
252
- if (!expr)
253
- return `expects imm8, got ${got}`;
254
- const value = ctx.evalImmNoDiag(expr);
255
- if (value === undefined)
256
- return `expects imm8, got ${got}`;
257
- if (!fitsImm8(value))
258
- return `expects imm8 (-128..255), got ${got}`;
259
- return `expects imm8, got ${got}`;
260
- }
261
- case 'MatcherImm16': {
262
- const expr = enumImmExprFromOperand(operand);
263
- if (!expr)
264
- return `expects imm16, got ${got}`;
265
- const value = ctx.evalImmNoDiag(expr);
266
- if (value === undefined)
267
- return `expects imm16, got ${got}`;
268
- if (!fitsImm16(value))
269
- return `expects imm16 (-32768..65535), got ${got}`;
270
- return `expects imm16, got ${got}`;
271
- }
272
- case 'MatcherEa':
273
- return `expects ea, got ${got}`;
274
- case 'MatcherMem8': {
275
- if (operand.kind !== 'Mem')
276
- return `expects mem8 dereference, got ${got}`;
277
- const width = ctx.inferMemWidth(operand);
278
- if (width !== undefined && width !== 1)
279
- return `expects mem8 dereference, got mem${width * 8}`;
280
- return `expects mem8 dereference, got ${got}`;
281
- }
282
- case 'MatcherMem16': {
283
- if (operand.kind !== 'Mem')
284
- return `expects mem16 dereference, got ${got}`;
285
- const width = ctx.inferMemWidth(operand);
286
- if (width !== undefined && width !== 2)
287
- return `expects mem16 dereference, got mem${width * 8}`;
288
- return `expects mem16 dereference, got ${got}`;
289
- }
290
- case 'MatcherFixed':
291
- return `expects ${matcher.token}, got ${got}`;
292
- default:
293
- return `operand mismatch: expected ${formatOpMatcher(matcher)}, got ${got}`;
294
- }
295
- };
296
- const firstOpOverloadMismatchReason = (opDecl, operands) => {
297
- for (let i = 0; i < opDecl.params.length && i < operands.length; i++) {
298
- const param = opDecl.params[i];
299
- const operand = operands[i];
300
- if (matcherMatchesOperand(param.matcher, operand))
301
- continue;
302
- return `${param.name}: ${matcherMismatchReason(param.matcher, operand)}`;
303
- }
304
- return undefined;
305
- };
306
- const selectOpOverload = (overloads, operands) => {
307
- const arityMatches = overloads.filter((candidate) => candidate.params.length === operands.length);
308
- if (arityMatches.length === 0) {
309
- return {
310
- kind: 'arity_mismatch',
311
- overloads,
312
- signatures: overloads.map((candidate) => formatOpSignature(candidate)),
313
- };
314
- }
315
- const matches = arityMatches.filter((candidate) => {
316
- if (candidate.params.length !== operands.length)
317
- return false;
318
- for (let idx = 0; idx < candidate.params.length; idx++) {
319
- const param = candidate.params[idx];
320
- const arg = operands[idx];
321
- if (!matcherMatchesOperand(param.matcher, arg))
322
- return false;
323
- }
324
- return true;
325
- });
326
- if (matches.length === 0) {
327
- return {
328
- kind: 'no_match',
329
- overloads: arityMatches,
330
- mismatchDetails: arityMatches.map((candidate) => {
331
- const reason = firstOpOverloadMismatchReason(candidate, operands);
332
- return `${formatOpDefinitionForDiag(candidate)}${reason ? ` ; ${reason}` : ''}`;
333
- }),
334
- };
335
- }
336
- const selected = selectMostSpecificOpOverload(matches, operands);
337
- if (!selected) {
338
- return {
339
- kind: 'ambiguous',
340
- overloads: matches,
341
- definitions: matches.map((candidate) => formatOpDefinitionForDiag(candidate)),
342
- };
343
- }
344
- return { kind: 'selected', overload: selected };
345
- };
346
- return {
347
- matcherMatchesOperand,
348
- selectMostSpecificOpOverload,
349
- selectOpOverload,
350
- formatAsmOperandForOpDiag,
351
- formatOpSignature,
352
- formatOpDefinitionForDiag,
353
- firstOpOverloadMismatchReason,
354
- };
355
- }
@@ -1,13 +0,0 @@
1
- import type { AsmOperandNode, ImmExprNode, SourceSpan } from '../frontend/ast.js';
2
- import type { AstCloneCapability, CompileEnvCapability, DottedEaNameCapability, LoweringDiagnosticsCapability } from './capabilities.js';
3
- type OpSubstitutionContext = LoweringDiagnosticsCapability & CompileEnvCapability & AstCloneCapability & DottedEaNameCapability & {
4
- bindings: Map<string, AsmOperandNode>;
5
- };
6
- export declare function createOpSubstitutionHelpers(ctx: OpSubstitutionContext): {
7
- bindingAsImmExpr: (bound: AsmOperandNode | undefined, span: SourceSpan) => ImmExprNode | undefined;
8
- substituteImm: (expr: ImmExprNode) => ImmExprNode;
9
- substituteOperand: (operand: AsmOperandNode) => AsmOperandNode;
10
- substituteImmWithOpLabels: (expr: ImmExprNode, localLabelMap: Map<string, string>) => ImmExprNode;
11
- substituteOperandWithOpLabels: (operand: AsmOperandNode, localLabelMap: Map<string, string>) => AsmOperandNode;
12
- };
13
- export {};