| // 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 boolean { | 
 | transitioning macro ThisBooleanValue(implicit context: Context)( | 
 |     receiver: JSAny, method: constexpr string): Boolean { | 
 |   return UnsafeCast<Boolean>( | 
 |       ToThisValue(receiver, PrimitiveType::kBoolean, method)); | 
 | } | 
 |  | 
 | javascript builtin | 
 | BooleanConstructor( | 
 |     js-implicit context: NativeContext, receiver: JSAny, newTarget: JSAny, | 
 |     target: JSFunction)(...arguments): JSAny { | 
 |   const value = SelectBooleanConstant(ToBoolean(arguments[0])); | 
 |  | 
 |   if (newTarget == Undefined) { | 
 |     return value; | 
 |   } | 
 |  | 
 |   const map = GetDerivedMap(target, UnsafeCast<JSReceiver>(newTarget)); | 
 |  | 
 |   const obj = | 
 |       UnsafeCast<JSPrimitiveWrapper>(AllocateFastOrSlowJSObjectFromMap(map)); | 
 |   obj.value = value; | 
 |   return obj; | 
 | } | 
 |  | 
 | // ES #sec-boolean.prototype.tostring | 
 | transitioning javascript builtin BooleanPrototypeToString( | 
 |     js-implicit context: NativeContext, receiver: JSAny)(): JSAny { | 
 |   // 1. Let b be ? thisBooleanValue(this value). | 
 |   const b = ThisBooleanValue(receiver, 'Boolean.prototype.toString'); | 
 |   // 2. If b is true, return "true"; else return "false". | 
 |   return b.to_string; | 
 | } | 
 |  | 
 | // ES #sec-boolean.prototype.valueof | 
 | transitioning javascript builtin BooleanPrototypeValueOf( | 
 |     js-implicit context: NativeContext, receiver: JSAny)(): JSAny { | 
 |   // 1. Return ? thisBooleanValue(this value). | 
 |   return ThisBooleanValue(receiver, 'Boolean.prototype.valueOf'); | 
 | } | 
 | } |