mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 00:38:39 +09:00
Stop using PodZero in several places to initialize values of non-trivial type
This commit is contained in:
parent
ee1233bb0c
commit
02e07860b2
9 changed files with 56 additions and 73 deletions
|
|
@ -11,7 +11,6 @@
|
|||
// at your own risk.
|
||||
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
#include "mozilla/TypeTraits.h"
|
||||
|
||||
#include <string.h>
|
||||
|
|
@ -74,15 +73,7 @@ struct ServoSizes
|
|||
Ignore
|
||||
};
|
||||
|
||||
ServoSizes()
|
||||
: gcHeapUsed(0)
|
||||
, gcHeapUnused(0)
|
||||
, gcHeapAdmin(0)
|
||||
, gcHeapDecommitted(0)
|
||||
, mallocHeap(0)
|
||||
, nonHeap(0)
|
||||
{
|
||||
}
|
||||
ServoSizes() = default;
|
||||
|
||||
void add(Kind kind, size_t n) {
|
||||
switch (kind) {
|
||||
|
|
@ -97,12 +88,12 @@ struct ServoSizes
|
|||
}
|
||||
}
|
||||
|
||||
size_t gcHeapUsed;
|
||||
size_t gcHeapUnused;
|
||||
size_t gcHeapAdmin;
|
||||
size_t gcHeapDecommitted;
|
||||
size_t mallocHeap;
|
||||
size_t nonHeap;
|
||||
size_t gcHeapUsed = 0;
|
||||
size_t gcHeapUnused = 0;
|
||||
size_t gcHeapAdmin = 0;
|
||||
size_t gcHeapDecommitted = 0;
|
||||
size_t mallocHeap = 0;
|
||||
size_t nonHeap = 0;
|
||||
};
|
||||
|
||||
} // namespace JS
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
#include "mozilla/ArrayUtils.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
|
||||
#include "jscntxt.h"
|
||||
|
||||
|
|
@ -102,9 +101,9 @@ struct TenureCountCache
|
|||
static const size_t EntryShift = 4;
|
||||
static const size_t EntryCount = 1 << EntryShift;
|
||||
|
||||
TenureCount entries[EntryCount];
|
||||
TenureCount entries[EntryCount] = {}; // zeroes
|
||||
|
||||
TenureCountCache() { mozilla::PodZero(this); }
|
||||
TenureCountCache() = default;
|
||||
|
||||
HashNumber hash(ObjectGroup* group) {
|
||||
#if JS_BITS_PER_WORD == 32
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@
|
|||
#include "mozilla/EnumeratedArray.h"
|
||||
#include "mozilla/IntegerRange.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
|
||||
#include "jsalloc.h"
|
||||
#include "jsgc.h"
|
||||
|
|
@ -112,29 +111,26 @@ enum Stat {
|
|||
struct ZoneGCStats
|
||||
{
|
||||
/* Number of zones collected in this GC. */
|
||||
int collectedZoneCount;
|
||||
int collectedZoneCount = 0;
|
||||
|
||||
/* Total number of zones in the Runtime at the start of this GC. */
|
||||
int zoneCount;
|
||||
int zoneCount = 0;
|
||||
|
||||
/* Number of zones swept in this GC. */
|
||||
int sweptZoneCount;
|
||||
int sweptZoneCount = 0;
|
||||
|
||||
/* Total number of compartments in all zones collected. */
|
||||
int collectedCompartmentCount;
|
||||
int collectedCompartmentCount = 0;
|
||||
|
||||
/* Total number of compartments in the Runtime at the start of this GC. */
|
||||
int compartmentCount;
|
||||
int compartmentCount = 0;
|
||||
|
||||
/* Total number of compartments swept by this GC. */
|
||||
int sweptCompartmentCount;
|
||||
int sweptCompartmentCount = 0;
|
||||
|
||||
bool isCollectingAllZones() const { return collectedZoneCount == zoneCount; }
|
||||
|
||||
ZoneGCStats()
|
||||
: collectedZoneCount(0), zoneCount(0), sweptZoneCount(0),
|
||||
collectedCompartmentCount(0), compartmentCount(0), sweptCompartmentCount(0)
|
||||
{}
|
||||
ZoneGCStats() = default;
|
||||
};
|
||||
|
||||
#define FOR_EACH_GC_PROFILE_TIME(_) \
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
#include "mozilla/Atomics.h"
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
|
||||
#include "jstypes.h"
|
||||
|
||||
|
|
@ -692,17 +691,15 @@ struct IonScriptCounts
|
|||
{
|
||||
private:
|
||||
// Any previous invalidated compilation(s) for the script.
|
||||
IonScriptCounts* previous_;
|
||||
IonScriptCounts* previous_ = nullptr;
|
||||
|
||||
// Information about basic blocks in this script.
|
||||
size_t numBlocks_;
|
||||
IonBlockCounts* blocks_;
|
||||
size_t numBlocks_ = 0;
|
||||
IonBlockCounts* blocks_ = nullptr;
|
||||
|
||||
public:
|
||||
|
||||
IonScriptCounts() {
|
||||
mozilla::PodZero(this);
|
||||
}
|
||||
IonScriptCounts() = default;
|
||||
|
||||
~IonScriptCounts() {
|
||||
for (size_t i = 0; i < numBlocks_; i++)
|
||||
|
|
|
|||
|
|
@ -7,8 +7,6 @@
|
|||
#ifndef jit_shared_Assembler_shared_h
|
||||
#define jit_shared_Assembler_shared_h
|
||||
|
||||
#include "mozilla/PodOperations.h"
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#include "jit/AtomicOp.h"
|
||||
|
|
@ -491,10 +489,10 @@ class CodeLabel
|
|||
|
||||
class CodeOffsetJump
|
||||
{
|
||||
size_t offset_;
|
||||
size_t offset_ = 0;
|
||||
|
||||
#ifdef JS_SMALL_BRANCH
|
||||
size_t jumpTableIndex_;
|
||||
size_t jumpTableIndex_ = 0;
|
||||
#endif
|
||||
|
||||
public:
|
||||
|
|
@ -510,9 +508,7 @@ class CodeOffsetJump
|
|||
explicit CodeOffsetJump(size_t offset) : offset_(offset) {}
|
||||
#endif
|
||||
|
||||
CodeOffsetJump() {
|
||||
mozilla::PodZero(this);
|
||||
}
|
||||
CodeOffsetJump() = default;
|
||||
|
||||
size_t offset() const {
|
||||
return offset_;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@
|
|||
#ifndef vm_Caches_h
|
||||
#define vm_Caches_h
|
||||
|
||||
#include <new>
|
||||
|
||||
#include "jsatom.h"
|
||||
#include "jsbytecode.h"
|
||||
#include "jsobj.h"
|
||||
|
|
@ -191,14 +193,20 @@ class NewObjectCache
|
|||
char templateObject[MAX_OBJ_SIZE];
|
||||
};
|
||||
|
||||
Entry entries[41]; // TODO: reconsider size
|
||||
using EntryArray = Entry[41]; // TODO: reconsider size;
|
||||
EntryArray entries;
|
||||
|
||||
public:
|
||||
|
||||
typedef int EntryIndex;
|
||||
using EntryIndex = int;
|
||||
|
||||
NewObjectCache() { mozilla::PodZero(this); }
|
||||
void purge() { mozilla::PodZero(this); }
|
||||
NewObjectCache()
|
||||
: entries{} // zeroes out the array
|
||||
{}
|
||||
|
||||
void purge() {
|
||||
new (&entries) EntryArray{}; // zeroes out the array
|
||||
}
|
||||
|
||||
/* Remove any cached items keyed on moved objects. */
|
||||
void clearNurseryObjects(JSRuntime* rt);
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@
|
|||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/LinkedList.h"
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
#include "mozilla/Scoped.h"
|
||||
#include "mozilla/ThreadLocal.h"
|
||||
#include "mozilla/Vector.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include "jsatom.h"
|
||||
|
|
@ -1504,20 +1504,21 @@ PerThreadData::exclusiveThreadsPresent()
|
|||
static MOZ_ALWAYS_INLINE void
|
||||
MakeRangeGCSafe(Value* vec, size_t len)
|
||||
{
|
||||
mozilla::PodZero(vec, len);
|
||||
// Don't PodZero here because JS::Value is non-trivial.
|
||||
for (size_t i = 0; i < len; i++)
|
||||
vec[i].setDouble(+0.0);
|
||||
}
|
||||
|
||||
static MOZ_ALWAYS_INLINE void
|
||||
MakeRangeGCSafe(Value* beg, Value* end)
|
||||
{
|
||||
mozilla::PodZero(beg, end - beg);
|
||||
MakeRangeGCSafe(beg, end - beg);
|
||||
}
|
||||
|
||||
static MOZ_ALWAYS_INLINE void
|
||||
MakeRangeGCSafe(jsid* beg, jsid* end)
|
||||
{
|
||||
for (jsid* id = beg; id != end; ++id)
|
||||
*id = INT_TO_JSID(0);
|
||||
std::fill(beg, end, INT_TO_JSID(0));
|
||||
}
|
||||
|
||||
static MOZ_ALWAYS_INLINE void
|
||||
|
|
@ -1529,13 +1530,13 @@ MakeRangeGCSafe(jsid* vec, size_t len)
|
|||
static MOZ_ALWAYS_INLINE void
|
||||
MakeRangeGCSafe(Shape** beg, Shape** end)
|
||||
{
|
||||
mozilla::PodZero(beg, end - beg);
|
||||
std::fill(beg, end, nullptr);
|
||||
}
|
||||
|
||||
static MOZ_ALWAYS_INLINE void
|
||||
MakeRangeGCSafe(Shape** vec, size_t len)
|
||||
{
|
||||
mozilla::PodZero(vec, len);
|
||||
MakeRangeGCSafe(vec, vec + len);
|
||||
}
|
||||
|
||||
static MOZ_ALWAYS_INLINE void
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#define vm_String_h
|
||||
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
#include "mozilla/Range.h"
|
||||
|
||||
#include "jsapi.h"
|
||||
|
|
@ -1087,19 +1086,17 @@ class StaticStrings
|
|||
static const size_t SMALL_CHAR_LIMIT = 128U;
|
||||
static const size_t NUM_SMALL_CHARS = 64U;
|
||||
|
||||
JSAtom* length2StaticTable[NUM_SMALL_CHARS * NUM_SMALL_CHARS];
|
||||
JSAtom* length2StaticTable[NUM_SMALL_CHARS * NUM_SMALL_CHARS] = {}; // zeroes
|
||||
|
||||
public:
|
||||
/* We keep these public for the JITs. */
|
||||
static const size_t UNIT_STATIC_LIMIT = 256U;
|
||||
JSAtom* unitStaticTable[UNIT_STATIC_LIMIT];
|
||||
JSAtom* unitStaticTable[UNIT_STATIC_LIMIT] = {}; // zeroes
|
||||
|
||||
static const size_t INT_STATIC_LIMIT = 256U;
|
||||
JSAtom* intStaticTable[INT_STATIC_LIMIT];
|
||||
JSAtom* intStaticTable[INT_STATIC_LIMIT] = {}; // zeroes
|
||||
|
||||
StaticStrings() {
|
||||
mozilla::PodZero(this);
|
||||
}
|
||||
StaticStrings() = default;
|
||||
|
||||
bool init(JSContext* cx);
|
||||
void trace(JSTracer* trc);
|
||||
|
|
|
|||
|
|
@ -807,12 +807,10 @@ class PreliminaryObjectArray
|
|||
private:
|
||||
// All objects with the type which have been allocated. The pointers in
|
||||
// this array are weak.
|
||||
JSObject* objects[COUNT];
|
||||
JSObject* objects[COUNT] = {}; // zeroes
|
||||
|
||||
public:
|
||||
PreliminaryObjectArray() {
|
||||
mozilla::PodZero(this);
|
||||
}
|
||||
PreliminaryObjectArray() = default;
|
||||
|
||||
void registerNewObject(JSObject* res);
|
||||
void unregisterObject(JSObject* obj);
|
||||
|
|
@ -906,11 +904,11 @@ class TypeNewScript
|
|||
|
||||
private:
|
||||
// Scripted function which this information was computed for.
|
||||
HeapPtr<JSFunction*> function_;
|
||||
HeapPtr<JSFunction*> function_ = {};
|
||||
|
||||
// Any preliminary objects with the type. The analyses are not performed
|
||||
// until this array is cleared.
|
||||
PreliminaryObjectArray* preliminaryObjects;
|
||||
PreliminaryObjectArray* preliminaryObjects = nullptr;
|
||||
|
||||
// After the new script properties analyses have been performed, a template
|
||||
// object to use for newly constructed objects. The shape of this object
|
||||
|
|
@ -918,7 +916,7 @@ class TypeNewScript
|
|||
// allocation kind to use. This is null if the new objects have an unboxed
|
||||
// layout, in which case the UnboxedLayout provides the initial structure
|
||||
// of the object.
|
||||
HeapPtr<PlainObject*> templateObject_;
|
||||
HeapPtr<PlainObject*> templateObject_ = {};
|
||||
|
||||
// Order in which definite properties become initialized. We need this in
|
||||
// case the definite properties are invalidated (such as by adding a setter
|
||||
|
|
@ -928,21 +926,21 @@ class TypeNewScript
|
|||
// shape. Property assignments in inner frames are preceded by a series of
|
||||
// SETPROP_FRAME entries specifying the stack down to the frame containing
|
||||
// the write.
|
||||
Initializer* initializerList;
|
||||
Initializer* initializerList = nullptr;
|
||||
|
||||
// If there are additional properties found by the acquired properties
|
||||
// analysis which were not found by the definite properties analysis, this
|
||||
// shape contains all such additional properties (plus the definite
|
||||
// properties). When an object of this group acquires this shape, it is
|
||||
// fully initialized and its group can be changed to initializedGroup.
|
||||
HeapPtr<Shape*> initializedShape_;
|
||||
HeapPtr<Shape*> initializedShape_ = {};
|
||||
|
||||
// Group with definite properties set for all properties found by
|
||||
// both the definite and acquired properties analyses.
|
||||
HeapPtr<ObjectGroup*> initializedGroup_;
|
||||
HeapPtr<ObjectGroup*> initializedGroup_ = {};
|
||||
|
||||
public:
|
||||
TypeNewScript() { mozilla::PodZero(this); }
|
||||
TypeNewScript() = default;
|
||||
~TypeNewScript() {
|
||||
js_delete(preliminaryObjects);
|
||||
js_free(initializerList);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue