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;
}