@jhlagado/azm 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +192 -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 +87 -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,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Build a {@link SourceFile} from a path and UTF-8 source text.
|
|
3
|
-
*/
|
|
4
|
-
export function makeSourceFile(path, text) {
|
|
5
|
-
const lineStarts = [0];
|
|
6
|
-
for (let i = 0; i < text.length; i++) {
|
|
7
|
-
const ch = text[i];
|
|
8
|
-
if (ch === '\n') {
|
|
9
|
-
lineStarts.push(i + 1);
|
|
10
|
-
continue;
|
|
11
|
-
}
|
|
12
|
-
// CR-only line endings (old Mac) should be treated as newlines as well.
|
|
13
|
-
if (ch === '\r' && text[i + 1] !== '\n') {
|
|
14
|
-
lineStarts.push(i + 1);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return { path, text, lineStarts };
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Convert a 0-based byte offset in `file.text` into a 1-based line/column position.
|
|
21
|
-
*/
|
|
22
|
-
function lineIndexAtOffset(file, offset) {
|
|
23
|
-
const clamped = Math.max(0, Math.min(offset, file.text.length));
|
|
24
|
-
let lo = 0;
|
|
25
|
-
let hi = file.lineStarts.length - 1;
|
|
26
|
-
while (lo < hi) {
|
|
27
|
-
const mid = Math.floor((lo + hi + 1) / 2);
|
|
28
|
-
const midStart = file.lineStarts[mid] ?? 0;
|
|
29
|
-
if (midStart <= clamped) {
|
|
30
|
-
lo = mid;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
hi = mid - 1;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return lo;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Convert a 0-based byte offset in `file.text` into a 1-based line/column position.
|
|
40
|
-
*/
|
|
41
|
-
function posAtOffset(file, offset) {
|
|
42
|
-
const clamped = Math.max(0, Math.min(offset, file.text.length));
|
|
43
|
-
const lo = lineIndexAtOffset(file, offset);
|
|
44
|
-
const lineStart = file.lineStarts[lo] ?? 0;
|
|
45
|
-
const mappedLine = file.lineBaseLines?.[lo] ?? lo + 1;
|
|
46
|
-
return { line: mappedLine, column: clamped - lineStart + 1, offset: clamped };
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Construct a {@link SourceSpan} for a half-open offset range `[startOffset, endOffset]`.
|
|
50
|
-
*/
|
|
51
|
-
export function span(file, startOffset, endOffset) {
|
|
52
|
-
const startIndex = lineIndexAtOffset(file, startOffset);
|
|
53
|
-
return {
|
|
54
|
-
file: file.lineFiles?.[startIndex] ?? file.path,
|
|
55
|
-
start: posAtOffset(file, startOffset),
|
|
56
|
-
end: posAtOffset(file, endOffset),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { type Diagnostic } from './diagnosticTypes.js';
|
|
2
|
-
import type { ProgramNode } from './frontend/ast.js';
|
|
3
|
-
import type { CaseStyleMode } from './pipeline.js';
|
|
4
|
-
export declare function lintCaseStyle(program: ProgramNode, sourceTexts: Map<string, string>, mode: CaseStyleMode, diagnostics: Diagnostic[]): void;
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { DiagnosticIds } from './diagnosticTypes.js';
|
|
2
|
-
const REGISTER_RE = /(?<![A-Za-z0-9_$])(AF'|AF|BC|DE|HL|SP|IXH|IXL|IYH|IYL|IX|IY|A|B|C|D|E|H|L|I|R)(?![A-Za-z0-9_])/gi;
|
|
3
|
-
function classifyTokenStyle(token) {
|
|
4
|
-
const letters = token.replace(/[^A-Za-z]/g, '');
|
|
5
|
-
if (letters.length === 0)
|
|
6
|
-
return undefined;
|
|
7
|
-
if (letters === letters.toUpperCase())
|
|
8
|
-
return 'upper';
|
|
9
|
-
if (letters === letters.toLowerCase())
|
|
10
|
-
return 'lower';
|
|
11
|
-
return 'mixed';
|
|
12
|
-
}
|
|
13
|
-
function sourceSliceBySpan(source, span) {
|
|
14
|
-
const start = Math.max(0, Math.min(source.length, span.start.offset));
|
|
15
|
-
const end = Math.max(start, Math.min(source.length, span.end.offset));
|
|
16
|
-
return source.slice(start, end);
|
|
17
|
-
}
|
|
18
|
-
function stripLeadingLabel(text) {
|
|
19
|
-
return text.replace(/^\s*[A-Za-z_][A-Za-z0-9_]*\s*:\s*/, '');
|
|
20
|
-
}
|
|
21
|
-
function scrubCharLiterals(text) {
|
|
22
|
-
let out = '';
|
|
23
|
-
let inChar = false;
|
|
24
|
-
let escaped = false;
|
|
25
|
-
for (let i = 0; i < text.length; i++) {
|
|
26
|
-
const ch = text[i];
|
|
27
|
-
if (!inChar) {
|
|
28
|
-
if (ch === "'") {
|
|
29
|
-
inChar = true;
|
|
30
|
-
escaped = false;
|
|
31
|
-
out += ' ';
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
out += ch;
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
out += ' ';
|
|
38
|
-
if (escaped) {
|
|
39
|
-
escaped = false;
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
if (ch === '\\') {
|
|
43
|
-
escaped = true;
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
if (ch === "'") {
|
|
47
|
-
inChar = false;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return out;
|
|
51
|
-
}
|
|
52
|
-
function lintToken(mode, state, token, category, span, diagnostics) {
|
|
53
|
-
if (mode === 'off')
|
|
54
|
-
return;
|
|
55
|
-
const style = classifyTokenStyle(token);
|
|
56
|
-
if (!style)
|
|
57
|
-
return;
|
|
58
|
-
if (mode === 'consistent') {
|
|
59
|
-
if (!state.consistentStyle && (style === 'upper' || style === 'lower')) {
|
|
60
|
-
state.consistentStyle = style;
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const expected = state.consistentStyle;
|
|
64
|
-
if (!expected)
|
|
65
|
-
return;
|
|
66
|
-
if (style !== expected) {
|
|
67
|
-
diagnostics.push({
|
|
68
|
-
id: DiagnosticIds.CaseStyleLint,
|
|
69
|
-
severity: 'warning',
|
|
70
|
-
message: `Case-style lint: ${category} "${token}" does not match established ${expected}case style under --case-style=consistent.`,
|
|
71
|
-
file: span.file,
|
|
72
|
-
line: span.start.line,
|
|
73
|
-
column: span.start.column,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (style === mode)
|
|
79
|
-
return;
|
|
80
|
-
const expectedText = mode === 'upper' ? 'uppercase' : 'lowercase';
|
|
81
|
-
diagnostics.push({
|
|
82
|
-
id: DiagnosticIds.CaseStyleLint,
|
|
83
|
-
severity: 'warning',
|
|
84
|
-
message: `Case-style lint: ${category} "${token}" should be ${expectedText} under --case-style=${mode}.`,
|
|
85
|
-
file: span.file,
|
|
86
|
-
line: span.start.line,
|
|
87
|
-
column: span.start.column,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
function lintAsmItems(items, source, mode, state, diagnostics) {
|
|
91
|
-
for (const item of items) {
|
|
92
|
-
const text = stripLeadingLabel(sourceSliceBySpan(source, item.span)).trim();
|
|
93
|
-
if (text.length === 0)
|
|
94
|
-
continue;
|
|
95
|
-
if (item.kind === 'AsmInstruction') {
|
|
96
|
-
const mnemonic = text.split(/\s+/, 1)[0] ?? '';
|
|
97
|
-
if (mnemonic.length > 0) {
|
|
98
|
-
lintToken(mode, state, mnemonic, 'mnemonic', item.span, diagnostics);
|
|
99
|
-
}
|
|
100
|
-
const scrubbed = scrubCharLiterals(text);
|
|
101
|
-
for (const match of scrubbed.matchAll(REGISTER_RE)) {
|
|
102
|
-
const raw = match[1];
|
|
103
|
-
if (!raw)
|
|
104
|
-
continue;
|
|
105
|
-
lintToken(mode, state, raw, 'register', item.span, diagnostics);
|
|
106
|
-
}
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
export function lintCaseStyle(program, sourceTexts, mode, diagnostics) {
|
|
112
|
-
if (mode === 'off')
|
|
113
|
-
return;
|
|
114
|
-
const state = { consistentStyle: undefined };
|
|
115
|
-
for (const sourceFileNode of program.files) {
|
|
116
|
-
const source = sourceTexts.get(sourceFileNode.path);
|
|
117
|
-
if (!source)
|
|
118
|
-
continue;
|
|
119
|
-
for (const item of sourceFileNode.items) {
|
|
120
|
-
if (item.kind === 'AsmInstruction') {
|
|
121
|
-
lintAsmItems([item], source, mode, state, diagnostics);
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
if (item.kind === 'OpDecl') {
|
|
125
|
-
lintAsmItems(item.body.items, source, mode, state, diagnostics);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import { evalImmExpr as evalImmExprWithEnv } from '../semantics/env.js';
|
|
2
|
-
import { activePlacementAddress, activePlacementOffset, asmDirectiveExpr, isAsmAlignDirective, isAsmBinFromDirective, isAsmBinToDirective, isAsmEquDirective, isAsmOrgDirective, publishAsmAddressConst, } from './asmDirectiveTraversal.js';
|
|
3
|
-
const BINFROM_SYMBOL_NAME = '__azm_binfrom';
|
|
4
|
-
const BINTO_SYMBOL_NAME = '__azm_binto';
|
|
5
|
-
function reserveAsmSymbol(ctx, item) {
|
|
6
|
-
if (!item.name)
|
|
7
|
-
return undefined;
|
|
8
|
-
const lower = item.name.toLowerCase();
|
|
9
|
-
if (ctx.taken.has(lower)) {
|
|
10
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Duplicate symbol name "${item.name}".`);
|
|
11
|
-
return undefined;
|
|
12
|
-
}
|
|
13
|
-
ctx.taken.add(lower);
|
|
14
|
-
return item.name;
|
|
15
|
-
}
|
|
16
|
-
function lowerAsmEquDirective(ctx, item) {
|
|
17
|
-
const name = reserveAsmSymbol(ctx, item);
|
|
18
|
-
if (!name)
|
|
19
|
-
return;
|
|
20
|
-
const expr = asmDirectiveExpr(item);
|
|
21
|
-
const currentLocation = activePlacementAddress(ctx);
|
|
22
|
-
if (expr) {
|
|
23
|
-
const record = currentLocation === undefined ? { expr } : { expr, currentLocation };
|
|
24
|
-
ctx.env.asmEquExprs?.set(name, record);
|
|
25
|
-
ctx.env.asmEquExprs?.set(name.toLowerCase(), record);
|
|
26
|
-
}
|
|
27
|
-
const value = expr && currentLocation !== undefined
|
|
28
|
-
? evalImmExprWithEnv(expr, ctx.env, ctx.diagnostics, { currentLocation })
|
|
29
|
-
: (ctx.env.equates.get(name) ?? ctx.env.equates.get(name.toLowerCase()));
|
|
30
|
-
if (value === undefined) {
|
|
31
|
-
if (expr) {
|
|
32
|
-
ctx.recordLoweredAsmItem({ kind: 'const', name, value: ctx.lowerImmExprForLoweredAsm(expr) }, item.span);
|
|
33
|
-
}
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
publishAsmAddressConst(ctx, name, value);
|
|
37
|
-
ctx.symbols.push({
|
|
38
|
-
kind: 'constant',
|
|
39
|
-
name,
|
|
40
|
-
value,
|
|
41
|
-
file: item.span.file,
|
|
42
|
-
line: item.span.start.line,
|
|
43
|
-
scope: 'global',
|
|
44
|
-
});
|
|
45
|
-
ctx.recordLoweredAsmItem({ kind: 'const', name, value: { kind: 'literal', value } }, item.span);
|
|
46
|
-
}
|
|
47
|
-
function lowerAsmOrgDirective(ctx, item) {
|
|
48
|
-
const expr = asmDirectiveExpr(item);
|
|
49
|
-
if (!expr) {
|
|
50
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Missing org address.`);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
const target = ctx.evalImmExpr(expr, ctx.env, ctx.diagnostics);
|
|
54
|
-
if (target === undefined) {
|
|
55
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Failed to evaluate org address.`);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
if (target < 0 || target > 0xffff) {
|
|
59
|
-
ctx.diag(ctx.diagnostics, item.span.file, `org address out of range (0..65535).`);
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
const activePlacement = ctx.activePlacementRef.current === 'data' ? 'data' : 'code';
|
|
63
|
-
const offsetRef = activePlacement === 'data' ? ctx.dataOffsetRef : ctx.codeOffsetRef;
|
|
64
|
-
if (offsetRef.current === 0 && ctx.baseExprs[activePlacement] === undefined) {
|
|
65
|
-
ctx.baseExprs[activePlacement] = expr;
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
const base = ctx.baseExprs[activePlacement]
|
|
69
|
-
? ctx.evalImmExpr(ctx.baseExprs[activePlacement], ctx.env, ctx.diagnostics)
|
|
70
|
-
: 0;
|
|
71
|
-
if (base === undefined) {
|
|
72
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Failed to evaluate current ${activePlacement} base address.`);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
const offset = target - base;
|
|
76
|
-
if (offset < 0 || offset > 0xffff) {
|
|
77
|
-
ctx.diag(ctx.diagnostics, item.span.file, `org address is outside the current ${activePlacement} placement range.`);
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (offset < offsetRef.current) {
|
|
81
|
-
ctx.diag(ctx.diagnostics, item.span.file, `org address overlaps earlier emitted ${activePlacement}.`);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const gap = offset - offsetRef.current;
|
|
85
|
-
if (gap > 0) {
|
|
86
|
-
ctx.recordLoweredAsmItem({ kind: 'ds', size: { kind: 'literal', value: gap } }, item.span);
|
|
87
|
-
offsetRef.current = offset;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
function lowerAsmAlignDirective(ctx, item) {
|
|
91
|
-
const expr = asmDirectiveExpr(item);
|
|
92
|
-
if (!expr) {
|
|
93
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Missing align value.`);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const value = ctx.evalImmExpr(expr, ctx.env, ctx.diagnostics);
|
|
97
|
-
if (value === undefined) {
|
|
98
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Failed to evaluate align value.`);
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (value <= 0) {
|
|
102
|
-
ctx.diag(ctx.diagnostics, item.span.file, `align value must be > 0.`);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (ctx.activePlacementRef.current === 'data') {
|
|
106
|
-
const base = ctx.baseExprs.data
|
|
107
|
-
? ctx.evalImmExpr(ctx.baseExprs.data, ctx.env, ctx.diagnostics)
|
|
108
|
-
: 0;
|
|
109
|
-
if (base === undefined) {
|
|
110
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Failed to evaluate current data base address.`);
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
const currentAddress = base + ctx.dataOffsetRef.current;
|
|
114
|
-
const alignedAddress = ctx.alignTo(currentAddress, value);
|
|
115
|
-
const alignedOffset = alignedAddress - base;
|
|
116
|
-
const gap = alignedOffset - ctx.dataOffsetRef.current;
|
|
117
|
-
if (gap > 0) {
|
|
118
|
-
ctx.recordLoweredAsmItem({
|
|
119
|
-
kind: 'ds',
|
|
120
|
-
size: { kind: 'literal', value: gap },
|
|
121
|
-
fill: { kind: 'literal', value: 0 },
|
|
122
|
-
}, item.span);
|
|
123
|
-
}
|
|
124
|
-
while (ctx.dataOffsetRef.current < alignedOffset) {
|
|
125
|
-
const offset = ctx.dataOffsetRef.current;
|
|
126
|
-
ctx.dataBytes.set(offset, 0);
|
|
127
|
-
ctx.dataOffsetRef.current = offset + 1;
|
|
128
|
-
}
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
const base = ctx.baseExprs.code
|
|
132
|
-
? ctx.evalImmExpr(ctx.baseExprs.code, ctx.env, ctx.diagnostics)
|
|
133
|
-
: 0;
|
|
134
|
-
if (base === undefined) {
|
|
135
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Failed to evaluate current code base address.`);
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
const currentAddress = base + ctx.codeOffsetRef.current;
|
|
139
|
-
const alignedAddress = ctx.alignTo(currentAddress, value);
|
|
140
|
-
const alignedOffset = alignedAddress - base;
|
|
141
|
-
const gap = alignedOffset - ctx.codeOffsetRef.current;
|
|
142
|
-
if (gap > 0) {
|
|
143
|
-
ctx.recordLoweredAsmItem({
|
|
144
|
-
kind: 'ds',
|
|
145
|
-
size: { kind: 'literal', value: gap },
|
|
146
|
-
fill: { kind: 'literal', value: 0 },
|
|
147
|
-
}, item.span);
|
|
148
|
-
}
|
|
149
|
-
while (ctx.codeOffsetRef.current < alignedOffset) {
|
|
150
|
-
const offset = ctx.codeOffsetRef.current;
|
|
151
|
-
ctx.codeBytes.set(offset, 0);
|
|
152
|
-
ctx.codeOffsetRef.current = offset + 1;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
function lowerAsmLabel(ctx, item) {
|
|
156
|
-
const offset = activePlacementOffset(ctx);
|
|
157
|
-
const address = activePlacementAddress(ctx);
|
|
158
|
-
const name = reserveAsmSymbol(ctx, item);
|
|
159
|
-
if (!name)
|
|
160
|
-
return;
|
|
161
|
-
if (address !== undefined)
|
|
162
|
-
publishAsmAddressConst(ctx, name, address);
|
|
163
|
-
ctx.pending.push({
|
|
164
|
-
kind: 'label',
|
|
165
|
-
name,
|
|
166
|
-
placement: ctx.activePlacementRef.current,
|
|
167
|
-
offset,
|
|
168
|
-
file: item.span.file,
|
|
169
|
-
line: item.span.start.line,
|
|
170
|
-
scope: 'global',
|
|
171
|
-
});
|
|
172
|
-
ctx.recordLoweredAsmItem({ kind: 'label', name }, item.span);
|
|
173
|
-
}
|
|
174
|
-
function lowerAsmBinRangeSymbol(ctx, item, symbolName, label) {
|
|
175
|
-
const expr = asmDirectiveExpr(item);
|
|
176
|
-
if (!expr) {
|
|
177
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Missing ${label} address.`);
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
const value = ctx.evalImmExpr(expr, ctx.env, ctx.diagnostics);
|
|
181
|
-
if (value === undefined) {
|
|
182
|
-
ctx.diag(ctx.diagnostics, item.span.file, `Failed to evaluate ${label} address.`);
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
if (value < 0 || value > 0xffff) {
|
|
186
|
-
ctx.diag(ctx.diagnostics, item.span.file, `${label} address out of range (0..65535).`);
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const existing = ctx.symbols.find((symbol) => symbol.kind === 'constant' && symbol.name === symbolName);
|
|
190
|
-
if (existing?.kind === 'constant') {
|
|
191
|
-
existing.value = value;
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
ctx.symbols.push({
|
|
195
|
-
kind: 'constant',
|
|
196
|
-
name: symbolName,
|
|
197
|
-
value,
|
|
198
|
-
file: item.span.file,
|
|
199
|
-
line: item.span.start.line,
|
|
200
|
-
scope: 'global',
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
export function tryLowerAsmDirective(ctx, item) {
|
|
204
|
-
if (isAsmEquDirective(item)) {
|
|
205
|
-
lowerAsmEquDirective(ctx, item);
|
|
206
|
-
return true;
|
|
207
|
-
}
|
|
208
|
-
if (isAsmOrgDirective(item)) {
|
|
209
|
-
lowerAsmOrgDirective(ctx, item);
|
|
210
|
-
return true;
|
|
211
|
-
}
|
|
212
|
-
if (isAsmAlignDirective(item)) {
|
|
213
|
-
lowerAsmAlignDirective(ctx, item);
|
|
214
|
-
return true;
|
|
215
|
-
}
|
|
216
|
-
if (isAsmBinFromDirective(item)) {
|
|
217
|
-
lowerAsmBinRangeSymbol(ctx, item, BINFROM_SYMBOL_NAME, 'binfrom');
|
|
218
|
-
return true;
|
|
219
|
-
}
|
|
220
|
-
if (isAsmBinToDirective(item)) {
|
|
221
|
-
lowerAsmBinRangeSymbol(ctx, item, BINTO_SYMBOL_NAME, 'binto');
|
|
222
|
-
return true;
|
|
223
|
-
}
|
|
224
|
-
if (item.kind === 'AsmLabel') {
|
|
225
|
-
lowerAsmLabel(ctx, item);
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { AsmOperandNode, ImmExprNode, SourceSpan } from '../frontend/ast.js';
|
|
2
|
-
import { containsCurrentLocation } from '../frontend/immExprUtils.js';
|
|
3
|
-
import type { PlacementKind } from './loweringTypes.js';
|
|
4
|
-
import type { LoweringContext } from './programLowering.js';
|
|
5
|
-
export type AsmDirectiveLikeNode = {
|
|
6
|
-
kind: string;
|
|
7
|
-
span: SourceSpan;
|
|
8
|
-
name?: string;
|
|
9
|
-
value?: ImmExprNode;
|
|
10
|
-
directive?: 'db' | 'dw' | 'ds' | 'cstr' | 'pstr' | 'istr';
|
|
11
|
-
values?: unknown[];
|
|
12
|
-
size?: ImmExprNode;
|
|
13
|
-
fill?: ImmExprNode;
|
|
14
|
-
head?: string;
|
|
15
|
-
operands?: AsmOperandNode[];
|
|
16
|
-
};
|
|
17
|
-
type AsmAddressContext = Pick<LoweringContext, 'activePlacementRef' | 'baseExprs' | 'codeOffsetRef' | 'dataOffsetRef' | 'evalImmExpr' | 'env' | 'diagnostics'>;
|
|
18
|
-
type AsmEvalContext = Pick<LoweringContext, 'env' | 'diagnostics'>;
|
|
19
|
-
type AsmPublishContext = Pick<LoweringContext, 'env'>;
|
|
20
|
-
export declare function isAsmEquDirective(item: {
|
|
21
|
-
kind: string;
|
|
22
|
-
}): boolean;
|
|
23
|
-
export declare function isAsmOrgDirective(item: {
|
|
24
|
-
kind: string;
|
|
25
|
-
}): boolean;
|
|
26
|
-
export declare function isAsmAlignDirective(item: {
|
|
27
|
-
kind: string;
|
|
28
|
-
}): boolean;
|
|
29
|
-
export declare function isAsmRawDataDirective(item: {
|
|
30
|
-
kind: string;
|
|
31
|
-
}): boolean;
|
|
32
|
-
export declare function isAsmBinFromDirective(item: {
|
|
33
|
-
kind: string;
|
|
34
|
-
}): boolean;
|
|
35
|
-
export declare function isAsmBinToDirective(item: {
|
|
36
|
-
kind: string;
|
|
37
|
-
}): boolean;
|
|
38
|
-
export declare function isAsmEndDirective(item: {
|
|
39
|
-
kind: string;
|
|
40
|
-
}): boolean;
|
|
41
|
-
export declare function asmDirectiveExpr(item: AsmDirectiveLikeNode): ImmExprNode | undefined;
|
|
42
|
-
export declare function activePlacementOffset(ctx: AsmAddressContext): number;
|
|
43
|
-
export declare function activePlacementAddress(ctx: AsmAddressContext): number | undefined;
|
|
44
|
-
export declare function placementAddressAtOffset(ctx: Pick<AsmAddressContext, 'baseExprs' | 'evalImmExpr' | 'env' | 'diagnostics'>, placement: PlacementKind, offset: number): number | undefined;
|
|
45
|
-
export { containsCurrentLocation };
|
|
46
|
-
export declare function evalAsmImmAtCurrent(ctx: AsmEvalContext, expr: ImmExprNode, currentLocation: number): number | undefined;
|
|
47
|
-
export declare function publishAsmAddressConst(ctx: AsmPublishContext, name: string, address: number): void;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { containsCurrentLocation } from '../frontend/immExprUtils.js';
|
|
2
|
-
import { evalImmExpr as evalImmExprWithEnv } from '../semantics/env.js';
|
|
3
|
-
function isKind(item, ...kinds) {
|
|
4
|
-
return kinds.includes(item.kind);
|
|
5
|
-
}
|
|
6
|
-
export function isAsmEquDirective(item) {
|
|
7
|
-
return isKind(item, 'AsmEqu');
|
|
8
|
-
}
|
|
9
|
-
export function isAsmOrgDirective(item) {
|
|
10
|
-
return isKind(item, 'AsmOrg');
|
|
11
|
-
}
|
|
12
|
-
export function isAsmAlignDirective(item) {
|
|
13
|
-
return isKind(item, 'AsmAlign');
|
|
14
|
-
}
|
|
15
|
-
export function isAsmRawDataDirective(item) {
|
|
16
|
-
return isKind(item, 'AsmRawData');
|
|
17
|
-
}
|
|
18
|
-
export function isAsmBinFromDirective(item) {
|
|
19
|
-
return isKind(item, 'AsmBinFrom');
|
|
20
|
-
}
|
|
21
|
-
export function isAsmBinToDirective(item) {
|
|
22
|
-
return isKind(item, 'AsmBinTo');
|
|
23
|
-
}
|
|
24
|
-
export function isAsmEndDirective(item) {
|
|
25
|
-
return isKind(item, 'AsmEnd');
|
|
26
|
-
}
|
|
27
|
-
export function asmDirectiveExpr(item) {
|
|
28
|
-
return item.value;
|
|
29
|
-
}
|
|
30
|
-
export function activePlacementOffset(ctx) {
|
|
31
|
-
return ctx.activePlacementRef.current === 'data'
|
|
32
|
-
? ctx.dataOffsetRef.current
|
|
33
|
-
: ctx.codeOffsetRef.current;
|
|
34
|
-
}
|
|
35
|
-
export function activePlacementAddress(ctx) {
|
|
36
|
-
return placementAddressAtOffset(ctx, ctx.activePlacementRef.current, activePlacementOffset(ctx));
|
|
37
|
-
}
|
|
38
|
-
export function placementAddressAtOffset(ctx, placement, offset) {
|
|
39
|
-
const baseExpr = placement === 'data' ? ctx.baseExprs.data : ctx.baseExprs.code;
|
|
40
|
-
if (!baseExpr)
|
|
41
|
-
return offset;
|
|
42
|
-
const base = ctx.evalImmExpr(baseExpr, ctx.env, ctx.diagnostics);
|
|
43
|
-
return base === undefined ? undefined : base + offset;
|
|
44
|
-
}
|
|
45
|
-
export { containsCurrentLocation };
|
|
46
|
-
export function evalAsmImmAtCurrent(ctx, expr, currentLocation) {
|
|
47
|
-
return evalImmExprWithEnv(expr, ctx.env, ctx.diagnostics, { currentLocation });
|
|
48
|
-
}
|
|
49
|
-
export function publishAsmAddressConst(ctx, name, address) {
|
|
50
|
-
ctx.env.equates.set(name, address);
|
|
51
|
-
ctx.env.equates.set(name.toLowerCase(), address);
|
|
52
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type CompileEnv } from '../semantics/env.js';
|
|
2
|
-
type AsmEquResolutionContext = {
|
|
3
|
-
env: CompileEnv;
|
|
4
|
-
lookupSymbol?: (nameLower: string) => number | undefined;
|
|
5
|
-
cacheResolved?: (nameLower: string, value: number) => void;
|
|
6
|
-
};
|
|
7
|
-
export declare function resolveAsmEquSymbol(name: string, ctx: AsmEquResolutionContext, visiting?: Set<string>): number | undefined;
|
|
8
|
-
export {};
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { evalImmExpr } from '../semantics/env.js';
|
|
2
|
-
import { evalBinaryImmOp, evalUnaryImmOp } from './immMath.js';
|
|
3
|
-
function scopedEnv(ctx) {
|
|
4
|
-
if (!ctx.lookupSymbol)
|
|
5
|
-
return ctx.env;
|
|
6
|
-
const equates = new Map(ctx.env.equates);
|
|
7
|
-
for (const name of ctx.env.asmEquExprs?.keys() ?? []) {
|
|
8
|
-
const lower = name.toLowerCase();
|
|
9
|
-
const value = ctx.lookupSymbol(lower);
|
|
10
|
-
if (value !== undefined)
|
|
11
|
-
equates.set(lower, value);
|
|
12
|
-
}
|
|
13
|
-
return { ...ctx.env, equates };
|
|
14
|
-
}
|
|
15
|
-
export function resolveAsmEquSymbol(name, ctx, visiting = new Set()) {
|
|
16
|
-
const lower = name.toLowerCase();
|
|
17
|
-
const symbol = ctx.lookupSymbol?.(lower);
|
|
18
|
-
if (symbol !== undefined)
|
|
19
|
-
return symbol;
|
|
20
|
-
const direct = ctx.env.equates.get(name) ?? ctx.env.enums.get(name);
|
|
21
|
-
if (direct !== undefined)
|
|
22
|
-
return direct;
|
|
23
|
-
const alt = ctx.env.equates.get(lower) ?? ctx.env.enums.get(lower);
|
|
24
|
-
if (alt !== undefined)
|
|
25
|
-
return alt;
|
|
26
|
-
const equ = ctx.env.asmEquExprs?.get(name) ?? ctx.env.asmEquExprs?.get(lower);
|
|
27
|
-
if (!equ || visiting.has(lower))
|
|
28
|
-
return undefined;
|
|
29
|
-
visiting.add(lower);
|
|
30
|
-
try {
|
|
31
|
-
const value = evalAsmEquExpr(equ.expr, ctx, visiting, equ.currentLocation);
|
|
32
|
-
if (value !== undefined) {
|
|
33
|
-
ctx.cacheResolved?.(lower, value);
|
|
34
|
-
}
|
|
35
|
-
return value;
|
|
36
|
-
}
|
|
37
|
-
finally {
|
|
38
|
-
visiting.delete(lower);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
function evalAsmEquExpr(expr, ctx, visiting = new Set(), currentLocation) {
|
|
42
|
-
const env = scopedEnv(ctx);
|
|
43
|
-
const value = currentLocation === undefined
|
|
44
|
-
? evalImmExpr(expr, env)
|
|
45
|
-
: evalImmExpr(expr, env, undefined, { currentLocation });
|
|
46
|
-
if (value !== undefined)
|
|
47
|
-
return value;
|
|
48
|
-
switch (expr.kind) {
|
|
49
|
-
case 'ImmCurrentLocation':
|
|
50
|
-
return currentLocation;
|
|
51
|
-
case 'ImmName':
|
|
52
|
-
return resolveAsmEquSymbol(expr.name, ctx, visiting);
|
|
53
|
-
case 'ImmUnary': {
|
|
54
|
-
const v = evalAsmEquExpr(expr.expr, ctx, visiting, currentLocation);
|
|
55
|
-
if (v === undefined)
|
|
56
|
-
return undefined;
|
|
57
|
-
return evalUnaryImmOp(expr.op, v);
|
|
58
|
-
}
|
|
59
|
-
case 'ImmBinary': {
|
|
60
|
-
const left = evalAsmEquExpr(expr.left, ctx, visiting, currentLocation);
|
|
61
|
-
const right = evalAsmEquExpr(expr.right, ctx, visiting, currentLocation);
|
|
62
|
-
if (left === undefined || right === undefined)
|
|
63
|
-
return undefined;
|
|
64
|
-
return evalBinaryImmOp(expr.op, left, right);
|
|
65
|
-
}
|
|
66
|
-
default:
|
|
67
|
-
return undefined;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { AsmInstructionNode, AsmOperandNode, EaExprNode } from '../frontend/ast.js';
|
|
2
|
-
export type LdHelperContext = {
|
|
3
|
-
emitInstr: (head: string, operands: AsmOperandNode[], span: AsmInstructionNode['span']) => boolean;
|
|
4
|
-
emitAbs16Fixup: (opcode: number, baseLower: string, addend: number, span: AsmInstructionNode['span'], asmText?: string) => void;
|
|
5
|
-
emitAbs16FixupPrefixed: (prefix: number, opcode2: number, baseLower: string, addend: number, span: AsmInstructionNode['span'], asmText?: string) => void;
|
|
6
|
-
emitVirtualReg16Transfer: (asmItem: AsmInstructionNode) => boolean;
|
|
7
|
-
resolveRawAliasTargetName: (name: string) => string | undefined;
|
|
8
|
-
reg16: Set<string>;
|
|
9
|
-
};
|
|
10
|
-
export declare function createAsmInstructionLdHelpers(ctx: LdHelperContext): {
|
|
11
|
-
isUnresolvedLayoutLdOperand: (op: AsmOperandNode) => boolean;
|
|
12
|
-
resolveRawLabelName: (name: string) => string;
|
|
13
|
-
emitAbs16LdFixup: (dst: AsmOperandNode, src: AsmOperandNode, span: AsmInstructionNode["span"]) => boolean;
|
|
14
|
-
isRegisterLikeMemEa: (ea: EaExprNode) => boolean;
|
|
15
|
-
};
|