23  Limit.MaxLength = MaxLength;
 
   24  Limit.BeginOffset = getCurrentOffset();
 
   25  Limits.push_back(Limit);
 
 
   30  assert(!Limits.empty() && 
"Not in a record!");
 
   48    int PaddingBytes = 4 - 
Align;
 
   49    while (PaddingBytes > 0) {
 
   50      char Pad = 
static_cast<uint8_t>(LF_PAD0 + PaddingBytes);
 
   52      Streamer->emitBytes(BytesSR);
 
 
   64  assert(!Limits.empty() && 
"Not in a record!");
 
   71  std::optional<uint32_t> Min = Limits.front().bytesRemaining(
Offset);
 
   72  for (
auto X : 
ArrayRef(Limits).drop_front()) {
 
   73    std::optional<uint32_t> ThisMin = 
X.bytesRemaining(
Offset);
 
   75      Min = Min ? std::min(*Min, *ThisMin) : *ThisMin;
 
   77  assert(Min && 
"Every field must have a maximum length!");
 
 
   84    return Reader->padToAlignment(
Align);
 
   85  return Writer->padToAlignment(
Align);
 
 
   91  if (Reader->bytesRemaining() == 0)
 
   99  unsigned BytesToAdvance = Leaf & 0x0F;
 
  100  return Reader->skip(BytesToAdvance);
 
 
  104                                          const Twine &Comment) {
 
  106    emitComment(Comment);
 
  108    incrStreamedLen(Bytes.
size());
 
  110    if (
auto EC = Writer->writeBytes(Bytes))
 
  113    if (
auto EC = Reader->readBytes(Bytes, Reader->bytesRemaining()))
 
 
  120                                          const Twine &Comment) {
 
  125    Bytes.assign(BytesRef.
begin(), BytesRef.
end());
 
 
  132    std::string TypeNameStr = Streamer->getTypeName(TypeInd);
 
  133    if (!TypeNameStr.empty())
 
  134      emitComment(Comment + 
": " + TypeNameStr);
 
  136      emitComment(Comment);
 
  138    incrStreamedLen(
sizeof(TypeInd.
getIndex()));
 
  140    if (
auto EC = Writer->writeInteger(TypeInd.
getIndex()))
 
  144    if (
auto EC = Reader->readInteger(
I))
 
 
  152                                          const Twine &Comment) {
 
  155      emitEncodedUnsignedInteger(
static_cast<uint64_t>(
Value), Comment);
 
  157      emitEncodedSignedInteger(
Value, Comment);
 
  160      if (
auto EC = writeEncodedUnsignedInteger(
static_cast<uint64_t>(
Value)))
 
  163      if (
auto EC = writeEncodedSignedInteger(
Value))
 
 
  177                                          const Twine &Comment) {
 
  179    emitEncodedUnsignedInteger(
Value, Comment);
 
  181    if (
auto EC = writeEncodedUnsignedInteger(
Value))
 
 
  196    if (
Value.isSigned())
 
  197      emitEncodedSignedInteger(
Value.getSExtValue(), Comment);
 
  199      emitEncodedUnsignedInteger(
Value.getZExtValue(), Comment);
 
  201    if (
Value.isSigned())
 
  202      return writeEncodedSignedInteger(
 
  204    return writeEncodedUnsignedInteger(
Value.getLimitedValue());
 
 
  213    emitComment(Comment);
 
  214    Streamer->emitBytes(NullTerminatedString);
 
  215    incrStreamedLen(NullTerminatedString.size());
 
  219    if (
auto EC = Writer->writeCString(S))
 
  222    if (
auto EC = Reader->readCString(
Value))
 
 
  233        StringRef((
reinterpret_cast<const char *
>(&
Guid)), GuidSize);
 
  234    emitComment(Comment);
 
  235    Streamer->emitBytes(GuidSR);
 
  236    incrStreamedLen(GuidSize);
 
  244    if (
auto EC = Writer->writeBytes(
Guid.Guid))
 
  248    if (
auto EC = Reader->readBytes(GuidBytes, GuidSize))
 
  250    memcpy(
Guid.Guid, GuidBytes.
data(), GuidSize);
 
 
  256                                          const Twine &Comment) {
 
  259    emitComment(Comment);
 
  260    for (
auto V : 
Value) {
 
 
  280void CodeViewRecordIO::emitEncodedSignedInteger(
const int64_t &
Value,
 
  281                                                const Twine &Comment) {
 
  286    emitComment(Comment);
 
  289  } 
else if (
Value >= std::numeric_limits<int8_t>::min() &&
 
  290             Value <= std::numeric_limits<int8_t>::max()) {
 
  292    emitComment(Comment);
 
  295  } 
else if (
Value >= std::numeric_limits<int16_t>::min() &&
 
  296             Value <= std::numeric_limits<int16_t>::max()) {
 
  298    emitComment(Comment);
 
  301  } 
else if (
Value >= std::numeric_limits<int32_t>::min() &&
 
  302             Value <= std::numeric_limits<int32_t>::max()) {
 
  303    Streamer->emitIntValue(LF_LONG, 2);
 
  304    emitComment(Comment);
 
  305    Streamer->emitIntValue(
Value, 4);
 
  308    Streamer->emitIntValue(LF_QUADWORD, 2);
 
  309    emitComment(Comment);
 
  310    Streamer->emitIntValue(
Value, 4); 
 
  315void CodeViewRecordIO::emitEncodedUnsignedInteger(
const uint64_t &
Value,
 
  316                                                  const Twine &Comment) {
 
  317  if (
Value < LF_NUMERIC) {
 
  318    emitComment(Comment);
 
  319    Streamer->emitIntValue(
Value, 2);
 
  321  } 
else if (
Value <= std::numeric_limits<uint16_t>::max()) {
 
  322    Streamer->emitIntValue(LF_USHORT, 2);
 
  323    emitComment(Comment);
 
  324    Streamer->emitIntValue(
Value, 2);
 
  326  } 
else if (
Value <= std::numeric_limits<uint32_t>::max()) {
 
  327    Streamer->emitIntValue(LF_ULONG, 2);
 
  328    emitComment(Comment);
 
  329    Streamer->emitIntValue(
Value, 4);
 
  333    Streamer->emitIntValue(LF_UQUADWORD, 2);
 
  334    emitComment(Comment);
 
  335    Streamer->emitIntValue(
Value, 8);
 
  340Error CodeViewRecordIO::writeEncodedSignedInteger(
const int64_t &
Value) {
 
  342    if (
auto EC = Writer->writeInteger<int16_t>(
Value))
 
  344  } 
else if (
Value >= std::numeric_limits<int8_t>::min() &&
 
  345             Value <= std::numeric_limits<int8_t>::max()) {
 
  346    if (
auto EC = Writer->writeInteger<uint16_t>(LF_CHAR))
 
  348    if (
auto EC = Writer->writeInteger<int8_t>(
Value))
 
  350  } 
else if (
Value >= std::numeric_limits<int16_t>::min() &&
 
  351             Value <= std::numeric_limits<int16_t>::max()) {
 
  352    if (
auto EC = Writer->writeInteger<uint16_t>(LF_SHORT))
 
  354    if (
auto EC = Writer->writeInteger<int16_t>(
Value))
 
  356  } 
else if (
Value >= std::numeric_limits<int32_t>::min() &&
 
  357             Value <= std::numeric_limits<int32_t>::max()) {
 
  358    if (
auto EC = Writer->writeInteger<uint16_t>(LF_LONG))
 
  360    if (
auto EC = Writer->writeInteger<int32_t>(
Value))
 
  363    if (
auto EC = Writer->writeInteger<uint16_t>(LF_QUADWORD))
 
  365    if (
auto EC = Writer->writeInteger(
Value))
 
  371Error CodeViewRecordIO::writeEncodedUnsignedInteger(
const uint64_t &
Value) {
 
  372  if (
Value < LF_NUMERIC) {
 
  373    if (
auto EC = Writer->writeInteger<uint16_t>(
Value))
 
  375  } 
else if (
Value <= std::numeric_limits<uint16_t>::max()) {
 
  376    if (
auto EC = Writer->writeInteger<uint16_t>(LF_USHORT))
 
  378    if (
auto EC = Writer->writeInteger<uint16_t>(
Value))
 
  380  } 
else if (
Value <= std::numeric_limits<uint32_t>::max()) {
 
  381    if (
auto EC = Writer->writeInteger<uint16_t>(LF_ULONG))
 
  383    if (
auto EC = Writer->writeInteger<uint32_t>(
Value))
 
  386    if (
auto EC = Writer->writeInteger<uint16_t>(LF_UQUADWORD))
 
  388    if (
auto EC = Writer->writeInteger(
Value))
 
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
 
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
 
An arbitrary precision integer that knows its signedness.
 
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
 
size_t size() const
size - Get the array size.
 
Lightweight error class with error context and mandatory checking.
 
static ErrorSuccess success()
Create a success value.
 
StringRef - Represent a constant reference to a string, i.e.
 
constexpr bool empty() const
empty - Check if the string is empty.
 
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
 
LLVM Value Representation.
 
LLVM_ABI Error padToAlignment(uint32_t Align)
 
LLVM_ABI Error endRecord()
 
LLVM_ABI Error mapInteger(TypeIndex &TypeInd, const Twine &Comment="")
 
LLVM_ABI Error mapGuid(GUID &Guid, const Twine &Comment="")
 
LLVM_ABI Error mapStringZVectorZ(std::vector< StringRef > &Value, const Twine &Comment="")
 
LLVM_ABI Error skipPadding()
 
LLVM_ABI Error mapStringZ(StringRef &Value, const Twine &Comment="")
 
uint64_t getStreamedLen()
 
LLVM_ABI Error mapEncodedInteger(int64_t &Value, const Twine &Comment="")
 
LLVM_ABI Error beginRecord(std::optional< uint32_t > MaxLength)
 
LLVM_ABI Error mapByteVectorTail(ArrayRef< uint8_t > &Bytes, const Twine &Comment="")
 
LLVM_ABI uint32_t maxFieldLength() const
 
virtual void emitIntValue(uint64_t Value, unsigned Size)=0
 
void setIndex(uint32_t I)
 
uint32_t getIndex() const
 
This is an optimization pass for GlobalISel generic memory operations.
 
FunctionAddr VTableAddr Value
 
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.
 
ArrayRef(const T &OneElt) -> ArrayRef< T >
 
StringRef toStringRef(bool B)
Construct a string ref from a boolean.
 
This struct is a compact representation of a valid (non-zero power of two) alignment.
 
This represents the 'GUID' type from windows.h.