Skip to content

Commit 3a8e823

Browse files
committed
deps: upgrade to V8 4.9.385.35
PR-URL: #6077 Reviewed-By: Trevor Norris <trev.norris@gmail.com>
1 parent d4eafd0 commit 3a8e823

21 files changed

+349
-211
lines changed

deps/v8/include/v8-version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#define V8_MAJOR_VERSION 4
1212
#define V8_MINOR_VERSION 9
1313
#define V8_BUILD_NUMBER 385
14-
#define V8_PATCH_LEVEL 27
14+
#define V8_PATCH_LEVEL 35
1515

1616
// Use 1 for candidates and 0 otherwise.
1717
// (Boolean macro values are not supported by all preprocessors.)

deps/v8/include/v8.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2678,10 +2678,10 @@ class V8_EXPORT Object : public Value {
26782678
V8_DEPRECATED("Use CreateDataProperty / DefineOwnProperty",
26792679
bool ForceSet(Local<Value> key, Local<Value> value,
26802680
PropertyAttribute attribs = None));
2681-
V8_DEPRECATED("Use CreateDataProperty / DefineOwnProperty",
2682-
Maybe<bool> ForceSet(Local<Context> context, Local<Value> key,
2683-
Local<Value> value,
2684-
PropertyAttribute attribs = None));
2681+
V8_DEPRECATE_SOON("Use CreateDataProperty / DefineOwnProperty",
2682+
Maybe<bool> ForceSet(Local<Context> context,
2683+
Local<Value> key, Local<Value> value,
2684+
PropertyAttribute attribs = None));
26852685

26862686
V8_DEPRECATE_SOON("Use maybe version", Local<Value> Get(Local<Value> key));
26872687
V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,

deps/v8/src/arm/deoptimizer-arm.cc

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -288,14 +288,11 @@ void Deoptimizer::TableEntryGenerator::Generate() {
288288
__ CheckFor32DRegs(ip);
289289

290290
__ ldr(r1, MemOperand(r0, Deoptimizer::input_offset()));
291-
int src_offset = FrameDescription::double_registers_offset();
292-
for (int i = 0; i < DwVfpRegister::kMaxNumRegisters; ++i) {
293-
if (i == kDoubleRegZero.code()) continue;
294-
if (i == kScratchDoubleReg.code()) continue;
295-
296-
const DwVfpRegister reg = DwVfpRegister::from_code(i);
297-
__ vldr(reg, r1, src_offset, i < 16 ? al : ne);
298-
src_offset += kDoubleSize;
291+
for (int i = 0; i < config->num_allocatable_double_registers(); ++i) {
292+
int code = config->GetAllocatableDoubleCode(i);
293+
DwVfpRegister reg = DwVfpRegister::from_code(code);
294+
int src_offset = code * kDoubleSize + double_regs_offset;
295+
__ vldr(reg, r1, src_offset);
299296
}
300297

301298
// Push state, pc, and continuation from the last output frame.

deps/v8/src/arm64/deoptimizer-arm64.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,13 @@ void Deoptimizer::TableEntryGenerator::Generate() {
191191
}
192192

193193
// Copy FP registers to the input frame.
194+
CPURegList copy_fp_to_input = saved_fp_registers;
194195
for (int i = 0; i < saved_fp_registers.Count(); i++) {
195-
int dst_offset = FrameDescription::double_registers_offset() +
196-
(i * kDoubleSize);
197196
int src_offset = kFPRegistersOffset + (i * kDoubleSize);
198197
__ Peek(x2, src_offset);
198+
CPURegister reg = copy_fp_to_input.PopLowestIndex();
199+
int dst_offset = FrameDescription::double_registers_offset() +
200+
(reg.code() * kDoubleSize);
199201
__ Str(x2, MemOperand(x1, dst_offset));
200202
}
201203

@@ -264,11 +266,11 @@ void Deoptimizer::TableEntryGenerator::Generate() {
264266
DCHECK(!saved_fp_registers.IncludesAliasOf(crankshaft_fp_scratch) &&
265267
!saved_fp_registers.IncludesAliasOf(fp_zero) &&
266268
!saved_fp_registers.IncludesAliasOf(fp_scratch));
267-
int src_offset = FrameDescription::double_registers_offset();
268269
while (!saved_fp_registers.IsEmpty()) {
269270
const CPURegister reg = saved_fp_registers.PopLowestIndex();
271+
int src_offset = FrameDescription::double_registers_offset() +
272+
(reg.code() * kDoubleSize);
270273
__ Ldr(reg, MemOperand(x1, src_offset));
271-
src_offset += kDoubleSize;
272274
}
273275

274276
// Push state from the last output frame.

deps/v8/src/builtins.cc

Lines changed: 71 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ inline bool PrototypeHasNoElements(PrototypeIterator* iter) {
208208
JSObject* current = iter->GetCurrent<JSObject>();
209209
if (current->IsAccessCheckNeeded()) return false;
210210
if (current->HasIndexedInterceptor()) return false;
211+
if (current->IsJSValue()) return false;
211212
if (current->elements()->length() != 0) return false;
212213
}
213214
return true;
@@ -232,6 +233,41 @@ inline bool IsJSArrayFastElementMovingAllowed(Isolate* isolate,
232233
}
233234

234235

236+
inline bool HasSimpleElements(JSObject* current) {
237+
if (current->IsAccessCheckNeeded()) return false;
238+
if (current->HasIndexedInterceptor()) return false;
239+
if (current->IsJSValue()) return false;
240+
if (current->GetElementsAccessor()->HasAccessors(current)) return false;
241+
return true;
242+
}
243+
244+
245+
inline bool HasOnlySimpleReceiverElements(Isolate* isolate,
246+
JSReceiver* receiver) {
247+
// Check that we have no accessors on the receiver's elements.
248+
JSObject* object = JSObject::cast(receiver);
249+
if (!HasSimpleElements(object)) return false;
250+
// Check that ther are not elements on the prototype.
251+
DisallowHeapAllocation no_gc;
252+
PrototypeIterator iter(isolate, receiver);
253+
return PrototypeHasNoElements(&iter);
254+
}
255+
256+
257+
inline bool HasOnlySimpleElements(Isolate* isolate, JSReceiver* receiver) {
258+
// Check that ther are not elements on the prototype.
259+
DisallowHeapAllocation no_gc;
260+
PrototypeIterator iter(isolate, receiver,
261+
PrototypeIterator::START_AT_RECEIVER);
262+
for (; !iter.IsAtEnd(); iter.Advance()) {
263+
if (iter.GetCurrent()->IsJSProxy()) return false;
264+
JSObject* current = iter.GetCurrent<JSObject>();
265+
if (!HasSimpleElements(current)) return false;
266+
}
267+
return true;
268+
}
269+
270+
235271
// Returns empty handle if not applicable.
236272
MUST_USE_RESULT
237273
inline MaybeHandle<FixedArrayBase> EnsureJSArrayWithWritableFastElements(
@@ -1013,9 +1049,10 @@ bool IterateElements(Isolate* isolate, Handle<JSReceiver> receiver,
10131049
if (!val->ToUint32(&length)) {
10141050
length = 0;
10151051
}
1052+
return IterateElementsSlow(isolate, receiver, length, visitor);
10161053
}
10171054

1018-
if (!(receiver->IsJSArray() || receiver->IsJSTypedArray())) {
1055+
if (!HasOnlySimpleElements(isolate, *receiver)) {
10191056
// For classes which are not known to be safe to access via elements alone,
10201057
// use the slow case.
10211058
return IterateElementsSlow(isolate, receiver, length, visitor);
@@ -1031,7 +1068,7 @@ bool IterateElements(Isolate* isolate, Handle<JSReceiver> receiver,
10311068
// to check the prototype for missing elements.
10321069
Handle<FixedArray> elements(FixedArray::cast(array->elements()));
10331070
int fast_length = static_cast<int>(length);
1034-
DCHECK(fast_length <= elements->length());
1071+
DCHECK_LE(fast_length, elements->length());
10351072
for (int j = 0; j < fast_length; j++) {
10361073
HandleScope loop_scope(isolate);
10371074
Handle<Object> element_value(elements->get(j), isolate);
@@ -1090,14 +1127,6 @@ bool IterateElements(Isolate* isolate, Handle<JSReceiver> receiver,
10901127
break;
10911128
}
10921129
case DICTIONARY_ELEMENTS: {
1093-
// CollectElementIndices() can't be called when there's a JSProxy
1094-
// on the prototype chain.
1095-
for (PrototypeIterator iter(isolate, array); !iter.IsAtEnd();
1096-
iter.Advance()) {
1097-
if (PrototypeIterator::GetCurrent(iter)->IsJSProxy()) {
1098-
return IterateElementsSlow(isolate, array, length, visitor);
1099-
}
1100-
}
11011130
Handle<SeededNumberDictionary> dict(array->element_dictionary());
11021131
List<uint32_t> indices(dict->Capacity() / 2);
11031132
// Collect all indices in the object and the prototypes less
@@ -1187,7 +1216,6 @@ bool IterateElements(Isolate* isolate, Handle<JSReceiver> receiver,
11871216

11881217

11891218
bool HasConcatSpreadableModifier(Isolate* isolate, Handle<JSArray> obj) {
1190-
DCHECK(isolate->IsFastArrayConstructorPrototypeChainIntact());
11911219
if (!FLAG_harmony_concat_spreadable) return false;
11921220
Handle<Symbol> key(isolate->factory()->is_concat_spreadable_symbol());
11931221
Maybe<bool> maybe = JSReceiver::HasProperty(obj, key);
@@ -1232,17 +1260,14 @@ Object* Slow_ArrayConcat(Arguments* args, Isolate* isolate) {
12321260
length_estimate = static_cast<uint32_t>(array->length()->Number());
12331261
if (length_estimate != 0) {
12341262
ElementsKind array_kind =
1235-
GetPackedElementsKind(array->map()->elements_kind());
1263+
GetPackedElementsKind(array->GetElementsKind());
12361264
kind = GetMoreGeneralElementsKind(kind, array_kind);
12371265
}
12381266
element_estimate = EstimateElementCount(array);
12391267
} else {
12401268
if (obj->IsHeapObject()) {
1241-
if (obj->IsNumber()) {
1242-
kind = GetMoreGeneralElementsKind(kind, FAST_DOUBLE_ELEMENTS);
1243-
} else {
1244-
kind = GetMoreGeneralElementsKind(kind, FAST_ELEMENTS);
1245-
}
1269+
kind = GetMoreGeneralElementsKind(
1270+
kind, obj->IsNumber() ? FAST_DOUBLE_ELEMENTS : FAST_ELEMENTS);
12461271
}
12471272
length_estimate = 1;
12481273
element_estimate = 1;
@@ -1284,7 +1309,7 @@ Object* Slow_ArrayConcat(Arguments* args, Isolate* isolate) {
12841309
} else {
12851310
JSArray* array = JSArray::cast(*obj);
12861311
uint32_t length = static_cast<uint32_t>(array->length()->Number());
1287-
switch (array->map()->elements_kind()) {
1312+
switch (array->GetElementsKind()) {
12881313
case FAST_HOLEY_DOUBLE_ELEMENTS:
12891314
case FAST_DOUBLE_ELEMENTS: {
12901315
// Empty array is FixedArray but not FixedDoubleArray.
@@ -1335,14 +1360,7 @@ Object* Slow_ArrayConcat(Arguments* args, Isolate* isolate) {
13351360
}
13361361
}
13371362
if (!failure) {
1338-
Handle<JSArray> array = isolate->factory()->NewJSArray(0);
1339-
Smi* length = Smi::FromInt(j);
1340-
Handle<Map> map;
1341-
map = JSObject::GetElementsTransitionMap(array, kind);
1342-
array->set_map(*map);
1343-
array->set_length(length);
1344-
array->set_elements(*storage);
1345-
return *array;
1363+
return *isolate->factory()->NewJSArrayWithElements(storage, kind, j);
13461364
}
13471365
// In case of failure, fall through.
13481366
}
@@ -1387,23 +1405,23 @@ Object* Slow_ArrayConcat(Arguments* args, Isolate* isolate) {
13871405

13881406

13891407
MaybeHandle<JSArray> Fast_ArrayConcat(Isolate* isolate, Arguments* args) {
1390-
if (!isolate->IsFastArrayConstructorPrototypeChainIntact()) {
1391-
return MaybeHandle<JSArray>();
1392-
}
13931408
int n_arguments = args->length();
13941409
int result_len = 0;
13951410
{
13961411
DisallowHeapAllocation no_gc;
1397-
Object* array_proto = isolate->array_function()->prototype();
13981412
// Iterate through all the arguments performing checks
13991413
// and calculating total length.
14001414
for (int i = 0; i < n_arguments; i++) {
14011415
Object* arg = (*args)[i];
14021416
if (!arg->IsJSArray()) return MaybeHandle<JSArray>();
1417+
if (!HasOnlySimpleReceiverElements(isolate, JSObject::cast(arg))) {
1418+
return MaybeHandle<JSArray>();
1419+
}
1420+
// TODO(cbruni): support fast concatenation of DICTIONARY_ELEMENTS.
1421+
if (!JSObject::cast(arg)->HasFastElements()) {
1422+
return MaybeHandle<JSArray>();
1423+
}
14031424
Handle<JSArray> array(JSArray::cast(arg), isolate);
1404-
if (!array->HasFastElements()) return MaybeHandle<JSArray>();
1405-
PrototypeIterator iter(isolate, arg);
1406-
if (iter.GetCurrent() != array_proto) return MaybeHandle<JSArray>();
14071425
if (HasConcatSpreadableModifier(isolate, array)) {
14081426
return MaybeHandle<JSArray>();
14091427
}
@@ -2207,7 +2225,11 @@ BUILTIN(DateConstructor) {
22072225
char buffer[128];
22082226
Vector<char> str(buffer, arraysize(buffer));
22092227
ToDateString(time_val, str, isolate->date_cache());
2210-
return *isolate->factory()->NewStringFromAsciiChecked(str.start());
2228+
Handle<String> result;
2229+
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2230+
isolate, result,
2231+
isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
2232+
return *result;
22112233
}
22122234

22132235

@@ -2787,7 +2809,11 @@ BUILTIN(DatePrototypeToDateString) {
27872809
char buffer[128];
27882810
Vector<char> str(buffer, arraysize(buffer));
27892811
ToDateString(date->value()->Number(), str, isolate->date_cache(), kDateOnly);
2790-
return *isolate->factory()->NewStringFromAsciiChecked(str.start());
2812+
Handle<String> result;
2813+
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2814+
isolate, result,
2815+
isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
2816+
return *result;
27912817
}
27922818

27932819

@@ -2827,7 +2853,11 @@ BUILTIN(DatePrototypeToString) {
28272853
char buffer[128];
28282854
Vector<char> str(buffer, arraysize(buffer));
28292855
ToDateString(date->value()->Number(), str, isolate->date_cache());
2830-
return *isolate->factory()->NewStringFromAsciiChecked(str.start());
2856+
Handle<String> result;
2857+
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2858+
isolate, result,
2859+
isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
2860+
return *result;
28312861
}
28322862

28332863

@@ -2838,7 +2868,11 @@ BUILTIN(DatePrototypeToTimeString) {
28382868
char buffer[128];
28392869
Vector<char> str(buffer, arraysize(buffer));
28402870
ToDateString(date->value()->Number(), str, isolate->date_cache(), kTimeOnly);
2841-
return *isolate->factory()->NewStringFromAsciiChecked(str.start());
2871+
Handle<String> result;
2872+
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2873+
isolate, result,
2874+
isolate->factory()->NewStringFromUtf8(CStrVector(buffer)));
2875+
return *result;
28422876
}
28432877

28442878

deps/v8/src/compiler/pipeline.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,13 @@ struct SimplifiedLoweringPhase {
677677
SimplifiedLowering lowering(data->jsgraph(), temp_zone,
678678
data->source_positions());
679679
lowering.LowerAllNodes();
680+
681+
// TODO(bmeurer): See comment on SimplifiedLowering::abort_compilation_.
682+
if (lowering.abort_compilation_) {
683+
data->set_compilation_failed();
684+
return;
685+
}
686+
680687
JSGraphReducer graph_reducer(data->jsgraph(), temp_zone);
681688
DeadCodeElimination dead_code_elimination(&graph_reducer, data->graph(),
682689
data->common());
@@ -1204,6 +1211,9 @@ Handle<Code> Pipeline::GenerateCode() {
12041211
// Kill the Typer and thereby uninstall the decorator (if any).
12051212
typer.Reset(nullptr);
12061213

1214+
// TODO(bmeurer): See comment on SimplifiedLowering::abort_compilation_.
1215+
if (data.compilation_failed()) return Handle<Code>::null();
1216+
12071217
return ScheduleAndGenerateCode(
12081218
Linkage::ComputeIncoming(data.instruction_zone(), info()));
12091219
}

deps/v8/src/compiler/simplified-lowering.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,10 +1189,18 @@ class RepresentationSelector {
11891189
NodeOutputInfo(access.machine_type().representation(),
11901190
NodeProperties::GetType(node));
11911191
} else {
1192+
if (access.machine_type().representation() !=
1193+
MachineRepresentation::kFloat64) {
1194+
// TODO(bmeurer): See comment on abort_compilation_.
1195+
if (lower()) lowering->abort_compilation_ = true;
1196+
}
11921197
output_info = NodeOutputInfo::Float64();
11931198
}
11941199
}
11951200
} else {
1201+
// TODO(bmeurer): See comment on abort_compilation_.
1202+
if (lower()) lowering->abort_compilation_ = true;
1203+
11961204
// If undefined is not truncated away, we need to have the tagged
11971205
// representation.
11981206
output_info = NodeOutputInfo::AnyTagged();

deps/v8/src/compiler/simplified-lowering.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ class SimplifiedLowering final {
4343
void DoStringLessThan(Node* node);
4444
void DoStringLessThanOrEqual(Node* node);
4545

46+
// TODO(bmeurer): This is a gigantic hack to support the gigantic LoadBuffer
47+
// typing hack to support the gigantic "asm.js should be fast without proper
48+
// verifier"-hack, ... Kill this! Soon! Really soon! I'm serious!
49+
bool abort_compilation_ = false;
50+
4651
private:
4752
JSGraph* const jsgraph_;
4853
Zone* const zone_;

0 commit comments

Comments
 (0)