@jhlagado/azm 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -9
- package/dist/src/api-compile.d.ts +0 -2
- package/dist/src/api-compile.js +1 -8
- package/dist/src/assembly/address-planning.js +19 -1
- package/dist/src/cli/parse-args.d.ts +0 -1
- package/dist/src/cli/parse-args.js +0 -7
- package/dist/src/cli/write-artifacts.js +0 -11
- package/dist/src/core/compile.js +176 -9
- package/dist/src/expansion/op-expansion.js +1 -0
- package/dist/src/model/expression.d.ts +4 -0
- package/dist/src/model/source-item.d.ts +5 -0
- package/dist/src/outputs/index.js +0 -2
- package/dist/src/outputs/types.d.ts +3 -16
- package/dist/src/outputs/write-asm80.js +84 -0
- package/dist/src/semantics/expression-evaluation.d.ts +7 -3
- package/dist/src/semantics/expression-evaluation.js +57 -0
- package/dist/src/syntax/directive-aliases.js +9 -10
- package/dist/src/syntax/parse-expression.js +34 -9
- package/dist/src/syntax/parse-line.js +80 -44
- package/dist/src/tooling/case-style.js +3 -0
- package/docs/reference/cli.md +6 -4
- package/docs/reference/tooling-api.md +1 -4
- package/package.json +2 -6
- package/dist/legacy-root-azm/src/analysis.d.ts +0 -11
- package/dist/legacy-root-azm/src/analysis.js +0 -41
- package/dist/legacy-root-azm/src/compile.d.ts +0 -10
- package/dist/legacy-root-azm/src/compile.js +0 -186
- package/dist/legacy-root-azm/src/compileShared.d.ts +0 -3
- package/dist/legacy-root-azm/src/compileShared.js +0 -7
- package/dist/legacy-root-azm/src/diagnosticTypes.d.ts +0 -77
- package/dist/legacy-root-azm/src/diagnosticTypes.js +0 -53
- package/dist/legacy-root-azm/src/formats/index.d.ts +0 -7
- package/dist/legacy-root-azm/src/formats/index.js +0 -17
- package/dist/legacy-root-azm/src/formats/range.d.ts +0 -17
- package/dist/legacy-root-azm/src/formats/range.js +0 -45
- package/dist/legacy-root-azm/src/formats/types.d.ts +0 -283
- package/dist/legacy-root-azm/src/formats/types.js +0 -1
- package/dist/legacy-root-azm/src/formats/writeAsm80.d.ts +0 -6
- package/dist/legacy-root-azm/src/formats/writeAsm80.js +0 -86
- package/dist/legacy-root-azm/src/formats/writeBin.d.ts +0 -7
- package/dist/legacy-root-azm/src/formats/writeBin.js +0 -23
- package/dist/legacy-root-azm/src/formats/writeD8m.d.ts +0 -9
- package/dist/legacy-root-azm/src/formats/writeD8m.js +0 -245
- package/dist/legacy-root-azm/src/formats/writeHex.d.ts +0 -8
- package/dist/legacy-root-azm/src/formats/writeHex.js +0 -38
- package/dist/legacy-root-azm/src/formats/writeListing.d.ts +0 -8
- package/dist/legacy-root-azm/src/formats/writeListing.js +0 -83
- package/dist/legacy-root-azm/src/frontend/asm80/asmLine.d.ts +0 -39
- package/dist/legacy-root-azm/src/frontend/asm80/asmLine.js +0 -89
- package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.d.ts +0 -4
- package/dist/legacy-root-azm/src/frontend/asm80/parseAsmRawValues.js +0 -94
- package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/asm80/quoteScan.js +0 -25
- package/dist/legacy-root-azm/src/frontend/ast.d.ts +0 -376
- package/dist/legacy-root-azm/src/frontend/ast.js +0 -1
- package/dist/legacy-root-azm/src/frontend/directiveAliases.d.ts +0 -14
- package/dist/legacy-root-azm/src/frontend/directiveAliases.js +0 -189
- package/dist/legacy-root-azm/src/frontend/grammarData.d.ts +0 -14
- package/dist/legacy-root-azm/src/frontend/grammarData.js +0 -65
- package/dist/legacy-root-azm/src/frontend/immExprUtils.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/immExprUtils.js +0 -12
- package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.d.ts +0 -17
- package/dist/legacy-root-azm/src/frontend/parseAsmFlatDirectiveLine.js +0 -187
- package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.d.ts +0 -3
- package/dist/legacy-root-azm/src/frontend/parseAsmInstruction.js +0 -73
- package/dist/legacy-root-azm/src/frontend/parseAsmStatements.d.ts +0 -6
- package/dist/legacy-root-azm/src/frontend/parseAsmStatements.js +0 -16
- package/dist/legacy-root-azm/src/frontend/parseAsmStream.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/parseAsmStream.js +0 -33
- package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.d.ts +0 -18
- package/dist/legacy-root-azm/src/frontend/parseAsmTopLevel.js +0 -34
- package/dist/legacy-root-azm/src/frontend/parseDiagnostics.d.ts +0 -9
- package/dist/legacy-root-azm/src/frontend/parseDiagnostics.js +0 -16
- package/dist/legacy-root-azm/src/frontend/parseEnum.d.ts +0 -12
- package/dist/legacy-root-azm/src/frontend/parseEnum.js +0 -70
- package/dist/legacy-root-azm/src/frontend/parseImm.d.ts +0 -10
- package/dist/legacy-root-azm/src/frontend/parseImm.js +0 -397
- package/dist/legacy-root-azm/src/frontend/parseLogicalLines.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parseLogicalLines.js +0 -94
- package/dist/legacy-root-azm/src/frontend/parseOp.d.ts +0 -25
- package/dist/legacy-root-azm/src/frontend/parseOp.js +0 -120
- package/dist/legacy-root-azm/src/frontend/parseOpHeader.d.ts +0 -20
- package/dist/legacy-root-azm/src/frontend/parseOpHeader.js +0 -32
- package/dist/legacy-root-azm/src/frontend/parseOperands.d.ts +0 -4
- package/dist/legacy-root-azm/src/frontend/parseOperands.js +0 -290
- package/dist/legacy-root-azm/src/frontend/parseParams.d.ts +0 -6
- package/dist/legacy-root-azm/src/frontend/parseParams.js +0 -62
- package/dist/legacy-root-azm/src/frontend/parseParserRecovery.d.ts +0 -12
- package/dist/legacy-root-azm/src/frontend/parseParserRecovery.js +0 -17
- package/dist/legacy-root-azm/src/frontend/parseParserShared.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/parseParserShared.js +0 -8
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.d.ts +0 -1
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectiveStart.js +0 -3
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.d.ts +0 -7
- package/dist/legacy-root-azm/src/frontend/parseRawDataDirectives.js +0 -142
- package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.d.ts +0 -34
- package/dist/legacy-root-azm/src/frontend/parseRecordFieldDecl.js +0 -177
- package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.d.ts +0 -46
- package/dist/legacy-root-azm/src/frontend/parseSourceItemDispatch.js +0 -53
- package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.d.ts +0 -16
- package/dist/legacy-root-azm/src/frontend/parseSourceItemTable.js +0 -68
- package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parseTopLevelCommon.js +0 -50
- package/dist/legacy-root-azm/src/frontend/parseTypes.d.ts +0 -24
- package/dist/legacy-root-azm/src/frontend/parseTypes.js +0 -77
- package/dist/legacy-root-azm/src/frontend/parser.d.ts +0 -11
- package/dist/legacy-root-azm/src/frontend/parser.js +0 -88
- package/dist/legacy-root-azm/src/frontend/source.d.ts +0 -28
- package/dist/legacy-root-azm/src/frontend/source.js +0 -58
- package/dist/legacy-root-azm/src/frontend/sourceExtensions.d.ts +0 -2
- package/dist/legacy-root-azm/src/frontend/sourceExtensions.js +0 -6
- package/dist/legacy-root-azm/src/lintCaseStyle.d.ts +0 -4
- package/dist/legacy-root-azm/src/lintCaseStyle.js +0 -129
- package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmDirectiveLowering.js +0 -229
- package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.d.ts +0 -47
- package/dist/legacy-root-azm/src/lowering/asmDirectiveTraversal.js +0 -52
- package/dist/legacy-root-azm/src/lowering/asmEquResolution.d.ts +0 -8
- package/dist/legacy-root-azm/src/lowering/asmEquResolution.js +0 -69
- package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/asmInstructionLdHelpers.js +0 -102
- package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/asmInstructionLowering.js +0 -54
- package/dist/legacy-root-azm/src/lowering/asmInstructionStream.d.ts +0 -46
- package/dist/legacy-root-azm/src/lowering/asmInstructionStream.js +0 -51
- package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.d.ts +0 -43
- package/dist/legacy-root-azm/src/lowering/asmLoweringBranchCall.js +0 -254
- package/dist/legacy-root-azm/src/lowering/asmLoweringHost.d.ts +0 -23
- package/dist/legacy-root-azm/src/lowering/asmLoweringHost.js +0 -1
- package/dist/legacy-root-azm/src/lowering/asmLoweringLd.d.ts +0 -28
- package/dist/legacy-root-azm/src/lowering/asmLoweringLd.js +0 -144
- package/dist/legacy-root-azm/src/lowering/asmRangeLowering.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/asmRangeLowering.js +0 -39
- package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.d.ts +0 -16
- package/dist/legacy-root-azm/src/lowering/asmRawDataLowering.js +0 -209
- package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmSourceEmitter.js +0 -9
- package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/asmSourceInstructionLowering.js +0 -14
- package/dist/legacy-root-azm/src/lowering/asmUtils.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/asmUtils.js +0 -105
- package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.d.ts +0 -54
- package/dist/legacy-root-azm/src/lowering/assemblerFlowSetup.js +0 -128
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.d.ts +0 -151
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContext.js +0 -16
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringContextSplit.js +0 -75
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.d.ts +0 -66
- package/dist/legacy-root-azm/src/lowering/assemblerLoweringPhases.js +0 -166
- package/dist/legacy-root-azm/src/lowering/bytePlacement.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/bytePlacement.js +0 -37
- package/dist/legacy-root-azm/src/lowering/capabilities.d.ts +0 -67
- package/dist/legacy-root-azm/src/lowering/capabilities.js +0 -1
- package/dist/legacy-root-azm/src/lowering/eaResolution.d.ts +0 -58
- package/dist/legacy-root-azm/src/lowering/eaResolution.js +0 -159
- package/dist/legacy-root-azm/src/lowering/emissionCore.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/emissionCore.js +0 -21
- package/dist/legacy-root-azm/src/lowering/emit.d.ts +0 -17
- package/dist/legacy-root-azm/src/lowering/emit.js +0 -46
- package/dist/legacy-root-azm/src/lowering/emitContextBuilder.d.ts +0 -63
- package/dist/legacy-root-azm/src/lowering/emitContextBuilder.js +0 -41
- package/dist/legacy-root-azm/src/lowering/emitFinalization.d.ts +0 -61
- package/dist/legacy-root-azm/src/lowering/emitFinalization.js +0 -66
- package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.d.ts +0 -19
- package/dist/legacy-root-azm/src/lowering/emitFinalizationSetup.js +0 -26
- package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/emitPhase1BuildProgramLoweringContext.js +0 -119
- package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/emitPhase1Helpers.js +0 -12
- package/dist/legacy-root-azm/src/lowering/emitPhase1Types.d.ts +0 -21
- package/dist/legacy-root-azm/src/lowering/emitPhase1Types.js +0 -1
- package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.d.ts +0 -70
- package/dist/legacy-root-azm/src/lowering/emitPhase1WirePipeline.js +0 -203
- package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.d.ts +0 -82
- package/dist/legacy-root-azm/src/lowering/emitPhase1Workspace.js +0 -55
- package/dist/legacy-root-azm/src/lowering/emitPipeline.d.ts +0 -121
- package/dist/legacy-root-azm/src/lowering/emitPipeline.js +0 -57
- package/dist/legacy-root-azm/src/lowering/emitProgramContext.d.ts +0 -39
- package/dist/legacy-root-azm/src/lowering/emitProgramContext.js +0 -29
- package/dist/legacy-root-azm/src/lowering/emitState.d.ts +0 -90
- package/dist/legacy-root-azm/src/lowering/emitState.js +0 -124
- package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/fixupBaseResolution.js +0 -23
- package/dist/legacy-root-azm/src/lowering/fixupEmission.d.ts +0 -64
- package/dist/legacy-root-azm/src/lowering/fixupEmission.js +0 -199
- package/dist/legacy-root-azm/src/lowering/immMath.d.ts +0 -2
- package/dist/legacy-root-azm/src/lowering/immMath.js +0 -34
- package/dist/legacy-root-azm/src/lowering/inputAssets.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/inputAssets.js +0 -106
- package/dist/legacy-root-azm/src/lowering/ldEncoding.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/ldEncoding.js +0 -12
- package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/ldEncodingRegMemHelpers.js +0 -124
- package/dist/legacy-root-azm/src/lowering/ldFormSelection.d.ts +0 -26
- package/dist/legacy-root-azm/src/lowering/ldFormSelection.js +0 -92
- package/dist/legacy-root-azm/src/lowering/ldLowering.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/ldLowering.js +0 -13
- package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.d.ts +0 -23
- package/dist/legacy-root-azm/src/lowering/loweredAsmByteEmission.js +0 -185
- package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/loweredAsmPlacement.js +0 -86
- package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.d.ts +0 -27
- package/dist/legacy-root-azm/src/lowering/loweredAsmStreamRecording.js +0 -215
- package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.d.ts +0 -202
- package/dist/legacy-root-azm/src/lowering/loweredAsmTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/loweredFormat.d.ts +0 -3
- package/dist/legacy-root-azm/src/lowering/loweredFormat.js +0 -26
- package/dist/legacy-root-azm/src/lowering/loweredItemSize.d.ts +0 -4
- package/dist/legacy-root-azm/src/lowering/loweredItemSize.js +0 -17
- package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.d.ts +0 -9
- package/dist/legacy-root-azm/src/lowering/loweringDiagnostics.js +0 -55
- package/dist/legacy-root-azm/src/lowering/loweringTypes.d.ts +0 -27
- package/dist/legacy-root-azm/src/lowering/loweringTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.d.ts +0 -9
- package/dist/legacy-root-azm/src/lowering/opCandidateRegistry.js +0 -9
- package/dist/legacy-root-azm/src/lowering/opExpansionExecution.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/opExpansionExecution.js +0 -45
- package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.d.ts +0 -15
- package/dist/legacy-root-azm/src/lowering/opExpansionOrchestration.js +0 -88
- package/dist/legacy-root-azm/src/lowering/opExpansionStream.d.ts +0 -12
- package/dist/legacy-root-azm/src/lowering/opExpansionStream.js +0 -176
- package/dist/legacy-root-azm/src/lowering/opMatching.d.ts +0 -52
- package/dist/legacy-root-azm/src/lowering/opMatching.js +0 -355
- package/dist/legacy-root-azm/src/lowering/opSubstitution.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/opSubstitution.js +0 -175
- package/dist/legacy-root-azm/src/lowering/prescanTypes.d.ts +0 -7
- package/dist/legacy-root-azm/src/lowering/prescanTypes.js +0 -1
- package/dist/legacy-root-azm/src/lowering/programLowering.d.ts +0 -144
- package/dist/legacy-root-azm/src/lowering/programLowering.js +0 -2
- package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.d.ts +0 -5
- package/dist/legacy-root-azm/src/lowering/programLoweringDeclarations.js +0 -5
- package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.d.ts +0 -18
- package/dist/legacy-root-azm/src/lowering/programLoweringFinalize.js +0 -115
- package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.d.ts +0 -2
- package/dist/legacy-root-azm/src/lowering/programLoweringTraversal.js +0 -93
- package/dist/legacy-root-azm/src/lowering/programPrescan.d.ts +0 -3
- package/dist/legacy-root-azm/src/lowering/programPrescan.js +0 -37
- package/dist/legacy-root-azm/src/lowering/traceFormat.d.ts +0 -13
- package/dist/legacy-root-azm/src/lowering/traceFormat.js +0 -211
- package/dist/legacy-root-azm/src/packageInfo.d.ts +0 -1
- package/dist/legacy-root-azm/src/packageInfo.js +0 -15
- package/dist/legacy-root-azm/src/pathCompare.d.ts +0 -3
- package/dist/legacy-root-azm/src/pathCompare.js +0 -26
- package/dist/legacy-root-azm/src/pipeline.d.ts +0 -91
- package/dist/legacy-root-azm/src/pipeline.js +0 -1
- package/dist/legacy-root-azm/src/registerCare/analyze.d.ts +0 -24
- package/dist/legacy-root-azm/src/registerCare/analyze.js +0 -327
- package/dist/legacy-root-azm/src/registerCare/annotate.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/annotate.js +0 -76
- package/dist/legacy-root-azm/src/registerCare/boundaryHints.d.ts +0 -2
- package/dist/legacy-root-azm/src/registerCare/boundaryHints.js +0 -10
- package/dist/legacy-root-azm/src/registerCare/carriers.d.ts +0 -4
- package/dist/legacy-root-azm/src/registerCare/carriers.js +0 -78
- package/dist/legacy-root-azm/src/registerCare/controlFlow.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/controlFlow.js +0 -35
- package/dist/legacy-root-azm/src/registerCare/fix.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/fix.js +0 -119
- package/dist/legacy-root-azm/src/registerCare/liveness.d.ts +0 -7
- package/dist/legacy-root-azm/src/registerCare/liveness.js +0 -227
- package/dist/legacy-root-azm/src/registerCare/profiles.d.ts +0 -11
- package/dist/legacy-root-azm/src/registerCare/profiles.js +0 -45
- package/dist/legacy-root-azm/src/registerCare/programModel.d.ts +0 -3
- package/dist/legacy-root-azm/src/registerCare/programModel.js +0 -181
- package/dist/legacy-root-azm/src/registerCare/report.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/report.js +0 -139
- package/dist/legacy-root-azm/src/registerCare/smartComments.d.ts +0 -5
- package/dist/legacy-root-azm/src/registerCare/smartComments.js +0 -247
- package/dist/legacy-root-azm/src/registerCare/sourceText.d.ts +0 -8
- package/dist/legacy-root-azm/src/registerCare/sourceText.js +0 -15
- package/dist/legacy-root-azm/src/registerCare/summary.d.ts +0 -3
- package/dist/legacy-root-azm/src/registerCare/summary.js +0 -492
- package/dist/legacy-root-azm/src/registerCare/types.d.ts +0 -154
- package/dist/legacy-root-azm/src/registerCare/types.js +0 -1
- package/dist/legacy-root-azm/src/semantics/declVisitor.d.ts +0 -5
- package/dist/legacy-root-azm/src/semantics/declVisitor.js +0 -11
- package/dist/legacy-root-azm/src/semantics/env.d.ts +0 -28
- package/dist/legacy-root-azm/src/semantics/env.js +0 -432
- package/dist/legacy-root-azm/src/semantics/layout.d.ts +0 -21
- package/dist/legacy-root-azm/src/semantics/layout.js +0 -226
- package/dist/legacy-root-azm/src/semantics/layoutCastFold.d.ts +0 -22
- package/dist/legacy-root-azm/src/semantics/layoutCastFold.js +0 -118
- package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.d.ts +0 -2
- package/dist/legacy-root-azm/src/semantics/semanticsDiagnostics.js +0 -4
- package/dist/legacy-root-azm/src/semantics/typeQueries.d.ts +0 -31
- package/dist/legacy-root-azm/src/semantics/typeQueries.js +0 -124
- package/dist/legacy-root-azm/src/sourceIncludeExpansion.d.ts +0 -17
- package/dist/legacy-root-azm/src/sourceIncludeExpansion.js +0 -124
- package/dist/legacy-root-azm/src/sourceIncludePaths.d.ts +0 -1
- package/dist/legacy-root-azm/src/sourceIncludePaths.js +0 -12
- package/dist/legacy-root-azm/src/sourceLoader.d.ts +0 -15
- package/dist/legacy-root-azm/src/sourceLoader.js +0 -118
- package/dist/legacy-root-azm/src/z80/effects.d.ts +0 -3
- package/dist/legacy-root-azm/src/z80/effects.js +0 -516
- package/dist/legacy-root-azm/src/z80/encode.d.ts +0 -10
- package/dist/legacy-root-azm/src/z80/encode.js +0 -412
- package/dist/legacy-root-azm/src/z80/encodeAlu.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeAlu.js +0 -219
- package/dist/legacy-root-azm/src/z80/encodeBitOps.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeBitOps.js +0 -123
- package/dist/legacy-root-azm/src/z80/encodeContext.d.ts +0 -29
- package/dist/legacy-root-azm/src/z80/encodeContext.js +0 -1
- package/dist/legacy-root-azm/src/z80/encodeControl.d.ts +0 -26
- package/dist/legacy-root-azm/src/z80/encodeControl.js +0 -180
- package/dist/legacy-root-azm/src/z80/encodeCoreOps.d.ts +0 -7
- package/dist/legacy-root-azm/src/z80/encodeCoreOps.js +0 -131
- package/dist/legacy-root-azm/src/z80/encodeIo.d.ts +0 -9
- package/dist/legacy-root-azm/src/z80/encodeIo.js +0 -128
- package/dist/legacy-root-azm/src/z80/encodeLd.d.ts +0 -13
- package/dist/legacy-root-azm/src/z80/encodeLd.js +0 -273
- package/dist/legacy-root-azm/src/z80/encoderRegistry.d.ts +0 -13
- package/dist/legacy-root-azm/src/z80/encoderRegistry.js +0 -169
- package/dist/src/outputs/write-listing.d.ts +0 -2
- package/dist/src/outputs/write-listing.js +0 -79
package/docs/reference/cli.md
CHANGED
|
@@ -55,7 +55,6 @@ same base path.
|
|
|
55
55
|
| -------------- | -------------------------------- |
|
|
56
56
|
| `.hex` | Intel HEX output |
|
|
57
57
|
| `.bin` | flat binary output |
|
|
58
|
-
| `.lst` | listing with bytes and symbols |
|
|
59
58
|
| `.d8.json` | Debug80 map |
|
|
60
59
|
| `.z80` | lowered assembler source |
|
|
61
60
|
| `.regcare.txt` | register-care report |
|
|
@@ -64,7 +63,7 @@ same base path.
|
|
|
64
63
|
Disable standard artifacts when they are not needed:
|
|
65
64
|
|
|
66
65
|
```sh
|
|
67
|
-
azm --
|
|
66
|
+
azm --nod8m program.asm
|
|
68
67
|
azm --nobin --nohex --reg-report --rc audit program.asm
|
|
69
68
|
```
|
|
70
69
|
|
|
@@ -74,13 +73,12 @@ azm --nobin --nohex --reg-report --rc audit program.asm
|
|
|
74
73
|
| --------------------------------------------- | -------------------------------------------------------------------- |
|
|
75
74
|
| `-o, --output <file>` | Primary output path. The extension must match `--type`. |
|
|
76
75
|
| `-t, --type <hex\|bin>` | Primary output type. Default: `hex`. |
|
|
77
|
-
| `-n, --nolist` | Do not write `.lst`. |
|
|
78
76
|
| `--nobin` | Do not write `.bin`. |
|
|
79
77
|
| `--nohex` | Do not write `.hex`. |
|
|
80
78
|
| `--nod8m` | Do not write `.d8.json`. |
|
|
81
79
|
| `--asm80` | Write lowered assembler source as `.z80`. |
|
|
82
80
|
| `--source-root <dir>` | Emit project-relative source paths in `.d8.json`. |
|
|
83
|
-
| `--case-style <mode>` | Lint
|
|
81
|
+
| `--case-style <mode>` | Lint mnemonic/register/op-head case: `off`, `upper`, `lower`, or `consistent`. |
|
|
84
82
|
| `--rc, --register-care <mode>` | Register-care mode: `off`, `audit`, `warn`, `error`, or `strict`. |
|
|
85
83
|
| `--reg-report, --emit-register-report` | Write `.regcare.txt`. |
|
|
86
84
|
| `--reg-interface, --emit-register-interface` | Write inferred `.asmi` interface. |
|
|
@@ -96,6 +94,10 @@ azm --nobin --nohex --reg-report --rc audit program.asm
|
|
|
96
94
|
|
|
97
95
|
## Debug80 Maps
|
|
98
96
|
|
|
97
|
+
`--case-style` is a source-style lint only. It checks instruction mnemonics,
|
|
98
|
+
register names, and visible `op` heads/bodies. It does not rename labels,
|
|
99
|
+
constants, directives, or compile-time functions.
|
|
100
|
+
|
|
99
101
|
The `.d8.json` artifact records AZM as the generator, the package version, and
|
|
100
102
|
the input/output paths used for the map. When `--source-root` is supplied, file
|
|
101
103
|
keys and generator input paths are written relative to that directory with `/`
|
|
@@ -60,7 +60,6 @@ const result = await compile(
|
|
|
60
60
|
includeDirs: ['/abs/path/to/includes'],
|
|
61
61
|
sourceRoot: '/abs/path/to/project',
|
|
62
62
|
d8mInputs: {
|
|
63
|
-
listing: '/abs/path/to/project/build/main.lst',
|
|
64
63
|
hex: '/abs/path/to/project/build/main.hex',
|
|
65
64
|
bin: '/abs/path/to/project/build/main.bin',
|
|
66
65
|
},
|
|
@@ -68,7 +67,6 @@ const result = await compile(
|
|
|
68
67
|
emitBin: true,
|
|
69
68
|
emitHex: true,
|
|
70
69
|
emitD8m: true,
|
|
71
|
-
emitListing: true,
|
|
72
70
|
registerCare: 'audit',
|
|
73
71
|
registerCareInterfaces: ['/abs/path/to/mon3.asmi'],
|
|
74
72
|
},
|
|
@@ -125,7 +123,6 @@ The top-level map contains:
|
|
|
125
123
|
version: '0.1.1',
|
|
126
124
|
inputs: {
|
|
127
125
|
entry: 'src/pacmo/pacmo.z80',
|
|
128
|
-
listing: 'build/pacmo.lst',
|
|
129
126
|
hex: 'build/pacmo.hex',
|
|
130
127
|
bin: 'build/pacmo.bin',
|
|
131
128
|
},
|
|
@@ -257,7 +254,7 @@ const result = await compile(
|
|
|
257
254
|
**`emitAsm80` caveat:** Lowered `.z80` emission is gated but not universal.
|
|
258
255
|
Unsupported instructions or operand forms throw `UnsupportedAsm80LoweringError`,
|
|
259
256
|
surfaced as `AZMN_ASM80`. When assembly already succeeded, `compile()` still
|
|
260
|
-
returns bin/hex/d8
|
|
257
|
+
returns bin/hex/d8 artifacts alongside the asm80 error. Run
|
|
261
258
|
`npm run check:asm80-coverage` on your sources before relying on lowered output.
|
|
262
259
|
|
|
263
260
|
The compiler accepts flat `.asm` / `.z80` source, retained AZM assembler
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jhlagado/azm",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "AZM assembler for the Z80 family (Node.js CLI)",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"engines": {
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
35
|
"dist/src",
|
|
36
|
-
"dist/legacy-root-azm",
|
|
37
36
|
"docs/reference/cli.md",
|
|
38
37
|
"docs/reference/tooling-api.md"
|
|
39
38
|
],
|
|
@@ -86,7 +85,7 @@
|
|
|
86
85
|
"next:typecheck": "tsc -p tsconfig.json --noEmit",
|
|
87
86
|
"next:test": "vitest run --config vitest.config.ts",
|
|
88
87
|
"next:check": "npm run next:typecheck && npm run next:test",
|
|
89
|
-
"next:guardrails:core": "npm run next:check && npm run check:asm80-coverage && npm run
|
|
88
|
+
"next:guardrails:core": "npm run next:check && npm run check:asm80-coverage && npm run test:ci:asm80-parity",
|
|
90
89
|
"next:guardrails:package": "npm run test:package || npm run next:guardrails:package:local",
|
|
91
90
|
"next:guardrails:package:local": "npm run build && vitest run -c vitest.config.ts test/integration/stage-16-package-smoke-local.test.ts && vitest run test/public_api_surface.test.ts",
|
|
92
91
|
"next:guardrails:quality": "npm run lint && npm run check:source-file-sizes && node scripts/check-source-file-sizes.mjs",
|
|
@@ -95,9 +94,6 @@
|
|
|
95
94
|
"format:check": "prettier -c .",
|
|
96
95
|
"check:source-file-sizes": "node scripts/check-source-file-sizes.mjs",
|
|
97
96
|
"check:source-file-sizes:enforce": "node scripts/check-source-file-sizes.mjs --enforce-hard-cap",
|
|
98
|
-
"next:diff-current": "node scripts/diff-against-current.mjs --fixtures-dir test/differential/fixtures --skip-unsupported",
|
|
99
|
-
"next:diff-current:root": "node scripts/diff-against-current.mjs --fixtures-dir test/fixtures --skip-unsupported",
|
|
100
|
-
"next:diff-current:all": "npm run next:diff-current && npm run next:diff-current:root",
|
|
101
97
|
"prepack": "npm run build",
|
|
102
98
|
"prepublishOnly": "npm run build",
|
|
103
99
|
"azm": "npm run build && node dist/src/cli.js"
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { Diagnostic } from './diagnosticTypes.js';
|
|
2
|
-
import type { LoadedProgram } from './sourceLoader.js';
|
|
3
|
-
import type { CompilerOptions } from './pipeline.js';
|
|
4
|
-
import { type CompileEnv } from './semantics/env.js';
|
|
5
|
-
export interface AnalyzeProgramOptions extends Pick<CompilerOptions, 'caseStyle' | 'requireMain'> {
|
|
6
|
-
}
|
|
7
|
-
export interface AnalyzeProgramResult {
|
|
8
|
-
diagnostics: Diagnostic[];
|
|
9
|
-
env?: CompileEnv;
|
|
10
|
-
}
|
|
11
|
-
export declare function analyzeLoadedProgram(loadedProgram: LoadedProgram, options?: AnalyzeProgramOptions): AnalyzeProgramResult;
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { hasErrors } from './compileShared.js';
|
|
2
|
-
import { DiagnosticIds } from './diagnosticTypes.js';
|
|
3
|
-
import { lintCaseStyle } from './lintCaseStyle.js';
|
|
4
|
-
import { buildEnv } from './semantics/env.js';
|
|
5
|
-
function hasMainEntryLabel(program) {
|
|
6
|
-
return program.files.some((sourceFile) => sourceFile.items.some((item) => item.kind === 'AsmLabel' && item.name.toLowerCase() === 'main'));
|
|
7
|
-
}
|
|
8
|
-
export function analyzeLoadedProgram(loadedProgram, options = {}) {
|
|
9
|
-
const diagnostics = [];
|
|
10
|
-
const { program, sourceTexts } = loadedProgram;
|
|
11
|
-
const hasProgramItems = program.files.some((sourceFile) => sourceFile.items.length > 0);
|
|
12
|
-
if (!hasProgramItems) {
|
|
13
|
-
diagnostics.push({
|
|
14
|
-
id: DiagnosticIds.SemanticsError,
|
|
15
|
-
severity: 'error',
|
|
16
|
-
message: 'Program contains no declarations or instruction streams.',
|
|
17
|
-
file: program.entryFile,
|
|
18
|
-
...(program.span?.start
|
|
19
|
-
? { line: program.span.start.line, column: program.span.start.column }
|
|
20
|
-
: {}),
|
|
21
|
-
});
|
|
22
|
-
return { diagnostics };
|
|
23
|
-
}
|
|
24
|
-
if ((options.requireMain ?? false) && !hasMainEntryLabel(program)) {
|
|
25
|
-
diagnostics.push({
|
|
26
|
-
id: DiagnosticIds.SemanticsError,
|
|
27
|
-
severity: 'error',
|
|
28
|
-
message: 'Program must define a "main" entry label.',
|
|
29
|
-
file: program.entryFile,
|
|
30
|
-
...(program.span?.start
|
|
31
|
-
? { line: program.span.start.line, column: program.span.start.column }
|
|
32
|
-
: {}),
|
|
33
|
-
});
|
|
34
|
-
return { diagnostics };
|
|
35
|
-
}
|
|
36
|
-
lintCaseStyle(program, sourceTexts, options.caseStyle ?? 'off', diagnostics);
|
|
37
|
-
const env = buildEnv(program, diagnostics);
|
|
38
|
-
if (hasErrors(diagnostics))
|
|
39
|
-
return { diagnostics };
|
|
40
|
-
return { diagnostics, env };
|
|
41
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { CompileFn } from './pipeline.js';
|
|
2
|
-
/**
|
|
3
|
-
* Compile an AZM/ASM80-family program starting from an entry file.
|
|
4
|
-
*
|
|
5
|
-
* - Expands textual includes transitively with deterministic cycle checks.
|
|
6
|
-
* - Runs parse → semantics → lowering → format writers.
|
|
7
|
-
* - Produces artifacts in-memory via `deps.formats`.
|
|
8
|
-
* - Defaults to emitting BIN + HEX + D8M unless an emit flag is explicitly provided.
|
|
9
|
-
*/
|
|
10
|
-
export declare const compile: CompileFn;
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { dirname, extname } from 'node:path';
|
|
2
|
-
import { readFile } from 'node:fs/promises';
|
|
3
|
-
import { analyzeLoadedProgram } from './analysis.js';
|
|
4
|
-
import { hasErrors, normalizePath } from './compileShared.js';
|
|
5
|
-
import { DiagnosticIds } from './diagnosticTypes.js';
|
|
6
|
-
import { buildDirectiveAliasPolicy, defaultDirectiveAliasProfileName, readDirectiveAliasProfile, } from './frontend/directiveAliases.js';
|
|
7
|
-
import { isSupportedSourcePath } from './frontend/sourceExtensions.js';
|
|
8
|
-
import { emitProgram } from './lowering/emit.js';
|
|
9
|
-
import { loadProgram } from './sourceLoader.js';
|
|
10
|
-
import { analyzeRegisterCare } from './registerCare/analyze.js';
|
|
11
|
-
import { parseInterfaceContracts } from './registerCare/smartComments.js';
|
|
12
|
-
import { readPackageVersion } from './packageInfo.js';
|
|
13
|
-
function withDefaults(options) {
|
|
14
|
-
const anyPrimaryEmitSpecified = [options.emitBin, options.emitHex, options.emitD8m].some((v) => v !== undefined);
|
|
15
|
-
const emitBin = anyPrimaryEmitSpecified ? (options.emitBin ?? false) : true;
|
|
16
|
-
const emitHex = anyPrimaryEmitSpecified ? (options.emitHex ?? false) : true;
|
|
17
|
-
const emitD8m = anyPrimaryEmitSpecified ? (options.emitD8m ?? false) : true;
|
|
18
|
-
// Listing is a sidecar artifact: default to on unless explicitly suppressed.
|
|
19
|
-
const emitListing = options.emitListing ?? true;
|
|
20
|
-
const emitAsm80 = options.emitAsm80 ?? false;
|
|
21
|
-
return { emitBin, emitHex, emitD8m, emitListing, emitAsm80 };
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Compile an AZM/ASM80-family program starting from an entry file.
|
|
25
|
-
*
|
|
26
|
-
* - Expands textual includes transitively with deterministic cycle checks.
|
|
27
|
-
* - Runs parse → semantics → lowering → format writers.
|
|
28
|
-
* - Produces artifacts in-memory via `deps.formats`.
|
|
29
|
-
* - Defaults to emitting BIN + HEX + D8M unless an emit flag is explicitly provided.
|
|
30
|
-
*/
|
|
31
|
-
export const compile = async (entryFile, options, deps) => {
|
|
32
|
-
const entryPath = normalizePath(entryFile);
|
|
33
|
-
const diagnostics = [];
|
|
34
|
-
const artifacts = [];
|
|
35
|
-
if (!isSupportedSourcePath(entryPath)) {
|
|
36
|
-
diagnostics.push({
|
|
37
|
-
id: DiagnosticIds.Unknown,
|
|
38
|
-
severity: 'error',
|
|
39
|
-
message: 'Unsupported source file extension (expected .asm or .z80)',
|
|
40
|
-
file: entryPath,
|
|
41
|
-
});
|
|
42
|
-
return { diagnostics, artifacts };
|
|
43
|
-
}
|
|
44
|
-
const projectAliasProfiles = [];
|
|
45
|
-
for (const path of options.directiveAliasFiles ?? []) {
|
|
46
|
-
projectAliasProfiles.push(await readDirectiveAliasProfile(normalizePath(path)));
|
|
47
|
-
}
|
|
48
|
-
const directiveAliasPolicy = buildDirectiveAliasPolicy(defaultDirectiveAliasProfileName(), projectAliasProfiles);
|
|
49
|
-
const loaded = await loadProgram(entryPath, diagnostics, {
|
|
50
|
-
...options,
|
|
51
|
-
directiveAliasPolicy,
|
|
52
|
-
});
|
|
53
|
-
if (!loaded)
|
|
54
|
-
return { diagnostics, artifacts };
|
|
55
|
-
const { program, sourceTexts, sourceLineComments } = loaded;
|
|
56
|
-
if (hasErrors(diagnostics)) {
|
|
57
|
-
return { diagnostics, artifacts };
|
|
58
|
-
}
|
|
59
|
-
const analysis = analyzeLoadedProgram(loaded, {
|
|
60
|
-
...(options.caseStyle !== undefined ? { caseStyle: options.caseStyle } : {}),
|
|
61
|
-
...(options.requireMain !== undefined ? { requireMain: options.requireMain } : {}),
|
|
62
|
-
});
|
|
63
|
-
diagnostics.push(...analysis.diagnostics);
|
|
64
|
-
if (hasErrors(diagnostics) || !analysis.env)
|
|
65
|
-
return { diagnostics, artifacts };
|
|
66
|
-
const env = analysis.env;
|
|
67
|
-
const registerCareMode = options.registerCare ?? 'off';
|
|
68
|
-
const shouldAnalyzeRegisterCare = registerCareMode !== 'off' ||
|
|
69
|
-
options.emitRegisterReport === true ||
|
|
70
|
-
options.emitRegisterInterface === true ||
|
|
71
|
-
options.emitRegisterAnnotations === true ||
|
|
72
|
-
options.fixRegisterContracts === true ||
|
|
73
|
-
(options.acceptRegisterOutputCandidates?.length ?? 0) > 0 ||
|
|
74
|
-
(options.registerCareInterfaces?.length ?? 0) > 0;
|
|
75
|
-
if (shouldAnalyzeRegisterCare) {
|
|
76
|
-
const interfaceContracts = [];
|
|
77
|
-
for (const path of options.registerCareInterfaces ?? []) {
|
|
78
|
-
const resolved = normalizePath(path);
|
|
79
|
-
if (extname(resolved).toLowerCase() !== '.asmi') {
|
|
80
|
-
diagnostics.push({
|
|
81
|
-
id: DiagnosticIds.Unknown,
|
|
82
|
-
severity: 'error',
|
|
83
|
-
message: 'Register-care interface files must use the .asmi extension',
|
|
84
|
-
file: resolved,
|
|
85
|
-
});
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
const text = await readFile(resolved, 'utf8');
|
|
89
|
-
interfaceContracts.push(...parseInterfaceContracts(text, resolved).values());
|
|
90
|
-
}
|
|
91
|
-
if (hasErrors(diagnostics))
|
|
92
|
-
return { diagnostics, artifacts };
|
|
93
|
-
const registerCare = analyzeRegisterCare(loaded, {
|
|
94
|
-
mode: registerCareMode,
|
|
95
|
-
emitReport: options.emitRegisterReport === true,
|
|
96
|
-
emitInterface: options.emitRegisterInterface === true,
|
|
97
|
-
emitAnnotations: options.emitRegisterAnnotations === true || options.fixRegisterContracts === true,
|
|
98
|
-
fixRegisterContracts: options.fixRegisterContracts === true,
|
|
99
|
-
...(options.acceptRegisterOutputCandidates !== undefined
|
|
100
|
-
? { acceptOutputCandidates: options.acceptRegisterOutputCandidates }
|
|
101
|
-
: {}),
|
|
102
|
-
...(options.registerCareProfile !== undefined
|
|
103
|
-
? { profile: options.registerCareProfile }
|
|
104
|
-
: {}),
|
|
105
|
-
...(interfaceContracts.length > 0 ? { interfaceContracts } : {}),
|
|
106
|
-
});
|
|
107
|
-
diagnostics.push(...registerCare.diagnostics);
|
|
108
|
-
if (registerCare.reportText !== undefined) {
|
|
109
|
-
artifacts.push({ kind: 'register-care-report', text: registerCare.reportText });
|
|
110
|
-
}
|
|
111
|
-
if (registerCare.interfaceText !== undefined) {
|
|
112
|
-
artifacts.push({ kind: 'register-care-interface', text: registerCare.interfaceText });
|
|
113
|
-
}
|
|
114
|
-
if (registerCare.annotatedFiles !== undefined) {
|
|
115
|
-
artifacts.push({ kind: 'register-care-annotations', files: registerCare.annotatedFiles });
|
|
116
|
-
}
|
|
117
|
-
if (hasErrors(diagnostics)) {
|
|
118
|
-
return { diagnostics, artifacts };
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
const { map, symbols, placedLoweredAsmProgram } = emitProgram(program, env, diagnostics, {
|
|
122
|
-
...(options.includeDirs ? { includeDirs: options.includeDirs } : {}),
|
|
123
|
-
...(options.defaultCodeBase !== undefined ? { defaultCodeBase: options.defaultCodeBase } : {}),
|
|
124
|
-
sourceTexts,
|
|
125
|
-
sourceLineComments,
|
|
126
|
-
});
|
|
127
|
-
if (hasErrors(diagnostics)) {
|
|
128
|
-
return { diagnostics, artifacts };
|
|
129
|
-
}
|
|
130
|
-
const emit = withDefaults(options);
|
|
131
|
-
if (emit.emitBin) {
|
|
132
|
-
artifacts.push(deps.formats.writeBin(map, symbols));
|
|
133
|
-
}
|
|
134
|
-
if (emit.emitHex) {
|
|
135
|
-
artifacts.push(deps.formats.writeHex(map, symbols));
|
|
136
|
-
}
|
|
137
|
-
if (emit.emitD8m) {
|
|
138
|
-
const mainEntry = symbols.find((s) => s.kind === 'label' && s.name.toLowerCase() === 'main');
|
|
139
|
-
const d8mRoot = options.sourceRoot ?? dirname(entryPath);
|
|
140
|
-
artifacts.push(deps.formats.writeD8m(map, symbols, {
|
|
141
|
-
rootDir: d8mRoot,
|
|
142
|
-
packageVersion: readPackageVersion(),
|
|
143
|
-
inputs: {
|
|
144
|
-
entry: entryPath,
|
|
145
|
-
...(options.d8mInputs?.listing !== undefined
|
|
146
|
-
? { listing: options.d8mInputs.listing }
|
|
147
|
-
: {}),
|
|
148
|
-
...(options.d8mInputs?.hex !== undefined ? { hex: options.d8mInputs.hex } : {}),
|
|
149
|
-
...(options.d8mInputs?.bin !== undefined ? { bin: options.d8mInputs.bin } : {}),
|
|
150
|
-
},
|
|
151
|
-
...(mainEntry
|
|
152
|
-
? {
|
|
153
|
-
entrySymbol: mainEntry.name,
|
|
154
|
-
entryAddress: mainEntry.address & 0xffff,
|
|
155
|
-
}
|
|
156
|
-
: {}),
|
|
157
|
-
}));
|
|
158
|
-
}
|
|
159
|
-
if (emit.emitListing) {
|
|
160
|
-
if (deps.formats.writeListing) {
|
|
161
|
-
artifacts.push(deps.formats.writeListing(map, symbols));
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
diagnostics.push({
|
|
165
|
-
id: DiagnosticIds.Unknown,
|
|
166
|
-
severity: 'warning',
|
|
167
|
-
message: 'emitListing=true but no listing writer is configured; skipping .lst artifact.',
|
|
168
|
-
file: program.entryFile,
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
if (emit.emitAsm80) {
|
|
173
|
-
if (deps.formats.writeAsm80) {
|
|
174
|
-
artifacts.push(deps.formats.writeAsm80(placedLoweredAsmProgram));
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
diagnostics.push({
|
|
178
|
-
id: DiagnosticIds.Unknown,
|
|
179
|
-
severity: 'warning',
|
|
180
|
-
message: 'emitAsm80=true but no asm80 writer is configured; skipping .asm artifact.',
|
|
181
|
-
file: program.entryFile,
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return { diagnostics, artifacts };
|
|
186
|
-
};
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Severity level for a diagnostic.
|
|
3
|
-
*/
|
|
4
|
-
export type DiagnosticSeverity = 'error' | 'warning' | 'info';
|
|
5
|
-
/**
|
|
6
|
-
* A compiler diagnostic (error/warning/info) with an optional source location.
|
|
7
|
-
*
|
|
8
|
-
* Diagnostics must have stable IDs so downstream tooling can rely on them.
|
|
9
|
-
*/
|
|
10
|
-
export interface Diagnostic {
|
|
11
|
-
/** Stable diagnostic identifier (e.g., `AZM001`). */
|
|
12
|
-
id: DiagnosticId;
|
|
13
|
-
severity: DiagnosticSeverity;
|
|
14
|
-
message: string;
|
|
15
|
-
file: string;
|
|
16
|
-
/** 1-based line number, when known. */
|
|
17
|
-
line?: number;
|
|
18
|
-
/** 1-based column number, when known. */
|
|
19
|
-
column?: number;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Known diagnostic IDs.
|
|
23
|
-
*
|
|
24
|
-
* PR0 started with a minimal set; later PRs should extend this via contract changes.
|
|
25
|
-
*/
|
|
26
|
-
export declare const DiagnosticIds: {
|
|
27
|
-
/**
|
|
28
|
-
* Unknown/unclassified diagnostic.
|
|
29
|
-
*
|
|
30
|
-
* Use a more specific ID when possible; this remains for forward compatibility.
|
|
31
|
-
*/
|
|
32
|
-
readonly Unknown: "AZM000";
|
|
33
|
-
/** Failed to read a source file from disk. */
|
|
34
|
-
readonly IoReadFailed: "AZM001";
|
|
35
|
-
/** Internal error during parsing (unexpected exception). */
|
|
36
|
-
readonly InternalParseError: "AZM002";
|
|
37
|
-
/** Include could not be resolved on any search path. */
|
|
38
|
-
readonly IncludeNotFound: "AZM003";
|
|
39
|
-
/** Generic parse error (syntax / unsupported in current PR subset). */
|
|
40
|
-
readonly ParseError: "AZM100";
|
|
41
|
-
/** Generic instruction encoding error (unsupported mnemonic/operands, out-of-range imm, etc.). */
|
|
42
|
-
readonly EncodeError: "AZM200";
|
|
43
|
-
/** Generic emission/lowering error (layout/packing/symbol collisions, etc.). */
|
|
44
|
-
readonly EmitError: "AZM300";
|
|
45
|
-
/** Generic emission/lowering warning. */
|
|
46
|
-
readonly EmitWarning: "AZM301";
|
|
47
|
-
/** Op invocation arity mismatch against available overload set. */
|
|
48
|
-
readonly OpArityMismatch: "AZM310";
|
|
49
|
-
/** No overload match for an op invocation with the provided operands. */
|
|
50
|
-
readonly OpNoMatchingOverload: "AZM311";
|
|
51
|
-
/** Ambiguous overload resolution for an op invocation. */
|
|
52
|
-
readonly OpAmbiguousOverload: "AZM312";
|
|
53
|
-
/** Cyclic op expansion detected in inline expansion graph. */
|
|
54
|
-
readonly OpExpansionCycle: "AZM313";
|
|
55
|
-
/** Op expansion produced an invalid concrete instruction after substitution. */
|
|
56
|
-
readonly OpInvalidExpansion: "AZM314";
|
|
57
|
-
/** Generic semantic evaluation error (env building, imm evaluation, etc.). */
|
|
58
|
-
readonly SemanticsError: "AZM400";
|
|
59
|
-
/** Divide by zero in an imm expression. */
|
|
60
|
-
readonly ImmDivideByZero: "AZM401";
|
|
61
|
-
/** Modulo by zero in an imm expression. */
|
|
62
|
-
readonly ImmModuloByZero: "AZM402";
|
|
63
|
-
/** Type/layout error (unknown type, recursion, missing array length, etc.). */
|
|
64
|
-
readonly TypeError: "AZM403";
|
|
65
|
-
/** Case-style lint warning for keyword/register casing policy. */
|
|
66
|
-
readonly CaseStyleLint: "AZM500";
|
|
67
|
-
/** Redundant outer parentheses in a constant-only array index expression. */
|
|
68
|
-
readonly IndexParenRedundant: "AZM501";
|
|
69
|
-
/** Register-care conflict where a call may destroy a live caller value. */
|
|
70
|
-
readonly RegisterCareConflict: "AZM600";
|
|
71
|
-
/** Register-care analysis cannot prove an external or indirect call contract. */
|
|
72
|
-
readonly RegisterCareUnknownBoundary: "AZM601";
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Union type of all defined diagnostic IDs.
|
|
76
|
-
*/
|
|
77
|
-
export type DiagnosticId = (typeof DiagnosticIds)[keyof typeof DiagnosticIds];
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Known diagnostic IDs.
|
|
3
|
-
*
|
|
4
|
-
* PR0 started with a minimal set; later PRs should extend this via contract changes.
|
|
5
|
-
*/
|
|
6
|
-
export const DiagnosticIds = {
|
|
7
|
-
/**
|
|
8
|
-
* Unknown/unclassified diagnostic.
|
|
9
|
-
*
|
|
10
|
-
* Use a more specific ID when possible; this remains for forward compatibility.
|
|
11
|
-
*/
|
|
12
|
-
Unknown: 'AZM000',
|
|
13
|
-
/** Failed to read a source file from disk. */
|
|
14
|
-
IoReadFailed: 'AZM001',
|
|
15
|
-
/** Internal error during parsing (unexpected exception). */
|
|
16
|
-
InternalParseError: 'AZM002',
|
|
17
|
-
/** Include could not be resolved on any search path. */
|
|
18
|
-
IncludeNotFound: 'AZM003',
|
|
19
|
-
/** Generic parse error (syntax / unsupported in current PR subset). */
|
|
20
|
-
ParseError: 'AZM100',
|
|
21
|
-
/** Generic instruction encoding error (unsupported mnemonic/operands, out-of-range imm, etc.). */
|
|
22
|
-
EncodeError: 'AZM200',
|
|
23
|
-
/** Generic emission/lowering error (layout/packing/symbol collisions, etc.). */
|
|
24
|
-
EmitError: 'AZM300',
|
|
25
|
-
/** Generic emission/lowering warning. */
|
|
26
|
-
EmitWarning: 'AZM301',
|
|
27
|
-
/** Op invocation arity mismatch against available overload set. */
|
|
28
|
-
OpArityMismatch: 'AZM310',
|
|
29
|
-
/** No overload match for an op invocation with the provided operands. */
|
|
30
|
-
OpNoMatchingOverload: 'AZM311',
|
|
31
|
-
/** Ambiguous overload resolution for an op invocation. */
|
|
32
|
-
OpAmbiguousOverload: 'AZM312',
|
|
33
|
-
/** Cyclic op expansion detected in inline expansion graph. */
|
|
34
|
-
OpExpansionCycle: 'AZM313',
|
|
35
|
-
/** Op expansion produced an invalid concrete instruction after substitution. */
|
|
36
|
-
OpInvalidExpansion: 'AZM314',
|
|
37
|
-
/** Generic semantic evaluation error (env building, imm evaluation, etc.). */
|
|
38
|
-
SemanticsError: 'AZM400',
|
|
39
|
-
/** Divide by zero in an imm expression. */
|
|
40
|
-
ImmDivideByZero: 'AZM401',
|
|
41
|
-
/** Modulo by zero in an imm expression. */
|
|
42
|
-
ImmModuloByZero: 'AZM402',
|
|
43
|
-
/** Type/layout error (unknown type, recursion, missing array length, etc.). */
|
|
44
|
-
TypeError: 'AZM403',
|
|
45
|
-
/** Case-style lint warning for keyword/register casing policy. */
|
|
46
|
-
CaseStyleLint: 'AZM500',
|
|
47
|
-
/** Redundant outer parentheses in a constant-only array index expression. */
|
|
48
|
-
IndexParenRedundant: 'AZM501',
|
|
49
|
-
/** Register-care conflict where a call may destroy a live caller value. */
|
|
50
|
-
RegisterCareConflict: 'AZM600',
|
|
51
|
-
/** Register-care analysis cannot prove an external or indirect call contract. */
|
|
52
|
-
RegisterCareUnknownBoundary: 'AZM601',
|
|
53
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { writeBin } from './writeBin.js';
|
|
2
|
-
import { writeD8m } from './writeD8m.js';
|
|
3
|
-
import { writeHex } from './writeHex.js';
|
|
4
|
-
import { writeListing } from './writeListing.js';
|
|
5
|
-
import { writeAsm80 } from './writeAsm80.js';
|
|
6
|
-
/**
|
|
7
|
-
* Default in-memory artifact writers.
|
|
8
|
-
*
|
|
9
|
-
* These writers implement the `FormatWriters` contract and return artifacts without writing to disk.
|
|
10
|
-
*/
|
|
11
|
-
export const defaultFormatWriters = {
|
|
12
|
-
writeHex,
|
|
13
|
-
writeBin,
|
|
14
|
-
writeD8m,
|
|
15
|
-
writeListing,
|
|
16
|
-
writeAsm80,
|
|
17
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { AddressRange, EmittedByteMap } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Compute contiguous written segments from an emitted byte map.
|
|
4
|
-
*
|
|
5
|
-
* - Segments are half-open `[start, end)`.
|
|
6
|
-
* - Segment boundaries are based on concrete written byte addresses.
|
|
7
|
-
* - For an empty map, `[]` is returned.
|
|
8
|
-
*/
|
|
9
|
-
export declare function getWrittenSegments(map: EmittedByteMap): AddressRange[];
|
|
10
|
-
/**
|
|
11
|
-
* Compute the effective written range for an emitted byte map.
|
|
12
|
-
*
|
|
13
|
-
* - If `map.writtenRange` is present, it is returned directly.
|
|
14
|
-
* - Otherwise, the range is derived from the min/max written addresses.
|
|
15
|
-
* - For an empty map, `{ start: 0, end: 0 }` is returned.
|
|
16
|
-
*/
|
|
17
|
-
export declare function getWrittenRange(map: EmittedByteMap): AddressRange;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Compute contiguous written segments from an emitted byte map.
|
|
3
|
-
*
|
|
4
|
-
* - Segments are half-open `[start, end)`.
|
|
5
|
-
* - Segment boundaries are based on concrete written byte addresses.
|
|
6
|
-
* - For an empty map, `[]` is returned.
|
|
7
|
-
*/
|
|
8
|
-
export function getWrittenSegments(map) {
|
|
9
|
-
if (map.bytes.size === 0)
|
|
10
|
-
return [];
|
|
11
|
-
const sorted = [...new Set(map.bytes.keys())].sort((a, b) => a - b);
|
|
12
|
-
const segments = [];
|
|
13
|
-
let start = sorted[0];
|
|
14
|
-
let prev = start;
|
|
15
|
-
for (let index = 1; index < sorted.length; index++) {
|
|
16
|
-
const addr = sorted[index];
|
|
17
|
-
if (addr <= prev + 1) {
|
|
18
|
-
prev = addr;
|
|
19
|
-
continue;
|
|
20
|
-
}
|
|
21
|
-
segments.push({ start, end: prev + 1 });
|
|
22
|
-
start = addr;
|
|
23
|
-
prev = addr;
|
|
24
|
-
}
|
|
25
|
-
segments.push({ start, end: prev + 1 });
|
|
26
|
-
return segments;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Compute the effective written range for an emitted byte map.
|
|
30
|
-
*
|
|
31
|
-
* - If `map.writtenRange` is present, it is returned directly.
|
|
32
|
-
* - Otherwise, the range is derived from the min/max written addresses.
|
|
33
|
-
* - For an empty map, `{ start: 0, end: 0 }` is returned.
|
|
34
|
-
*/
|
|
35
|
-
export function getWrittenRange(map) {
|
|
36
|
-
if (map.writtenRange)
|
|
37
|
-
return map.writtenRange;
|
|
38
|
-
const segments = getWrittenSegments(map);
|
|
39
|
-
if (segments.length === 0)
|
|
40
|
-
return { start: 0, end: 0 };
|
|
41
|
-
return {
|
|
42
|
-
start: segments[0].start,
|
|
43
|
-
end: segments[segments.length - 1].end,
|
|
44
|
-
};
|
|
45
|
-
}
|