// 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.

namespace extras_utils {
  extern runtime CreatePrivateSymbol(Context, Object): HeapObject;
  extern runtime PromiseMarkAsHandled(Context, Object): Undefined;
  extern runtime PromiseStatus(Context, Object): Smi;

  javascript builtin ExtrasUtilsCreatePrivateSymbol(
      js-implicit context: Context,
      receiver: Object)(...arguments): HeapObject {
    return CreatePrivateSymbol(context, arguments[0]);
  }

  javascript builtin ExtrasUtilsMarkPromiseAsHandled(
      js-implicit context: Context, receiver: Object)(...arguments): Undefined {
    return PromiseMarkAsHandled(context, arguments[0]);
  }

  javascript builtin ExtrasUtilsPromiseState(
      js-implicit context: Context, receiver: Object)(...arguments): Smi {
    return PromiseStatus(context, arguments[0]);
  }
}
