Stop using PodZero in several places to initialize values of non-trivial type

This commit is contained in:
trav90 2018-09-12 05:41:41 -05:00 committed by Roy Tam
commit 02e07860b2
9 changed files with 56 additions and 73 deletions

View file

@ -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

View file

@ -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

View file

@ -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(_) \

View file

@ -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++)

View file

@ -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_;

View file

@ -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);

View file

@ -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

View file

@ -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);

View file

@ -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);