mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-27 01:27:30 +09:00
Simplify HeapSlot to make it trivially copyable
This removes the constructors, which were never called since we allocate arrays of HeapSlot with pod_malloc. The destructor is only ever called explicitly since we free this memory with js_free so it has been renamed to destroy(). Also removed is an unused manual barrier.
This commit is contained in:
parent
413f205479
commit
4f91b109d0
2 changed files with 8 additions and 29 deletions
|
|
@ -667,29 +667,15 @@ class HeapSlot : public WriteBarrieredBase<Value>
|
||||||
Element = 1
|
Element = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit HeapSlot() = delete;
|
|
||||||
|
|
||||||
explicit HeapSlot(NativeObject* obj, Kind kind, uint32_t slot, const Value& v)
|
|
||||||
: WriteBarrieredBase<Value>(v)
|
|
||||||
{
|
|
||||||
post(obj, kind, slot, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
explicit HeapSlot(NativeObject* obj, Kind kind, uint32_t slot, const HeapSlot& s)
|
|
||||||
: WriteBarrieredBase<Value>(s.value)
|
|
||||||
{
|
|
||||||
post(obj, kind, slot, s);
|
|
||||||
}
|
|
||||||
|
|
||||||
~HeapSlot() {
|
|
||||||
pre();
|
|
||||||
}
|
|
||||||
|
|
||||||
void init(NativeObject* owner, Kind kind, uint32_t slot, const Value& v) {
|
void init(NativeObject* owner, Kind kind, uint32_t slot, const Value& v) {
|
||||||
value = v;
|
value = v;
|
||||||
post(owner, kind, slot, v);
|
post(owner, kind, slot, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void destroy() {
|
||||||
|
pre();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
bool preconditionForSet(NativeObject* owner, Kind kind, uint32_t slot) const;
|
bool preconditionForSet(NativeObject* owner, Kind kind, uint32_t slot) const;
|
||||||
bool preconditionForWriteBarrierPost(NativeObject* obj, Kind kind, uint32_t slot,
|
bool preconditionForWriteBarrierPost(NativeObject* obj, Kind kind, uint32_t slot,
|
||||||
|
|
@ -703,11 +689,6 @@ class HeapSlot : public WriteBarrieredBase<Value>
|
||||||
post(owner, kind, slot, v);
|
post(owner, kind, slot, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For users who need to manually barrier the raw types. */
|
|
||||||
static void writeBarrierPost(NativeObject* owner, Kind kind, uint32_t slot, const Value& target) {
|
|
||||||
reinterpret_cast<HeapSlot*>(const_cast<Value*>(&target))->post(owner, kind, slot, target);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void post(NativeObject* owner, Kind kind, uint32_t slot, const Value& target) {
|
void post(NativeObject* owner, Kind kind, uint32_t slot, const Value& target) {
|
||||||
MOZ_ASSERT(preconditionForWriteBarrierPost(owner, kind, slot, target));
|
MOZ_ASSERT(preconditionForWriteBarrierPost(owner, kind, slot, target));
|
||||||
|
|
|
||||||
|
|
@ -876,7 +876,7 @@ class NativeObject : public ShapedObject
|
||||||
MOZ_ASSERT(end <= getDenseInitializedLength());
|
MOZ_ASSERT(end <= getDenseInitializedLength());
|
||||||
MOZ_ASSERT(!denseElementsAreCopyOnWrite());
|
MOZ_ASSERT(!denseElementsAreCopyOnWrite());
|
||||||
for (size_t i = start; i < end; i++)
|
for (size_t i = start; i < end; i++)
|
||||||
elements_[i].HeapSlot::~HeapSlot();
|
elements_[i].destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -885,7 +885,7 @@ class NativeObject : public ShapedObject
|
||||||
*/
|
*/
|
||||||
void prepareSlotRangeForOverwrite(size_t start, size_t end) {
|
void prepareSlotRangeForOverwrite(size_t start, size_t end) {
|
||||||
for (size_t i = start; i < end; i++)
|
for (size_t i = start; i < end; i++)
|
||||||
getSlotAddressUnchecked(i)->HeapSlot::~HeapSlot();
|
getSlotAddressUnchecked(i)->destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
@ -1130,8 +1130,7 @@ class NativeObject : public ShapedObject
|
||||||
dst->set(this, HeapSlot::Element, dst - elements_, *src);
|
dst->set(this, HeapSlot::Element, dst - elements_, *src);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
memmove(reinterpret_cast<Value*>(elements_ + dstStart), elements_ + srcStart,
|
memmove(elements_ + dstStart, elements_ + srcStart, count * sizeof(HeapSlot));
|
||||||
count * sizeof(Value));
|
|
||||||
elementsRangeWriteBarrierPost(dstStart, count);
|
elementsRangeWriteBarrierPost(dstStart, count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1144,8 +1143,7 @@ class NativeObject : public ShapedObject
|
||||||
MOZ_ASSERT(!denseElementsAreCopyOnWrite());
|
MOZ_ASSERT(!denseElementsAreCopyOnWrite());
|
||||||
MOZ_ASSERT(!denseElementsAreFrozen());
|
MOZ_ASSERT(!denseElementsAreFrozen());
|
||||||
|
|
||||||
memmove(reinterpret_cast<Value*>(elements_ + dstStart), elements_ + srcStart,
|
memmove(elements_ + dstStart, elements_ + srcStart, count * sizeof(HeapSlot));
|
||||||
count * sizeof(Value));
|
|
||||||
elementsRangeWriteBarrierPost(dstStart, count);
|
elementsRangeWriteBarrierPost(dstStart, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue