summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-artifact-output-util.h
blob: 88fe5284bfbd90688b33990e916516201f0bf49e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef SLANG_ARTIFACT_OUTPUT_UTIL_H
#define SLANG_ARTIFACT_OUTPUT_UTIL_H

#include "../compiler-core/slang-artifact.h"
#include "../compiler-core/slang-diagnostic-sink.h"
#include "../core/slang-basic.h"
#include "slang-com-ptr.h"

namespace Slang
{

class Session;

struct ArtifactOutputUtil
{
    /// Attempts to disassembly artifact into outArtifact.
    /// Errors are output to sink if set. If not desired pass nullptr
    static SlangResult dissassembleWithDownstream(
        Session* session,
        IArtifact* artifact,
        DiagnosticSink* sink,
        IArtifact** outArtifact);

    /// Disassembles if that is plausible
    /// Errors are output to sink if set. If not desired pass nullptr
    static SlangResult maybeDisassemble(
        Session* session,
        IArtifact* artifact,
        DiagnosticSink* sink,
        ComPtr<IArtifact>& outArtifact);

    /// Writes output to writer, will convert into disassembly if that is possible and appropriate
    /// (if outputting to console for example). Errors are output to sink if set. If not desired
    /// pass nullptr
    static SlangResult maybeConvertAndWrite(
        Session* session,
        IArtifact* artifact,
        DiagnosticSink* sink,
        const UnownedStringSlice& writerName,
        ISlangWriter* writer);

    /// Write (without any diagnostics)
    static SlangResult write(IArtifact* artifact, ISlangWriter* writer);
    static SlangResult write(const ArtifactDesc& desc, ISlangBlob* blob, ISlangWriter* writer);

    /// Writes the artifact with diagnostics
    static SlangResult write(
        IArtifact* artifact,
        DiagnosticSink* sink,
        const UnownedStringSlice& writerName,
        ISlangWriter* writer);

    /// Write to the specified path
    static SlangResult writeToFile(
        const ArtifactDesc& desc,
        const void* data,
        size_t size,
        const String& path);
    static SlangResult writeToFile(const ArtifactDesc& desc, ISlangBlob* blob, const String& path);
    static SlangResult writeToFile(IArtifact* artifact, const String& path);
    static SlangResult writeToFile(IArtifact* artifact, DiagnosticSink* sink, const String& path);
};

} // namespace Slang

#endif