Skip to content

Commit

Permalink
Rename TypeSet::clone to TypeSet::cloneIntoUninitialized to indicate …
Browse files Browse the repository at this point in the history
…that it freshly initializes the TemporaryTypeSet* provided to it.

Also removes existing code that, quite unnecessarily, partly initialized that argument.
  • Loading branch information
trav90 committed Sep 20, 2018
1 parent a073757 commit 3b362e9
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 9 deletions.
15 changes: 7 additions & 8 deletions js/src/vm/TypeInference.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
#include "mozilla/SizePrintfMacros.h"
#include "mozilla/Sprintf.h"

#include <new>

#include "jsapi.h"
#include "jscntxt.h"
#include "jsgc.h"
Expand Down Expand Up @@ -859,10 +861,8 @@ TypeSet::IsTypeAboutToBeFinalized(TypeSet::Type* v)
}

bool
TypeSet::clone(LifoAlloc* alloc, TemporaryTypeSet* result) const
TypeSet::cloneIntoUninitialized(LifoAlloc* alloc, TemporaryTypeSet* result) const
{
MOZ_ASSERT(result->empty());

unsigned objectCount = baseObjectCount();
unsigned capacity = (objectCount >= 2) ? TypeHashSet::Capacity(objectCount) : 0;

Expand All @@ -874,15 +874,15 @@ TypeSet::clone(LifoAlloc* alloc, TemporaryTypeSet* result) const
PodCopy(newSet, objectSet, capacity);
}

new(result) TemporaryTypeSet(flags, capacity ? newSet : objectSet);
new (result) TemporaryTypeSet(flags, capacity ? newSet : objectSet);
return true;
}

TemporaryTypeSet*
TypeSet::clone(LifoAlloc* alloc) const
{
TemporaryTypeSet* res = alloc->new_<TemporaryTypeSet>();
if (!res || !clone(alloc, res))
TemporaryTypeSet* res = alloc->pod_malloc<TemporaryTypeSet>();
if (!res || !cloneIntoUninitialized(alloc, res))
return nullptr;
return res;
}
Expand Down Expand Up @@ -1150,10 +1150,9 @@ TypeScript::FreezeTypeSets(CompilerConstraintList* constraints, JSScript* script
TemporaryTypeSet* types = alloc->newArrayUninitialized<TemporaryTypeSet>(count);
if (!types)
return false;
PodZero(types, count);

for (size_t i = 0; i < count; i++) {
if (!existing[i].clone(alloc, &types[i]))
if (!existing[i].cloneIntoUninitialized(alloc, &types[i]))
return false;
}

Expand Down
5 changes: 4 additions & 1 deletion js/src/vm/TypeInference.h
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,10 @@ class TypeSet

// Clone a type set into an arbitrary allocator.
TemporaryTypeSet* clone(LifoAlloc* alloc) const;
bool clone(LifoAlloc* alloc, TemporaryTypeSet* result) const;

// |*result| is not even partly initialized when this function is called:
// this function placement-new's its contents into existence.
bool cloneIntoUninitialized(LifoAlloc* alloc, TemporaryTypeSet* result) const;

// Create a new TemporaryTypeSet where undefined and/or null has been filtered out.
TemporaryTypeSet* filter(LifoAlloc* alloc, bool filterUndefined, bool filterNull) const;
Expand Down

0 comments on commit 3b362e9

Please sign in to comment.