OutputBuffer(const OutputBuffer &) = delete;
OutputBuffer &operator=(const OutputBuffer &) = delete;
+ operator StringView() const { return StringView(Buffer, CurrentPosition); }
+
void reset(char *Buffer_, size_t BufferCapacity_) {
CurrentPosition = 0;
Buffer = Buffer_;
OutputBuffer(const OutputBuffer &) = delete;
OutputBuffer &operator=(const OutputBuffer &) = delete;
+ operator StringView() const { return StringView(Buffer, CurrentPosition); }
+
void reset(char *Buffer_, size_t BufferCapacity_) {
CurrentPosition = 0;
Buffer = Buffer_;
// FIXME: Propagate out-of-memory as an error?
std::terminate();
Identifier->output(OB, OF_Default);
- OB << '\0';
- char *Name = OB.getBuffer();
-
- StringView Owned = copyString(Name);
+ StringView Owned = copyString(OB);
memorizeString(Owned);
- std::free(Name);
+ std::free(OB.getBuffer());
}
IdentifierNode *
bool IsWcharT = false;
bool IsNegative = false;
size_t CrcEndPos = 0;
- char *ResultBuffer = nullptr;
EncodedStringLiteralNode *Result = Arena.alloc<EncodedStringLiteralNode>();
}
}
- OB << '\0';
- ResultBuffer = OB.getBuffer();
- Result->DecodedString = copyString(ResultBuffer);
- std::free(ResultBuffer);
+ Result->DecodedString = copyString(OB);
+ std::free(OB.getBuffer());
return Result;
StringLiteralError:
Scope->output(OB, OF_Default);
OB << '\'';
OB << "::`" << Number << "'";
- OB << '\0';
- char *Result = OB.getBuffer();
- Identifier->Name = copyString(Result);
- std::free(Result);
+
+ Identifier->Name = copyString(OB);
+ std::free(OB.getBuffer());
return Identifier;
}
TypeNode *T = Backrefs.FunctionParams[I];
T->output(OB, OF_Default);
- std::printf(" [%d] - %.*s\n", (int)I, (int)OB.getCurrentPosition(),
- OB.getBuffer());
+ StringView B = OB;
+ std::printf(" [%d] - %.*s\n", (int)I, (int)B.size(), B.begin());
}
std::free(OB.getBuffer());
OutputBuffer OB;
initializeOutputBuffer(nullptr, nullptr, OB, 1024);
this->output(OB, Flags);
- OB << '\0';
- std::string Owned(OB.getBuffer());
+ StringView SV = OB;
+ std::string Owned(SV.begin(), SV.end());
std::free(OB.getBuffer());
return Owned;
}
using llvm::itanium_demangle::OutputBuffer;
static std::string toString(OutputBuffer &OB) {
- return {OB.getBuffer(), OB.getCurrentPosition()};
+ StringView SV = OB;
+ return {SV.begin(), SV.end()};
}
template <typename T> static std::string printToString(const T &Value) {