Coverage Report

Created: 2025-12-12 07:27

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/hermes/external/llvh/include/llvh/Support/SmallVectorMemoryBuffer.h
Line
Count
Source
1
//===- SmallVectorMemoryBuffer.h --------------------------------*- C++ -*-===//
2
//
3
//                     The LLVM Compiler Infrastructure
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
//
10
// This file declares a wrapper class to hold the memory into which an
11
// object will be generated.
12
//
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_EXECUTIONENGINE_OBJECTMEMORYBUFFER_H
16
#define LLVM_EXECUTIONENGINE_OBJECTMEMORYBUFFER_H
17
18
#include "llvh/ADT/SmallVector.h"
19
#include "llvh/Support/MemoryBuffer.h"
20
#include "llvh/Support/raw_ostream.h"
21
22
namespace llvh {
23
24
/// SmallVector-backed MemoryBuffer instance.
25
///
26
/// This class enables efficient construction of MemoryBuffers from SmallVector
27
/// instances. This is useful for MCJIT and Orc, where object files are streamed
28
/// into SmallVectors, then inspected using ObjectFile (which takes a
29
/// MemoryBuffer).
30
class SmallVectorMemoryBuffer : public MemoryBuffer {
31
public:
32
  /// Construct an SmallVectorMemoryBuffer from the given SmallVector
33
  /// r-value.
34
  ///
35
  /// FIXME: It'd be nice for this to be a non-templated constructor taking a
36
  /// SmallVectorImpl here instead of a templated one taking a SmallVector<N>,
37
  /// but SmallVector's move-construction/assignment currently only take
38
  /// SmallVectors. If/when that is fixed we can simplify this constructor and
39
  /// the following one.
40
  SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV)
41
0
      : SV(std::move(SV)), BufferName("<in-memory object>") {
42
0
    init(this->SV.begin(), this->SV.end(), false);
43
0
  }
44
45
  /// Construct a named SmallVectorMemoryBuffer from the given
46
  /// SmallVector r-value and StringRef.
47
  SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV, StringRef Name)
48
0
      : SV(std::move(SV)), BufferName(Name) {
49
0
    init(this->SV.begin(), this->SV.end(), false);
50
0
  }
51
52
  // Key function.
53
  ~SmallVectorMemoryBuffer() override;
54
55
0
  StringRef getBufferIdentifier() const override { return BufferName; }
56
57
0
  BufferKind getBufferKind() const override { return MemoryBuffer_Malloc; }
58
59
private:
60
  SmallVector<char, 0> SV;
61
  std::string BufferName;
62
};
63
64
} // namespace llvh
65
66
#endif