Files
asciidisco.com/build/node_modules/prepack/lib/intrinsics/ecma262/ObjectProto_toString.js
2023-08-01 13:49:46 +02:00

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