Migrate Object.getPrototypeOf from v8natives to builtins.
More v8natives cleanup to come... R=bmeurer@chromium.org BUG= Review URL: https://codereview.chromium.org/1922453002 Cr-Commit-Position: refs/heads/master@{#35759}
This commit is contained in:
parent
3c7391093b
commit
17024be077
@ -1056,37 +1056,49 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
|
||||
Handle<JSFunction> object_function = isolate->object_function();
|
||||
JSObject::AddProperty(global_object, object_name, object_function,
|
||||
DONT_ENUM);
|
||||
|
||||
SimpleInstallFunction(object_function, factory->assign_string(),
|
||||
Builtins::kObjectAssign, 2, false);
|
||||
SimpleInstallFunction(object_function, factory->create_string(),
|
||||
Builtins::kObjectCreate, 2, false);
|
||||
Handle<JSFunction> object_freeze = SimpleInstallFunction(
|
||||
object_function, "freeze", Builtins::kObjectFreeze, 1, false);
|
||||
native_context()->set_object_freeze(*object_freeze);
|
||||
SimpleInstallFunction(object_function, "getOwnPropertyDescriptor",
|
||||
Builtins::kObjectGetOwnPropertyDescriptor, 2, false);
|
||||
SimpleInstallFunction(object_function, "getOwnPropertyNames",
|
||||
Builtins::kObjectGetOwnPropertyNames, 1, false);
|
||||
SimpleInstallFunction(object_function, "getOwnPropertySymbols",
|
||||
Builtins::kObjectGetOwnPropertySymbols, 1, false);
|
||||
SimpleInstallFunction(object_function, "is", Builtins::kObjectIs, 2, true);
|
||||
Handle<JSFunction> object_is_extensible =
|
||||
SimpleInstallFunction(object_function, "isExtensible",
|
||||
Builtins::kObjectIsExtensible, 1, false);
|
||||
SimpleInstallFunction(object_function, "is",
|
||||
Builtins::kObjectIs, 2, true);
|
||||
SimpleInstallFunction(object_function, "preventExtensions",
|
||||
Builtins::kObjectPreventExtensions, 1, false);
|
||||
SimpleInstallFunction(object_function, "seal",
|
||||
Builtins::kObjectSeal, 1, false);
|
||||
|
||||
Handle<JSFunction> object_freeze = SimpleInstallFunction(
|
||||
object_function, "freeze", Builtins::kObjectFreeze, 1, false);
|
||||
native_context()->set_object_freeze(*object_freeze);
|
||||
|
||||
Handle<JSFunction> object_get_prototype_of = SimpleInstallFunction(
|
||||
object_function, "getPrototypeOf", Builtins::kObjectGetPrototypeOf,
|
||||
1, false);
|
||||
native_context()->set_object_get_prototype_of(*object_get_prototype_of);
|
||||
|
||||
Handle<JSFunction> object_is_extensible = SimpleInstallFunction(
|
||||
object_function, "isExtensible", Builtins::kObjectIsExtensible,
|
||||
1, false);
|
||||
native_context()->set_object_is_extensible(*object_is_extensible);
|
||||
|
||||
Handle<JSFunction> object_is_frozen = SimpleInstallFunction(
|
||||
object_function, "isFrozen", Builtins::kObjectIsFrozen, 1, false);
|
||||
native_context()->set_object_is_frozen(*object_is_frozen);
|
||||
|
||||
Handle<JSFunction> object_is_sealed = SimpleInstallFunction(
|
||||
object_function, "isSealed", Builtins::kObjectIsSealed, 1, false);
|
||||
native_context()->set_object_is_sealed(*object_is_sealed);
|
||||
|
||||
Handle<JSFunction> object_keys = SimpleInstallFunction(
|
||||
object_function, "keys", Builtins::kObjectKeys, 1, false);
|
||||
native_context()->set_object_keys(*object_keys);
|
||||
SimpleInstallFunction(object_function, "preventExtensions",
|
||||
Builtins::kObjectPreventExtensions, 1, false);
|
||||
SimpleInstallFunction(object_function, "seal", Builtins::kObjectSeal, 1,
|
||||
false);
|
||||
|
||||
SimpleInstallFunction(isolate->initial_object_prototype(), "hasOwnProperty",
|
||||
Builtins::kObjectHasOwnProperty, 1, true);
|
||||
|
@ -1796,6 +1796,23 @@ BUILTIN(ObjectFreeze) {
|
||||
}
|
||||
|
||||
|
||||
// ES section 19.1.2.9 Object.getPrototypeOf ( O )
|
||||
BUILTIN(ObjectGetPrototypeOf) {
|
||||
HandleScope scope(isolate);
|
||||
Handle<Object> object = args.atOrUndefined(isolate, 1);
|
||||
|
||||
Handle<JSReceiver> receiver;
|
||||
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
|
||||
isolate, receiver, Object::ToObject(isolate, object));
|
||||
|
||||
Handle<Object> prototype;
|
||||
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
|
||||
isolate, prototype, JSReceiver::GetPrototype(isolate, receiver));
|
||||
|
||||
return *prototype;
|
||||
}
|
||||
|
||||
|
||||
// ES6 section 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
|
||||
BUILTIN(ObjectGetOwnPropertyDescriptor) {
|
||||
HandleScope scope(isolate);
|
||||
|
@ -130,6 +130,7 @@ inline bool operator&(BuiltinExtraArguments lhs, BuiltinExtraArguments rhs) {
|
||||
V(ObjectGetOwnPropertyDescriptor, kNone) \
|
||||
V(ObjectGetOwnPropertyNames, kNone) \
|
||||
V(ObjectGetOwnPropertySymbols, kNone) \
|
||||
V(ObjectGetPrototypeOf, kNone) \
|
||||
V(ObjectIs, kNone) \
|
||||
V(ObjectIsExtensible, kNone) \
|
||||
V(ObjectIsFrozen, kNone) \
|
||||
|
@ -73,6 +73,7 @@ enum BindingFlags {
|
||||
V(MAKE_RANGE_ERROR_INDEX, JSFunction, make_range_error) \
|
||||
V(MAKE_TYPE_ERROR_INDEX, JSFunction, make_type_error) \
|
||||
V(OBJECT_FREEZE, JSFunction, object_freeze) \
|
||||
V(OBJECT_GET_PROTOTYPE_OF, JSFunction, object_get_prototype_of) \
|
||||
V(OBJECT_IS_EXTENSIBLE, JSFunction, object_is_extensible) \
|
||||
V(OBJECT_IS_FROZEN, JSFunction, object_is_frozen) \
|
||||
V(OBJECT_IS_SEALED, JSFunction, object_is_sealed) \
|
||||
|
@ -898,7 +898,8 @@ function InnerArraySort(array, length, comparefn) {
|
||||
// of a prototype property.
|
||||
var CopyFromPrototype = function CopyFromPrototype(obj, length) {
|
||||
var max = 0;
|
||||
for (var proto = %_GetPrototype(obj); proto; proto = %_GetPrototype(proto)) {
|
||||
for (var proto = %object_get_prototype_of(obj); proto;
|
||||
proto = %object_get_prototype_of(proto)) {
|
||||
var indices = IS_PROXY(proto) ? length : %GetArrayKeys(proto, length);
|
||||
if (IS_NUMBER(indices)) {
|
||||
// It's an interval.
|
||||
@ -926,7 +927,8 @@ function InnerArraySort(array, length, comparefn) {
|
||||
// where a prototype of obj has an element. I.e., shadow all prototype
|
||||
// elements in that range.
|
||||
var ShadowPrototypeElements = function(obj, from, to) {
|
||||
for (var proto = %_GetPrototype(obj); proto; proto = %_GetPrototype(proto)) {
|
||||
for (var proto = %object_get_prototype_of(obj); proto;
|
||||
proto = %object_get_prototype_of(proto)) {
|
||||
var indices = IS_PROXY(proto) ? to : %GetArrayKeys(proto, to);
|
||||
if (IS_NUMBER(indices)) {
|
||||
// It's an interval.
|
||||
@ -993,7 +995,7 @@ function InnerArraySort(array, length, comparefn) {
|
||||
}
|
||||
for (i = length - num_holes; i < length; i++) {
|
||||
// For compatability with Webkit, do not expose elements in the prototype.
|
||||
if (i in %_GetPrototype(obj)) {
|
||||
if (i in %object_get_prototype_of(obj)) {
|
||||
obj[i] = UNDEFINED;
|
||||
} else {
|
||||
delete obj[i];
|
||||
|
@ -878,7 +878,7 @@ var StackTraceGetter = function() {
|
||||
if (IS_UNDEFINED(stack_trace)) {
|
||||
// Neither formatted nor structured stack trace available.
|
||||
// Look further up the prototype chain.
|
||||
holder = %_GetPrototype(holder);
|
||||
holder = %object_get_prototype_of(holder);
|
||||
continue;
|
||||
}
|
||||
formatted_stack_trace = FormatStackTrace(holder, stack_trace);
|
||||
|
@ -721,11 +721,6 @@ function DefineOwnProperty(obj, p, desc, should_throw) {
|
||||
}
|
||||
|
||||
|
||||
// ES6 section 19.1.2.9
|
||||
function ObjectGetPrototypeOf(obj) {
|
||||
return %_GetPrototype(TO_OBJECT(obj));
|
||||
}
|
||||
|
||||
// ES6 section 19.1.2.18.
|
||||
function ObjectSetPrototypeOf(obj, proto) {
|
||||
CHECK_OBJECT_COERCIBLE(obj, "Object.setPrototypeOf");
|
||||
@ -760,7 +755,7 @@ function ObjectDefineProperties(obj, properties) {
|
||||
|
||||
// ES6 B.2.2.1.1
|
||||
function ObjectGetProto() {
|
||||
return %_GetPrototype(TO_OBJECT(this));
|
||||
return %object_get_prototype_of(this);
|
||||
}
|
||||
|
||||
|
||||
@ -810,14 +805,11 @@ utils.InstallGetterSetter(GlobalObject.prototype, "__proto__", ObjectGetProto,
|
||||
|
||||
// Set up non-enumerable functions in the Object object.
|
||||
utils.InstallFunctions(GlobalObject, DONT_ENUM, [
|
||||
// assign is added in bootstrapper.cc.
|
||||
// keys is added in bootstrapper.cc.
|
||||
"defineProperty", ObjectDefineProperty,
|
||||
"defineProperties", ObjectDefineProperties,
|
||||
"getPrototypeOf", ObjectGetPrototypeOf,
|
||||
"setPrototypeOf", ObjectSetPrototypeOf,
|
||||
// getOwnPropertySymbols is added in symbol.js.
|
||||
// is is added in bootstrapper.cc.
|
||||
// Others are added in bootstrapper.cc.
|
||||
]);
|
||||
|
||||
|
||||
|
@ -83,7 +83,7 @@ bytecodes: [
|
||||
B(Star), R(0),
|
||||
B(CreateArrayLiteral), U8(0), U8(0), U8(3),
|
||||
B(Star), R(1),
|
||||
B(CallJSRuntime), U8(115), R(0), U8(2),
|
||||
B(CallJSRuntime), U8(116), R(0), U8(2),
|
||||
B(Return),
|
||||
]
|
||||
constant pool: [
|
||||
|
Loading…
Reference in New Issue
Block a user