// 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');
}
}
