using System.Collections.Generic; using Translator.Core.Analysis; using Translator.Core.Analysis.Representation; using Translator.Core.Analysis.Ssa; using Translator.Core.CodeGen; using Translator.Core.Representation; namespace Translator.Tests; /// /// Test-only wrapper around that returns just the /// emitted C++ text, so codegen tests don't have to thread an unused facts object through every call. /// internal static class CxxLinearCodeGeneratorEmitExtensions { public static string Emit( this CxxLinearCodeGenerator generator, uint entryPoint, SsaResult ssa, FunctionAbiClassification signature, RepresentationEnvironment types, bool emitModRegistration = false, uint modRegistrationPriority = 100, ulong modRegistrationModuleId = 1, IReadOnlySet? nonReturningCallTargets = null, IReadOnlySet? lrContinuationCallTargets = null, IReadOnlyDictionary? guestAbiContracts = null, bool emitStateFreeLeafVariant = false, IReadOnlyDictionary? stateFreeAbiContracts = null, IReadOnlyDictionary? stateFreeCallSymbols = null, IReadOnlyDictionary? stateFreeCallSiteVariants = null, IReadOnlyList? stateFreeEntryVariants = null, uint? moduleLinkBase = null, uint? moduleGuestBase = null, uint moduleLinkedCodeSize = 0, IReadOnlyDictionary? gqrEntryConstants = null, IReadOnlyDictionary? gqrCalleeWriteMasks = null, bool gqrConstantsRequireRuntimeGuard = false, bool enableLeafAbiSpillElision = false, IReadOnlySet? modOverridableCallTargets = null, bool enableGpuFifoBurstCoalescing = true) => generator.EmitWithFacts( entryPoint: entryPoint, ssa: ssa, signature: signature, types: types, emitModRegistration: emitModRegistration, modRegistrationPriority: modRegistrationPriority, modRegistrationModuleId: modRegistrationModuleId, nonReturningCallTargets: nonReturningCallTargets, lrContinuationCallTargets: lrContinuationCallTargets, guestAbiContracts: guestAbiContracts, emitStateFreeLeafVariant: emitStateFreeLeafVariant, stateFreeAbiContracts: stateFreeAbiContracts, stateFreeCallSymbols: stateFreeCallSymbols, stateFreeCallSiteVariants: stateFreeCallSiteVariants, stateFreeEntryVariants: stateFreeEntryVariants, moduleLinkBase: moduleLinkBase, moduleGuestBase: moduleGuestBase, moduleLinkedCodeSize: moduleLinkedCodeSize, gqrEntryConstants: gqrEntryConstants, gqrCalleeWriteMasks: gqrCalleeWriteMasks, gqrConstantsRequireRuntimeGuard: gqrConstantsRequireRuntimeGuard, enableLeafAbiSpillElision: enableLeafAbiSpillElision, modOverridableCallTargets: modOverridableCallTargets, enableGpuFifoBurstCoalescing: enableGpuFifoBurstCoalescing).Code; }