diff --git a/include/verilated_vpi.cpp b/include/verilated_vpi.cpp index 19e778a69..59e0e3925 100644 --- a/include/verilated_vpi.cpp +++ b/include/verilated_vpi.cpp @@ -705,8 +705,14 @@ public: case vpiOctStrVal: // FALLTHRU case vpiDecStrVal: // FALLTHRU case vpiHexStrVal: // FALLTHRU - case vpiStringVal: m_storage.str = o.m_storage.str; break; - case vpiVectorVal: m_storage.vec = o.m_storage.vec; break; + case vpiStringVal: { + new (&m_storage.str) std::string{o.m_storage.str}; + break; + } + case vpiVectorVal: { + new (&m_storage.vec) std::vector{o.m_storage.vec}; + break; + } } } @@ -718,40 +724,17 @@ public: case vpiOctStrVal: // FALLTHRU case vpiDecStrVal: // FALLTHRU case vpiHexStrVal: // FALLTHRU - case vpiStringVal: m_storage.str = std::move(o.m_storage.str); break; - case vpiVectorVal: m_storage.vec = std::move(o.m_storage.vec); break; + case vpiStringVal: { + new (&m_storage.str) std::string{std::move(o.m_storage.str)}; + break; + } + case vpiVectorVal: { + new (&m_storage.vec) std::vector{std::move(o.m_storage.vec)}; + break; + } } } - VerilatedVpiPutHolder& operator=(VerilatedVpiPutHolder const& o) { - if (this == &o) { return *this; } - m_var = o.m_var; - m_value = o.m_value; - switch (m_value.format) { - case vpiBinStrVal: // FALLTHRU - case vpiOctStrVal: // FALLTHRU - case vpiDecStrVal: // FALLTHRU - case vpiHexStrVal: // FALLTHRU - case vpiStringVal: m_storage.str = o.m_storage.str; break; - case vpiVectorVal: m_storage.vec = o.m_storage.vec; break; - } - return *this; - }; - - VerilatedVpiPutHolder& operator=(VerilatedVpiPutHolder&& o) noexcept { - m_var = std::move(o.m_var); - m_value = std::move(o.m_value); - switch (m_value.format) { - case vpiBinStrVal: // FALLTHRU - case vpiOctStrVal: // FALLTHRU - case vpiDecStrVal: // FALLTHRU - case vpiHexStrVal: // FALLTHRU - case vpiStringVal: m_storage.str = std::move(o.m_storage.str); break; - case vpiVectorVal: m_storage.vec = std::move(o.m_storage.vec); break; - } - return *this; - }; - ~VerilatedVpiPutHolder() noexcept { switch (m_value.format) { case vpiBinStrVal: // FALLTHRU @@ -813,7 +796,7 @@ class VerilatedVpiImp final { std::array m_cbCurrentLists; VpioFutureCbs m_futureCbs; // Time based callbacks for future timestamps VpioFutureCbs m_nextCbs; // cbNextSimTime callbacks - std::vector m_inertialPuts; // Pending vpi puts due to vpiInertialDelay + std::list m_inertialPuts; // Pending vpi puts due to vpiInertialDelay VerilatedVpiError* m_errorInfop = nullptr; // Container for vpi error info VerilatedAssertOneThread m_assertOne; // Assert only called from single thread uint64_t m_nextCallbackId = 1; // Id to identify callback