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
|