@jhlagado/azm 0.1.1 → 0.2.0
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.
- package/README.md +9 -1
- package/dist/{src → legacy-root-azm/src}/formats/index.d.ts +1 -1
- package/dist/{src → legacy-root-azm/src}/formats/index.js +1 -1
- package/dist/{src → legacy-root-azm/src}/formats/types.d.ts +67 -7
- package/dist/{src → legacy-root-azm/src}/formats/writeHex.d.ts +0 -1
- package/dist/{src → legacy-root-azm/src}/formats/writeHex.js +0 -1
- package/dist/{src → legacy-root-azm/src}/pipeline.d.ts +3 -5
- package/dist/legacy-root-azm/src/z80/effects.d.ts +3 -0
- package/dist/legacy-root-azm/src/z80/effects.js +516 -0
- package/dist/legacy-root-azm/src/z80/encode.d.ts +10 -0
- package/dist/legacy-root-azm/src/z80/encode.js +412 -0
- package/dist/src/api-compile.d.ts +49 -8
- package/dist/src/api-compile.js +313 -3
- package/dist/src/api-tooling.d.ts +7 -25
- package/dist/src/api-tooling.js +3 -21
- package/dist/src/assembly/address-planning.d.ts +19 -0
- package/dist/src/assembly/address-planning.js +266 -0
- package/dist/src/assembly/assemble-program.d.ts +13 -0
- package/dist/src/assembly/assemble-program.js +34 -0
- package/dist/src/assembly/fixup-emission.d.ts +10 -0
- package/dist/src/assembly/fixup-emission.js +247 -0
- package/dist/src/assembly/placement.d.ts +26 -0
- package/dist/src/assembly/placement.js +79 -0
- package/dist/src/assembly/program-emission.d.ts +13 -0
- package/dist/src/assembly/program-emission.js +267 -0
- package/dist/src/cli/parse-args.d.ts +29 -0
- package/dist/src/cli/parse-args.js +372 -0
- package/dist/src/cli/run.d.ts +2 -0
- package/dist/src/cli/run.js +35 -0
- package/dist/src/cli/write-artifacts.d.ts +21 -0
- package/dist/src/cli/write-artifacts.js +175 -0
- package/dist/src/cli.d.ts +1 -30
- package/dist/src/cli.js +20 -524
- package/dist/src/core/compile-artifacts.d.ts +26 -0
- package/dist/src/core/compile-artifacts.js +17 -0
- package/dist/src/core/compile.d.ts +26 -0
- package/dist/src/core/compile.js +164 -0
- package/dist/src/diagnostics/format.d.ts +4 -0
- package/dist/src/diagnostics/format.js +9 -0
- package/dist/src/expansion/op-expansion.d.ts +96 -0
- package/dist/src/expansion/op-expansion.js +912 -0
- package/dist/src/index.d.ts +14 -3
- package/dist/src/index.js +7 -2
- package/dist/src/model/diagnostic.d.ts +50 -0
- package/dist/src/model/diagnostic.js +29 -0
- package/dist/src/model/expression.d.ts +51 -0
- package/dist/src/model/expression.js +1 -0
- package/dist/src/model/fixup.d.ts +18 -0
- package/dist/src/model/fixup.js +1 -0
- package/dist/src/model/source-item.d.ts +81 -0
- package/dist/src/model/source-item.js +1 -0
- package/dist/src/model/symbol.d.ts +1 -0
- package/dist/src/model/symbol.js +1 -0
- package/dist/src/node/source-host.d.ts +19 -0
- package/dist/src/node/source-host.js +146 -0
- package/dist/src/outputs/hex.d.ts +1 -0
- package/dist/src/outputs/hex.js +75 -0
- package/dist/src/outputs/index.d.ts +3 -0
- package/dist/src/outputs/index.js +13 -0
- package/dist/src/outputs/range.d.ts +3 -0
- package/dist/src/outputs/range.js +31 -0
- package/dist/src/outputs/types.d.ts +182 -0
- package/dist/src/outputs/types.js +1 -0
- package/dist/src/outputs/write-asm80.d.ts +7 -0
- package/dist/src/outputs/write-asm80.js +549 -0
- package/dist/src/outputs/write-bin.d.ts +2 -0
- package/dist/src/outputs/write-bin.js +27 -0
- package/dist/src/outputs/write-d8.d.ts +2 -0
- package/dist/src/outputs/write-d8.js +257 -0
- package/dist/src/outputs/write-hex.d.ts +2 -0
- package/dist/src/outputs/write-hex.js +53 -0
- package/dist/src/outputs/write-listing.d.ts +2 -0
- package/dist/src/outputs/write-listing.js +79 -0
- package/dist/src/register-care/accept-output.d.ts +2 -0
- package/dist/src/register-care/accept-output.js +35 -0
- package/dist/src/register-care/analyze.d.ts +26 -0
- package/dist/src/register-care/analyze.js +87 -0
- package/dist/src/register-care/annotations.d.ts +8 -0
- package/dist/src/register-care/annotations.js +154 -0
- package/dist/src/register-care/boundaryHints.d.ts +2 -0
- package/dist/src/register-care/boundaryHints.js +11 -0
- package/dist/src/register-care/carriers.d.ts +2 -0
- package/dist/src/register-care/carriers.js +78 -0
- package/dist/src/register-care/controlFlow.d.ts +5 -0
- package/dist/src/register-care/controlFlow.js +38 -0
- package/dist/src/register-care/fix.d.ts +9 -0
- package/dist/src/register-care/fix.js +78 -0
- package/dist/src/register-care/liveness.d.ts +3 -0
- package/dist/src/register-care/liveness.js +189 -0
- package/dist/src/register-care/profiles.d.ts +9 -0
- package/dist/src/register-care/profiles.js +43 -0
- package/dist/src/register-care/programModel.d.ts +3 -0
- package/dist/src/register-care/programModel.js +122 -0
- package/dist/src/register-care/report.d.ts +4 -0
- package/dist/src/register-care/report.js +82 -0
- package/dist/src/register-care/smartComments.d.ts +5 -0
- package/dist/src/register-care/smartComments.js +243 -0
- package/dist/src/register-care/summaries.d.ts +12 -0
- package/dist/src/register-care/summaries.js +154 -0
- package/dist/src/{registerCare → register-care}/tooling.d.ts +7 -6
- package/dist/src/{registerCare → register-care}/tooling.js +17 -6
- package/dist/src/register-care/types.d.ts +165 -0
- package/dist/src/register-care/types.js +1 -0
- package/dist/src/semantics/expression-evaluation.d.ts +29 -0
- package/dist/src/semantics/expression-evaluation.js +409 -0
- package/dist/src/source/logical-lines.d.ts +7 -0
- package/dist/src/source/logical-lines.js +11 -0
- package/dist/src/source/source-file.d.ts +5 -0
- package/dist/src/source/source-file.js +3 -0
- package/dist/src/source/source-span.d.ts +5 -0
- package/dist/src/source/source-span.js +1 -0
- package/dist/src/source/strip-line-comment.d.ts +4 -0
- package/dist/src/source/strip-line-comment.js +27 -0
- package/dist/src/syntax/directive-aliases.d.ts +10 -0
- package/dist/src/syntax/directive-aliases.js +199 -0
- package/dist/src/syntax/parse-expression.d.ts +3 -0
- package/dist/src/syntax/parse-expression.js +551 -0
- package/dist/src/syntax/parse-line.d.ts +12 -0
- package/dist/src/syntax/parse-line.js +329 -0
- package/dist/src/tooling/api.d.ts +42 -0
- package/dist/src/tooling/api.js +42 -0
- package/dist/src/tooling/case-style.d.ts +8 -0
- package/dist/src/tooling/case-style.js +163 -0
- package/dist/src/z80/effects.d.ts +3 -3
- package/dist/src/z80/effects.js +349 -302
- package/dist/src/z80/encode.d.ts +2 -10
- package/dist/src/z80/encode.js +951 -374
- package/dist/src/z80/instruction.d.ts +226 -0
- package/dist/src/z80/instruction.js +1 -0
- package/dist/src/z80/parse-instruction.d.ts +7 -0
- package/dist/src/z80/parse-instruction.js +1068 -0
- package/docs/reference/tooling-api.md +55 -3
- package/package.json +20 -3
- /package/dist/{src → legacy-root-azm/src}/analysis.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/analysis.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/compile.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/compile.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/compileShared.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/compileShared.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/diagnosticTypes.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/diagnosticTypes.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/range.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/range.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/types.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeAsm80.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeAsm80.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeBin.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeBin.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeD8m.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeD8m.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeListing.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/formats/writeListing.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/asm80/asmLine.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/asm80/asmLine.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/asm80/parseAsmRawValues.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/asm80/parseAsmRawValues.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/asm80/quoteScan.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/asm80/quoteScan.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/ast.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/ast.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/directiveAliases.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/directiveAliases.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/grammarData.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/grammarData.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/immExprUtils.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/immExprUtils.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmFlatDirectiveLine.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmFlatDirectiveLine.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmInstruction.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmInstruction.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStatements.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStatements.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStream.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmStream.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmTopLevel.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseAsmTopLevel.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseDiagnostics.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseDiagnostics.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseEnum.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseEnum.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseImm.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseImm.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseLogicalLines.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseLogicalLines.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseOp.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseOp.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseOpHeader.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseOpHeader.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseOperands.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseOperands.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseParams.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseParams.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseParserRecovery.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseParserRecovery.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseParserShared.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseParserShared.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectiveStart.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectiveStart.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectives.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseRawDataDirectives.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseRecordFieldDecl.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseRecordFieldDecl.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemDispatch.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemDispatch.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemTable.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseSourceItemTable.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseTopLevelCommon.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseTopLevelCommon.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseTypes.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parseTypes.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parser.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/parser.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/source.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/source.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/sourceExtensions.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/frontend/sourceExtensions.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lintCaseStyle.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lintCaseStyle.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveLowering.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveLowering.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveTraversal.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmDirectiveTraversal.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmEquResolution.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmEquResolution.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLdHelpers.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLdHelpers.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLowering.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionLowering.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionStream.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmInstructionStream.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringBranchCall.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringBranchCall.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringHost.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringHost.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringLd.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmLoweringLd.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmRangeLowering.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmRangeLowering.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmRawDataLowering.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmRawDataLowering.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceEmitter.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceEmitter.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceInstructionLowering.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmSourceInstructionLowering.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmUtils.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/asmUtils.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerFlowSetup.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerFlowSetup.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContext.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContext.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContextSplit.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringContextSplit.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringPhases.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/assemblerLoweringPhases.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/bytePlacement.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/bytePlacement.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/capabilities.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/capabilities.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/eaResolution.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/eaResolution.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emissionCore.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emissionCore.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emit.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emit.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitContextBuilder.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitContextBuilder.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalization.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalization.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalizationSetup.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitFinalizationSetup.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1BuildProgramLoweringContext.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Helpers.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Helpers.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Types.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Types.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1WirePipeline.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1WirePipeline.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Workspace.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPhase1Workspace.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPipeline.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitPipeline.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitProgramContext.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitProgramContext.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitState.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/emitState.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/fixupBaseResolution.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/fixupBaseResolution.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/fixupEmission.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/fixupEmission.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/immMath.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/immMath.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/inputAssets.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/inputAssets.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldEncoding.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldEncoding.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldEncodingRegMemHelpers.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldEncodingRegMemHelpers.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldFormSelection.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldFormSelection.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldLowering.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/ldLowering.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmByteEmission.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmByteEmission.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmPlacement.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmPlacement.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmStreamRecording.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmStreamRecording.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmTypes.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredAsmTypes.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredFormat.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredFormat.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredItemSize.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweredItemSize.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweringDiagnostics.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweringDiagnostics.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweringTypes.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/loweringTypes.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opCandidateRegistry.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opCandidateRegistry.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionExecution.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionExecution.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionOrchestration.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionOrchestration.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionStream.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opExpansionStream.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opMatching.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opMatching.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opSubstitution.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/opSubstitution.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/prescanTypes.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/prescanTypes.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLowering.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLowering.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringDeclarations.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringDeclarations.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringFinalize.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringFinalize.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringTraversal.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programLoweringTraversal.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programPrescan.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/programPrescan.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/traceFormat.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/lowering/traceFormat.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/packageInfo.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/packageInfo.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/pathCompare.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/pathCompare.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/pipeline.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/analyze.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/analyze.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/annotate.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/annotate.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/boundaryHints.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/boundaryHints.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/carriers.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/carriers.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/controlFlow.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/controlFlow.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/fix.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/fix.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/liveness.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/liveness.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/profiles.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/profiles.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/programModel.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/programModel.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/report.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/report.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/smartComments.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/smartComments.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/sourceText.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/sourceText.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/summary.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/summary.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/types.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/registerCare/types.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/declVisitor.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/declVisitor.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/env.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/env.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/layout.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/layout.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/layoutCastFold.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/layoutCastFold.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/semanticsDiagnostics.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/semanticsDiagnostics.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/typeQueries.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/semantics/typeQueries.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/sourceIncludeExpansion.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/sourceIncludeExpansion.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/sourceIncludePaths.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/sourceIncludePaths.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/sourceLoader.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/sourceLoader.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeAlu.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeAlu.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeBitOps.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeBitOps.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeContext.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeContext.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeControl.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeControl.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeCoreOps.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeCoreOps.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeIo.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeIo.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeLd.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encodeLd.js +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encoderRegistry.d.ts +0 -0
- /package/dist/{src → legacy-root-azm/src}/z80/encoderRegistry.js +0 -0
package/dist/src/index.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
1
|
+
export { compileSource, compileNext } from './core/compile.js';
|
|
2
|
+
export type { CompileOptions, CompileSourceResult, CompileNextOptions } from './core/compile.js';
|
|
3
|
+
export { compileArtifacts, compileNextArtifacts } from './core/compile-artifacts.js';
|
|
4
|
+
export type { CompileArtifactOptions, CompileArtifactsResult, SourceArtifact, CompileNextArtifactOptions, CompileNextArtifactsResult, NextArtifact, } from './core/compile-artifacts.js';
|
|
5
|
+
export { formatDiagnostic, formatNextDiagnostic } from './diagnostics/format.js';
|
|
6
|
+
export { analyzeProgram, loadProgram, analyzeProgramNext, loadProgramNext } from './tooling/api.js';
|
|
7
|
+
export { DiagnosticIds } from './model/diagnostic.js';
|
|
8
|
+
export type { DiagnosticId, DiagnosticSeverity, Diagnostic } from './model/diagnostic.js';
|
|
9
|
+
export { analyzeRegisterCareForTools, type AnalyzeRegisterCareForToolsOptions, type AnalyzeRegisterCareForToolsResult, type RegisterCareCandidateDiagnostic, type RegisterCareCodeAction, } from './register-care/tooling.js';
|
|
10
|
+
export { compile, defaultFormatWriters, writeHex } from './api-compile.js';
|
|
11
|
+
export type { AddressRange, Artifact, CompileDependencies, CompileFunctionOptions, CompileResult, CompileNextDependencies, CompileNextFunctionOptions, EmittedByteMap, FormatWriters, CompileNextResult as CompileNextProgramResult, } from './api-compile.js';
|
|
12
|
+
export type { AnalyzeProgramOptions, AnalyzeProgramResult, LoadProgramOptions, LoadProgramResult, LoadedProgram, AnalyzeProgramNextOptions, AnalyzeProgramNextResult, LoadProgramNextOptions, LoadProgramNextResult, LoadedProgramNext, } from './tooling/api.js';
|
|
13
|
+
export type { CaseStyleMode } from './tooling/case-style.js';
|
|
14
|
+
export type { D8mArtifact, D8mGenerator, D8mJson, D8mFileEntry, D8mFileSymbol, D8mSegment, D8mSymbol, SymbolEntry, WriteD8mOptions, } from './outputs/types.js';
|
package/dist/src/index.js
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export { compileSource, compileNext } from './core/compile.js';
|
|
2
|
+
export { compileArtifacts, compileNextArtifacts } from './core/compile-artifacts.js';
|
|
3
|
+
export { formatDiagnostic, formatNextDiagnostic } from './diagnostics/format.js';
|
|
4
|
+
export { analyzeProgram, loadProgram, analyzeProgramNext, loadProgramNext } from './tooling/api.js';
|
|
5
|
+
export { DiagnosticIds } from './model/diagnostic.js';
|
|
6
|
+
export { analyzeRegisterCareForTools, } from './register-care/tooling.js';
|
|
7
|
+
export { compile, defaultFormatWriters, writeHex } from './api-compile.js';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Severity level for a diagnostic.
|
|
3
|
+
*/
|
|
4
|
+
export type DiagnosticSeverity = 'error' | 'warning' | 'info';
|
|
5
|
+
/**
|
|
6
|
+
* A compiler diagnostic (error/warning/info) with an optional source location.
|
|
7
|
+
*
|
|
8
|
+
* Diagnostics use stable `code` values so downstream tooling can rely on them.
|
|
9
|
+
*/
|
|
10
|
+
export interface Diagnostic {
|
|
11
|
+
readonly severity: DiagnosticSeverity;
|
|
12
|
+
/** Stable diagnostic identifier (e.g. `AZM400` or `AZMN_PARSE`). */
|
|
13
|
+
readonly code: string;
|
|
14
|
+
readonly message: string;
|
|
15
|
+
readonly sourceName?: string;
|
|
16
|
+
/** 1-based line number, when known. */
|
|
17
|
+
readonly line?: number;
|
|
18
|
+
/** 1-based column number, when known. */
|
|
19
|
+
readonly column?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Known diagnostic IDs for the public tooling surface.
|
|
23
|
+
*
|
|
24
|
+
* Runtime diagnostics may also use AZM Next-specific codes (`AZMN_*`); this
|
|
25
|
+
* catalog preserves stable AZM-branded IDs for semver-sensitive consumers.
|
|
26
|
+
*/
|
|
27
|
+
export declare const DiagnosticIds: {
|
|
28
|
+
readonly Unknown: "AZM000";
|
|
29
|
+
readonly IoReadFailed: "AZM001";
|
|
30
|
+
readonly InternalParseError: "AZM002";
|
|
31
|
+
readonly IncludeNotFound: "AZM003";
|
|
32
|
+
readonly ParseError: "AZM100";
|
|
33
|
+
readonly EncodeError: "AZM200";
|
|
34
|
+
readonly EmitError: "AZM300";
|
|
35
|
+
readonly EmitWarning: "AZM301";
|
|
36
|
+
readonly OpArityMismatch: "AZM310";
|
|
37
|
+
readonly OpNoMatchingOverload: "AZM311";
|
|
38
|
+
readonly OpAmbiguousOverload: "AZM312";
|
|
39
|
+
readonly OpExpansionCycle: "AZM313";
|
|
40
|
+
readonly OpInvalidExpansion: "AZM314";
|
|
41
|
+
readonly SemanticsError: "AZM400";
|
|
42
|
+
readonly ImmDivideByZero: "AZM401";
|
|
43
|
+
readonly ImmModuloByZero: "AZM402";
|
|
44
|
+
readonly TypeError: "AZM403";
|
|
45
|
+
readonly CaseStyleLint: "AZM500";
|
|
46
|
+
readonly IndexParenRedundant: "AZM501";
|
|
47
|
+
readonly RegisterCareConflict: "AZM600";
|
|
48
|
+
readonly RegisterCareUnknownBoundary: "AZM601";
|
|
49
|
+
};
|
|
50
|
+
export type DiagnosticId = (typeof DiagnosticIds)[keyof typeof DiagnosticIds];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known diagnostic IDs for the public tooling surface.
|
|
3
|
+
*
|
|
4
|
+
* Runtime diagnostics may also use AZM Next-specific codes (`AZMN_*`); this
|
|
5
|
+
* catalog preserves stable AZM-branded IDs for semver-sensitive consumers.
|
|
6
|
+
*/
|
|
7
|
+
export const DiagnosticIds = {
|
|
8
|
+
Unknown: 'AZM000',
|
|
9
|
+
IoReadFailed: 'AZM001',
|
|
10
|
+
InternalParseError: 'AZM002',
|
|
11
|
+
IncludeNotFound: 'AZM003',
|
|
12
|
+
ParseError: 'AZM100',
|
|
13
|
+
EncodeError: 'AZM200',
|
|
14
|
+
EmitError: 'AZM300',
|
|
15
|
+
EmitWarning: 'AZM301',
|
|
16
|
+
OpArityMismatch: 'AZM310',
|
|
17
|
+
OpNoMatchingOverload: 'AZM311',
|
|
18
|
+
OpAmbiguousOverload: 'AZM312',
|
|
19
|
+
OpExpansionCycle: 'AZM313',
|
|
20
|
+
OpInvalidExpansion: 'AZM314',
|
|
21
|
+
SemanticsError: 'AZM400',
|
|
22
|
+
ImmDivideByZero: 'AZM401',
|
|
23
|
+
ImmModuloByZero: 'AZM402',
|
|
24
|
+
TypeError: 'AZM403',
|
|
25
|
+
CaseStyleLint: 'AZM500',
|
|
26
|
+
IndexParenRedundant: 'AZM501',
|
|
27
|
+
RegisterCareConflict: 'AZM600',
|
|
28
|
+
RegisterCareUnknownBoundary: 'AZM601',
|
|
29
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export type Expression = {
|
|
2
|
+
readonly kind: 'number';
|
|
3
|
+
readonly value: number;
|
|
4
|
+
} | {
|
|
5
|
+
readonly kind: 'symbol';
|
|
6
|
+
readonly name: string;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'current-location';
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'type-size';
|
|
11
|
+
readonly typeExpr: TypeExpr;
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'sizeof';
|
|
14
|
+
readonly typeExpr: TypeExpr;
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'offset';
|
|
17
|
+
readonly typeExpr: TypeExpr;
|
|
18
|
+
readonly path: readonly OffsetPathPart[];
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: 'layout-cast';
|
|
21
|
+
readonly typeExpr: TypeExpr;
|
|
22
|
+
readonly base: Expression;
|
|
23
|
+
readonly path: readonly LayoutCastPathPart[];
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'unary';
|
|
26
|
+
readonly operator: '+' | '-' | '~';
|
|
27
|
+
readonly expression: Expression;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: 'binary';
|
|
30
|
+
readonly operator: '*' | '/' | '%' | '+' | '-' | '&' | '^' | '|' | '<<' | '>>';
|
|
31
|
+
readonly left: Expression;
|
|
32
|
+
readonly right: Expression;
|
|
33
|
+
};
|
|
34
|
+
export interface TypeExpr {
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly length?: number;
|
|
37
|
+
}
|
|
38
|
+
export type OffsetPathPart = {
|
|
39
|
+
readonly kind: 'field';
|
|
40
|
+
readonly name: string;
|
|
41
|
+
} | {
|
|
42
|
+
readonly kind: 'index';
|
|
43
|
+
readonly index: number;
|
|
44
|
+
};
|
|
45
|
+
export type LayoutCastPathPart = {
|
|
46
|
+
readonly kind: 'field';
|
|
47
|
+
readonly name: string;
|
|
48
|
+
} | {
|
|
49
|
+
readonly kind: 'index';
|
|
50
|
+
readonly expression: Expression;
|
|
51
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SourceSpan } from '../source/source-span.js';
|
|
2
|
+
export interface FixupTarget {
|
|
3
|
+
readonly symbol: string;
|
|
4
|
+
readonly addend: number;
|
|
5
|
+
}
|
|
6
|
+
export type Fixup = {
|
|
7
|
+
readonly kind: 'abs16';
|
|
8
|
+
readonly offset: number;
|
|
9
|
+
readonly target: FixupTarget;
|
|
10
|
+
readonly span: SourceSpan;
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: 'rel8';
|
|
13
|
+
readonly offset: number;
|
|
14
|
+
readonly origin: number;
|
|
15
|
+
readonly target: FixupTarget;
|
|
16
|
+
readonly mnemonic: string;
|
|
17
|
+
readonly span: SourceSpan;
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { Expression, TypeExpr } from './expression.js';
|
|
2
|
+
import type { SourceSpan } from '../source/source-span.js';
|
|
3
|
+
import type { Z80Instruction } from '../z80/instruction.js';
|
|
4
|
+
export type SourceItem = {
|
|
5
|
+
readonly kind: 'org';
|
|
6
|
+
readonly expression: Expression;
|
|
7
|
+
readonly span: SourceSpan;
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: 'equ';
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly expression: Expression;
|
|
12
|
+
readonly stringValue?: string;
|
|
13
|
+
readonly span: SourceSpan;
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: 'label';
|
|
16
|
+
readonly name: string;
|
|
17
|
+
readonly span: SourceSpan;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: 'db';
|
|
20
|
+
readonly values: readonly DataValue[];
|
|
21
|
+
readonly span: SourceSpan;
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: 'dw';
|
|
24
|
+
readonly values: readonly Expression[];
|
|
25
|
+
readonly span: SourceSpan;
|
|
26
|
+
} | {
|
|
27
|
+
readonly kind: 'ds';
|
|
28
|
+
readonly size: Expression;
|
|
29
|
+
readonly fill?: Expression;
|
|
30
|
+
readonly span: SourceSpan;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: 'align';
|
|
33
|
+
readonly alignment: Expression;
|
|
34
|
+
readonly span: SourceSpan;
|
|
35
|
+
} | {
|
|
36
|
+
readonly kind: 'end';
|
|
37
|
+
readonly span: SourceSpan;
|
|
38
|
+
} | {
|
|
39
|
+
readonly kind: 'binfrom';
|
|
40
|
+
readonly expression: Expression;
|
|
41
|
+
readonly span: SourceSpan;
|
|
42
|
+
} | {
|
|
43
|
+
readonly kind: 'binto';
|
|
44
|
+
readonly expression: Expression;
|
|
45
|
+
readonly span: SourceSpan;
|
|
46
|
+
} | {
|
|
47
|
+
readonly kind: 'enum';
|
|
48
|
+
readonly name: string;
|
|
49
|
+
readonly members: readonly string[];
|
|
50
|
+
readonly span: SourceSpan;
|
|
51
|
+
} | {
|
|
52
|
+
readonly kind: 'type';
|
|
53
|
+
readonly name: string;
|
|
54
|
+
readonly layoutKind: 'record' | 'union';
|
|
55
|
+
readonly fields: readonly LayoutField[];
|
|
56
|
+
readonly span: SourceSpan;
|
|
57
|
+
} | {
|
|
58
|
+
readonly kind: 'string-data';
|
|
59
|
+
readonly directive: 'cstr' | 'pstr' | 'istr';
|
|
60
|
+
readonly value: string;
|
|
61
|
+
readonly span: SourceSpan;
|
|
62
|
+
} | {
|
|
63
|
+
readonly kind: 'instruction';
|
|
64
|
+
readonly instruction: Instruction;
|
|
65
|
+
readonly span: SourceSpan;
|
|
66
|
+
readonly emittedSource?: EmittedSource;
|
|
67
|
+
};
|
|
68
|
+
export type Instruction = Z80Instruction;
|
|
69
|
+
export type DataValue = Expression | {
|
|
70
|
+
readonly kind: 'string-fragment';
|
|
71
|
+
readonly value: string;
|
|
72
|
+
};
|
|
73
|
+
export interface LayoutField {
|
|
74
|
+
readonly name: string;
|
|
75
|
+
readonly size: number;
|
|
76
|
+
readonly typeExpr?: TypeExpr;
|
|
77
|
+
}
|
|
78
|
+
export interface EmittedSource {
|
|
79
|
+
readonly span: SourceSpan;
|
|
80
|
+
readonly kind: 'code' | 'macro';
|
|
81
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type SymbolTable = Readonly<Record<string, number>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Diagnostic } from '../model/diagnostic.js';
|
|
2
|
+
import type { LogicalLine } from '../source/logical-lines.js';
|
|
3
|
+
export interface LoadProgramNextOptions {
|
|
4
|
+
readonly entryFile: string;
|
|
5
|
+
readonly includeDirs?: readonly string[];
|
|
6
|
+
readonly directiveAliasFiles?: readonly string[];
|
|
7
|
+
readonly preloadedText?: string;
|
|
8
|
+
readonly signal?: AbortSignal;
|
|
9
|
+
}
|
|
10
|
+
export interface ExpandedNextSource {
|
|
11
|
+
readonly entryFile: string;
|
|
12
|
+
readonly lines: readonly LogicalLine[];
|
|
13
|
+
readonly sourceTexts: ReadonlyMap<string, string>;
|
|
14
|
+
readonly sourceLineComments: ReadonlyMap<string, ReadonlyMap<number, string>>;
|
|
15
|
+
}
|
|
16
|
+
export declare function expandSourceForTooling(options: LoadProgramNextOptions): Promise<{
|
|
17
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
18
|
+
readonly expanded?: ExpandedNextSource;
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, extname, join, normalize } from 'node:path';
|
|
3
|
+
import { createSourceFile } from '../source/source-file.js';
|
|
4
|
+
import { scanLogicalLines } from '../source/logical-lines.js';
|
|
5
|
+
import { stripLineComment } from '../source/strip-line-comment.js';
|
|
6
|
+
export async function expandSourceForTooling(options) {
|
|
7
|
+
const diagnostics = [];
|
|
8
|
+
const entryFile = normalize(options.entryFile);
|
|
9
|
+
const extension = extname(entryFile).toLowerCase();
|
|
10
|
+
if (extension !== '.asm' && extension !== '.z80') {
|
|
11
|
+
diagnostics.push({
|
|
12
|
+
severity: 'error',
|
|
13
|
+
code: 'AZMN_SOURCE',
|
|
14
|
+
message: 'unsupported source file extension (expected .asm or .z80)',
|
|
15
|
+
sourceName: entryFile,
|
|
16
|
+
});
|
|
17
|
+
return { diagnostics };
|
|
18
|
+
}
|
|
19
|
+
const sourceTexts = new Map();
|
|
20
|
+
const sourceLineComments = new Map();
|
|
21
|
+
const includeDirs = (options.includeDirs ?? []).map((path) => normalize(path));
|
|
22
|
+
const lines = await expandFile({
|
|
23
|
+
sourcePath: entryFile,
|
|
24
|
+
includeDirs,
|
|
25
|
+
sourceTexts,
|
|
26
|
+
sourceLineComments,
|
|
27
|
+
diagnostics,
|
|
28
|
+
includeStack: [],
|
|
29
|
+
...(options.preloadedText !== undefined ? { preloadedText: options.preloadedText } : {}),
|
|
30
|
+
...(options.signal !== undefined ? { signal: options.signal } : {}),
|
|
31
|
+
});
|
|
32
|
+
if (diagnostics.some((diagnostic) => diagnostic.severity === 'error') || lines === undefined) {
|
|
33
|
+
return { diagnostics };
|
|
34
|
+
}
|
|
35
|
+
return { diagnostics, expanded: { entryFile, lines, sourceTexts, sourceLineComments } };
|
|
36
|
+
}
|
|
37
|
+
async function expandFile(options) {
|
|
38
|
+
options.signal?.throwIfAborted();
|
|
39
|
+
const sourcePath = normalize(options.sourcePath);
|
|
40
|
+
if (options.includeStack.includes(sourcePath)) {
|
|
41
|
+
options.diagnostics.push({
|
|
42
|
+
severity: 'error',
|
|
43
|
+
code: 'AZMN_SOURCE',
|
|
44
|
+
message: `recursive include: ${sourcePath}`,
|
|
45
|
+
sourceName: sourcePath,
|
|
46
|
+
});
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const text = await readSourceText(options, sourcePath);
|
|
50
|
+
if (text === undefined) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
options.sourceTexts.set(sourcePath, text);
|
|
54
|
+
const output = [];
|
|
55
|
+
for (const line of scanLogicalLines(createSourceFile(sourcePath, text))) {
|
|
56
|
+
recordLineComment(options.sourceLineComments, line);
|
|
57
|
+
const includePath = parseIncludePath(line.text);
|
|
58
|
+
if (!includePath) {
|
|
59
|
+
output.push(line);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const result = await resolveInclude(sourcePath, includePath, options.includeDirs);
|
|
63
|
+
if (result.resolved === undefined) {
|
|
64
|
+
options.diagnostics.push({
|
|
65
|
+
severity: 'error',
|
|
66
|
+
code: 'AZMN_SOURCE',
|
|
67
|
+
message: `Failed to resolve include "${includePath}" from "${sourcePath}". Tried:\n${result.searchCandidates.map((candidate) => `- ${candidate}`).join('\n')}`,
|
|
68
|
+
sourceName: sourcePath,
|
|
69
|
+
line: line.line,
|
|
70
|
+
column: firstColumn(line.text),
|
|
71
|
+
});
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const { preloadedText: _preloadedText, ...includeOptions } = options;
|
|
75
|
+
const included = await expandFile({
|
|
76
|
+
...includeOptions,
|
|
77
|
+
sourcePath: result.resolved,
|
|
78
|
+
includeStack: [...options.includeStack, sourcePath],
|
|
79
|
+
});
|
|
80
|
+
if (included !== undefined) {
|
|
81
|
+
output.push(...included);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return output;
|
|
85
|
+
}
|
|
86
|
+
function recordLineComment(comments, line) {
|
|
87
|
+
const commentText = lineComment(line.text);
|
|
88
|
+
if (commentText === undefined) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let sourceComments = comments.get(line.sourceName);
|
|
92
|
+
if (!sourceComments) {
|
|
93
|
+
sourceComments = new Map();
|
|
94
|
+
comments.set(line.sourceName, sourceComments);
|
|
95
|
+
}
|
|
96
|
+
sourceComments.set(line.line, commentText);
|
|
97
|
+
}
|
|
98
|
+
async function readSourceText(options, sourcePath) {
|
|
99
|
+
if (options.preloadedText !== undefined) {
|
|
100
|
+
return options.preloadedText;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
return await readFile(sourcePath, 'utf8');
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
options.diagnostics.push({
|
|
107
|
+
severity: 'error',
|
|
108
|
+
code: 'AZMN_SOURCE',
|
|
109
|
+
message: `failed to read source file: ${String(error)}`,
|
|
110
|
+
sourceName: sourcePath,
|
|
111
|
+
});
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async function resolveInclude(importer, includePath, includeDirs) {
|
|
116
|
+
const candidates = [
|
|
117
|
+
join(dirname(importer), includePath),
|
|
118
|
+
...includeDirs.map((dir) => join(dir, includePath)),
|
|
119
|
+
];
|
|
120
|
+
for (const candidate of candidates) {
|
|
121
|
+
try {
|
|
122
|
+
await readFile(candidate, 'utf8');
|
|
123
|
+
return { resolved: normalize(candidate), searchCandidates: candidates.map(normalize) };
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return { searchCandidates: candidates.map(normalize) };
|
|
130
|
+
}
|
|
131
|
+
function parseIncludePath(text) {
|
|
132
|
+
const match = /^\.?include\s+"([^"]+)"\s*$/i.exec(stripLineComment(text).trim());
|
|
133
|
+
return match?.[1];
|
|
134
|
+
}
|
|
135
|
+
function lineComment(text) {
|
|
136
|
+
const prefix = stripLineComment(text);
|
|
137
|
+
if (prefix.length === text.length) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
const value = text.slice(prefix.length + 1).trim();
|
|
141
|
+
return value.length === 0 ? undefined : value;
|
|
142
|
+
}
|
|
143
|
+
function firstColumn(text) {
|
|
144
|
+
const match = /\S/.exec(text);
|
|
145
|
+
return match ? match.index + 1 : 1;
|
|
146
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function writeIntelHex(origin: number, bytes: Uint8Array, reservedAddresses?: readonly number[], initializedAddresses?: readonly number[]): string;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export function writeIntelHex(origin, bytes, reservedAddresses = [], initializedAddresses = []) {
|
|
2
|
+
if (bytes.length === 0) {
|
|
3
|
+
return ':00000001FF\n';
|
|
4
|
+
}
|
|
5
|
+
const records = [];
|
|
6
|
+
const end = origin + bytes.length;
|
|
7
|
+
const segments = toNonReservedSegments(origin, end, reservedAddresses, initializedAddresses);
|
|
8
|
+
if (segments.length === 0) {
|
|
9
|
+
for (let address = origin; address < end; address += 16) {
|
|
10
|
+
const count = Math.min(16, end - address);
|
|
11
|
+
const startOffset = address - origin;
|
|
12
|
+
const chunk = Array.from(bytes.slice(startOffset, startOffset + count));
|
|
13
|
+
records.push(writeRecord(count, address, 0x00, chunk));
|
|
14
|
+
}
|
|
15
|
+
return `${records.join('\n')}\n:00000001FF\n`;
|
|
16
|
+
}
|
|
17
|
+
for (const segment of segments) {
|
|
18
|
+
for (let address = segment.start; address < segment.end; address += 16) {
|
|
19
|
+
const startOffset = address - origin;
|
|
20
|
+
const count = Math.min(16, segment.end - address);
|
|
21
|
+
const chunk = Array.from(bytes.slice(startOffset, startOffset + count));
|
|
22
|
+
records.push(writeRecord(count, address, 0x00, chunk));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return `${records.join('\n')}\n:00000001FF\n`;
|
|
26
|
+
}
|
|
27
|
+
function toNonReservedSegments(start, end, reservedAddresses, initializedAddresses) {
|
|
28
|
+
if (reservedAddresses.length === 0 || initializedAddresses.length === 0) {
|
|
29
|
+
return [];
|
|
30
|
+
}
|
|
31
|
+
const inRangeInitialized = initializedAddresses.filter((address) => address >= start && address < end);
|
|
32
|
+
if (inRangeInitialized.length === 0) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const firstInitialized = inRangeInitialized.reduce((best, address) => Math.min(best, address), end);
|
|
36
|
+
const lastInitialized = inRangeInitialized.reduce((best, address) => Math.max(best, address), start - 1);
|
|
37
|
+
const reservedInRange = new Set(reservedAddresses.filter((address) => address >= start && address < end));
|
|
38
|
+
if (reservedInRange.size === 0) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
const segments = [];
|
|
42
|
+
let segmentStart;
|
|
43
|
+
let segmentEnd = start;
|
|
44
|
+
for (let address = start; address < end; address += 1) {
|
|
45
|
+
const skipReserved = address > firstInitialized &&
|
|
46
|
+
address < lastInitialized &&
|
|
47
|
+
reservedInRange.has(address);
|
|
48
|
+
if (skipReserved) {
|
|
49
|
+
if (segmentStart !== undefined) {
|
|
50
|
+
segments.push({ start: segmentStart, end: segmentEnd });
|
|
51
|
+
}
|
|
52
|
+
segmentStart = undefined;
|
|
53
|
+
segmentEnd = address + 1;
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (segmentStart === undefined) {
|
|
57
|
+
segmentStart = address;
|
|
58
|
+
}
|
|
59
|
+
segmentEnd = address + 1;
|
|
60
|
+
}
|
|
61
|
+
if (segmentStart !== undefined) {
|
|
62
|
+
segments.push({ start: segmentStart, end: segmentEnd });
|
|
63
|
+
}
|
|
64
|
+
return segments;
|
|
65
|
+
}
|
|
66
|
+
function writeRecord(length, address, type, bytes) {
|
|
67
|
+
const fields = [length, (address >> 8) & 0xff, address & 0xff, type, ...bytes];
|
|
68
|
+
const checksum = ((~fields.reduce((sum, value) => sum + value, 0) + 1) & 0xff) >>> 0;
|
|
69
|
+
return `:${toHex(length)}${toHex((address >> 8) & 0xff)}${toHex(address & 0xff)}${toHex(type)}${bytes
|
|
70
|
+
.map(toHex)
|
|
71
|
+
.join('')}${toHex(checksum)}`;
|
|
72
|
+
}
|
|
73
|
+
function toHex(value) {
|
|
74
|
+
return (value & 0xff).toString(16).toUpperCase().padStart(2, '0');
|
|
75
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { writeBin } from './write-bin.js';
|
|
2
|
+
import { writeD8m } from './write-d8.js';
|
|
3
|
+
import { writeHex } from './write-hex.js';
|
|
4
|
+
import { writeListing } from './write-listing.js';
|
|
5
|
+
import { writeAsm80 } from './write-asm80.js';
|
|
6
|
+
/** Default in-memory writers for Stage 12 compile API. */
|
|
7
|
+
export const defaultFormatWriters = {
|
|
8
|
+
writeBin,
|
|
9
|
+
writeHex,
|
|
10
|
+
writeD8m,
|
|
11
|
+
writeListing,
|
|
12
|
+
writeAsm80,
|
|
13
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function getWrittenSegments(map) {
|
|
2
|
+
if (map.bytes.size === 0)
|
|
3
|
+
return [];
|
|
4
|
+
const addresses = [...new Set(map.bytes.keys())].sort((a, b) => a - b);
|
|
5
|
+
const segments = [];
|
|
6
|
+
let start = addresses[0];
|
|
7
|
+
let previous = start;
|
|
8
|
+
for (let index = 1; index < addresses.length; index += 1) {
|
|
9
|
+
const address = addresses[index];
|
|
10
|
+
if (address <= previous + 1) {
|
|
11
|
+
previous = address;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
segments.push({ start, end: previous + 1 });
|
|
15
|
+
start = address;
|
|
16
|
+
previous = address;
|
|
17
|
+
}
|
|
18
|
+
segments.push({ start, end: previous + 1 });
|
|
19
|
+
return segments;
|
|
20
|
+
}
|
|
21
|
+
export function getWrittenRange(map) {
|
|
22
|
+
if (map.writtenRange)
|
|
23
|
+
return map.writtenRange;
|
|
24
|
+
const segments = getWrittenSegments(map);
|
|
25
|
+
if (segments.length === 0)
|
|
26
|
+
return { start: 0, end: 0 };
|
|
27
|
+
return {
|
|
28
|
+
start: segments[0].start,
|
|
29
|
+
end: segments[segments.length - 1].end,
|
|
30
|
+
};
|
|
31
|
+
}
|