#pragma once
#include "JSObject.h"
namespace JSC {
class IntlLocale final : public JSNonFinalObject {
public:
using Base = JSNonFinalObject;
static constexpr bool needsDestruction = true;
static void destroy(JSCell* cell)
{
static_cast<IntlLocale*>(cell)->IntlLocale::~IntlLocale();
}
template<typename CellType, SubspaceAccess mode>
static IsoSubspace* subspaceFor(VM& vm)
{
return vm.intlLocaleSpace<mode>();
}
static IntlLocale* create(VM&, Structure*);
static Structure* createStructure(VM&, JSGlobalObject*, JSValue);
DECLARE_INFO;
void initializeLocale(JSGlobalObject*, const String& tag, JSValue optionsValue);
void initializeLocale(JSGlobalObject*, JSValue tagValue, JSValue optionsValue);
const String& maximal();
const String& minimal();
const String& toString();
const String& baseName();
const String& language();
const String& script();
const String& region();
const String& calendar();
const String& caseFirst();
const String& collation();
const String& hourCycle();
const String& numberingSystem();
TriState numeric();
private:
IntlLocale(VM&, Structure*);
void finishCreation(VM&);
static void visitChildren(JSCell*, SlotVisitor&);
String keywordValue(ASCIILiteral, bool isBoolean = false) const;
CString m_localeID;
String m_maximal;
String m_minimal;
String m_fullString;
String m_baseName;
String m_language;
String m_script;
String m_region;
Optional<String> m_calendar;
Optional<String> m_caseFirst;
Optional<String> m_collation;
Optional<String> m_hourCycle;
Optional<String> m_numberingSystem;
TriState m_numeric { TriState::Indeterminate };
};
}