70 constexpr PersistentValue()
noexcept =
default;
71 PersistentValue(
const PersistentValue &other);
72 PersistentValue &operator=(
const PersistentValue &other);
74 PersistentValue(PersistentValue &&other)
noexcept : val(std::exchange(other.val,
nullptr)) {}
75 void swap(PersistentValue &other)
noexcept { qt_ptr_swap(val, other.val); }
76 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(PersistentValue)
77 ~PersistentValue() { PersistentValueStorage::free(val); }
79 PersistentValue &operator=(
const WeakValue &other);
80 PersistentValue &operator=(Object *object);
82 PersistentValue(ExecutionEngine *engine,
const Value &value);
83 PersistentValue(ExecutionEngine *engine, ReturnedValue value);
84 PersistentValue(ExecutionEngine *engine, Object *object);
86 void set(ExecutionEngine *engine,
const Value &value);
87 void set(ExecutionEngine *engine, ReturnedValue value);
88 void set(ExecutionEngine *engine, Heap::Base *obj);
90 ReturnedValue value()
const {
91 return (val ? val->asReturnedValue() : Encode::undefined());
93 Value *valueRef()
const {
96 Managed *asManaged()
const {
99 return val->managed();
108 ExecutionEngine *engine()
const {
111 return PersistentValueStorage::getEngine(val);
114 bool isUndefined()
const {
return !val || val->isUndefined(); }
115 bool isNullOrUndefined()
const {
return !val || val->isNullOrUndefined(); }
117 PersistentValueStorage::free(val);
120 bool isEmpty() {
return !val; }
123 Value *val =
nullptr;
130 WeakValue(
const WeakValue &other);
131 WeakValue(ExecutionEngine *engine,
const Value &value);
132 WeakValue &operator=(
const WeakValue &other);
135 void set(ExecutionEngine *engine,
const Value &value);
137 void set(ExecutionEngine *engine, ReturnedValue value);
139 void set(ExecutionEngine *engine, Heap::Base *obj);
141 ReturnedValue value()
const {
142 return (val ? val->asReturnedValue() : Encode::undefined());
144 Value *valueRef()
const {
147 Managed *asManaged()
const {
150 return val->managed();
152 template <
typename T>
159 ExecutionEngine *engine()
const {
162 return PersistentValueStorage::getEngine(val);
165 bool isUndefined()
const {
return !val || val->isUndefined(); }
166 bool isNullOrUndefined()
const {
return !val || val->isNullOrUndefined(); }
167 void clear() { free(); }
169 void markOnce(MarkStack *markStack);
172 Value *val =
nullptr;
175 Q_NEVER_INLINE
void allocVal(ExecutionEngine *engine);