"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