ClonedArguments* ClonedArguments::createEmpty( VM& vm, Structure* structure, JSFunction* callee, unsigned length) { unsigned vectorLength = length; if (vectorLength > MAX_STORAGE_VECTOR_LENGTH) return 0; Butterfly* butterfly; if (UNLIKELY(structure->needsSlowPutIndexing())) { butterfly = createArrayStorageButterfly(vm, nullptr, structure, length, vectorLength); butterfly->arrayStorage()->m_numValuesInVector = vectorLength; } else { void* temp = vm.heap.tryAllocateAuxiliary(nullptr, Butterfly::totalSize(0, structure->outOfLineCapacity(), true, vectorLength * sizeof(EncodedJSValue))); if (!temp) return 0; butterfly = Butterfly::fromBase(temp, 0, structure->outOfLineCapacity()); butterfly->setVectorLength(vectorLength); butterfly->setPublicLength(length); for (unsigned i = length; i < vectorLength; ++i) butterfly->contiguous()[i].clear(); } ClonedArguments* result = new (NotNull, allocateCell<ClonedArguments>(vm.heap)) ClonedArguments(vm, structure, butterfly); result->finishCreation(vm); result->m_callee.set(vm, result, callee); result->putDirect(vm, clonedArgumentsLengthPropertyOffset, jsNumber(length)); return result; }
ClonedArguments* ClonedArguments::createEmpty( VM& vm, Structure* structure, JSFunction* callee) { ClonedArguments* result = new (NotNull, allocateCell<ClonedArguments>(vm.heap)) ClonedArguments(vm, structure); result->finishCreation(vm); result->m_callee.set(vm, result, callee); return result; }