@jhlagado/azm 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -9
- package/dist/src/api-compile.d.ts +0 -2
- package/dist/src/api-compile.js +1 -8
- package/dist/src/assembly/address-planning.js +19 -1
- package/dist/src/cli/parse-args.d.ts +0 -1
- package/dist/src/cli/parse-args.js +0 -7
- package/dist/src/cli/write-artifacts.js +0 -11
- package/dist/src/core/compile.js +176 -9
- package/dist/src/expansion/op-expansion.js +1 -0
- package/dist/src/model/expression.d.ts +4 -0
- package/dist/src/model/source-item.d.ts +5 -0
- package/dist/src/outputs/index.js +0 -2
- package/dist/src/outputs/types.d.ts +3 -16
- package/dist/src/outputs/write-asm80.js +84 -0
- package/dist/src/semantics/expression-evaluation.d.ts +7 -3
- package/dist/src/semantics/expression-evaluation.js +57 -0
- package/dist/src/syntax/directive-aliases.js +9 -10
- package/dist/src/syntax/parse-expression.js +34 -9
- package/dist/src/syntax/parse-line.js +80 -44
- package/dist/src/tooling/case-style.js +3 -0
- package/docs/reference/cli.md +6 -4
- package/docs/reference/tooling-api.md +1 -4
- package/package.json +2 -6
- package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
- package/dist/legacy-root-azm/src/analysis.js +0 -41
- package/dist/legacy-root-azm/src/compile.d.ts +0 -10
- package/dist/legacy-root-azm/src/compile.js +0 -186
- package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
- package/dist/legacy-root-azm/src/compileShared.js +0 -7
- package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
- package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
- package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
- package/dist/legacy-root-azm/src/formats/index.js +0 -17
- package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
- package/dist/legacy-root-azm/src/formats/range.js +0 -45
- package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
- package/dist/legacy-root-azm/src/formats/types.js +0 -1
- package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
- package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
- package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
- package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
- package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
- package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
- package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
- package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
- package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
- package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
- package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
- package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
- package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
- package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
- package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
- package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
- package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
- package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
- package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
- package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
- package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
- package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
- package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
- package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
- package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
- package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
- package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
- package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
- package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
- package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
- package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
- package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
- package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
- package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
- package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
- package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
- package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
- package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
- package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
- package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
- package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
- package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
- package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
- package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
- package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
- package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
- package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
- package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
- package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
- package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
- package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
- package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
- package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
- package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
- package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
- package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
- package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
- package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
- package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
- package/dist/legacy-root-azm/src/frontend/source.js +0 -58
- package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
- package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
- package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
- package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
- package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
- package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
- package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
- package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
- package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
- package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
- package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
- package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
- package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
- package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
- package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
- package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
- package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
- package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
- package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
- package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
- package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
- package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
- package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
- package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
- package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
- package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
- package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
- package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
- package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
- package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
- package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
- package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
- package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
- package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
- package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
- package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
- package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
- package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
- package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
- package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
- package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
- package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
- package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
- package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
- package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
- package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
- package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
- package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
- package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
- package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
- package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
- package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
- package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
- package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
- package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
- package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
- package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
- package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
- package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
- package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
- package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
- package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
- package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
- package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
- package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
- package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
- package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
- package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
- package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
- package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
- package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
- package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
- package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
- package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
- package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
- package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
- package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
- package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
- package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
- package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
- package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
- package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
- package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
- package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
- package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
- package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
- package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
- package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
- package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
- package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
- package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
- package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
- package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
- package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
- package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
- package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
- package/dist/legacy-root-azm/src/packageInfo.js +0 -15
- package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
- package/dist/legacy-root-azm/src/pathCompare.js +0 -26
- package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
- package/dist/legacy-root-azm/src/pipeline.js +0 -1
- package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
- package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
- package/dist/legacy-root-azm/src/registerCare/annotate.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/annotate.js +0 -76
- package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
- package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
- package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
- package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
- package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
- package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
- package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
- package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
- package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
- package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
- package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
- package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
- package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
- package/dist/legacy-root-azm/src/registerCare/sourceText.d.ts +0 -8
- package/dist/legacy-root-azm/src/registerCare/sourceText.js +0 -15
- package/dist/legacy-root-azm/src/registerCare/summary.d.ts +0 -3
- package/dist/legacy-root-azm/src/registerCare/summary.js +0 -492
- package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
- package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
- package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
- package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
- package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
- package/dist/legacy-root-azm/src/semantics/env.js +0 -432
- package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
- package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
- package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
- package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
- package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
- package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
- package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
- package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
- package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
- package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
- package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
- package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
- package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
- package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
- package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
- package/dist/legacy-root-azm/src/z80/effects.js +0 -516
- package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
- package/dist/legacy-root-azm/src/z80/encode.js +0 -412
- package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
- package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
- package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
- package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
- package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
- package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
- package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
- package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
- package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
- package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
- package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
- package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
- package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
- package/dist/src/outputs/write-listing.d.ts +0 -2
- package/dist/src/outputs/write-listing.js +0 -79
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
export function createOpSubstitutionHelpers(ctx) {
|
|
2
|
-
const substituteOffsetPath = (path, substituteImmExpr) => ({
|
|
3
|
-
...path,
|
|
4
|
-
steps: path.steps.map((step) => step.kind === 'OffsetIndex' ? { ...step, expr: substituteImmExpr(step.expr) } : { ...step }),
|
|
5
|
-
});
|
|
6
|
-
const bindingAsImmExpr = (bound, span) => {
|
|
7
|
-
if (!bound)
|
|
8
|
-
return undefined;
|
|
9
|
-
if (bound.kind === 'Imm')
|
|
10
|
-
return ctx.cloneImmExpr(bound.expr);
|
|
11
|
-
if (bound.kind !== 'Ea')
|
|
12
|
-
return undefined;
|
|
13
|
-
const name = ctx.flattenEaDottedName(bound.expr);
|
|
14
|
-
if (!name || !ctx.env.enums.has(name))
|
|
15
|
-
return undefined;
|
|
16
|
-
return { kind: 'ImmName', span, name };
|
|
17
|
-
};
|
|
18
|
-
const substituteImm = (expr) => {
|
|
19
|
-
if (expr.kind === 'ImmName') {
|
|
20
|
-
const bound = ctx.bindings.get(expr.name.toLowerCase());
|
|
21
|
-
const immBound = bindingAsImmExpr(bound, expr.span);
|
|
22
|
-
if (immBound)
|
|
23
|
-
return immBound;
|
|
24
|
-
return { ...expr };
|
|
25
|
-
}
|
|
26
|
-
if (expr.kind === 'ImmOffset') {
|
|
27
|
-
return { ...expr, path: substituteOffsetPath(expr.path, substituteImm) };
|
|
28
|
-
}
|
|
29
|
-
if (expr.kind === 'ImmUnary')
|
|
30
|
-
return { ...expr, expr: substituteImm(expr.expr) };
|
|
31
|
-
if (expr.kind === 'ImmBinary') {
|
|
32
|
-
return {
|
|
33
|
-
...expr,
|
|
34
|
-
left: substituteImm(expr.left),
|
|
35
|
-
right: substituteImm(expr.right),
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
return { ...expr };
|
|
39
|
-
};
|
|
40
|
-
const substituteOperand = (operand) => {
|
|
41
|
-
if (operand.kind === 'Imm' && operand.expr.kind === 'ImmName') {
|
|
42
|
-
const bound = ctx.bindings.get(operand.expr.name.toLowerCase());
|
|
43
|
-
const immBound = bindingAsImmExpr(bound, operand.span);
|
|
44
|
-
if (immBound)
|
|
45
|
-
return { kind: 'Imm', span: operand.span, expr: immBound };
|
|
46
|
-
if (bound)
|
|
47
|
-
return ctx.cloneOperand(bound);
|
|
48
|
-
return { ...operand, expr: substituteImm(operand.expr) };
|
|
49
|
-
}
|
|
50
|
-
if (operand.kind === 'Imm')
|
|
51
|
-
return { ...operand, expr: substituteImm(operand.expr) };
|
|
52
|
-
if (operand.kind === 'PortImm8') {
|
|
53
|
-
return { ...operand, expr: substituteImm(operand.expr) };
|
|
54
|
-
}
|
|
55
|
-
if ((operand.kind === 'Ea' || operand.kind === 'Mem') && operand.expr.kind === 'EaName') {
|
|
56
|
-
const bound = ctx.bindings.get(operand.expr.name.toLowerCase());
|
|
57
|
-
if (bound?.kind === 'Ea')
|
|
58
|
-
return ctx.cloneOperand(bound);
|
|
59
|
-
if (bound?.kind === 'Reg') {
|
|
60
|
-
return {
|
|
61
|
-
...operand,
|
|
62
|
-
expr: { kind: 'EaName', span: operand.expr.span, name: bound.name },
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
if (bound?.kind === 'Imm' && bound.expr.kind === 'ImmName') {
|
|
66
|
-
return {
|
|
67
|
-
...operand,
|
|
68
|
-
expr: { kind: 'EaName', span: operand.expr.span, name: bound.expr.name },
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
return ctx.cloneOperand(operand);
|
|
72
|
-
}
|
|
73
|
-
return ctx.cloneOperand(operand);
|
|
74
|
-
};
|
|
75
|
-
const substituteImmWithOpLabels = (expr, localLabelMap) => {
|
|
76
|
-
if (expr.kind === 'ImmName') {
|
|
77
|
-
const bound = ctx.bindings.get(expr.name.toLowerCase());
|
|
78
|
-
const immBound = bindingAsImmExpr(bound, expr.span);
|
|
79
|
-
if (immBound)
|
|
80
|
-
return immBound;
|
|
81
|
-
const mapped = localLabelMap.get(expr.name.toLowerCase());
|
|
82
|
-
if (mapped)
|
|
83
|
-
return { kind: 'ImmName', span: expr.span, name: mapped };
|
|
84
|
-
return { ...expr };
|
|
85
|
-
}
|
|
86
|
-
if (expr.kind === 'ImmOffset') {
|
|
87
|
-
return {
|
|
88
|
-
...expr,
|
|
89
|
-
path: substituteOffsetPath(expr.path, (inner) => substituteImmWithOpLabels(inner, localLabelMap)),
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
if (expr.kind === 'ImmUnary') {
|
|
93
|
-
return { ...expr, expr: substituteImmWithOpLabels(expr.expr, localLabelMap) };
|
|
94
|
-
}
|
|
95
|
-
if (expr.kind === 'ImmBinary') {
|
|
96
|
-
return {
|
|
97
|
-
...expr,
|
|
98
|
-
left: substituteImmWithOpLabels(expr.left, localLabelMap),
|
|
99
|
-
right: substituteImmWithOpLabels(expr.right, localLabelMap),
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
return { ...expr };
|
|
103
|
-
};
|
|
104
|
-
const substituteOperandWithOpLabels = (operand, localLabelMap) => {
|
|
105
|
-
const substituteEaWithOpLabels = (ea) => {
|
|
106
|
-
if (ea.kind === 'EaName') {
|
|
107
|
-
const bound = ctx.bindings.get(ea.name.toLowerCase());
|
|
108
|
-
if (bound?.kind === 'Ea')
|
|
109
|
-
return ctx.cloneEaExpr(bound.expr);
|
|
110
|
-
if (bound?.kind === 'Reg') {
|
|
111
|
-
return { kind: 'EaName', span: ea.span, name: bound.name };
|
|
112
|
-
}
|
|
113
|
-
if (bound?.kind === 'Imm' && bound.expr.kind === 'ImmName') {
|
|
114
|
-
return { kind: 'EaName', span: ea.span, name: bound.expr.name };
|
|
115
|
-
}
|
|
116
|
-
const mapped = localLabelMap.get(ea.name.toLowerCase());
|
|
117
|
-
if (mapped)
|
|
118
|
-
return { kind: 'EaName', span: ea.span, name: mapped };
|
|
119
|
-
return { ...ea };
|
|
120
|
-
}
|
|
121
|
-
if (ea.kind === 'EaImm') {
|
|
122
|
-
return { ...ea, expr: substituteImmWithOpLabels(ea.expr, localLabelMap) };
|
|
123
|
-
}
|
|
124
|
-
if (ea.kind === 'EaField') {
|
|
125
|
-
return { ...ea, base: substituteEaWithOpLabels(ea.base) };
|
|
126
|
-
}
|
|
127
|
-
if (ea.kind === 'EaIndex') {
|
|
128
|
-
const index = ea.index.kind === 'IndexEa'
|
|
129
|
-
? { ...ea.index, expr: substituteEaWithOpLabels(ea.index.expr) }
|
|
130
|
-
: ea.index.kind === 'IndexImm'
|
|
131
|
-
? { ...ea.index, value: substituteImmWithOpLabels(ea.index.value, localLabelMap) }
|
|
132
|
-
: ea.index.kind === 'IndexMemIxIy' && ea.index.disp
|
|
133
|
-
? { ...ea.index, disp: substituteImmWithOpLabels(ea.index.disp, localLabelMap) }
|
|
134
|
-
: { ...ea.index };
|
|
135
|
-
return { ...ea, base: substituteEaWithOpLabels(ea.base), index };
|
|
136
|
-
}
|
|
137
|
-
if (ea.kind === 'EaAdd' || ea.kind === 'EaSub') {
|
|
138
|
-
return {
|
|
139
|
-
...ea,
|
|
140
|
-
base: substituteEaWithOpLabels(ea.base),
|
|
141
|
-
offset: substituteImmWithOpLabels(ea.offset, localLabelMap),
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
return ctx.cloneEaExpr(ea);
|
|
145
|
-
};
|
|
146
|
-
if (operand.kind === 'Imm') {
|
|
147
|
-
if (operand.expr.kind === 'ImmName') {
|
|
148
|
-
const bound = ctx.bindings.get(operand.expr.name.toLowerCase());
|
|
149
|
-
const immBound = bindingAsImmExpr(bound, operand.span);
|
|
150
|
-
if (immBound)
|
|
151
|
-
return { kind: 'Imm', span: operand.span, expr: immBound };
|
|
152
|
-
if (bound)
|
|
153
|
-
return ctx.cloneOperand(bound);
|
|
154
|
-
}
|
|
155
|
-
return { ...operand, expr: substituteImmWithOpLabels(operand.expr, localLabelMap) };
|
|
156
|
-
}
|
|
157
|
-
if (operand.kind === 'Ea' || operand.kind === 'Mem') {
|
|
158
|
-
return {
|
|
159
|
-
...operand,
|
|
160
|
-
expr: substituteEaWithOpLabels(operand.expr),
|
|
161
|
-
};
|
|
162
|
-
}
|
|
163
|
-
if (operand.kind === 'PortImm8') {
|
|
164
|
-
return { ...operand, expr: substituteImmWithOpLabels(operand.expr, localLabelMap) };
|
|
165
|
-
}
|
|
166
|
-
return substituteOperand(operand);
|
|
167
|
-
};
|
|
168
|
-
return {
|
|
169
|
-
bindingAsImmExpr,
|
|
170
|
-
substituteImm,
|
|
171
|
-
substituteOperand,
|
|
172
|
-
substituteImmWithOpLabels,
|
|
173
|
-
substituteOperandWithOpLabels,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { OpDeclNode } from '../frontend/ast.js';
|
|
2
|
-
export interface PrescanResult {
|
|
3
|
-
/** Frozen per-file op maps. */
|
|
4
|
-
readonly localOpsByFile: ReadonlyMap<string, ReadonlyMap<string, OpDeclNode[]>>;
|
|
5
|
-
/** Declared `op` names (lowercased). */
|
|
6
|
-
readonly declaredOpNames: ReadonlySet<string>;
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import type { ImmExprNode, OpDeclNode, ProgramNode, SourceSpan, TypeExprNode } from '../frontend/ast.js';
|
|
2
|
-
import type { Diagnostic } from '../diagnosticTypes.js';
|
|
3
|
-
import type { AddressRange, EmittedSourceSegment, SymbolEntry } from '../formats/types.js';
|
|
4
|
-
import type { CompileEnv } from '../semantics/env.js';
|
|
5
|
-
import type { AssemblerLoweringSharedContext } from './assemblerLoweringContext.js';
|
|
6
|
-
import type { PendingSymbol, PlacementKind } from './loweringTypes.js';
|
|
7
|
-
import type { LoweredAsmItem, LoweredImmExpr } from './loweredAsmTypes.js';
|
|
8
|
-
import type { PrescanResult } from './prescanTypes.js';
|
|
9
|
-
import type { AggregateType } from '../semantics/typeQueries.js';
|
|
10
|
-
export type Context = AssemblerLoweringSharedContext & {
|
|
11
|
-
/** Full program AST being lowered. */
|
|
12
|
-
program: ProgramNode;
|
|
13
|
-
/** Resolved include directories for asset loads. */
|
|
14
|
-
includeDirs: string[];
|
|
15
|
-
/** Per-file op overload maps. */
|
|
16
|
-
localOpsByFile: Map<string, Map<string, OpDeclNode[]>>;
|
|
17
|
-
/** All declared `op` names (lowercased). */
|
|
18
|
-
declaredOpNames: Set<string>;
|
|
19
|
-
/** Symbols with absolute addresses. */
|
|
20
|
-
absoluteSymbols: SymbolEntry[];
|
|
21
|
-
/** Running symbol table. */
|
|
22
|
-
symbols: SymbolEntry[];
|
|
23
|
-
/** Data-placement byte map. */
|
|
24
|
-
dataBytes: Map<number, number>;
|
|
25
|
-
/** Code-placement byte map. */
|
|
26
|
-
codeBytes: Map<number, number>;
|
|
27
|
-
/** Currently selected code/data placement for emission. */
|
|
28
|
-
activePlacementRef: {
|
|
29
|
-
current: PlacementKind;
|
|
30
|
-
};
|
|
31
|
-
/** Next code allocation offset (mutable cursor). */
|
|
32
|
-
codeOffsetRef: {
|
|
33
|
-
current: number;
|
|
34
|
-
};
|
|
35
|
-
/** Next data allocation offset. */
|
|
36
|
-
dataOffsetRef: {
|
|
37
|
-
current: number;
|
|
38
|
-
};
|
|
39
|
-
/** Optional base imm per placement. */
|
|
40
|
-
baseExprs: Partial<Record<PlacementKind, ImmExprNode>>;
|
|
41
|
-
/** Advances alignment state for `align` directives. */
|
|
42
|
-
advanceAlign: (a: number) => void;
|
|
43
|
-
/** Rounds `n` up to `alignment` bytes. */
|
|
44
|
-
alignTo: (n: number, alignment: number) => number;
|
|
45
|
-
/** Loads a binary asset; `undefined` on failure (diagnostics via `diag`). */
|
|
46
|
-
loadBinInput: (file: string, fromPath: string, includeDirs: string[], diag: (file: string, message: string) => void) => Uint8Array | undefined;
|
|
47
|
-
/** Structural type resolver for records/unions. */
|
|
48
|
-
resolveAggregateType: (type: TypeExprNode) => AggregateType | undefined;
|
|
49
|
-
/** Layout size helper; `undefined` if type cannot be sized. */
|
|
50
|
-
sizeOfTypeExpr: (typeExpr: TypeExprNode, env: CompileEnv, diagnostics: Diagnostic[]) => number | undefined;
|
|
51
|
-
/** Records one lowered asm item for tracing; `span` optional for synthetic items. */
|
|
52
|
-
recordLoweredAsmItem: (item: LoweredAsmItem, span?: SourceSpan) => void;
|
|
53
|
-
/** Lowers an imm AST node to the trace IR. */
|
|
54
|
-
lowerImmExprForLoweredAsm: (expr: ImmExprNode) => LoweredImmExpr;
|
|
55
|
-
};
|
|
56
|
-
/** Phase 1 — inputs mutated while discovering ops and source-order metadata. */
|
|
57
|
-
export type PrescanContext = Pick<Context, 'program' | 'env' | 'diagnostics' | 'localOpsByFile' | 'declaredOpNames' | 'resolveScalarKind'>;
|
|
58
|
-
/**
|
|
59
|
-
* Phase 2 — full program-lowering context after prescan. Prescan outputs are frozen in
|
|
60
|
-
* {@link PrescanResult}; the same map instances remain on `ctx` for lowering (shared refs).
|
|
61
|
-
*/
|
|
62
|
-
export type LoweringContext = Context & {
|
|
63
|
-
/** Frozen prescan result; map refs alias `ctx` for shared mutation during lowering. */
|
|
64
|
-
readonly prescan: PrescanResult;
|
|
65
|
-
};
|
|
66
|
-
export type LoweringResult = {
|
|
67
|
-
/** Final code-placement size cursor. */
|
|
68
|
-
codeOffset: number;
|
|
69
|
-
/** Final data-placement size cursor. */
|
|
70
|
-
dataOffset: number;
|
|
71
|
-
/** Still-unresolved symbols after lowering. */
|
|
72
|
-
pending: Context['pending'];
|
|
73
|
-
/** Emitted symbol table. */
|
|
74
|
-
symbols: Context['symbols'];
|
|
75
|
-
/** Absolute-address symbols. */
|
|
76
|
-
absoluteSymbols: Context['absoluteSymbols'];
|
|
77
|
-
/** Emitted code bytes. */
|
|
78
|
-
codeBytes: Context['codeBytes'];
|
|
79
|
-
/** Emitted data bytes. */
|
|
80
|
-
dataBytes: Context['dataBytes'];
|
|
81
|
-
};
|
|
82
|
-
/**
|
|
83
|
-
* Phase 3 — inputs for placement, fixup resolution, and merged byte emission
|
|
84
|
-
* (`finalizeProgramEmission`).
|
|
85
|
-
*/
|
|
86
|
-
export type ProgramEmissionFinalizeContext = {
|
|
87
|
-
/** Diagnostics for placement and merge. */
|
|
88
|
-
diagnostics: Diagnostic[];
|
|
89
|
-
/** File-scoped diagnostic helper. */
|
|
90
|
-
diag: (diagnostics: Diagnostic[], file: string, message: string) => void;
|
|
91
|
-
/** Primary source path. */
|
|
92
|
-
primaryFile: string;
|
|
93
|
-
/** Code/data placement base imm expressions. */
|
|
94
|
-
baseExprs: Partial<Record<PlacementKind, ImmExprNode>>;
|
|
95
|
-
/** Imm evaluator; `undefined` when expression is not const. */
|
|
96
|
-
evalImmExpr: (expr: ImmExprNode, env: CompileEnv, diagnostics: Diagnostic[]) => number | undefined;
|
|
97
|
-
/** Compile environment. */
|
|
98
|
-
env: CompileEnv;
|
|
99
|
-
/** Code size after lowering. */
|
|
100
|
-
codeOffset: number;
|
|
101
|
-
/** Data size after lowering. */
|
|
102
|
-
dataOffset: number;
|
|
103
|
-
/** Pending symbols. */
|
|
104
|
-
pending: PendingSymbol[];
|
|
105
|
-
/** Symbol table (may grow during placement). */
|
|
106
|
-
symbols: SymbolEntry[];
|
|
107
|
-
/** Absolute symbols. */
|
|
108
|
-
absoluteSymbols: SymbolEntry[];
|
|
109
|
-
/** Absolute fixup records. */
|
|
110
|
-
fixups: Array<{
|
|
111
|
-
offset: number;
|
|
112
|
-
baseLower: string;
|
|
113
|
-
addend: number;
|
|
114
|
-
file: string;
|
|
115
|
-
}>;
|
|
116
|
-
/** Relative fixup records. */
|
|
117
|
-
rel8Fixups: Array<{
|
|
118
|
-
offset: number;
|
|
119
|
-
origin: number;
|
|
120
|
-
baseLower: string;
|
|
121
|
-
addend: number;
|
|
122
|
-
file: string;
|
|
123
|
-
mnemonic: string;
|
|
124
|
-
}>;
|
|
125
|
-
/** Code bytes. */
|
|
126
|
-
codeBytes: Map<number, number>;
|
|
127
|
-
/** Data bytes. */
|
|
128
|
-
dataBytes: Map<number, number>;
|
|
129
|
-
/** Merged working byte map. */
|
|
130
|
-
bytes: Map<number, number>;
|
|
131
|
-
/** Code source segments for listing. */
|
|
132
|
-
codeSourceSegments: EmittedSourceSegment[];
|
|
133
|
-
/** Optional default code load address. */
|
|
134
|
-
defaultCodeBase?: number;
|
|
135
|
-
/** Alignment helper. */
|
|
136
|
-
alignTo: (n: number, alignment: number) => number;
|
|
137
|
-
/** Copies one byte-offset map into the merged `bytes` map. */
|
|
138
|
-
writeBytePlacement: (base: number, byteOffsets: Map<number, number>, bytes: Map<number, number>, report: (message: string) => void) => void;
|
|
139
|
-
/** Min/max written addresses for overlap checks. */
|
|
140
|
-
computeWrittenRange: (bytes: Map<number, number>) => AddressRange;
|
|
141
|
-
/** Rebases listing segments after code base is fixed. */
|
|
142
|
-
rebaseCodeSourceSegments: (codeBase: number, segments: EmittedSourceSegment[]) => EmittedSourceSegment[];
|
|
143
|
-
};
|
|
144
|
-
export { finalizeProgramEmission } from './programLoweringFinalize.js';
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { AddressRange, EmittedSourceSegment } from '../formats/types.js';
|
|
2
|
-
import type { ProgramEmissionFinalizeContext } from './programLowering.js';
|
|
3
|
-
export declare function computePlacementBases(ctx: Pick<ProgramEmissionFinalizeContext, 'baseExprs' | 'evalImmExpr' | 'env' | 'diagnostics' | 'diag' | 'primaryFile' | 'alignTo' | 'codeOffset' | 'dataOffset'>, defaultCodeBase?: number, options?: {
|
|
4
|
-
quiet?: boolean;
|
|
5
|
-
}): {
|
|
6
|
-
codeBase: number;
|
|
7
|
-
dataBase: number;
|
|
8
|
-
codeOk: boolean;
|
|
9
|
-
dataOk: boolean;
|
|
10
|
-
};
|
|
11
|
-
export declare function finalizeProgramEmission(ctx: ProgramEmissionFinalizeContext): {
|
|
12
|
-
codeBase: number;
|
|
13
|
-
dataBase: number;
|
|
14
|
-
codeOk: boolean;
|
|
15
|
-
dataOk: boolean;
|
|
16
|
-
writtenRange: AddressRange;
|
|
17
|
-
sourceSegments: EmittedSourceSegment[];
|
|
18
|
-
};
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { createFixupBaseResolver } from './fixupBaseResolution.js';
|
|
2
|
-
export function computePlacementBases(ctx, defaultCodeBase, options) {
|
|
3
|
-
const diagnostics = options?.quiet ? [] : ctx.diagnostics;
|
|
4
|
-
const diagFn = options?.quiet ? () => { } : ctx.diag;
|
|
5
|
-
const evalBase = (kind) => {
|
|
6
|
-
const at = ctx.baseExprs[kind];
|
|
7
|
-
if (!at)
|
|
8
|
-
return undefined;
|
|
9
|
-
const value = ctx.evalImmExpr(at, ctx.env, diagnostics);
|
|
10
|
-
if (value === undefined) {
|
|
11
|
-
diagFn(diagnostics, at.span.file, `Failed to evaluate placement "${kind}" base address.`);
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
if (value < 0 || value > 0xffff) {
|
|
15
|
-
diagFn(diagnostics, at.span.file, `Placement "${kind}" base address out of range (0..65535).`);
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
return value;
|
|
19
|
-
};
|
|
20
|
-
const explicitCodeBase = evalBase('code');
|
|
21
|
-
const explicitDataBase = evalBase('data');
|
|
22
|
-
const codeOk = explicitCodeBase !== undefined || !ctx.baseExprs.code;
|
|
23
|
-
const codeBase = explicitCodeBase ?? defaultCodeBase ?? 0;
|
|
24
|
-
const dataBase = explicitDataBase ??
|
|
25
|
-
(codeOk
|
|
26
|
-
? ctx.alignTo(codeBase + ctx.codeOffset, 2)
|
|
27
|
-
: (diagFn(diagnostics, ctx.primaryFile, `Cannot compute default data base address because code base address is invalid.`),
|
|
28
|
-
0));
|
|
29
|
-
const dataOk = explicitDataBase !== undefined || (ctx.baseExprs.data === undefined && codeOk);
|
|
30
|
-
return { codeBase, dataBase, codeOk, dataOk };
|
|
31
|
-
}
|
|
32
|
-
export function finalizeProgramEmission(ctx) {
|
|
33
|
-
const { codeBase, dataBase, codeOk, dataOk } = computePlacementBases(ctx, ctx.defaultCodeBase);
|
|
34
|
-
const addrByNameLower = new Map();
|
|
35
|
-
for (const ps of ctx.pending) {
|
|
36
|
-
const base = ps.placement === 'code' ? codeBase : dataBase;
|
|
37
|
-
const ok = ps.placement === 'code' ? codeOk : dataOk;
|
|
38
|
-
if (!ok)
|
|
39
|
-
continue;
|
|
40
|
-
addrByNameLower.set(ps.name.toLowerCase(), base + ps.offset);
|
|
41
|
-
}
|
|
42
|
-
for (const [name, value] of ctx.env.equates) {
|
|
43
|
-
addrByNameLower.set(name.toLowerCase(), value);
|
|
44
|
-
}
|
|
45
|
-
for (const sym of ctx.symbols) {
|
|
46
|
-
if (sym.kind === 'constant')
|
|
47
|
-
continue;
|
|
48
|
-
addrByNameLower.set(sym.name.toLowerCase(), sym.address);
|
|
49
|
-
}
|
|
50
|
-
for (const sym of ctx.absoluteSymbols) {
|
|
51
|
-
if (sym.kind === 'constant' || sym.address === undefined)
|
|
52
|
-
continue;
|
|
53
|
-
addrByNameLower.set(sym.name.toLowerCase(), sym.address);
|
|
54
|
-
}
|
|
55
|
-
const resolveFixupBase = createFixupBaseResolver({ env: ctx.env, addrByNameLower });
|
|
56
|
-
for (const fx of ctx.fixups) {
|
|
57
|
-
const base = resolveFixupBase(fx.baseLower);
|
|
58
|
-
const addr = base === undefined ? undefined : base + fx.addend;
|
|
59
|
-
if (addr === undefined) {
|
|
60
|
-
ctx.diag(ctx.diagnostics, fx.file, `Unresolved symbol "${fx.baseLower}" in 16-bit fixup.`);
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
if (addr < 0 || addr > 0xffff) {
|
|
64
|
-
ctx.diag(ctx.diagnostics, fx.file, `16-bit fixup address out of range for "${fx.baseLower}" with addend ${fx.addend}: ${addr}.`);
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
ctx.codeBytes.set(fx.offset, addr & 0xff);
|
|
68
|
-
ctx.codeBytes.set(fx.offset + 1, (addr >> 8) & 0xff);
|
|
69
|
-
}
|
|
70
|
-
for (const fx of ctx.rel8Fixups) {
|
|
71
|
-
const base = resolveFixupBase(fx.baseLower);
|
|
72
|
-
const target = base === undefined ? undefined : base + fx.addend;
|
|
73
|
-
if (target === undefined) {
|
|
74
|
-
ctx.diag(ctx.diagnostics, fx.file, `Unresolved symbol "${fx.baseLower}" in rel8 ${fx.mnemonic} fixup.`);
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
const origin = codeBase + fx.origin;
|
|
78
|
-
const disp = target - origin;
|
|
79
|
-
if (disp < -128 || disp > 127) {
|
|
80
|
-
ctx.diag(ctx.diagnostics, fx.file, `${fx.mnemonic} target out of range for rel8 branch (${disp}, expected -128..127).`);
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
ctx.codeBytes.set(fx.offset, disp & 0xff);
|
|
84
|
-
}
|
|
85
|
-
if (codeOk) {
|
|
86
|
-
ctx.writeBytePlacement(codeBase, ctx.codeBytes, ctx.bytes, (message) => ctx.diag(ctx.diagnostics, ctx.primaryFile, message));
|
|
87
|
-
}
|
|
88
|
-
if (dataOk) {
|
|
89
|
-
ctx.writeBytePlacement(dataBase, ctx.dataBytes, ctx.bytes, (message) => ctx.diag(ctx.diagnostics, ctx.primaryFile, message));
|
|
90
|
-
}
|
|
91
|
-
for (const ps of ctx.pending) {
|
|
92
|
-
const base = ps.placement === 'code' ? codeBase : dataBase;
|
|
93
|
-
const ok = ps.placement === 'code' ? codeOk : dataOk;
|
|
94
|
-
if (!ok)
|
|
95
|
-
continue;
|
|
96
|
-
ctx.symbols.push({
|
|
97
|
-
kind: ps.kind,
|
|
98
|
-
name: ps.name,
|
|
99
|
-
address: base + ps.offset,
|
|
100
|
-
...(ps.file !== undefined ? { file: ps.file } : {}),
|
|
101
|
-
...(ps.line !== undefined ? { line: ps.line } : {}),
|
|
102
|
-
...(ps.scope !== undefined ? { scope: ps.scope } : {}),
|
|
103
|
-
...(ps.size !== undefined ? { size: ps.size } : {}),
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
ctx.symbols.push(...ctx.absoluteSymbols);
|
|
107
|
-
return {
|
|
108
|
-
codeBase,
|
|
109
|
-
dataBase,
|
|
110
|
-
codeOk,
|
|
111
|
-
dataOk,
|
|
112
|
-
writtenRange: ctx.computeWrittenRange(ctx.bytes),
|
|
113
|
-
sourceSegments: codeOk ? ctx.rebaseCodeSourceSegments(codeBase, ctx.codeSourceSegments) : [],
|
|
114
|
-
};
|
|
115
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { createProgramLoweringDeclarationHelpers } from './programLoweringDeclarations.js';
|
|
2
|
-
import { tryLowerAsmDirective } from './asmDirectiveLowering.js';
|
|
3
|
-
import { lowerAsmSourceInstruction } from './asmSourceInstructionLowering.js';
|
|
4
|
-
import { isAsmBinFromDirective, isAsmBinToDirective, isAsmEndDirective, isAsmOrgDirective, isAsmRawDataDirective, } from './asmDirectiveTraversal.js';
|
|
5
|
-
function placementForAsmOrg(items, index) {
|
|
6
|
-
for (let lookahead = index + 1; lookahead < items.length; lookahead++) {
|
|
7
|
-
const next = items[lookahead];
|
|
8
|
-
if (!next?.kind)
|
|
9
|
-
continue;
|
|
10
|
-
if (isAsmRawDataDirective(next))
|
|
11
|
-
return 'data';
|
|
12
|
-
if (next.kind === 'AsmLabel' || next.kind === 'AsmEqu')
|
|
13
|
-
continue;
|
|
14
|
-
return 'code';
|
|
15
|
-
}
|
|
16
|
-
return 'code';
|
|
17
|
-
}
|
|
18
|
-
function lowerItem(ctx, lowerAsmRawDataDirective, item) {
|
|
19
|
-
if (tryLowerAsmDirective(ctx, item))
|
|
20
|
-
return;
|
|
21
|
-
if (item.kind === 'AsmInstruction') {
|
|
22
|
-
lowerAsmSourceInstruction(ctx, item);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
if (isAsmRawDataDirective(item)) {
|
|
26
|
-
lowerAsmRawDataDirective(item);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
if (item.kind === 'EnumDecl') {
|
|
30
|
-
const enumDecl = item;
|
|
31
|
-
for (let idx = 0; idx < enumDecl.members.length; idx++) {
|
|
32
|
-
const member = enumDecl.members[idx];
|
|
33
|
-
const name = `${enumDecl.name}.${member}`;
|
|
34
|
-
if (ctx.env.enums.get(name) !== idx)
|
|
35
|
-
continue;
|
|
36
|
-
if (ctx.taken.has(name)) {
|
|
37
|
-
ctx.diag(ctx.diagnostics, enumDecl.span.file, `Duplicate symbol name "${name}".`);
|
|
38
|
-
continue;
|
|
39
|
-
}
|
|
40
|
-
ctx.taken.add(name);
|
|
41
|
-
ctx.symbols.push({
|
|
42
|
-
kind: 'constant',
|
|
43
|
-
name,
|
|
44
|
-
value: idx,
|
|
45
|
-
file: enumDecl.span.file,
|
|
46
|
-
line: enumDecl.span.start.line,
|
|
47
|
-
scope: 'global',
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
if (item.kind === 'OpDecl') {
|
|
53
|
-
const op = item;
|
|
54
|
-
const key = op.name.toLowerCase();
|
|
55
|
-
if (ctx.taken.has(op.name) && !ctx.declaredOpNames.has(key)) {
|
|
56
|
-
ctx.diag(ctx.diagnostics, op.span.file, `Duplicate symbol name "${op.name}".`);
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
ctx.taken.add(op.name);
|
|
60
|
-
ctx.declaredOpNames.add(key);
|
|
61
|
-
}
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export function lowerProgramDeclarations(ctx) {
|
|
66
|
-
const { lowerAsmRawDataDirective } = createProgramLoweringDeclarationHelpers(ctx);
|
|
67
|
-
for (const sourceFile of ctx.program.files) {
|
|
68
|
-
ctx.activePlacementRef.current = 'code';
|
|
69
|
-
let asmEndReached = false;
|
|
70
|
-
for (let index = 0; index < sourceFile.items.length; index++) {
|
|
71
|
-
const item = sourceFile.items[index];
|
|
72
|
-
if (isAsmEndDirective(item)) {
|
|
73
|
-
asmEndReached = true;
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
if (asmEndReached && !isAsmBinFromDirective(item) && !isAsmBinToDirective(item))
|
|
77
|
-
continue;
|
|
78
|
-
if (isAsmOrgDirective(item)) {
|
|
79
|
-
ctx.activePlacementRef.current = placementForAsmOrg(sourceFile.items, index);
|
|
80
|
-
}
|
|
81
|
-
lowerItem(ctx, lowerAsmRawDataDirective, item);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return {
|
|
85
|
-
codeOffset: ctx.codeOffsetRef.current,
|
|
86
|
-
dataOffset: ctx.dataOffsetRef.current,
|
|
87
|
-
pending: ctx.pending,
|
|
88
|
-
symbols: ctx.symbols,
|
|
89
|
-
absoluteSymbols: ctx.absoluteSymbols,
|
|
90
|
-
codeBytes: ctx.codeBytes,
|
|
91
|
-
dataBytes: ctx.dataBytes,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
function getOrCreateFileOps(ctx, file) {
|
|
2
|
-
const existing = ctx.localOpsByFile.get(file);
|
|
3
|
-
if (existing)
|
|
4
|
-
return existing;
|
|
5
|
-
const created = new Map();
|
|
6
|
-
ctx.localOpsByFile.set(file, created);
|
|
7
|
-
return created;
|
|
8
|
-
}
|
|
9
|
-
function addFileOp(ctx, file, key, op) {
|
|
10
|
-
const fileOps = getOrCreateFileOps(ctx, file);
|
|
11
|
-
const existing = fileOps.get(key);
|
|
12
|
-
if (existing)
|
|
13
|
-
existing.push(op);
|
|
14
|
-
else
|
|
15
|
-
fileOps.set(key, [op]);
|
|
16
|
-
}
|
|
17
|
-
function preScanItem(ctx, item, sourceUnitFile) {
|
|
18
|
-
const localSourceUnitFile = sourceUnitFile ?? item.span?.file ?? ctx.program.entryFile;
|
|
19
|
-
if (item.kind === 'OpDecl') {
|
|
20
|
-
const op = item;
|
|
21
|
-
const key = op.name.toLowerCase();
|
|
22
|
-
addFileOp(ctx, localSourceUnitFile, key, op);
|
|
23
|
-
if (op.span.file !== localSourceUnitFile)
|
|
24
|
-
addFileOp(ctx, op.span.file, key, op);
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export function preScanProgramDeclarations(ctx) {
|
|
29
|
-
for (const sourceFile of ctx.program.files) {
|
|
30
|
-
for (const item of sourceFile.items)
|
|
31
|
-
preScanItem(ctx, item, sourceFile.path);
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
localOpsByFile: ctx.localOpsByFile,
|
|
35
|
-
declaredOpNames: ctx.declaredOpNames,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { AsmOperandNode, EaExprNode, ImmExprNode } from '../frontend/ast.js';
|
|
2
|
-
export declare const formatImmExprForAsm: (expr: ImmExprNode) => string;
|
|
3
|
-
type EaExprFormatOptions = {
|
|
4
|
-
formatImmExpr: (expr: ImmExprNode) => string;
|
|
5
|
-
wrapImmEa?: boolean;
|
|
6
|
-
};
|
|
7
|
-
export declare const formatEaExpr: (ea: EaExprNode, { formatImmExpr, wrapImmEa }: EaExprFormatOptions) => string;
|
|
8
|
-
export declare const formatAsmInstrForTrace: (head: string, operands: AsmOperandNode[]) => string;
|
|
9
|
-
export declare const formatAbs16FixupAsm: (opcode: number, baseLower: string, addend: number) => string;
|
|
10
|
-
export declare const formatAbs16FixupEdAsm: (opcode2: number, baseLower: string, addend: number) => string;
|
|
11
|
-
export declare const formatAbs16FixupPrefixedAsm: (prefix: number, opcode2: number, baseLower: string, addend: number) => string;
|
|
12
|
-
export declare const formatIxDisp: (disp: number) => string;
|
|
13
|
-
export {};
|