Convert empty_fixed_double_array to empty_fixed_array in call/construct

Bug: chromium:850005, chromium:852085,
Change-Id: I777321306b1b68330e39e43aacc715478764649f
Reviewed-on: https://chromium-review.googlesource.com/1104470
Commit-Queue: Camillo Bruni <cbruni@chromium.org>
Reviewed-by: Georg Neis <neis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#54007}
This commit is contained in:
Camillo Bruni 2018-06-18 17:30:44 +02:00 committed by Commit Bot
parent d5e1d57c79
commit 2df4ba0263

View File

@ -191,19 +191,32 @@ void CallOrConstructBuiltinsAssembler::CallOrConstructWithArrayLike(
Label if_not_double(this), if_double(this);
TNode<Int32T> args_count = Int32Constant(0); // args already on the stack
TNode<FixedArrayBase> elements = var_elements.value();
TNode<Int32T> length = var_length.value();
GotoIf(Word32Equal(length, Int32Constant(0)), &if_not_double);
{
Label normalize_done(this);
GotoIfNot(Word32Equal(length, Int32Constant(0)), &normalize_done);
// Make sure we don't accidentally pass along the
// empty_fixed_double_array since the tailed-called stubs cannot handle
// the normalization yet.
var_elements = EmptyFixedArrayConstant();
Goto(&normalize_done);
BIND(&normalize_done);
}
TNode<FixedArrayBase> elements = var_elements.value();
Branch(IsFixedDoubleArray(elements), &if_double, &if_not_double);
BIND(&if_not_double);
if (new_target == nullptr) {
Callable callable = CodeFactory::CallVarargs(isolate());
TailCallStub(callable, context, target, args_count, elements, length);
} else {
Callable callable = CodeFactory::ConstructVarargs(isolate());
TailCallStub(callable, context, target, new_target, args_count, elements,
length);
{
if (new_target == nullptr) {
Callable callable = CodeFactory::CallVarargs(isolate());
TailCallStub(callable, context, target, args_count, elements, length);
} else {
Callable callable = CodeFactory::ConstructVarargs(isolate());
TailCallStub(callable, context, target, new_target, args_count,
elements, length);
}
}
BIND(&if_double);