mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 810192 - don't require a default constructor for Hash{Map,Set}; only construct objects for live elements (r=terrence)
This commit is contained in:
parent
e72652f68f
commit
da2499ccc0
File diff suppressed because it is too large
Load Diff
@ -512,6 +512,9 @@ template <class T, size_t N, class AllocPolicy>
|
||||
JS_ALWAYS_INLINE
|
||||
Vector<T, N, AllocPolicy>::Vector(MoveRef<Vector> rhs)
|
||||
: AllocPolicy(rhs)
|
||||
#ifdef DEBUG
|
||||
, entered(false)
|
||||
#endif
|
||||
{
|
||||
mLength = rhs->mLength;
|
||||
mCapacity = rhs->mCapacity;
|
||||
|
@ -94,6 +94,11 @@ class IonAllocPolicy
|
||||
void *malloc_(size_t bytes) {
|
||||
return GetIonContext()->temp->allocate(bytes);
|
||||
}
|
||||
void *calloc_(size_t bytes) {
|
||||
void *p = GetIonContext()->temp->allocate(bytes);
|
||||
memset(p, 0, bytes);
|
||||
return p;
|
||||
}
|
||||
void *realloc_(void *p, size_t oldBytes, size_t bytes) {
|
||||
void *n = malloc_(bytes);
|
||||
if (!n)
|
||||
|
@ -18,6 +18,8 @@ namespace js {
|
||||
* - public copy constructor, assignment, destructor
|
||||
* - void *malloc_(size_t)
|
||||
* Responsible for OOM reporting on NULL return value.
|
||||
* - void *calloc_(size_t)
|
||||
* Responsible for OOM reporting on NULL return value.
|
||||
* - void *realloc_(size_t)
|
||||
* Responsible for OOM reporting on NULL return value.
|
||||
* The *used* bytes of the previous buffer is passed in
|
||||
@ -33,6 +35,7 @@ class SystemAllocPolicy
|
||||
{
|
||||
public:
|
||||
void *malloc_(size_t bytes) { return js_malloc(bytes); }
|
||||
void *calloc_(size_t bytes) { return js_calloc(bytes); }
|
||||
void *realloc_(void *p, size_t oldBytes, size_t bytes) { return js_realloc(p, bytes); }
|
||||
void free_(void *p) { js_free(p); }
|
||||
void reportAllocOverflow() const {}
|
||||
@ -71,6 +74,13 @@ class TempAllocPolicy
|
||||
return p;
|
||||
}
|
||||
|
||||
void *calloc_(size_t bytes) {
|
||||
void *p = js_calloc(bytes);
|
||||
if (JS_UNLIKELY(!p))
|
||||
p = onOutOfMemory(NULL, bytes);
|
||||
return p;
|
||||
}
|
||||
|
||||
void *realloc_(void *p, size_t oldBytes, size_t bytes) {
|
||||
void *p2 = js_realloc(p, bytes);
|
||||
if (JS_UNLIKELY(!p2))
|
||||
|
@ -38,8 +38,7 @@ HashId(jsid id)
|
||||
return mozilla::HashGeneric(JSID_BITS(id));
|
||||
}
|
||||
|
||||
template<>
|
||||
struct DefaultHasher<jsid>
|
||||
struct JsidHasher
|
||||
{
|
||||
typedef jsid Lookup;
|
||||
static HashNumber hash(const Lookup &l) {
|
||||
|
@ -2194,6 +2194,7 @@ class RuntimeAllocPolicy
|
||||
RuntimeAllocPolicy(JSRuntime *rt) : runtime(rt) {}
|
||||
RuntimeAllocPolicy(JSContext *cx) : runtime(cx->runtime) {}
|
||||
void *malloc_(size_t bytes) { return runtime->malloc_(bytes); }
|
||||
void *calloc_(size_t bytes) { return runtime->calloc_(bytes); }
|
||||
void *realloc_(void *p, size_t bytes) { return runtime->realloc_(p, bytes); }
|
||||
void free_(void *p) { js_free(p); }
|
||||
void reportAllocOverflow() const {}
|
||||
@ -2210,6 +2211,7 @@ class ContextAllocPolicy
|
||||
ContextAllocPolicy(JSContext *cx) : cx(cx) {}
|
||||
JSContext *context() const { return cx; }
|
||||
void *malloc_(size_t bytes) { return cx->malloc_(bytes); }
|
||||
void *calloc_(size_t bytes) { return cx->calloc_(bytes); }
|
||||
void *realloc_(void *p, size_t oldBytes, size_t bytes) { return cx->realloc_(p, oldBytes, bytes); }
|
||||
void free_(void *p) { js_free(p); }
|
||||
void reportAllocOverflow() const { js_ReportAllocationOverflow(cx); }
|
||||
|
@ -3249,9 +3249,10 @@ InCrossCompartmentMap(JSObject *src, Cell *dst, JSGCTraceKind dstKind)
|
||||
|
||||
if (dstKind == JSTRACE_OBJECT) {
|
||||
Value key = ObjectValue(*static_cast<JSObject *>(dst));
|
||||
WrapperMap::Ptr p = srccomp->crossCompartmentWrappers.lookup(key);
|
||||
if (*p->value.unsafeGet() == ObjectValue(*src))
|
||||
return true;
|
||||
if (WrapperMap::Ptr p = srccomp->crossCompartmentWrappers.lookup(key)) {
|
||||
if (*p->value.unsafeGet() == ObjectValue(*src))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -630,7 +630,7 @@ js_Stringify(JSContext *cx, MutableHandleValue vp, JSObject *replacer_, Value sp
|
||||
if (replacer->isDenseArray())
|
||||
len = Min(len, replacer->getDenseArrayCapacity());
|
||||
|
||||
HashSet<jsid> idSet(cx);
|
||||
HashSet<jsid, JsidHasher> idSet(cx);
|
||||
if (!idSet.init(len))
|
||||
return false;
|
||||
|
||||
@ -667,7 +667,7 @@ js_Stringify(JSContext *cx, MutableHandleValue vp, JSObject *replacer_, Value sp
|
||||
}
|
||||
|
||||
/* Step 4b(iv)(6). */
|
||||
HashSet<jsid>::AddPtr p = idSet.lookupForAdd(id);
|
||||
HashSet<jsid, JsidHasher>::AddPtr p = idSet.lookupForAdd(id);
|
||||
if (!p) {
|
||||
/* Step 4b(iv)(6)(a). */
|
||||
if (!idSet.add(p, id) || !propertyList.append(id))
|
||||
|
@ -148,7 +148,8 @@ PropertyTree::getChild(JSContext *cx, Shape *parent_, uint32_t nfixed, const Sta
|
||||
if (kid->matches(child))
|
||||
shape = kid;
|
||||
} else if (kidp->isHash()) {
|
||||
shape = *kidp->toHash()->lookup(child);
|
||||
if (KidsHash::Ptr p = kidp->toHash()->lookup(child))
|
||||
shape = *p;
|
||||
} else {
|
||||
/* If kidp->isNull(), we always insert. */
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ private:
|
||||
class SystemAllocPolicy {
|
||||
public:
|
||||
void *malloc_(size_t bytes) { return ::malloc(bytes); }
|
||||
void *calloc_(size_t bytes) { return ::calloc(bytes, 1); }
|
||||
void *realloc_(void *p, size_t bytes) { return ::realloc(p, bytes); }
|
||||
void free_(void *p) { ::free(p); }
|
||||
void reportAllocOverflow() const {}
|
||||
|
Loading…
Reference in New Issue
Block a user