| Index: src/runtime/runtime-classes.cc
|
| diff --git a/src/runtime/runtime-classes.cc b/src/runtime/runtime-classes.cc
|
| index 323604ffdec47047d31e14cd4600fa9e0f78e068..52296b1eb18fd6d9ebd66138af5bb1000c17c203 100644
|
| --- a/src/runtime/runtime-classes.cc
|
| +++ b/src/runtime/runtime-classes.cc
|
| @@ -188,6 +188,31 @@ RUNTIME_FUNCTION(Runtime_DefineClass) {
|
| end_position));
|
| }
|
|
|
| +
|
| +RUNTIME_FUNCTION(Runtime_DefineClassNameProperty) {
|
| + HandleScope scope(isolate);
|
| + DCHECK(args.length() == 2);
|
| + CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
|
| + CONVERT_ARG_HANDLE_CHECKED(String, name, 1);
|
| +
|
| + // Abort if "name" is undefined.
|
| + if (name->length() == 0) return *object;
|
| +
|
| + // If a property named "name" is already defined, exit.
|
| + Handle<Name> key = isolate->factory()->name_string();
|
| + if (JSObject::HasRealNamedProperty(object, key).FromMaybe(false))
|
| + return *object;
|
| +
|
| + // Define the "name" property.
|
| + PropertyAttributes attrs =
|
| + static_cast<PropertyAttributes>(DONT_ENUM | READ_ONLY);
|
| + // Cannot fail since this should only be called when creating an object
|
| + // literal.
|
| + DCHECK(!JSObject::SetOwnPropertyIgnoreAttributes(object, key, name, attrs)
|
| + .is_null());
|
| + return *object;
|
| +}
|
| +
|
| namespace {
|
|
|
| enum class SuperMode { kLoad, kStore };
|
|
|