63 lines
2.7 KiB
JavaScript
63 lines
2.7 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
exports.default = function (realm) {
|
|
// ECMA262 22.1.3.30
|
|
return new _index.NativeFunctionValue(realm, "Object.prototype.toString", "toString", 0, function (context) {
|
|
// 1. If the this value is undefined, return "[object Undefined]".
|
|
if (context instanceof _index.UndefinedValue) return new _index.StringValue(realm, "[object Undefined]");
|
|
|
|
// 2. If the this value is null, return "[object Null]".
|
|
if (context instanceof _index.NullValue) return new _index.StringValue(realm, "[object Null]");
|
|
|
|
// 3. Let O be ToObject(this value).
|
|
var O = _singletons.To.ToObjectPartial(realm, context);
|
|
|
|
var builtinTag = void 0;
|
|
|
|
// 4. Let isArray be ? IsArray(O).
|
|
var isArray = (0, _is.IsArray)(realm, O);
|
|
|
|
// 5. If isArray is true, let builtinTag be "Array".
|
|
if (isArray) builtinTag = "Array";else if (O.$StringData)
|
|
// 6. Else, if O is an exotic String object, let builtinTag be "String".
|
|
builtinTag = "String";else if (O.$ParameterMap)
|
|
// 7. Else, if O has an [[ParameterMap]] internal slot, let builtinTag be "Arguments".
|
|
builtinTag = "Arguments";else if (O.$Call)
|
|
// 8. Else, if O has a [[Call]] internal method, let builtinTag be "Function".
|
|
builtinTag = "Function";else if (O.$ErrorData)
|
|
// 9. Else, if O has an [[ErrorData]] internal slot, let builtinTag be "Error".
|
|
builtinTag = "Error";else if (O.$BooleanData)
|
|
// 10. Else, if O has a [[BooleanData]] internal slot, let builtinTag be "Boolean".
|
|
builtinTag = "Boolean";else if (O.$NumberData)
|
|
// 11. Else, if O has a [[NumberData]] internal slot, let builtinTag be "Number".
|
|
builtinTag = "Number";else if (O.$DateValue)
|
|
// 12. Else, if O has a [[DateValue]] internal slot, let builtinTag be "Date".
|
|
builtinTag = "Date";else if (O.$RegExpMatcher)
|
|
// 13. Else, if O has a [[RegExpMatcher]] internal slot, let builtinTag be "RegExp".
|
|
builtinTag = "RegExp";else
|
|
// 14. Else, let builtinTag be "Object".
|
|
builtinTag = "Object";
|
|
|
|
// 15. Let tag be ? Get(O, @@toStringTag).
|
|
var tag = (0, _get.Get)(realm, O, realm.intrinsics.SymbolToStringTag);
|
|
|
|
// 16. If Type(tag) is not String, let tag be builtinTag.
|
|
tag = tag instanceof _index.StringValue ? tag.value : builtinTag;
|
|
|
|
// 17. Return the String that is the result of concatenating "[object ", tag, and "]".
|
|
return new _index.StringValue(realm, "[object " + tag + "]");
|
|
}, false);
|
|
};
|
|
|
|
var _index = require("../../values/index.js");
|
|
|
|
var _is = require("../../methods/is.js");
|
|
|
|
var _get = require("../../methods/get.js");
|
|
|
|
var _singletons = require("../../singletons.js");
|
|
//# sourceMappingURL=ObjectProto_toString.js.map
|