diff --git a/src/Value.cpp b/src/Value.cpp index 4ebb5dd64d..aa5708b000 100644 --- a/src/Value.cpp +++ b/src/Value.cpp @@ -22,6 +22,16 @@ StringValue::StringValue(llvm::StringRef val) { str[len] = '\0'; } +StringValue& StringValue::operator=(llvm::StringRef val) { + NT_DisposeString(this); + str = nullptr; + len = val.size(); + str = static_cast(std::malloc(len+1)); + std::memcpy(str, val.data(), len); + str[len] = '\0'; + return *this; +} + void Value::SetBooleanArray(llvm::ArrayRef value) { // handle type change if (NT_Value::type != NT_BOOLEAN_ARRAY) { diff --git a/src/Value.h b/src/Value.h index d028110e32..5f116b10b8 100644 --- a/src/Value.h +++ b/src/Value.h @@ -35,7 +35,7 @@ class StringValue : private NT_String { friend class WireDecoder; public: StringValue() { NT_InitString(this); } - explicit StringValue(llvm::StringRef val); + StringValue(llvm::StringRef val); ~StringValue() { NT_DisposeString(this); } operator llvm::StringRef() const { return llvm::StringRef(str, len); } @@ -60,6 +60,8 @@ class StringValue : private NT_String { } return *this; } + + StringValue& operator=(llvm::StringRef val); }; inline bool operator==(const StringValue& lhs, const StringValue& rhs) {