+16.0.0
+ |
+
15.14.0
15.13.0
15.12.0
diff --git a/README.md b/README.md
index 13c1c80a8e1642..37aefac1e77c39 100644
--- a/README.md
+++ b/README.md
@@ -155,6 +155,8 @@ For information about the governance of the Node.js project, see
### TSC (Technical Steering Committee)
+* [aduh95](https://github.com/aduh95) -
+**Antoine du Hamel** <duhamelantoine1995@gmail.com> (he/him)
* [apapirovski](https://github.com/apapirovski) -
**Anatoli Papirovski** <apapirovski@mac.com> (he/him)
* [BethGriggs](https://github.com/BethGriggs) -
@@ -169,6 +171,8 @@ For information about the governance of the Node.js project, see
**Shelley Vohr** <codebytere@gmail.com> (she/her)
* [danbev](https://github.com/danbev) -
**Daniel Bevenius** <daniel.bevenius@gmail.com> (he/him)
+* [danielleadams](https://github.com/danielleadams) -
+**Danielle Adams** <adamzdanielle@gmail.com> (she/her)
* [fhinkel](https://github.com/fhinkel) -
**Franziska Hinkelmann** <franziska.hinkelmann@gmail.com> (she/her)
* [gabrielschulhof](https://github.com/gabrielschulhof) -
@@ -187,6 +191,8 @@ For information about the governance of the Node.js project, see
**Mary Marchini** <oss@mmarchini.me> (she/her)
* [MylesBorins](https://github.com/MylesBorins) -
**Myles Borins** <myles.borins@gmail.com> (he/him)
+* [ronag](https://github.com/ronag) -
+**Robert Nagy** <ronagy@icloud.com>
* [targos](https://github.com/targos) -
**Michaël Zasso** <targos@protonmail.com> (he/him)
* [tniessen](https://github.com/tniessen) -
diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS
index 42a9f29d89aa93..aa6d32302b3954 100644
--- a/deps/v8/AUTHORS
+++ b/deps/v8/AUTHORS
@@ -69,6 +69,7 @@ Ben Newman
Ben Noordhuis
Benjamin Tan
Bert Belder
+Brendon Tiszka
Brice Dobry
Burcu Dogan
Caitlin Potter
diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h
index 4826580f7b16aa..9ba8fc6d2ea4b7 100644
--- a/deps/v8/include/v8-version.h
+++ b/deps/v8/include/v8-version.h
@@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 9
#define V8_MINOR_VERSION 0
#define V8_BUILD_NUMBER 257
-#define V8_PATCH_LEVEL 17
+#define V8_PATCH_LEVEL 19
// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
diff --git a/deps/v8/src/builtins/builtins-array.cc b/deps/v8/src/builtins/builtins-array.cc
index 0c3707cee4bbb5..ea21a19a86f3bb 100644
--- a/deps/v8/src/builtins/builtins-array.cc
+++ b/deps/v8/src/builtins/builtins-array.cc
@@ -650,11 +650,14 @@ class ArrayConcatVisitor {
index_offset_(0u),
bit_field_(FastElementsField::encode(fast_elements) |
ExceedsLimitField::encode(false) |
- IsFixedArrayField::encode(storage->IsFixedArray()) |
+ IsFixedArrayField::encode(storage->IsFixedArray(isolate)) |
HasSimpleElementsField::encode(
- storage->IsFixedArray() ||
- !storage->map().IsCustomElementsReceiverMap())) {
- DCHECK(!(this->fast_elements() && !is_fixed_array()));
+ storage->IsFixedArray(isolate) ||
+ // Don't take fast path for storages that might have
+ // side effects when storing to them.
+ (!storage->map(isolate).IsCustomElementsReceiverMap() &&
+ !storage->IsJSTypedArray(isolate)))) {
+ DCHECK_IMPLIES(this->fast_elements(), is_fixed_array());
}
~ArrayConcatVisitor() { clear_storage(); }
@@ -1065,8 +1068,8 @@ bool IterateElements(Isolate* isolate, Handle receiver,
return IterateElementsSlow(isolate, receiver, length, visitor);
}
- if (!HasOnlySimpleElements(isolate, *receiver) ||
- !visitor->has_simple_elements()) {
+ if (!visitor->has_simple_elements() ||
+ !HasOnlySimpleElements(isolate, *receiver)) {
return IterateElementsSlow(isolate, receiver, length, visitor);
}
Handle array = Handle::cast(receiver);
@@ -1082,6 +1085,9 @@ bool IterateElements(Isolate* isolate, Handle receiver,
case HOLEY_SEALED_ELEMENTS:
case HOLEY_NONEXTENSIBLE_ELEMENTS:
case HOLEY_ELEMENTS: {
+ // Disallow execution so the cached elements won't change mid execution.
+ DisallowJavascriptExecution no_js(isolate);
+
// Run through the elements FixedArray and use HasElement and GetElement
// to check the prototype for missing elements.
Handle elements(FixedArray::cast(array->elements()), isolate);
@@ -1108,6 +1114,9 @@ bool IterateElements(Isolate* isolate, Handle receiver,
}
case HOLEY_DOUBLE_ELEMENTS:
case PACKED_DOUBLE_ELEMENTS: {
+ // Disallow execution so the cached elements won't change mid execution.
+ DisallowJavascriptExecution no_js(isolate);
+
// Empty array is FixedArray but not FixedDoubleArray.
if (length == 0) break;
// Run through the elements FixedArray and use HasElement and GetElement
@@ -1144,6 +1153,9 @@ bool IterateElements(Isolate* isolate, Handle receiver,
}
case DICTIONARY_ELEMENTS: {
+ // Disallow execution so the cached dictionary won't change mid execution.
+ DisallowJavascriptExecution no_js(isolate);
+
Handle dict(array->element_dictionary(), isolate);
std::vector indices;
indices.reserve(dict->Capacity() / 2);
diff --git a/deps/v8/src/compiler/representation-change.cc b/deps/v8/src/compiler/representation-change.cc
index 64b274cdccddf4..3d937ada1e7e50 100644
--- a/deps/v8/src/compiler/representation-change.cc
+++ b/deps/v8/src/compiler/representation-change.cc
@@ -949,10 +949,10 @@ Node* RepresentationChanger::GetWord32RepresentationFor(
return node;
} else if (output_rep == MachineRepresentation::kWord64) {
if (output_type.Is(Type::Signed32()) ||
- output_type.Is(Type::Unsigned32())) {
- op = machine()->TruncateInt64ToInt32();
- } else if (output_type.Is(cache_->kSafeInteger) &&
- use_info.truncation().IsUsedAsWord32()) {
+ (output_type.Is(Type::Unsigned32()) &&
+ use_info.type_check() == TypeCheckKind::kNone) ||
+ (output_type.Is(cache_->kSafeInteger) &&
+ use_info.truncation().IsUsedAsWord32())) {
op = machine()->TruncateInt64ToInt32();
} else if (use_info.type_check() == TypeCheckKind::kSignedSmall ||
use_info.type_check() == TypeCheckKind::kSigned32 ||
diff --git a/deps/v8/src/objects/fixed-array-inl.h b/deps/v8/src/objects/fixed-array-inl.h
index b743d15ad898b9..bfd7d9563bc424 100644
--- a/deps/v8/src/objects/fixed-array-inl.h
+++ b/deps/v8/src/objects/fixed-array-inl.h
@@ -368,7 +368,7 @@ int Search(T* array, Name name, int valid_entries, int* out_insertion_index,
double FixedDoubleArray::get_scalar(int index) {
DCHECK(map() != GetReadOnlyRoots().fixed_cow_array_map() &&
map() != GetReadOnlyRoots().fixed_array_map());
- DCHECK(index >= 0 && index < this->length());
+ DCHECK_LT(static_cast(index), static_cast(length()));
DCHECK(!is_the_hole(index));
return ReadField(kHeaderSize + index * kDoubleSize);
}
@@ -376,7 +376,7 @@ double FixedDoubleArray::get_scalar(int index) {
uint64_t FixedDoubleArray::get_representation(int index) {
DCHECK(map() != GetReadOnlyRoots().fixed_cow_array_map() &&
map() != GetReadOnlyRoots().fixed_array_map());
- DCHECK(index >= 0 && index < this->length());
+ DCHECK_LT(static_cast(index), static_cast(length()));
int offset = kHeaderSize + index * kDoubleSize;
// Bug(v8:8875): Doubles may be unaligned.
return base::ReadUnalignedValue(field_address(offset));
@@ -394,6 +394,7 @@ Handle |