#pragma once
#include "ECMAMode.h"
#include "StructureIDTable.h"
namespace JSC {
enum class PrivateFieldAccessKind : uint8_t {
None,
Put,
Create,
};
class PutByValFlags {
public:
constexpr static PutByValFlags create(ECMAMode ecmaMode)
{
return PutByValFlags(false, ecmaMode);
}
constexpr static PutByValFlags createDirect(ECMAMode ecmaMode)
{
return PutByValFlags(true, ecmaMode);
}
constexpr static PutByValFlags createDefinePrivateField(ECMAMode ecmaMode)
{
return PutByValFlags(PrivateFieldAccessKind::Create, ecmaMode);
}
constexpr static PutByValFlags createPutPrivateField(ECMAMode ecmaMode)
{
return PutByValFlags(PrivateFieldAccessKind::Put, ecmaMode);
}
bool isDirect() const { return m_isDirect; }
ECMAMode ecmaMode() const { return m_ecmaMode; }
PrivateFieldAccessKind privateFieldAccessKind() const { return m_privateFieldAccessKind; }
bool isPrivateFieldAccess() const { return m_privateFieldAccessKind != PrivateFieldAccessKind::None; }
bool isPrivateFieldPut() const { return m_privateFieldAccessKind == PrivateFieldAccessKind::Put; }
bool isPrivateFieldAdd() const { return m_privateFieldAccessKind == PrivateFieldAccessKind::Create; }
private:
constexpr PutByValFlags(bool isDirect, ECMAMode ecmaMode)
: m_isDirect(isDirect)
, m_privateFieldAccessKind(PrivateFieldAccessKind::None)
, m_ecmaMode(ecmaMode)
{
}
constexpr PutByValFlags(PrivateFieldAccessKind access, ECMAMode ecmaMode)
: m_isDirect(true)
, m_privateFieldAccessKind(access)
, m_ecmaMode(ecmaMode)
{
}
bool m_isDirect;
PrivateFieldAccessKind m_privateFieldAccessKind;
ECMAMode m_ecmaMode;
};
}
namespace WTF {
class PrintStream;
void printInternal(PrintStream&, JSC::PutByValFlags);
}