diff options
Diffstat (limited to 'deps/v8/src/objects/literal-objects.cc')
-rw-r--r-- | deps/v8/src/objects/literal-objects.cc | 11 |
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 |