| // Copyright 2018 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --allow-natives-syntax |
| |
| function toString(o) { |
| %ToFastProperties(o.__proto__); |
| return Object.prototype.toString.call(o); |
| } |
| |
| class TestNumber extends Number {} |
| TestNumber.prototype[Symbol.toStringTag] = "TestNumber"; |
| assertEquals("[object TestNumber]", toString(new TestNumber), "Try #1"); |
| assertEquals("[object TestNumber]", toString(new TestNumber), "Try #2"); |
| |
| class TestBoolean extends Boolean {} |
| TestBoolean.prototype[Symbol.toStringTag] = "TestBoolean"; |
| assertEquals("[object TestBoolean]", toString(new TestBoolean), "Try #1"); |
| assertEquals("[object TestBoolean]", toString(new TestBoolean), "Try #2"); |
| |
| class TestString extends String {} |
| TestString.prototype[Symbol.toStringTag] = "TestString"; |
| assertEquals("[object TestString]", toString(new TestString), "Try #1"); |
| assertEquals("[object TestString]", toString(new TestString), "Try #2"); |
| |
| class base {} |
| class TestBigInt extends base {} |
| TestBigInt.prototype[Symbol.toStringTag] = 'TestBigInt'; |
| var b = new TestBigInt(); |
| b.__proto__.__proto__ = BigInt.prototype; |
| assertEquals("[object TestBigInt]", toString(b), "Try #1"); |
| assertEquals("[object TestBigInt]", toString(b), "Try #2"); |
| |
| class TestSymbol extends base {} |
| TestSymbol.prototype[Symbol.toStringTag] = 'TestSymbol'; |
| var sym = new TestSymbol(); |
| sym.__proto__.__proto__ = Symbol.prototype; |
| assertEquals("[object TestSymbol]", toString(sym), "Try #1"); |
| assertEquals("[object TestSymbol]", toString(sym), "Try #2"); |