mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 07:07:45 +00:00
LibJS: Don't "copy construct" temporary value in ThrowCompletionOr ctor
It was possible for the generic ThrowCompletionOr constructor to "copy-construct" a JS Object when instantiating a ThrowCompletionOr via e.g `return *object;`. This happened because it chose the Object(Object& prototype) constructor which will be removed in a subsequent commit. It was not easy to debug. As a first step towards avoiding this in the future, the generic ThrowCompletionOr constructor now takes the value as a const reference.
This commit is contained in:
parent
3ea1584f2e
commit
42b5c896e8
1 changed files with 2 additions and 2 deletions
|
@ -268,9 +268,9 @@ public:
|
||||||
// Most commonly: Value from Object* or similar, so we can omit the curly braces from "return { TRY(...) };".
|
// Most commonly: Value from Object* or similar, so we can omit the curly braces from "return { TRY(...) };".
|
||||||
// Disabled for POD types to avoid weird conversion shenanigans.
|
// Disabled for POD types to avoid weird conversion shenanigans.
|
||||||
template<typename WrappedValueType>
|
template<typename WrappedValueType>
|
||||||
ThrowCompletionOr(WrappedValueType value)
|
ThrowCompletionOr(WrappedValueType const& value)
|
||||||
requires(!IsPOD<ValueType>)
|
requires(!IsPOD<ValueType>)
|
||||||
: m_value(move(value))
|
: m_value(value)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue