// Copyright 2019 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. namespace symbol { extern runtime SymbolDescriptiveString(implicit context: Context)(Symbol): String; transitioning macro ThisSymbolValue(implicit context: Context)( receiver: JSAny, method: constexpr string): Symbol { return UnsafeCast<Symbol>( ToThisValue(receiver, PrimitiveType::kSymbol, method)); } // ES #sec-symbol.prototype.description transitioning javascript builtin SymbolPrototypeDescriptionGetter( js-implicit context: NativeContext, receiver: JSAny)(): String|Undefined { // 1. Let s be the this value. // 2. Let sym be ? thisSymbolValue(s). const sym: Symbol = ThisSymbolValue(receiver, 'Symbol.prototype.description'); // 3. Return sym.[[Description]]. return sym.description; } // ES6 #sec-symbol.prototype-@@toprimitive transitioning javascript builtin SymbolPrototypeToPrimitive( js-implicit context: NativeContext, receiver: JSAny)(_hint: JSAny): JSAny { // 1. Return ? thisSymbolValue(this value). return ThisSymbolValue(receiver, 'Symbol.prototype [ @@toPrimitive ]'); } // ES6 #sec-symbol.prototype.tostring transitioning javascript builtin SymbolPrototypeToString( js-implicit context: NativeContext, receiver: JSAny)(): JSAny { // 1. Let sym be ? thisSymbolValue(this value). const sym: Symbol = ThisSymbolValue(receiver, 'Symbol.prototype.toString'); // 2. Return SymbolDescriptiveString(sym). return SymbolDescriptiveString(sym); } // ES6 #sec-symbol.prototype.valueof transitioning javascript builtin SymbolPrototypeValueOf( js-implicit context: NativeContext, receiver: JSAny)(): JSAny { // 1. Return ? thisSymbolValue(this value). return ThisSymbolValue(receiver, 'Symbol.prototype.valueOf'); } }