DFGDoubleFormatState.h [plain text]
#ifndef DFGDoubleFormatState_h
#define DFGDoubleFormatState_h
namespace JSC { namespace DFG {
enum DoubleFormatState {
EmptyDoubleFormatState, UsingDoubleFormat,
NotUsingDoubleFormat,
CantUseDoubleFormat };
inline DoubleFormatState mergeDoubleFormatStates(DoubleFormatState a, DoubleFormatState b)
{
switch (a) {
case EmptyDoubleFormatState:
return b;
case UsingDoubleFormat:
switch (b) {
case EmptyDoubleFormatState:
case UsingDoubleFormat:
return UsingDoubleFormat;
case NotUsingDoubleFormat:
case CantUseDoubleFormat:
return CantUseDoubleFormat;
}
case NotUsingDoubleFormat:
switch (b) {
case EmptyDoubleFormatState:
case NotUsingDoubleFormat:
return NotUsingDoubleFormat;
case UsingDoubleFormat:
case CantUseDoubleFormat:
return CantUseDoubleFormat;
}
case CantUseDoubleFormat:
return CantUseDoubleFormat;
}
RELEASE_ASSERT_NOT_REACHED();
return CantUseDoubleFormat;
}
inline bool mergeDoubleFormatState(DoubleFormatState& dest, DoubleFormatState src)
{
DoubleFormatState newState = mergeDoubleFormatStates(dest, src);
if (newState == dest)
return false;
dest = newState;
return true;
}
inline const char* doubleFormatStateToString(DoubleFormatState state)
{
switch (state) {
case EmptyDoubleFormatState:
return "Empty";
case UsingDoubleFormat:
return "DoubleFormat";
case NotUsingDoubleFormat:
return "ValueFormat";
case CantUseDoubleFormat:
return "ForceValue";
}
RELEASE_ASSERT_NOT_REACHED();
return 0;
}
} }
#endif // DFGDoubleFormatState_h