@jhlagado/azm 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -78
- package/dist/src/api-compile.d.ts +0 -2
- package/dist/src/api-compile.js +2 -9
- package/dist/src/assembly/address-planning.js +21 -1
- package/dist/src/assembly/program-emission.js +1 -0
- 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 +192 -9
- package/dist/src/expansion/op-expansion.js +2 -0
- package/dist/src/model/expression.d.ts +4 -0
- package/dist/src/model/source-item.d.ts +11 -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 +206 -5
- package/dist/src/register-care/analyze.js +36 -8
- package/dist/src/register-care/annotations.js +33 -146
- package/dist/src/register-care/fix.d.ts +2 -0
- package/dist/src/register-care/fix.js +52 -0
- package/dist/src/register-care/instruction-shape.d.ts +11 -0
- package/dist/src/register-care/instruction-shape.js +129 -0
- package/dist/src/register-care/liveness.js +15 -7
- package/dist/src/register-care/profiles.js +4 -0
- package/dist/src/register-care/programModel.js +79 -13
- package/dist/src/register-care/report.d.ts +2 -1
- package/dist/src/register-care/report.js +91 -34
- package/dist/src/register-care/routine-summaries.d.ts +6 -0
- package/dist/src/register-care/routine-summaries.js +89 -0
- package/dist/src/register-care/summaries.d.ts +3 -3
- package/dist/src/register-care/summaries.js +42 -75
- package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.js +33 -51
- package/dist/src/register-care/types.d.ts +6 -1
- package/dist/src/semantics/expression-evaluation.d.ts +7 -3
- package/dist/src/semantics/expression-evaluation.js +57 -0
- package/dist/src/source/strip-line-comment.d.ts +2 -0
- package/dist/src/source/strip-line-comment.js +26 -0
- package/dist/src/syntax/directive-aliases.js +9 -10
- package/dist/src/syntax/parse-diagnostics.d.ts +12 -0
- package/dist/src/syntax/parse-diagnostics.js +18 -0
- package/dist/src/syntax/parse-expression.js +34 -9
- package/dist/src/syntax/parse-line.js +150 -54
- package/dist/src/tooling/case-style.js +3 -0
- package/docs/reference/cli.md +6 -4
- package/docs/reference/tooling-api.md +13 -9
- package/package.json +4 -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/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/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
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.d.ts +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/annotate.js +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.d.ts +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/sourceText.js +0 -0
- /package/dist/{legacy-root-azm/src/registerCare → src/register-care}/summary.d.ts +0 -0
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic, DiagnosticId } from '../diagnosticTypes.js';
|
|
2
|
-
import type { AsmItemNode, AsmOperandNode, EaExprNode, ImmExprNode, OpDeclNode, SourceSpan } from '../frontend/ast.js';
|
|
3
|
-
import type { CompileEnv } from '../semantics/env.js';
|
|
4
|
-
import type { OpOverloadSelection } from './opMatching.js';
|
|
5
|
-
export interface LoweringDiagnosticsCapability {
|
|
6
|
-
/** Mutable diagnostic list. */
|
|
7
|
-
diagnostics: Diagnostic[];
|
|
8
|
-
/** Span-attached diagnostic. */
|
|
9
|
-
diagAt: (diagnostics: Diagnostic[], span: SourceSpan, message: string) => void;
|
|
10
|
-
}
|
|
11
|
-
interface LoweringDiagnosticsWithIdCapability extends LoweringDiagnosticsCapability {
|
|
12
|
-
/** Diagnostic with stable id. */
|
|
13
|
-
diagAtWithId: (diagnostics: Diagnostic[], span: SourceSpan, id: DiagnosticId, message: string) => void;
|
|
14
|
-
}
|
|
15
|
-
export interface LoweringDiagnosticsWithSeverityCapability extends LoweringDiagnosticsWithIdCapability {
|
|
16
|
-
/** Diagnostic with id and severity. */
|
|
17
|
-
diagAtWithSeverityAndId: (diagnostics: Diagnostic[], span: SourceSpan, id: DiagnosticId, severity: 'warning' | 'error', message: string) => void;
|
|
18
|
-
}
|
|
19
|
-
export interface CompileEnvCapability {
|
|
20
|
-
/** Compile environment (equates, enums, types). */
|
|
21
|
-
env: CompileEnv;
|
|
22
|
-
}
|
|
23
|
-
export interface AstCloneCapability {
|
|
24
|
-
/** Deep-clone an imm AST node. */
|
|
25
|
-
cloneImmExpr: (expr: ImmExprNode) => ImmExprNode;
|
|
26
|
-
/** Deep-clone an EA AST node. */
|
|
27
|
-
cloneEaExpr: (ea: EaExprNode) => EaExprNode;
|
|
28
|
-
/** Deep-clone an asm operand. */
|
|
29
|
-
cloneOperand: (operand: AsmOperandNode) => AsmOperandNode;
|
|
30
|
-
}
|
|
31
|
-
export interface DottedEaNameCapability {
|
|
32
|
-
/** Flattens dotted EA to a single string; `undefined` if not a simple dotted path. */
|
|
33
|
-
flattenEaDottedName: (ea: EaExprNode) => string | undefined;
|
|
34
|
-
}
|
|
35
|
-
export interface FixedTokenNormalizationCapability {
|
|
36
|
-
/** Normalizes fixed tokens for op matching; `undefined` if not applicable. */
|
|
37
|
-
normalizeFixedToken: (operand: AsmOperandNode) => string | undefined;
|
|
38
|
-
}
|
|
39
|
-
export interface InverseConditionCapability {
|
|
40
|
-
/** Inverts a condition name for opposite branch; `undefined` if unknown. */
|
|
41
|
-
inverseConditionName: (name: string) => string | undefined;
|
|
42
|
-
}
|
|
43
|
-
export interface HiddenLabelCapability {
|
|
44
|
-
/** Allocates a unique hidden label with `prefix`. */
|
|
45
|
-
newHiddenLabel: (prefix: string) => string;
|
|
46
|
-
}
|
|
47
|
-
export interface AsmRangeLoweringCapability {
|
|
48
|
-
/** Lowers a contiguous asm range until `stopKinds`; returns next index. */
|
|
49
|
-
lowerAsmRange: (items: readonly AsmItemNode[], startIndex: number, stopKinds: Set<string>) => number;
|
|
50
|
-
}
|
|
51
|
-
export interface FlowSyncCapability {
|
|
52
|
-
/** Persists structured-control state into the flow ref. */
|
|
53
|
-
syncToFlow: () => void;
|
|
54
|
-
}
|
|
55
|
-
export interface OpCandidateResolverCapability {
|
|
56
|
-
/** Resolves op overloads; `undefined` if none. */
|
|
57
|
-
resolveOpCandidates: (name: string, file: string) => OpDeclNode[] | undefined;
|
|
58
|
-
}
|
|
59
|
-
export interface OpOperandFormattingCapability {
|
|
60
|
-
/** Renders an operand for diagnostic text. */
|
|
61
|
-
formatAsmOperandForOpDiag: (operand: AsmOperandNode) => string;
|
|
62
|
-
}
|
|
63
|
-
export interface OpOverloadSelectionCapability {
|
|
64
|
-
/** Picks overload from operands; returns selection metadata. */
|
|
65
|
-
selectOpOverload: (overloads: OpDeclNode[], operands: AsmOperandNode[]) => OpOverloadSelection;
|
|
66
|
-
}
|
|
67
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic } from '../diagnosticTypes.js';
|
|
2
|
-
import type { EaExprNode, SourceSpan, TypeExprNode } from '../frontend/ast.js';
|
|
3
|
-
import { type CompileEnv } from '../semantics/env.js';
|
|
4
|
-
export type EaResolution = {
|
|
5
|
-
/** Resolved global/absolute label or numeric base. */
|
|
6
|
-
kind: 'abs';
|
|
7
|
-
/** Lowercased symbol name or stringified numeric base for fixups. */
|
|
8
|
-
baseLower: string;
|
|
9
|
-
/** Byte offset added to the base symbol. */
|
|
10
|
-
addend: number;
|
|
11
|
-
/** Optional inferred type at this address; omit when unknown. */
|
|
12
|
-
typeExpr?: TypeExprNode;
|
|
13
|
-
};
|
|
14
|
-
/** Maps, env, and type hooks used by {@link createEaResolutionHelpers} — not the full assembler-lowering context. */
|
|
15
|
-
type EAResolutionContext = {
|
|
16
|
-
/** Compile-time const/enum/type environment for imm evaluation. */
|
|
17
|
-
env: CompileEnv;
|
|
18
|
-
/** Mutable diagnostic list for resolution errors. */
|
|
19
|
-
diagnostics: Diagnostic[];
|
|
20
|
-
/** Appends a span-attached diagnostic. */
|
|
21
|
-
diagAt: (diagnostics: Diagnostic[], span: SourceSpan, message: string) => void;
|
|
22
|
-
/** Evaluates immediates with diagnostics; `undefined` if ill-typed or non-const. */
|
|
23
|
-
evalImmExpr: (expr: import('../frontend/ast.js').ImmExprNode) => number | undefined;
|
|
24
|
-
/** Evaluates immediates without recording diagnostics (best-effort). */
|
|
25
|
-
evalImmNoDiag: (expr: import('../frontend/ast.js').ImmExprNode) => number | undefined;
|
|
26
|
-
/** Classifies scalar kinds for layout; `undefined` if not a scalar shape. */
|
|
27
|
-
resolveScalarKind: (typeExpr: TypeExprNode) => 'byte' | 'word' | 'addr' | undefined;
|
|
28
|
-
/** Unwraps record/union for field walk; `undefined` if not aggregate. */
|
|
29
|
-
resolveAggregateType: (te: TypeExprNode) => {
|
|
30
|
-
kind: 'record' | 'union';
|
|
31
|
-
fields: import('../frontend/ast.js').RecordFieldNode[];
|
|
32
|
-
} | undefined;
|
|
33
|
-
/** Infers a type for an EA subexpression when possible; `undefined` if unknown. */
|
|
34
|
-
resolveEaTypeExpr: (ea: EaExprNode) => TypeExprNode | undefined;
|
|
35
|
-
/** Layout size in bytes; `undefined` if layout cannot be computed. */
|
|
36
|
-
sizeOfTypeExpr: (te: TypeExprNode) => number | undefined;
|
|
37
|
-
};
|
|
38
|
-
/** Builds {@link EAResolutionContext} from emit-phase env/workspace plus type-resolution hooks. */
|
|
39
|
-
export declare function buildEaResolutionContext(params: {
|
|
40
|
-
/** See {@link EAResolutionContext.env}. */
|
|
41
|
-
env: CompileEnv;
|
|
42
|
-
/** See {@link EAResolutionContext.diagnostics}. */
|
|
43
|
-
diagnostics: Diagnostic[];
|
|
44
|
-
/** See {@link EAResolutionContext.diagAt}. */
|
|
45
|
-
diagAt: EAResolutionContext['diagAt'];
|
|
46
|
-
/** See {@link EAResolutionContext.resolveScalarKind}. */
|
|
47
|
-
resolveScalarKind: EAResolutionContext['resolveScalarKind'];
|
|
48
|
-
/** See {@link EAResolutionContext.resolveAggregateType}. */
|
|
49
|
-
resolveAggregateType: EAResolutionContext['resolveAggregateType'];
|
|
50
|
-
/** See {@link EAResolutionContext.resolveEaTypeExpr}. */
|
|
51
|
-
resolveEaTypeExpr: EAResolutionContext['resolveEaTypeExpr'];
|
|
52
|
-
/** See {@link EAResolutionContext.evalImmNoDiag}. */
|
|
53
|
-
evalImmNoDiag: EAResolutionContext['evalImmNoDiag'];
|
|
54
|
-
}): EAResolutionContext;
|
|
55
|
-
export declare function createEaResolutionHelpers(ctx: EAResolutionContext): {
|
|
56
|
-
resolveEa: (ea: EaExprNode, span: SourceSpan) => EaResolution | undefined;
|
|
57
|
-
};
|
|
58
|
-
export {};
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { evalImmExpr } from '../semantics/env.js';
|
|
2
|
-
import { sizeOfTypeExpr } from '../semantics/layout.js';
|
|
3
|
-
import { foldLayoutCastAbsEa, isLayoutCastLabelBase } from '../semantics/layoutCastFold.js';
|
|
4
|
-
/** Builds {@link EAResolutionContext} from emit-phase env/workspace plus type-resolution hooks. */
|
|
5
|
-
export function buildEaResolutionContext(params) {
|
|
6
|
-
const { env, diagnostics, diagAt } = params;
|
|
7
|
-
return {
|
|
8
|
-
env,
|
|
9
|
-
diagnostics,
|
|
10
|
-
diagAt,
|
|
11
|
-
evalImmExpr: (expr) => evalImmExpr(expr, env, diagnostics),
|
|
12
|
-
evalImmNoDiag: params.evalImmNoDiag,
|
|
13
|
-
resolveScalarKind: params.resolveScalarKind,
|
|
14
|
-
resolveAggregateType: params.resolveAggregateType,
|
|
15
|
-
resolveEaTypeExpr: params.resolveEaTypeExpr,
|
|
16
|
-
sizeOfTypeExpr: (te) => sizeOfTypeExpr(te, env, diagnostics),
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export function createEaResolutionHelpers(ctx) {
|
|
20
|
-
const hasKnownType = (typeExpr) => ctx.resolveScalarKind(typeExpr) !== undefined ||
|
|
21
|
-
ctx.resolveAggregateType(typeExpr) !== undefined ||
|
|
22
|
-
ctx.sizeOfTypeExpr(typeExpr) !== undefined;
|
|
23
|
-
const resolveEa = (ea, span) => {
|
|
24
|
-
const go = (expr) => {
|
|
25
|
-
const layoutFold = foldLayoutCastAbsEa(expr, {
|
|
26
|
-
env: ctx.env,
|
|
27
|
-
evalImm: ctx.evalImmExpr,
|
|
28
|
-
resolveAbsBase: (baseEa) => {
|
|
29
|
-
const baseResolved = go(baseEa);
|
|
30
|
-
if (baseResolved?.kind !== 'abs')
|
|
31
|
-
return undefined;
|
|
32
|
-
return { baseLower: baseResolved.baseLower, addend: baseResolved.addend };
|
|
33
|
-
},
|
|
34
|
-
diagnostics: ctx.diagnostics,
|
|
35
|
-
});
|
|
36
|
-
if (layoutFold) {
|
|
37
|
-
return { kind: 'abs', baseLower: layoutFold.baseLower, addend: layoutFold.addend };
|
|
38
|
-
}
|
|
39
|
-
switch (expr.kind) {
|
|
40
|
-
case 'EaName': {
|
|
41
|
-
const baseLower = expr.name.toLowerCase();
|
|
42
|
-
const constValue = ctx.evalImmNoDiag({
|
|
43
|
-
kind: 'ImmName',
|
|
44
|
-
span: expr.span,
|
|
45
|
-
name: expr.name,
|
|
46
|
-
});
|
|
47
|
-
if (constValue !== undefined) {
|
|
48
|
-
return { kind: 'abs', baseLower: String(constValue), addend: 0 };
|
|
49
|
-
}
|
|
50
|
-
return { kind: 'abs', baseLower, addend: 0 };
|
|
51
|
-
}
|
|
52
|
-
case 'EaImm': {
|
|
53
|
-
const value = ctx.evalImmNoDiag(expr.expr);
|
|
54
|
-
if (value === undefined)
|
|
55
|
-
return undefined;
|
|
56
|
-
return { kind: 'abs', baseLower: String(value), addend: 0 };
|
|
57
|
-
}
|
|
58
|
-
case 'EaLayoutCast': {
|
|
59
|
-
if (!hasKnownType(expr.typeExpr))
|
|
60
|
-
return undefined;
|
|
61
|
-
if (isLayoutCastLabelBase(expr.base)) {
|
|
62
|
-
const baseResolved = go(expr.base);
|
|
63
|
-
if (baseResolved?.kind === 'abs') {
|
|
64
|
-
return { ...baseResolved, typeExpr: expr.typeExpr };
|
|
65
|
-
}
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
return undefined;
|
|
69
|
-
}
|
|
70
|
-
case 'EaAdd':
|
|
71
|
-
case 'EaSub': {
|
|
72
|
-
const base = go(expr.base);
|
|
73
|
-
if (!base)
|
|
74
|
-
return undefined;
|
|
75
|
-
const v = ctx.evalImmNoDiag(expr.offset);
|
|
76
|
-
if (v === undefined)
|
|
77
|
-
return undefined;
|
|
78
|
-
const delta = expr.kind === 'EaAdd' ? v : -v;
|
|
79
|
-
if (base.kind === 'abs')
|
|
80
|
-
return { ...base, addend: base.addend + delta };
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
case 'EaField': {
|
|
84
|
-
const base = go(expr.base);
|
|
85
|
-
if (!base)
|
|
86
|
-
return undefined;
|
|
87
|
-
if (!base.typeExpr) {
|
|
88
|
-
ctx.diagAt(ctx.diagnostics, span, `Cannot resolve field "${expr.field}" without layout type information.`);
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
const agg = ctx.resolveAggregateType(base.typeExpr);
|
|
92
|
-
if (!agg) {
|
|
93
|
-
ctx.diagAt(ctx.diagnostics, span, `Field access ".${expr.field}" requires a record or union type.`);
|
|
94
|
-
return undefined;
|
|
95
|
-
}
|
|
96
|
-
let off = 0;
|
|
97
|
-
for (const f of agg.fields) {
|
|
98
|
-
if (f.name === expr.field) {
|
|
99
|
-
if (base.kind === 'abs') {
|
|
100
|
-
return {
|
|
101
|
-
kind: 'abs',
|
|
102
|
-
baseLower: base.baseLower,
|
|
103
|
-
addend: base.addend + off,
|
|
104
|
-
typeExpr: f.typeExpr,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
return undefined;
|
|
108
|
-
}
|
|
109
|
-
if (agg.kind === 'record') {
|
|
110
|
-
const sz = sizeOfTypeExpr(f.typeExpr, ctx.env, ctx.diagnostics);
|
|
111
|
-
if (sz === undefined)
|
|
112
|
-
return undefined;
|
|
113
|
-
off += sz;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const kind = agg.kind === 'union' ? 'union' : 'record';
|
|
117
|
-
ctx.diagAt(ctx.diagnostics, span, `Unknown ${kind} field "${expr.field}".`);
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
case 'EaIndex': {
|
|
121
|
-
const base = go(expr.base);
|
|
122
|
-
if (!base)
|
|
123
|
-
return undefined;
|
|
124
|
-
if (!base.typeExpr) {
|
|
125
|
-
ctx.diagAt(ctx.diagnostics, span, `Cannot resolve indexing without layout type information.`);
|
|
126
|
-
return undefined;
|
|
127
|
-
}
|
|
128
|
-
if (base.typeExpr.kind !== 'ArrayType') {
|
|
129
|
-
ctx.diagAt(ctx.diagnostics, span, `Indexing requires an array type.`);
|
|
130
|
-
return undefined;
|
|
131
|
-
}
|
|
132
|
-
const elemSize = ctx.sizeOfTypeExpr(base.typeExpr.element);
|
|
133
|
-
if (elemSize === undefined)
|
|
134
|
-
return undefined;
|
|
135
|
-
if (expr.index.kind === 'IndexImm') {
|
|
136
|
-
const idx = ctx.evalImmExpr(expr.index.value);
|
|
137
|
-
if (idx === undefined)
|
|
138
|
-
return undefined;
|
|
139
|
-
const delta = idx * elemSize;
|
|
140
|
-
if (base.kind === 'abs') {
|
|
141
|
-
return {
|
|
142
|
-
kind: 'abs',
|
|
143
|
-
baseLower: base.baseLower,
|
|
144
|
-
addend: base.addend + delta,
|
|
145
|
-
typeExpr: base.typeExpr.element,
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
return undefined;
|
|
149
|
-
}
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
return go(ea);
|
|
155
|
-
};
|
|
156
|
-
return {
|
|
157
|
-
resolveEa,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
type EmissionCoreContext = {
|
|
2
|
-
/** Current code emission offset. */
|
|
3
|
-
getCodeOffset: () => number;
|
|
4
|
-
/** Sets absolute code offset cursor. */
|
|
5
|
-
setCodeOffset: (value: number) => void;
|
|
6
|
-
/** Writes one byte into the code map. */
|
|
7
|
-
setCodeByte: (offset: number, value: number) => void;
|
|
8
|
-
/** Extends source range map for listings. */
|
|
9
|
-
recordCodeSourceRange: (start: number, end: number) => void;
|
|
10
|
-
/** Optional trace hook for emitted bytes. */
|
|
11
|
-
traceInstruction: (start: number, bytes: Uint8Array, traceText: string) => void;
|
|
12
|
-
};
|
|
13
|
-
export declare function createEmissionCoreHelpers(ctx: EmissionCoreContext): {
|
|
14
|
-
emitCodeBytes: (bs: Uint8Array, _file: string) => number;
|
|
15
|
-
emitRawCodeBytes: (bs: Uint8Array, _file: string, traceText: string) => void;
|
|
16
|
-
};
|
|
17
|
-
export {};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export function createEmissionCoreHelpers(ctx) {
|
|
2
|
-
const emitCodeBytes = (bs, _file) => {
|
|
3
|
-
const start = ctx.getCodeOffset();
|
|
4
|
-
let codeOffset = start;
|
|
5
|
-
for (const b of bs) {
|
|
6
|
-
ctx.setCodeByte(codeOffset, b);
|
|
7
|
-
codeOffset++;
|
|
8
|
-
}
|
|
9
|
-
ctx.setCodeOffset(codeOffset);
|
|
10
|
-
ctx.recordCodeSourceRange(start, codeOffset);
|
|
11
|
-
return start;
|
|
12
|
-
};
|
|
13
|
-
const emitRawCodeBytes = (bs, _file, traceText) => {
|
|
14
|
-
const start = emitCodeBytes(bs, _file);
|
|
15
|
-
ctx.traceInstruction(start, bs, traceText);
|
|
16
|
-
};
|
|
17
|
-
return {
|
|
18
|
-
emitCodeBytes,
|
|
19
|
-
emitRawCodeBytes,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic } from '../diagnosticTypes.js';
|
|
2
|
-
import type { ProgramNode } from '../frontend/ast.js';
|
|
3
|
-
import type { CompileEnv } from '../semantics/env.js';
|
|
4
|
-
import { type EmitProgramOptions, type EmitProgramResult } from './emitPipeline.js';
|
|
5
|
-
/**
|
|
6
|
-
* Emit machine-code bytes for a parsed program into an address->byte map.
|
|
7
|
-
*
|
|
8
|
-
* Orchestration follows the phased pipeline in `emitPipeline.ts`. Phase 1 (workspace wiring)
|
|
9
|
-
* is implemented in this file; phases 2–4 use `runEmitPrescanPhase`, `runEmitLoweringPhase`,
|
|
10
|
-
* and `runEmitPlacementAndArtifactPhase`.
|
|
11
|
-
*
|
|
12
|
-
* Implementation notes:
|
|
13
|
-
* - Uses code and data byte maps while lowering, then merges them during placement.
|
|
14
|
-
* - `.org` and `.align` move the current assembler placement.
|
|
15
|
-
* - Detects overlapping byte emissions across the final address map.
|
|
16
|
-
*/
|
|
17
|
-
export declare function emitProgram(program: ProgramNode, env: CompileEnv, diagnostics: Diagnostic[], options?: EmitProgramOptions): EmitProgramResult;
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { emitProgramEmptyResult, mergeEmitFinalizationContext, runEmitLoweringPhase, runEmitPlacementAndArtifactPhase, runEmitPrescanPhase, } from './emitPipeline.js';
|
|
2
|
-
import { diag } from './loweringDiagnostics.js';
|
|
3
|
-
import { createEmitPhase1Workspace } from './emitPhase1Workspace.js';
|
|
4
|
-
import { createEmitPhase1Helpers } from './emitPhase1Helpers.js';
|
|
5
|
-
import { buildEmitFinalizationPhaseEnv } from './emitFinalizationSetup.js';
|
|
6
|
-
/**
|
|
7
|
-
* Emit machine-code bytes for a parsed program into an address->byte map.
|
|
8
|
-
*
|
|
9
|
-
* Orchestration follows the phased pipeline in `emitPipeline.ts`. Phase 1 (workspace wiring)
|
|
10
|
-
* is implemented in this file; phases 2–4 use `runEmitPrescanPhase`, `runEmitLoweringPhase`,
|
|
11
|
-
* and `runEmitPlacementAndArtifactPhase`.
|
|
12
|
-
*
|
|
13
|
-
* Implementation notes:
|
|
14
|
-
* - Uses code and data byte maps while lowering, then merges them during placement.
|
|
15
|
-
* - `.org` and `.align` move the current assembler placement.
|
|
16
|
-
* - Detects overlapping byte emissions across the final address map.
|
|
17
|
-
*/
|
|
18
|
-
export function emitProgram(program, env, diagnostics, options) {
|
|
19
|
-
const firstSourceFile = program.files[0];
|
|
20
|
-
if (!firstSourceFile) {
|
|
21
|
-
diag(diagnostics, program.entryFile, 'No source files to compile.');
|
|
22
|
-
return emitProgramEmptyResult();
|
|
23
|
-
}
|
|
24
|
-
const workspace = createEmitPhase1Workspace(program, env, options);
|
|
25
|
-
const phase1 = createEmitPhase1Helpers({
|
|
26
|
-
program,
|
|
27
|
-
env,
|
|
28
|
-
diagnostics,
|
|
29
|
-
workspace,
|
|
30
|
-
...(options !== undefined ? { options } : {}),
|
|
31
|
-
});
|
|
32
|
-
// --- Phase 2: prescan (op registry / alias metadata) ---
|
|
33
|
-
const prescan = runEmitPrescanPhase(phase1.programLoweringContext);
|
|
34
|
-
// --- Phase 3: lowering (bytes + fixup queues) ---
|
|
35
|
-
const lowered = runEmitLoweringPhase(phase1.programLoweringContext, prescan);
|
|
36
|
-
phase1.flushTrailingUserComments();
|
|
37
|
-
// --- Phase 4: placement, fixup resolution, merged `EmittedByteMap` ---
|
|
38
|
-
const finalized = runEmitPlacementAndArtifactPhase(mergeEmitFinalizationContext(lowered, buildEmitFinalizationPhaseEnv({
|
|
39
|
-
env,
|
|
40
|
-
diagnostics,
|
|
41
|
-
workspace,
|
|
42
|
-
helpers: phase1,
|
|
43
|
-
...(options !== undefined ? { options } : {}),
|
|
44
|
-
})));
|
|
45
|
-
return { ...finalized, loweredAsmStream: phase1.loweredAsmStream };
|
|
46
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Emit ↔ lowering context wiring (#1084, #1316)
|
|
3
|
-
*
|
|
4
|
-
* Assembler-lowering state is passed as {@link import('./assemblerLoweringContext.js').AssemblerLoweringComponentContexts}
|
|
5
|
-
* — named slices that merge into {@link import('./assemblerLoweringContext.js').AssemblerLoweringSharedContext}.
|
|
6
|
-
* Program-level fields stay on {@link EmitProgramLoweringContextInputs}.
|
|
7
|
-
*/
|
|
8
|
-
import type { AssemblerLoweringComponentContexts, AssemblerLoweringSharedContext, AssemblerLoweringSymbolContext } from './assemblerLoweringContext.js';
|
|
9
|
-
import type { Context as ProgramLoweringContext } from './programLowering.js';
|
|
10
|
-
/**
|
|
11
|
-
* Program-level fields merged with shared assembler-lowering hooks.
|
|
12
|
-
*/
|
|
13
|
-
export type EmitProgramLoweringContextInputs = {
|
|
14
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
15
|
-
program: ProgramLoweringContext['program'];
|
|
16
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
17
|
-
includeDirs: ProgramLoweringContext['includeDirs'];
|
|
18
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
19
|
-
localOpsByFile: ProgramLoweringContext['localOpsByFile'];
|
|
20
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
21
|
-
declaredOpNames: ProgramLoweringContext['declaredOpNames'];
|
|
22
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
23
|
-
absoluteSymbols: ProgramLoweringContext['absoluteSymbols'];
|
|
24
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
25
|
-
symbols: ProgramLoweringContext['symbols'];
|
|
26
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
27
|
-
dataBytes: ProgramLoweringContext['dataBytes'];
|
|
28
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
29
|
-
codeBytes: ProgramLoweringContext['codeBytes'];
|
|
30
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
31
|
-
activePlacementRef: ProgramLoweringContext['activePlacementRef'];
|
|
32
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
33
|
-
codeOffsetRef: ProgramLoweringContext['codeOffsetRef'];
|
|
34
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
35
|
-
dataOffsetRef: ProgramLoweringContext['dataOffsetRef'];
|
|
36
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
37
|
-
baseExprs: ProgramLoweringContext['baseExprs'];
|
|
38
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
39
|
-
advanceAlign: ProgramLoweringContext['advanceAlign'];
|
|
40
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
41
|
-
alignTo: ProgramLoweringContext['alignTo'];
|
|
42
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
43
|
-
loadBinInput: ProgramLoweringContext['loadBinInput'];
|
|
44
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
45
|
-
resolveAggregateType: ProgramLoweringContext['resolveAggregateType'];
|
|
46
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
47
|
-
sizeOfTypeExpr: ProgramLoweringContext['sizeOfTypeExpr'];
|
|
48
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
49
|
-
recordLoweredAsmItem: ProgramLoweringContext['recordLoweredAsmItem'];
|
|
50
|
-
/** @inheritdoc ProgramLoweringContext */
|
|
51
|
-
lowerImmExprForLoweredAsm: ProgramLoweringContext['lowerImmExprForLoweredAsm'];
|
|
52
|
-
/** @inheritdoc AssemblerLoweringSymbolContext */
|
|
53
|
-
currentCodeSegmentTagRef: AssemblerLoweringSymbolContext['currentCodeSegmentTagRef'];
|
|
54
|
-
};
|
|
55
|
-
export type EmitLoweringContextBuilderInput = {
|
|
56
|
-
/** Named assembler-lowering slices (merge to {@link AssemblerLoweringSharedContext}). */
|
|
57
|
-
readonly assemblerLowering: Readonly<AssemblerLoweringComponentContexts>;
|
|
58
|
-
readonly programLowering: Readonly<EmitProgramLoweringContextInputs>;
|
|
59
|
-
};
|
|
60
|
-
export declare function createEmitLoweringContexts(input: EmitLoweringContextBuilderInput): {
|
|
61
|
-
assemblerLoweringSharedContext: AssemblerLoweringSharedContext;
|
|
62
|
-
programLoweringContext: ProgramLoweringContext;
|
|
63
|
-
};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Emit ↔ lowering context wiring (#1084, #1316)
|
|
3
|
-
*
|
|
4
|
-
* Assembler-lowering state is passed as {@link import('./assemblerLoweringContext.js').AssemblerLoweringComponentContexts}
|
|
5
|
-
* — named slices that merge into {@link import('./assemblerLoweringContext.js').AssemblerLoweringSharedContext}.
|
|
6
|
-
* Program-level fields stay on {@link EmitProgramLoweringContextInputs}.
|
|
7
|
-
*/
|
|
8
|
-
import { mergeAssemblerLoweringSharedContext } from './assemblerLoweringContext.js';
|
|
9
|
-
const createAssemblerLoweringSharedContext = mergeAssemblerLoweringSharedContext;
|
|
10
|
-
function createProgramLoweringContext(shared, input) {
|
|
11
|
-
return {
|
|
12
|
-
...shared,
|
|
13
|
-
program: input.program,
|
|
14
|
-
includeDirs: input.includeDirs,
|
|
15
|
-
localOpsByFile: input.localOpsByFile,
|
|
16
|
-
declaredOpNames: input.declaredOpNames,
|
|
17
|
-
absoluteSymbols: input.absoluteSymbols,
|
|
18
|
-
symbols: input.symbols,
|
|
19
|
-
dataBytes: input.dataBytes,
|
|
20
|
-
codeBytes: input.codeBytes,
|
|
21
|
-
activePlacementRef: input.activePlacementRef,
|
|
22
|
-
codeOffsetRef: input.codeOffsetRef,
|
|
23
|
-
dataOffsetRef: input.dataOffsetRef,
|
|
24
|
-
baseExprs: input.baseExprs,
|
|
25
|
-
advanceAlign: input.advanceAlign,
|
|
26
|
-
alignTo: input.alignTo,
|
|
27
|
-
loadBinInput: input.loadBinInput,
|
|
28
|
-
resolveAggregateType: input.resolveAggregateType,
|
|
29
|
-
sizeOfTypeExpr: input.sizeOfTypeExpr,
|
|
30
|
-
recordLoweredAsmItem: input.recordLoweredAsmItem,
|
|
31
|
-
lowerImmExprForLoweredAsm: input.lowerImmExprForLoweredAsm,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
export function createEmitLoweringContexts(input) {
|
|
35
|
-
const assemblerLoweringSharedContext = createAssemblerLoweringSharedContext(input.assemblerLowering);
|
|
36
|
-
const programLoweringContext = createProgramLoweringContext(assemblerLoweringSharedContext, input.programLowering);
|
|
37
|
-
return {
|
|
38
|
-
assemblerLoweringSharedContext,
|
|
39
|
-
programLoweringContext,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic } from '../diagnosticTypes.js';
|
|
2
|
-
import type { EmittedByteMap, EmittedSourceSegment, SymbolEntry } from '../formats/types.js';
|
|
3
|
-
import type { SourceSpan } from '../frontend/ast.js';
|
|
4
|
-
import type { CompileEnv } from '../semantics/env.js';
|
|
5
|
-
import { type ProgramEmissionFinalizeContext } from './programLowering.js';
|
|
6
|
-
import type { LoweredAsmProgram, LoweredAsmStream } from './loweredAsmTypes.js';
|
|
7
|
-
export type EmitFinalizationContext = {
|
|
8
|
-
/** Mutable diagnostics for placement and emission. */
|
|
9
|
-
diagnostics: Diagnostic[];
|
|
10
|
-
/** File-scoped diagnostic helper. */
|
|
11
|
-
diag: (diagnostics: Diagnostic[], file: string, message: string) => void;
|
|
12
|
-
/** Span-scoped diagnostic helper. */
|
|
13
|
-
diagAt: (diagnostics: Diagnostic[], span: SourceSpan, message: string) => void;
|
|
14
|
-
/** Entry file path for diagnostics. */
|
|
15
|
-
primaryFile: string;
|
|
16
|
-
/** Optional placement base expressions. */
|
|
17
|
-
baseExprs: ProgramEmissionFinalizeContext['baseExprs'];
|
|
18
|
-
/** Imm evaluator for bases and fixups. */
|
|
19
|
-
evalImmExpr: ProgramEmissionFinalizeContext['evalImmExpr'];
|
|
20
|
-
/** Compile environment. */
|
|
21
|
-
env: CompileEnv;
|
|
22
|
-
/** Lowered asm stream before placement. */
|
|
23
|
-
loweredAsmStream: LoweredAsmStream;
|
|
24
|
-
/** Current code-placement size cursor after lowering. */
|
|
25
|
-
codeOffset: number;
|
|
26
|
-
/** Current data-placement size cursor. */
|
|
27
|
-
dataOffset: number;
|
|
28
|
-
/** Pending forward symbols from lowering. */
|
|
29
|
-
pending: ProgramEmissionFinalizeContext['pending'];
|
|
30
|
-
/** Symbol table. */
|
|
31
|
-
symbols: SymbolEntry[];
|
|
32
|
-
/** Absolute symbols from lowering. */
|
|
33
|
-
absoluteSymbols: ProgramEmissionFinalizeContext['absoluteSymbols'];
|
|
34
|
-
/** Absolute fixup queue. */
|
|
35
|
-
fixups: ProgramEmissionFinalizeContext['fixups'];
|
|
36
|
-
/** Relative fixup queue. */
|
|
37
|
-
rel8Fixups: ProgramEmissionFinalizeContext['rel8Fixups'];
|
|
38
|
-
/** Code-placement bytes. */
|
|
39
|
-
codeBytes: ProgramEmissionFinalizeContext['codeBytes'];
|
|
40
|
-
/** Data-placement bytes. */
|
|
41
|
-
dataBytes: ProgramEmissionFinalizeContext['dataBytes'];
|
|
42
|
-
/** Merged working byte map. */
|
|
43
|
-
bytes: Map<number, number>;
|
|
44
|
-
/** Code source segment map for listings. */
|
|
45
|
-
codeSourceSegments: EmittedSourceSegment[];
|
|
46
|
-
/** Align helper. */
|
|
47
|
-
alignTo: ProgramEmissionFinalizeContext['alignTo'];
|
|
48
|
-
/** Writes a byte-offset range into `bytes`. */
|
|
49
|
-
writeBytePlacement: ProgramEmissionFinalizeContext['writeBytePlacement'];
|
|
50
|
-
/** Computes min/max written for overlap detection. */
|
|
51
|
-
computeWrittenRange: ProgramEmissionFinalizeContext['computeWrittenRange'];
|
|
52
|
-
/** Rebases source segments after moves. */
|
|
53
|
-
rebaseCodeSourceSegments: ProgramEmissionFinalizeContext['rebaseCodeSourceSegments'];
|
|
54
|
-
/** Optional default code base when not inferred. */
|
|
55
|
-
defaultCodeBase?: number;
|
|
56
|
-
};
|
|
57
|
-
export declare function finalizeEmitProgram(context: EmitFinalizationContext): {
|
|
58
|
-
map: EmittedByteMap;
|
|
59
|
-
symbols: SymbolEntry[];
|
|
60
|
-
placedLoweredAsmProgram: LoweredAsmProgram;
|
|
61
|
-
};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { finalizeProgramEmission } from './programLowering.js';
|
|
2
|
-
import { computePlacementBases } from './programLoweringFinalize.js';
|
|
3
|
-
import { placeLoweredAsmStream } from './loweredAsmPlacement.js';
|
|
4
|
-
import { emitLoweredAsmProgramBytes, syncLoweredAsmInstructionBytesFromFinalBytes, } from './loweredAsmByteEmission.js';
|
|
5
|
-
export function finalizeEmitProgram(context) {
|
|
6
|
-
const { codeBase, dataBase } = computePlacementBases({
|
|
7
|
-
baseExprs: context.baseExprs,
|
|
8
|
-
evalImmExpr: context.evalImmExpr,
|
|
9
|
-
env: context.env,
|
|
10
|
-
diagnostics: context.diagnostics,
|
|
11
|
-
diag: context.diag,
|
|
12
|
-
primaryFile: context.primaryFile,
|
|
13
|
-
alignTo: context.alignTo,
|
|
14
|
-
codeOffset: context.codeOffset,
|
|
15
|
-
dataOffset: context.dataOffset,
|
|
16
|
-
}, context.defaultCodeBase, { quiet: true });
|
|
17
|
-
const placedProgram = placeLoweredAsmStream(context.loweredAsmStream, {
|
|
18
|
-
diagnostics: context.diagnostics,
|
|
19
|
-
diag: context.diag,
|
|
20
|
-
primaryFile: context.primaryFile,
|
|
21
|
-
baseAddresses: { codeBase, dataBase },
|
|
22
|
-
});
|
|
23
|
-
const emission = emitLoweredAsmProgramBytes(placedProgram, {
|
|
24
|
-
diagnostics: context.diagnostics,
|
|
25
|
-
diag: context.diag,
|
|
26
|
-
primaryFile: context.primaryFile,
|
|
27
|
-
env: context.env,
|
|
28
|
-
});
|
|
29
|
-
const mergedCodeBytes = new Map([...context.codeBytes, ...emission.codeBytes]);
|
|
30
|
-
const mergedDataBytes = new Map([...context.dataBytes, ...emission.dataBytes]);
|
|
31
|
-
const { writtenRange, sourceSegments } = finalizeProgramEmission({
|
|
32
|
-
diagnostics: context.diagnostics,
|
|
33
|
-
diag: context.diag,
|
|
34
|
-
primaryFile: context.primaryFile,
|
|
35
|
-
baseExprs: context.baseExprs,
|
|
36
|
-
evalImmExpr: context.evalImmExpr,
|
|
37
|
-
env: context.env,
|
|
38
|
-
codeOffset: context.codeOffset,
|
|
39
|
-
dataOffset: context.dataOffset,
|
|
40
|
-
pending: context.pending,
|
|
41
|
-
symbols: context.symbols,
|
|
42
|
-
absoluteSymbols: context.absoluteSymbols,
|
|
43
|
-
fixups: context.fixups,
|
|
44
|
-
rel8Fixups: context.rel8Fixups,
|
|
45
|
-
codeBytes: mergedCodeBytes,
|
|
46
|
-
dataBytes: mergedDataBytes,
|
|
47
|
-
bytes: context.bytes,
|
|
48
|
-
codeSourceSegments: context.codeSourceSegments,
|
|
49
|
-
alignTo: context.alignTo,
|
|
50
|
-
writeBytePlacement: context.writeBytePlacement,
|
|
51
|
-
computeWrittenRange: context.computeWrittenRange,
|
|
52
|
-
rebaseCodeSourceSegments: context.rebaseCodeSourceSegments,
|
|
53
|
-
...(context.defaultCodeBase !== undefined ? { defaultCodeBase: context.defaultCodeBase } : {}),
|
|
54
|
-
});
|
|
55
|
-
syncLoweredAsmInstructionBytesFromFinalBytes(placedProgram, context.bytes, context.env);
|
|
56
|
-
const mergedSourceSegments = [...sourceSegments].sort((a, b) => a.start === b.start ? a.end - b.end : a.start - b.start);
|
|
57
|
-
return {
|
|
58
|
-
map: {
|
|
59
|
-
bytes: context.bytes,
|
|
60
|
-
writtenRange,
|
|
61
|
-
...(mergedSourceSegments.length > 0 ? { sourceSegments: mergedSourceSegments } : {}),
|
|
62
|
-
},
|
|
63
|
-
symbols: context.symbols,
|
|
64
|
-
placedLoweredAsmProgram: placedProgram,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { EmitProgramOptions, EmitFinalizationEnv } from './emitPipeline.js';
|
|
2
|
-
import type { Diagnostic } from '../diagnosticTypes.js';
|
|
3
|
-
import type { CompileEnv } from '../semantics/env.js';
|
|
4
|
-
import type { EmitPhase1Workspace } from './emitPhase1Workspace.js';
|
|
5
|
-
import type { EmitPhase1Helpers } from './emitPhase1Helpers.js';
|
|
6
|
-
type EmitFinalizationSetupContext = {
|
|
7
|
-
/** Semantic environment for imm evaluation during finalization. */
|
|
8
|
-
env: CompileEnv;
|
|
9
|
-
/** Mutable diagnostic sink for placement and fixup phases. */
|
|
10
|
-
diagnostics: Diagnostic[];
|
|
11
|
-
/** Optional emit knobs (code base, etc.); omit when defaults apply. */
|
|
12
|
-
options?: EmitProgramOptions;
|
|
13
|
-
/** Phase-1 workspace carrying bytes, fixups, and lowered asm stream. */
|
|
14
|
-
workspace: EmitPhase1Workspace;
|
|
15
|
-
/** Phase-1 helpers wired into finalization. */
|
|
16
|
-
helpers: EmitPhase1Helpers;
|
|
17
|
-
};
|
|
18
|
-
export declare function buildEmitFinalizationPhaseEnv(ctx: EmitFinalizationSetupContext): EmitFinalizationEnv;
|
|
19
|
-
export {};
|