@jhlagado/azm 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +110 -78
  2. package/dist/src/api-compile.d.ts +0 -2
  3. package/dist/src/api-compile.js +2 -9
  4. package/dist/src/assembly/address-planning.js +21 -1
  5. package/dist/src/assembly/program-emission.js +1 -0
  6. package/dist/src/cli/parse-args.d.ts +0 -1
  7. package/dist/src/cli/parse-args.js +0 -7
  8. package/dist/src/cli/write-artifacts.js +0 -11
  9. package/dist/src/core/compile.js +192 -9
  10. package/dist/src/expansion/op-expansion.js +2 -0
  11. package/dist/src/model/expression.d.ts +4 -0
  12. package/dist/src/model/source-item.d.ts +11 -0
  13. package/dist/src/outputs/index.js +0 -2
  14. package/dist/src/outputs/types.d.ts +3 -16
  15. package/dist/src/outputs/write-asm80.js +206 -5
  16. package/dist/src/register-care/analyze.js +36 -8
  17. package/dist/src/register-care/annotations.js +33 -146
  18. package/dist/src/register-care/fix.d.ts +2 -0
  19. package/dist/src/register-care/fix.js +52 -0
  20. package/dist/src/register-care/instruction-shape.d.ts +11 -0
  21. package/dist/src/register-care/instruction-shape.js +129 -0
  22. package/dist/src/register-care/liveness.js +15 -7
  23. package/dist/src/register-care/profiles.js +4 -0
  24. package/dist/src/register-care/programModel.js +79 -13
  25. package/dist/src/register-care/report.d.ts +2 -1
  26. package/dist/src/register-care/report.js +91 -34
  27. package/dist/src/register-care/routine-summaries.d.ts +6 -0
  28. package/dist/src/register-care/routine-summaries.js +89 -0
  29. package/dist/src/register-care/summaries.d.ts +3 -3
  30. package/dist/src/register-care/summaries.js +42 -75
  31. package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.js +33 -51
  32. package/dist/src/register-care/types.d.ts +6 -1
  33. package/dist/src/semantics/expression-evaluation.d.ts +7 -3
  34. package/dist/src/semantics/expression-evaluation.js +57 -0
  35. package/dist/src/source/strip-line-comment.d.ts +2 -0
  36. package/dist/src/source/strip-line-comment.js +26 -0
  37. package/dist/src/syntax/directive-aliases.js +9 -10
  38. package/dist/src/syntax/parse-diagnostics.d.ts +12 -0
  39. package/dist/src/syntax/parse-diagnostics.js +18 -0
  40. package/dist/src/syntax/parse-expression.js +34 -9
  41. package/dist/src/syntax/parse-line.js +150 -54
  42. package/dist/src/tooling/case-style.js +3 -0
  43. package/docs/reference/cli.md +6 -4
  44. package/docs/reference/tooling-api.md +13 -9
  45. package/package.json +4 -6
  46. package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
  47. package/dist/legacy-root-azm/src/analysis.js +0 -41
  48. package/dist/legacy-root-azm/src/compile.d.ts +0 -10
  49. package/dist/legacy-root-azm/src/compile.js +0 -186
  50. package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
  51. package/dist/legacy-root-azm/src/compileShared.js +0 -7
  52. package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
  53. package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
  54. package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
  55. package/dist/legacy-root-azm/src/formats/index.js +0 -17
  56. package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
  57. package/dist/legacy-root-azm/src/formats/range.js +0 -45
  58. package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
  59. package/dist/legacy-root-azm/src/formats/types.js +0 -1
  60. package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
  61. package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
  62. package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
  63. package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
  64. package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
  65. package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
  66. package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
  67. package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
  68. package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
  69. package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
  70. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
  71. package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
  72. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
  73. package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
  74. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
  75. package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
  76. package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
  77. package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
  78. package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
  79. package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
  80. package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
  81. package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
  82. package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
  83. package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
  84. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
  85. package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
  86. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
  87. package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
  88. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
  89. package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
  90. package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
  91. package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
  92. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
  93. package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
  94. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
  95. package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
  96. package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
  97. package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
  98. package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
  99. package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
  100. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
  101. package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
  102. package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
  103. package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
  104. package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
  105. package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
  106. package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
  107. package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
  108. package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
  109. package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
  110. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
  111. package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
  112. package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
  113. package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
  114. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
  115. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
  116. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
  117. package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
  118. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
  119. package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
  120. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
  121. package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
  122. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
  123. package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
  124. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
  125. package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
  126. package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
  127. package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
  128. package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
  129. package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
  130. package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
  131. package/dist/legacy-root-azm/src/frontend/source.js +0 -58
  132. package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
  133. package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
  134. package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
  135. package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
  136. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
  137. package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
  138. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
  139. package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
  140. package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
  141. package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
  142. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
  143. package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
  144. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
  145. package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
  146. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
  147. package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
  148. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
  149. package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
  150. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
  151. package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
  152. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
  153. package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
  154. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
  155. package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
  156. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
  157. package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
  158. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
  159. package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
  160. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
  161. package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
  162. package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
  163. package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
  164. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
  165. package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
  166. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
  167. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
  168. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
  169. package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
  170. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
  171. package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
  172. package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
  173. package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
  174. package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
  175. package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
  176. package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
  177. package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
  178. package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
  179. package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
  180. package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
  181. package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
  182. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
  183. package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
  184. package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
  185. package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
  186. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
  187. package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
  188. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
  189. package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
  190. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
  191. package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
  192. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
  193. package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
  194. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
  195. package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
  196. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
  197. package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
  198. package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
  199. package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
  200. package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
  201. package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
  202. package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
  203. package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
  204. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
  205. package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
  206. package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
  207. package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
  208. package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
  209. package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
  210. package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
  211. package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
  212. package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
  213. package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
  214. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
  215. package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
  216. package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
  217. package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
  218. package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
  219. package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
  220. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
  221. package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
  222. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
  223. package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
  224. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
  225. package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
  226. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
  227. package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
  228. package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
  229. package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
  230. package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
  231. package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
  232. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
  233. package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
  234. package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
  235. package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
  236. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
  237. package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
  238. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
  239. package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
  240. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
  241. package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
  242. package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
  243. package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
  244. package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
  245. package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
  246. package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
  247. package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
  248. package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
  249. package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
  250. package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
  251. package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
  252. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
  253. package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
  254. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
  255. package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
  256. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
  257. package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
  258. package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
  259. package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
  260. package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
  261. package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
  262. package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
  263. package/dist/legacy-root-azm/src/packageInfo.js +0 -15
  264. package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
  265. package/dist/legacy-root-azm/src/pathCompare.js +0 -26
  266. package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
  267. package/dist/legacy-root-azm/src/pipeline.js +0 -1
  268. package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
  269. package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
  270. package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
  271. package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
  272. package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
  273. package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
  274. package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
  275. package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
  276. package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
  277. package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
  278. package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
  279. package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
  280. package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
  281. package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
  282. package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
  283. package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
  284. package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
  285. package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
  286. package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
  287. package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
  288. package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
  289. package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
  290. package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
  291. package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
  292. package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
  293. package/dist/legacy-root-azm/src/semantics/env.js +0 -432
  294. package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
  295. package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
  296. package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
  297. package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
  298. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
  299. package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
  300. package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
  301. package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
  302. package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
  303. package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
  304. package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
  305. package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
  306. package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
  307. package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
  308. package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
  309. package/dist/legacy-root-azm/src/z80/effects.js +0 -516
  310. package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
  311. package/dist/legacy-root-azm/src/z80/encode.js +0 -412
  312. package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
  313. package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
  314. package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
  315. package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
  316. package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
  317. package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
  318. package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
  319. package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
  320. package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
  321. package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
  322. package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
  323. package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
  324. package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
  325. package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
  326. package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
  327. package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
  328. package/dist/src/outputs/write-listing.d.ts +0 -2
  329. package/dist/src/outputs/write-listing.js +0 -79
  330. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.d.ts +0 -0
  331. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.js +0 -0
  332. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.d.ts +0 -0
  333. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.js +0 -0
  334. /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.d.ts +0 -0
@@ -1,32 +0,0 @@
1
- import { parseDiag as diag } from './parseDiagnostics.js';
2
- import { diagInvalidHeaderLine, formatIdentifierToken } from './parseTopLevelCommon.js';
3
- export function parseOpHeader(options) {
4
- const { header, stmtText, stmtSpan: _stmtSpan, lineNo, diagnostics, sourcePath, expectedHeader, isReservedTopLevelName, parseParams, } = options;
5
- const openParen = header.indexOf('(');
6
- const closeParen = header.lastIndexOf(')');
7
- if (openParen < 0 || closeParen < openParen) {
8
- diagInvalidHeaderLine(diagnostics, sourcePath, 'op header', stmtText, expectedHeader, lineNo);
9
- return undefined;
10
- }
11
- const name = header.slice(0, openParen).trim();
12
- if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {
13
- diag(diagnostics, sourcePath, `Invalid op name ${formatIdentifierToken(name)}: expected <identifier>.`, { line: lineNo, column: 1 });
14
- return undefined;
15
- }
16
- if (isReservedTopLevelName(name)) {
17
- diag(diagnostics, sourcePath, `Invalid op name "${name}": collides with a top-level keyword.`, {
18
- line: lineNo,
19
- column: 1,
20
- });
21
- return undefined;
22
- }
23
- const paramsText = header.slice(openParen + 1, closeParen);
24
- const params = parseParams(paramsText);
25
- if (!params)
26
- return undefined;
27
- return {
28
- name,
29
- params,
30
- trailing: header.slice(closeParen + 1).trimStart(),
31
- };
32
- }
@@ -1,4 +0,0 @@
1
- import type { AsmOperandNode, EaExprNode, SourceSpan } from './ast.js';
2
- import type { Diagnostic } from '../diagnosticTypes.js';
3
- export declare function parseEaExprFromText(filePath: string, exprText: string, exprSpan: SourceSpan, diagnostics: Diagnostic[]): EaExprNode | undefined;
4
- export declare function parseAsmOperand(filePath: string, operandText: string, operandSpan: SourceSpan, diagnostics: Diagnostic[], emitDiagnostics?: boolean, preferDottedImmediate?: boolean): AsmOperandNode | undefined;
@@ -1,290 +0,0 @@
1
- import { DiagnosticIds } from '../diagnosticTypes.js';
2
- import { immLiteral, parseImmExprFromText, parseNumberLiteral, parseTypeExprFromText, } from './parseImm.js';
3
- import { parseDiag as diag, parseDiagAtWithId } from './parseDiagnostics.js';
4
- import { ALL_REGISTER_NAMES, INDEX_MEM_BASE_REGISTERS, INDEX_REG16_NAMES, INDEX_REG8_NAMES, } from './grammarData.js';
5
- function parseBalancedContent(text, open, close) {
6
- if (!text.startsWith(open))
7
- return undefined;
8
- let depth = 0;
9
- for (let i = 0; i < text.length; i++) {
10
- const ch = text[i];
11
- if (ch === open) {
12
- depth++;
13
- continue;
14
- }
15
- if (ch !== close)
16
- continue;
17
- depth--;
18
- if (depth === 0) {
19
- return {
20
- inside: text.slice(1, i),
21
- rest: text.slice(i + 1),
22
- };
23
- }
24
- if (depth < 0)
25
- return undefined;
26
- }
27
- return undefined;
28
- }
29
- function parseBalancedBracketContent(text) {
30
- return parseBalancedContent(text, '[', ']');
31
- }
32
- function parseBalancedParenContent(text) {
33
- return parseBalancedContent(text, '(', ')');
34
- }
35
- function canonicalRegisterToken(token) {
36
- if (/^af'$/i.test(token))
37
- return "AF'";
38
- return token.toUpperCase();
39
- }
40
- function parseEaSegments(filePath, expr, initialRest, exprSpan, diagnostics) {
41
- let rest = initialRest.trimStart();
42
- let sawSegment = false;
43
- while (rest.length > 0) {
44
- if (rest.startsWith('.')) {
45
- const m = /^\.([A-Za-z_][A-Za-z0-9_]*)/.exec(rest);
46
- if (!m)
47
- return undefined;
48
- expr = { kind: 'EaField', span: exprSpan, base: expr, field: m[1] };
49
- rest = rest.slice(m[0].length).trimStart();
50
- sawSegment = true;
51
- continue;
52
- }
53
- if (rest.startsWith('[')) {
54
- const bracket = parseBalancedBracketContent(rest);
55
- if (!bracket)
56
- return undefined;
57
- const index = parseEaIndexFromText(filePath, bracket.inside, exprSpan, diagnostics);
58
- if (!index)
59
- return undefined;
60
- expr = { kind: 'EaIndex', span: exprSpan, base: expr, index };
61
- rest = bracket.rest.trimStart();
62
- sawSegment = true;
63
- continue;
64
- }
65
- break;
66
- }
67
- return { expr, rest, sawSegment };
68
- }
69
- function parseLayoutCastBaseAtom(text, exprSpan) {
70
- const tokenMatch = /^([A-Za-z_][A-Za-z0-9_']*)/.exec(text);
71
- if (!tokenMatch)
72
- return undefined;
73
- const token = tokenMatch[1];
74
- const canonical = canonicalRegisterToken(token);
75
- if (ALL_REGISTER_NAMES.has(canonical))
76
- return undefined;
77
- return {
78
- base: { kind: 'EaName', span: exprSpan, name: token },
79
- rest: text.slice(token.length).trimStart(),
80
- };
81
- }
82
- function parseLayoutCastBase(filePath, text, exprSpan, diagnostics) {
83
- const trimmed = text.trimStart();
84
- if (!trimmed.startsWith('(')) {
85
- return parseLayoutCastBaseAtom(trimmed, exprSpan);
86
- }
87
- const grouped = parseBalancedParenContent(trimmed);
88
- if (!grouped)
89
- return undefined;
90
- const inner = grouped.inside.trim();
91
- const atom = parseLayoutCastBaseAtom(inner, exprSpan);
92
- if (!atom)
93
- return undefined;
94
- const opMatch = /^([+-])\s*(.+)$/.exec(atom.rest);
95
- if (!opMatch)
96
- return undefined;
97
- const offset = parseImmExprFromText(filePath, opMatch[2], exprSpan, diagnostics, false);
98
- if (!offset)
99
- return undefined;
100
- return {
101
- base: opMatch[1] === '+'
102
- ? { kind: 'EaAdd', span: exprSpan, base: atom.base, offset }
103
- : { kind: 'EaSub', span: exprSpan, base: atom.base, offset },
104
- rest: grouped.rest.trimStart(),
105
- };
106
- }
107
- function parseLayoutCastHead(filePath, text, exprSpan, diagnostics) {
108
- if (!text.startsWith('<'))
109
- return undefined;
110
- const closeIndex = text.indexOf('>');
111
- if (closeIndex <= 1)
112
- return undefined;
113
- const typeText = text.slice(1, closeIndex).trim();
114
- const typeExpr = parseTypeExprFromText(typeText, exprSpan);
115
- if (!typeExpr)
116
- return undefined;
117
- const parsedBase = parseLayoutCastBase(filePath, text.slice(closeIndex + 1), exprSpan, diagnostics);
118
- if (!parsedBase)
119
- return undefined;
120
- const segments = parseEaSegments(filePath, { kind: 'EaLayoutCast', span: exprSpan, typeExpr, base: parsedBase.base }, parsedBase.rest, exprSpan, diagnostics);
121
- if (!segments || !segments.sawSegment)
122
- return undefined;
123
- return { expr: segments.expr, rest: segments.rest };
124
- }
125
- function parseEaIndexFromText(filePath, indexText, indexSpan, diagnostics) {
126
- const t = indexText.trim();
127
- if (t.startsWith('(') && t.endsWith(')')) {
128
- const inner = t.slice(1, -1).trim();
129
- const innerCanonical = canonicalRegisterToken(inner);
130
- if (innerCanonical === 'HL')
131
- return { kind: 'IndexMemHL', span: indexSpan };
132
- const ixiy = /^([A-Za-z_][A-Za-z0-9_']*)(?:\s*([+-])\s*(.+))?$/i.exec(inner);
133
- if (ixiy) {
134
- const baseToken = canonicalRegisterToken(ixiy[1]);
135
- if (INDEX_MEM_BASE_REGISTERS.has(baseToken)) {
136
- const base = baseToken;
137
- const dispText = ixiy[2] ? `${ixiy[2]}${ixiy[3]?.trim() ?? ''}` : '';
138
- const disp = dispText.length > 0
139
- ? parseImmExprFromText(filePath, dispText, indexSpan, diagnostics, false)
140
- : undefined;
141
- if (dispText.length > 0 && !disp) {
142
- diag(diagnostics, filePath, `Invalid index expression: ${t}`, {
143
- line: indexSpan.start.line,
144
- column: indexSpan.start.column,
145
- });
146
- return undefined;
147
- }
148
- return { kind: 'IndexMemIxIy', span: indexSpan, base, ...(disp ? { disp } : {}) };
149
- }
150
- }
151
- if (!/[A-Za-z_]/.test(inner)) {
152
- const grouped = parseImmExprFromText(filePath, inner, indexSpan, diagnostics, false);
153
- if (grouped) {
154
- parseDiagAtWithId(diagnostics, indexSpan.file, DiagnosticIds.IndexParenRedundant, 'warning', `Redundant outer parentheses in constant index expression "${t}".`, { line: indexSpan.start.line, column: indexSpan.start.column });
155
- }
156
- }
157
- }
158
- const reg = canonicalRegisterToken(t);
159
- if (INDEX_REG16_NAMES.has(reg))
160
- return { kind: 'IndexReg16', span: indexSpan, reg };
161
- if (INDEX_REG8_NAMES.has(reg))
162
- return { kind: 'IndexReg8', span: indexSpan, reg };
163
- const imm = parseImmExprFromText(filePath, t, indexSpan, diagnostics, false);
164
- if (imm)
165
- return { kind: 'IndexImm', span: indexSpan, value: imm };
166
- const ea = parseEaExprFromText(filePath, t, indexSpan, diagnostics);
167
- if (ea)
168
- return { kind: 'IndexEa', span: indexSpan, expr: ea };
169
- diag(diagnostics, filePath, `Invalid index expression: ${t}`, {
170
- line: indexSpan.start.line,
171
- column: indexSpan.start.column,
172
- });
173
- return undefined;
174
- }
175
- export function parseEaExprFromText(filePath, exprText, exprSpan, diagnostics) {
176
- let rest = exprText.trim();
177
- let expr;
178
- const layoutCast = parseLayoutCastHead(filePath, rest, exprSpan, diagnostics);
179
- if (layoutCast) {
180
- expr = layoutCast.expr;
181
- rest = layoutCast.rest;
182
- }
183
- else {
184
- const baseMatch = /^([A-Za-z_][A-Za-z0-9_]*)/.exec(rest);
185
- if (!baseMatch)
186
- return undefined;
187
- expr = { kind: 'EaName', span: exprSpan, name: baseMatch[1] };
188
- rest = rest.slice(baseMatch[0].length).trimStart();
189
- const segments = parseEaSegments(filePath, expr, rest, exprSpan, diagnostics);
190
- if (!segments)
191
- return undefined;
192
- expr = segments.expr;
193
- rest = segments.rest;
194
- }
195
- if (rest.length > 0) {
196
- const m = /^([+-])\s*(.+)$/.exec(rest);
197
- if (!m)
198
- return undefined;
199
- const off = parseImmExprFromText(filePath, m[2], exprSpan, diagnostics);
200
- if (!off)
201
- return undefined;
202
- expr =
203
- m[1] === '+'
204
- ? { kind: 'EaAdd', span: exprSpan, base: expr, offset: off }
205
- : { kind: 'EaSub', span: exprSpan, base: expr, offset: off };
206
- rest = '';
207
- }
208
- return rest.length === 0 ? expr : undefined;
209
- }
210
- export function parseAsmOperand(filePath, operandText, operandSpan, diagnostics, emitDiagnostics = true, preferDottedImmediate = false) {
211
- const t = operandText.trim();
212
- if (t.length === 0)
213
- return undefined;
214
- const canonicalRegister = canonicalRegisterToken(t);
215
- if (ALL_REGISTER_NAMES.has(canonicalRegister)) {
216
- return { kind: 'Reg', span: operandSpan, name: canonicalRegister };
217
- }
218
- const n = parseNumberLiteral(t);
219
- if (n !== undefined) {
220
- return { kind: 'Imm', span: operandSpan, expr: immLiteral(filePath, operandSpan, n) };
221
- }
222
- if (t.startsWith('(') && t.endsWith(')')) {
223
- const inner = t.slice(1, -1).trim();
224
- // Z80 register-indirect memory `(hl)` / `(bc)` / `(de)` — not `EaName` for a symbol
225
- // spelled "hl" (see #1356). Aligns with `parseEaIndexFromText` treating `(hl)` as `IndexMemHL`.
226
- const registerMemIndirect = /^(hl|bc|de)$/i.exec(inner);
227
- if (registerMemIndirect) {
228
- const name = canonicalRegisterToken(registerMemIndirect[1]);
229
- return {
230
- kind: 'Mem',
231
- span: operandSpan,
232
- expr: { kind: 'EaName', span: operandSpan, name },
233
- };
234
- }
235
- if (/^(ix|iy)\s*\[/i.test(inner)) {
236
- if (emitDiagnostics) {
237
- diag(diagnostics, filePath, `Indexed memory operands use (ix+disp)/(iy+disp), not ${inner}.`, {
238
- line: operandSpan.start.line,
239
- column: operandSpan.start.column,
240
- });
241
- }
242
- return undefined;
243
- }
244
- const indexedMemIndirect = /^[A-Za-z_][A-Za-z0-9_']*\s*[+-]/.test(inner);
245
- if (preferDottedImmediate && inner.includes('.') && !indexedMemIndirect) {
246
- const imm = parseImmExprFromText(filePath, inner, operandSpan, diagnostics, false);
247
- if (imm) {
248
- return {
249
- kind: 'Mem',
250
- span: operandSpan,
251
- expr: { kind: 'EaImm', span: operandSpan, expr: imm },
252
- };
253
- }
254
- }
255
- const ea = parseEaExprFromText(filePath, inner, operandSpan, diagnostics);
256
- if (ea)
257
- return { kind: 'Mem', span: operandSpan, expr: ea };
258
- const imm = parseImmExprFromText(filePath, inner, operandSpan, diagnostics, emitDiagnostics);
259
- if (imm) {
260
- return {
261
- kind: 'Mem',
262
- span: operandSpan,
263
- expr: { kind: 'EaImm', span: operandSpan, expr: imm },
264
- };
265
- }
266
- }
267
- if (preferDottedImmediate && t.includes('.')) {
268
- const expr = parseImmExprFromText(filePath, t, operandSpan, diagnostics, false);
269
- if (expr)
270
- return { kind: 'Imm', span: operandSpan, expr };
271
- }
272
- if (t.includes('.') || t.includes('[')) {
273
- const ea = parseEaExprFromText(filePath, t, operandSpan, diagnostics);
274
- if (ea)
275
- return { kind: 'Ea', span: operandSpan, expr: ea };
276
- }
277
- const expr = parseImmExprFromText(filePath, t, operandSpan, diagnostics, emitDiagnostics);
278
- if (expr) {
279
- return { kind: 'Imm', span: operandSpan, expr };
280
- }
281
- if (t.startsWith("'"))
282
- return undefined;
283
- if (emitDiagnostics) {
284
- diag(diagnostics, filePath, `Unsupported operand: ${t}`, {
285
- line: operandSpan.start.line,
286
- column: operandSpan.start.column,
287
- });
288
- }
289
- return undefined;
290
- }
@@ -1,6 +0,0 @@
1
- import type { OpParamNode, SourceSpan } from './ast.js';
2
- import type { Diagnostic } from '../diagnosticTypes.js';
3
- export type ParseParamsContext = {
4
- isReservedTopLevelName: (name: string) => boolean;
5
- };
6
- export declare function parseOpParamsFromText(filePath: string, paramsText: string, paramsSpan: SourceSpan, diagnostics: Diagnostic[], ctx: ParseParamsContext): OpParamNode[] | undefined;
@@ -1,62 +0,0 @@
1
- import { parseDiag as diag } from './parseDiagnostics.js';
2
- import { MATCHER_KIND_BY_TYPE, MATCHER_TYPES } from './grammarData.js';
3
- function parseOpMatcherFromText(matcherText, matcherSpan) {
4
- const t = matcherText.trim();
5
- const lower = t.toLowerCase();
6
- if (!MATCHER_TYPES.has(lower))
7
- return { kind: 'MatcherFixed', span: matcherSpan, token: t };
8
- return {
9
- kind: MATCHER_KIND_BY_TYPE[lower],
10
- span: matcherSpan,
11
- };
12
- }
13
- export function parseOpParamsFromText(filePath, paramsText, paramsSpan, diagnostics, ctx) {
14
- const trimmed = paramsText.trim();
15
- if (trimmed.length === 0)
16
- return [];
17
- const parts = trimmed.split(',').map((p) => p.trim());
18
- if (parts.some((p) => p.length === 0)) {
19
- diag(diagnostics, filePath, `Invalid op parameter list: trailing or empty entries are not permitted.`, {
20
- line: paramsSpan.start.line,
21
- column: paramsSpan.start.column,
22
- });
23
- return undefined;
24
- }
25
- const out = [];
26
- const seen = new Set();
27
- for (const part of parts) {
28
- const m = /^([A-Za-z_][A-Za-z0-9_]*)\s+(.+)$/.exec(part);
29
- if (!m) {
30
- diag(diagnostics, filePath, `Invalid op parameter declaration: expected <name> <matcher>`, {
31
- line: paramsSpan.start.line,
32
- column: paramsSpan.start.column,
33
- });
34
- return undefined;
35
- }
36
- const name = m[1];
37
- if (ctx.isReservedTopLevelName(name)) {
38
- diag(diagnostics, filePath, `Invalid op parameter name "${name}": collides with a top-level keyword.`, {
39
- line: paramsSpan.start.line,
40
- column: paramsSpan.start.column,
41
- });
42
- return undefined;
43
- }
44
- const lower = name.toLowerCase();
45
- if (seen.has(lower)) {
46
- diag(diagnostics, filePath, `Duplicate op parameter name "${name}".`, {
47
- line: paramsSpan.start.line,
48
- column: paramsSpan.start.column,
49
- });
50
- return undefined;
51
- }
52
- seen.add(lower);
53
- const matcherText = m[2].trim();
54
- out.push({
55
- kind: 'OpParam',
56
- span: paramsSpan,
57
- name,
58
- matcher: parseOpMatcherFromText(matcherText, paramsSpan),
59
- });
60
- }
61
- return out;
62
- }
@@ -1,12 +0,0 @@
1
- import type { Diagnostic } from '../diagnosticTypes.js';
2
- export declare function recoverUnsupportedParserLine(args: {
3
- index: number;
4
- scope: 'source';
5
- text: string;
6
- rest: string;
7
- lineNo: number;
8
- filePath: string;
9
- diagnostics: Diagnostic[];
10
- }): {
11
- nextIndex: number;
12
- };
@@ -1,17 +0,0 @@
1
- import { diagInvalidHeaderLine, malformedTopLevelHeaderExpectations, } from './parseTopLevelCommon.js';
2
- import { parseDiag as diag } from './parseDiagnostics.js';
3
- export function recoverUnsupportedParserLine(args) {
4
- const { index, text, rest, lineNo, filePath, diagnostics } = args;
5
- const hasTopKeyword = (kw) => new RegExp(`^${kw}\\b`, 'i').test(rest);
6
- for (const expectation of malformedTopLevelHeaderExpectations) {
7
- if (hasTopKeyword(expectation.keyword)) {
8
- diagInvalidHeaderLine(diagnostics, filePath, expectation.kind, text, expectation.expected, lineNo);
9
- return { nextIndex: index + 1 };
10
- }
11
- }
12
- diag(diagnostics, filePath, `Unsupported top-level construct: ${text}`, {
13
- line: lineNo,
14
- column: 1,
15
- });
16
- return { nextIndex: index + 1 };
17
- }
@@ -1,2 +0,0 @@
1
- export declare function isReservedTopLevelDeclName(name: string): boolean;
2
- export declare function stripLineComment(line: string): string;
@@ -1,8 +0,0 @@
1
- import { TOP_LEVEL_KEYWORDS } from './grammarData.js';
2
- export function isReservedTopLevelDeclName(name) {
3
- return TOP_LEVEL_KEYWORDS.has(name.toLowerCase());
4
- }
5
- export function stripLineComment(line) {
6
- const semi = line.indexOf(';');
7
- return semi >= 0 ? line.slice(0, semi) : line;
8
- }
@@ -1 +0,0 @@
1
- export declare function looksLikeRawDataDirectiveStart(text: string): boolean;
@@ -1,3 +0,0 @@
1
- export function looksLikeRawDataDirectiveStart(text) {
2
- return /^(db|dw|ds)\b/i.test(text) || /^[A-Za-z_][A-Za-z0-9_]*\s*:\s*(db|dw|ds)\b/i.test(text);
3
- }
@@ -1,7 +0,0 @@
1
- import type { Diagnostic } from '../diagnosticTypes.js';
2
- import type { AsmRawDataNode, SourceSpan } from './ast.js';
3
- export declare function parseRawDataSizeOperands(sizeText: string, lineNo: number, lineSpan: SourceSpan, filePath: string, diagnostics: Diagnostic[]): AsmRawDataNode | undefined;
4
- /**
5
- * Parses a `db`/`dw`/`ds` line with no leading label (continuation bytes after a labeled block).
6
- */
7
- export declare function parseBareRawDataDirective(directiveText: string, lineNo: number, lineSpan: SourceSpan, filePath: string, diagnostics: Diagnostic[]): AsmRawDataNode | undefined;
@@ -1,142 +0,0 @@
1
- import { parseImmExprFromText, parseTypeExprFromText } from './parseImm.js';
2
- import { parseDiag as diag } from './parseDiagnostics.js';
3
- function splitTopLevelComma(text) {
4
- const parts = [];
5
- let start = 0;
6
- let parenDepth = 0;
7
- let bracketDepth = 0;
8
- let braceDepth = 0;
9
- let inChar = false;
10
- let escaped = false;
11
- for (let i = 0; i < text.length; i++) {
12
- const ch = text[i];
13
- if (inChar) {
14
- if (escaped)
15
- escaped = false;
16
- else if (ch === '\\')
17
- escaped = true;
18
- else if (ch === "'")
19
- inChar = false;
20
- continue;
21
- }
22
- if (ch === "'") {
23
- inChar = true;
24
- continue;
25
- }
26
- if (ch === '(') {
27
- parenDepth++;
28
- continue;
29
- }
30
- if (ch === ')') {
31
- if (parenDepth > 0)
32
- parenDepth--;
33
- continue;
34
- }
35
- if (ch === '[') {
36
- bracketDepth++;
37
- continue;
38
- }
39
- if (ch === ']') {
40
- if (bracketDepth > 0)
41
- bracketDepth--;
42
- continue;
43
- }
44
- if (ch === '{') {
45
- braceDepth++;
46
- continue;
47
- }
48
- if (ch === '}') {
49
- if (braceDepth > 0)
50
- braceDepth--;
51
- continue;
52
- }
53
- if (ch === ',' && parenDepth === 0 && bracketDepth === 0 && braceDepth === 0) {
54
- parts.push(text.slice(start, i));
55
- start = i + 1;
56
- }
57
- }
58
- parts.push(text.slice(start));
59
- return parts;
60
- }
61
- function parseRawDataValues(directive, valuesText, lineNo, lineSpan, filePath, diagnostics) {
62
- const parts = splitTopLevelComma(valuesText).map((part) => part.trim());
63
- if (parts.length === 0 || parts.every((part) => part.length === 0)) {
64
- diag(diagnostics, filePath, `"${directive}" expects one or more imm expressions`, {
65
- line: lineNo,
66
- column: 1,
67
- });
68
- return undefined;
69
- }
70
- const values = [];
71
- for (const part of parts) {
72
- if (part.length === 0) {
73
- diag(diagnostics, filePath, `"${directive}" expects one or more imm expressions`, {
74
- line: lineNo,
75
- column: 1,
76
- });
77
- return undefined;
78
- }
79
- const expr = parseImmExprFromText(filePath, part, lineSpan, diagnostics);
80
- if (!expr)
81
- return undefined;
82
- values.push(expr);
83
- }
84
- return { kind: 'AsmRawData', span: lineSpan, name: '', directive, values, valuesText };
85
- }
86
- function parseRawDataSizeExpr(sizeText, lineSpan, filePath, diagnostics) {
87
- const imm = parseImmExprFromText(filePath, sizeText, lineSpan, diagnostics, false);
88
- if (imm)
89
- return imm;
90
- if (/\[[^\]]+\]/.test(sizeText) || /^(?:byte|word|addr)$/i.test(sizeText.trim())) {
91
- const typeExpr = parseTypeExprFromText(sizeText, lineSpan);
92
- if (typeExpr)
93
- return { kind: 'ImmSizeof', span: lineSpan, typeExpr };
94
- }
95
- return parseImmExprFromText(filePath, sizeText, lineSpan, diagnostics);
96
- }
97
- export function parseRawDataSizeOperands(sizeText, lineNo, lineSpan, filePath, diagnostics) {
98
- const parts = splitTopLevelComma(sizeText).map((part) => part.trim());
99
- if (parts.length < 1 || parts.length > 2 || parts[0].length === 0) {
100
- diag(diagnostics, filePath, '"ds" expects a size and optional fill value', {
101
- line: lineNo,
102
- column: 1,
103
- });
104
- return undefined;
105
- }
106
- const size = parseRawDataSizeExpr(parts[0], lineSpan, filePath, diagnostics);
107
- if (!size)
108
- return undefined;
109
- const fill = parts.length === 2 && parts[1].length > 0
110
- ? parseImmExprFromText(filePath, parts[1], lineSpan, diagnostics)
111
- : undefined;
112
- if (parts.length === 2 && !fill)
113
- return undefined;
114
- return {
115
- kind: 'AsmRawData',
116
- span: lineSpan,
117
- name: '',
118
- directive: 'ds',
119
- size,
120
- ...(fill ? { fill } : {}),
121
- valuesText: sizeText,
122
- };
123
- }
124
- /**
125
- * Parses a `db`/`dw`/`ds` line with no leading label (continuation bytes after a labeled block).
126
- */
127
- export function parseBareRawDataDirective(directiveText, lineNo, lineSpan, filePath, diagnostics) {
128
- return parseNamedRawDataDirective('', directiveText, lineNo, lineSpan, filePath, diagnostics);
129
- }
130
- function parseNamedRawDataDirective(name, directiveText, lineNo, lineSpan, filePath, diagnostics) {
131
- const match = /^(db|dw|ds)\b(.*)$/i.exec(directiveText.trim());
132
- if (!match)
133
- return undefined;
134
- const directive = match[1].toLowerCase();
135
- const payload = match[2].trim();
136
- const parsed = directive === 'ds'
137
- ? parseRawDataSizeOperands(payload, lineNo, lineSpan, filePath, diagnostics)
138
- : parseRawDataValues(directive, payload, lineNo, lineSpan, filePath, diagnostics);
139
- if (!parsed)
140
- return undefined;
141
- return { ...parsed, name, span: lineSpan };
142
- }
@@ -1,34 +0,0 @@
1
- import type { RecordFieldNode } from './ast.js';
2
- import type { Diagnostic } from '../diagnosticTypes.js';
3
- import type { SourceFile } from './source.js';
4
- export type RecordFieldLine = {
5
- raw: string;
6
- startOffset: number;
7
- endOffset: number;
8
- lineNo: number;
9
- filePath: string;
10
- };
11
- type RecordFieldValidationContext = {
12
- file: SourceFile;
13
- diagnostics: Diagnostic[];
14
- sourcePath: string;
15
- isReservedTopLevelName: (name: string) => boolean;
16
- };
17
- type RecordFieldBlockContext = RecordFieldValidationContext & {
18
- lineCount: number;
19
- getRawLine: (lineIndex: number) => RecordFieldLine;
20
- };
21
- type ParsedFieldBlock = {
22
- fields: RecordFieldNode[];
23
- nextIndex: number;
24
- endOffset: number;
25
- };
26
- export declare function parseRecordFieldBlock(params: {
27
- declarationKind: 'type' | 'union';
28
- declarationName: string;
29
- fieldKind: 'record' | 'union';
30
- declarationLineNo: number;
31
- startIndex: number;
32
- ctx: RecordFieldBlockContext;
33
- }): ParsedFieldBlock;
34
- export {};