package p.studio.compiler.models;

import p.studio.compiler.source.identifiers.ModuleId;
import p.studio.compiler.source.tables.CallableSignatureRef;
import p.studio.compiler.source.tables.IntrinsicReference;
import p.studio.compiler.source.tables.ModuleReference;
import p.studio.utilities.structures.ReadOnlyList;

public interface IRBackendReader {
    String getEntryPointCallableName();
    ModuleId getEntryPointModuleId();
    ReadOnlyList<IRFunction> getFunctions();
    ReadOnlyList<IRSyntheticFunction> getSyntheticFunctions();
    ReadOnlyList<IRGlobal> getGlobals();
    ReadOnlyList<IRBackendExecutableFunction> getExecutableFunctions();
    ReadOnlyList<ModuleReference> getModulePool();
    ReadOnlyList<CallableSignatureRef> getCallableSignatures();
    ReadOnlyList<IntrinsicReference> getIntrinsicPool();
    IRReservedMetadata getReservedMetadata();
}
