diff --git a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp index 015798633453..b5059f4cc2d9 100644 --- a/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp +++ b/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp @@ -3497,10 +3497,12 @@ RegisterID* BytecodeGenerator::emitNewArrayWithSpread(RegisterID* dst, ElementNo unsigned i = 0; for (ElementNode* node = elements; node; node = node->next()) { if (node->value()->isSpreadExpression()) { - ExpressionNode* expression = static_cast(node->value())->expression(); + auto* spread = static_cast(node->value()); + ExpressionNode* expression = spread->expression(); RefPtr tmp = newTemporary(); emitNode(tmp.get(), expression); + emitExpressionInfo(spread->divot(), spread->divotStart(), spread->divotEnd()); OpSpread::emit(this, argv[i].get(), tmp.get()); } else { ExpressionNode* expression = node->value(); @@ -3781,8 +3783,10 @@ RegisterID* BytecodeGenerator::emitCall(RegisterID* dst, RegisterID* func, Expec if (expression->isArrayLiteral()) { auto* elements = static_cast(expression)->elements(); if (elements && !elements->next() && elements->value()->isSpreadExpression()) { - ExpressionNode* expression = static_cast(elements->value())->expression(); + auto* spread = static_cast(elements->value()); + ExpressionNode* expression = spread->expression(); RefPtr argumentRegister = tempDestination(emitNode(callArguments.argumentRegister(0), expression)); + emitExpressionInfo(spread->divot(), spread->divotStart(), spread->divotEnd()); OpSpread::emit(this, argumentRegister.get(), argumentRegister.get()); return emitCallVarargs::type>(dst, func, callArguments.thisRegister(), argumentRegister.get(), newTemporary(), 0, divot, divotStart, divotEnd, debuggableCall); @@ -3993,11 +3997,14 @@ RegisterID* BytecodeGenerator::emitConstructImpl(RegisterID* dst, RegisterID* fu if (expression->isArrayLiteral()) { auto* elements = static_cast(expression)->elements(); if (elements && !elements->next() && elements->value()->isSpreadExpression()) { - ExpressionNode* expression = static_cast(elements->value())->expression(); + auto* spread = static_cast(elements->value()); + ExpressionNode* expression = spread->expression(); RefPtr argumentRegister = tempDestination(emitNode(callArguments.argumentRegister(0), expression)); - if (!isDefaultDerivedConstructorCall) + if (!isDefaultDerivedConstructorCall) { + emitExpressionInfo(spread->divot(), spread->divotStart(), spread->divotEnd()); OpSpread::emit(this, argumentRegister.get(), argumentRegister.get()); + } move(callArguments.thisRegister(), lazyThis); return emitCallVarargs::type>(dst, func, callArguments.thisRegister(), argumentRegister.get(), newTemporary(), 0, divot, divotStart, divotEnd, DebuggableCall::No); @@ -4980,6 +4987,7 @@ void BytecodeGenerator::emitEnumeration(ThrowableExpressionData* node, Expressio RefPtr nextOrIndex = newTemporary(); RefPtr iterator = newTemporary(); { + emitExpressionInfo(node->divot(), node->divotStart(), node->divotEnd()); RefPtr iteratorSymbol = emitGetById(newTemporary(), iterable.get(), propertyNames().iteratorSymbol); CallArguments args(*this, nullptr, 0); move(args.thisRegister(), iterable.get()); @@ -5408,6 +5416,7 @@ void BytecodeGenerator::emitIteratorNext(RegisterID* done, RegisterID* value, Re RegisterID* BytecodeGenerator::emitGetGenericIterator(RegisterID* argument, ThrowableExpressionData* node) { + emitExpressionInfo(node->divot(), node->divotStart(), node->divotEnd()); RefPtr iterator = emitGetById(newTemporary(), argument, propertyNames().iteratorSymbol); emitCallIterator(iterator.get(), argument, node); @@ -5467,6 +5476,7 @@ void BytecodeGenerator::emitIteratorGenericClose(RegisterID* iterator, const Thr RegisterID* BytecodeGenerator::emitGetAsyncIterator(RegisterID* argument, ThrowableExpressionData* node) { + emitExpressionInfo(node->divot(), node->divotStart(), node->divotEnd()); RefPtr iterator = emitGetById(newTemporary(), argument, propertyNames().asyncIteratorSymbol); Ref