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

#include 'src/builtins/builtins-proxy-gen.h'

namespace proxy {

  extern macro ProxiesCodeStubAssembler::AllocateProxy(
      implicit context: Context)(JSReceiver, JSReceiver): JSProxy;

  macro IsRevokedProxy(implicit context: Context)(o: JSReceiver): bool {
    const proxy: JSProxy = Cast<JSProxy>(o) otherwise return false;
    Cast<JSReceiver>(proxy.handler) otherwise return true;
    return false;
  }

  extern transitioning macro ProxiesCodeStubAssembler::CheckGetSetTrapResult(
      implicit context:
          Context)(JSReceiver, JSProxy, Name, Object, constexpr int31);

  extern transitioning macro ProxiesCodeStubAssembler::CheckDeleteTrapResult(
      implicit context: Context)(JSReceiver, JSProxy, Name);

  extern transitioning macro ProxiesCodeStubAssembler::CheckHasTrapResult(
      implicit context: Context)(JSReceiver, JSProxy, Name);

  const kProxyNonObject: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyNonObject';
  const kProxyHandlerOrTargetRevoked: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyHandlerOrTargetRevoked';
  const kProxyRevoked: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyRevoked';
  const kProxyTrapReturnedFalsishFor: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyTrapReturnedFalsishFor';
  const kProxyPrivate: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyPrivate';
  const kProxyIsExtensibleInconsistent: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyIsExtensibleInconsistent';
  const kProxyPreventExtensionsExtensible: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyPreventExtensionsExtensible';
  const kProxyTrapReturnedFalsish: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyTrapReturnedFalsish';
  const kProxyGetPrototypeOfInvalid: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyGetPrototypeOfInvalid';
  const kProxyGetPrototypeOfNonExtensible: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyGetPrototypeOfNonExtensible';
  const kProxySetPrototypeOfNonExtensible: constexpr MessageTemplate
  generates 'MessageTemplate::kProxySetPrototypeOfNonExtensible';
  const kProxyDeletePropertyNonExtensible: constexpr MessageTemplate
  generates 'MessageTemplate::kProxyDeletePropertyNonExtensible';

  const kProxyGet: constexpr int31
  generates 'JSProxy::AccessKind::kGet';
  const kProxySet: constexpr int31
  generates 'JSProxy::AccessKind::kSet';
}
