summaryrefslogtreecommitdiff
path: root/deps/v8/src/objects/literal-objects.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/objects/literal-objects.cc')
-rw-r--r--deps/v8/src/objects/literal-objects.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/deps/v8/src/objects/literal-objects.cc b/deps/v8/src/objects/literal-objects.cc
index 13f8b00878..ab673aad80 100644
--- a/deps/v8/src/objects/literal-objects.cc
+++ b/deps/v8/src/objects/literal-objects.cc
@@ -423,6 +423,10 @@ void ClassBoilerplate::AddToElementsTemplate(
Handle<ClassBoilerplate> ClassBoilerplate::BuildClassBoilerplate(
Isolate* isolate, ClassLiteral* expr) {
+ // Create a non-caching handle scope to ensure that the temporary handle used
+ // by ObjectDescriptor for passing Smis around does not corrupt handle cache
+ // in CanonicalHandleScope.
+ HandleScope scope(isolate);
Factory* factory = isolate->factory();
ObjectDescriptor static_desc;
ObjectDescriptor instance_desc;
@@ -509,11 +513,14 @@ Handle<ClassBoilerplate> ClassBoilerplate::BuildClassBoilerplate(
case ClassLiteral::Property::SETTER:
value_kind = ClassBoilerplate::kSetter;
break;
- case ClassLiteral::Property::FIELD:
+ case ClassLiteral::Property::PUBLIC_FIELD:
if (property->is_computed_name()) {
++dynamic_argument_index;
}
continue;
+ case ClassLiteral::Property::PRIVATE_FIELD:
+ DCHECK(!property->is_computed_name());
+ continue;
}
ObjectDescriptor& desc =
@@ -580,7 +587,7 @@ Handle<ClassBoilerplate> ClassBoilerplate::BuildClassBoilerplate(
class_boilerplate->set_instance_computed_properties(
*instance_desc.computed_properties());
- return class_boilerplate;
+ return scope.CloseAndEscape(class_boilerplate);
}
} // namespace internal