#ifndef ParserModes_h
#define ParserModes_h
#include "Identifier.h"
namespace JSC {
enum class JSParserStrictMode { NotStrict, Strict };
enum class JSParserBuiltinMode { NotBuiltin, Builtin };
enum class JSParserCodeType { Program, Function };
enum class ConstructorKind { None, Base, Derived };
enum class SuperBinding { Needed, NotNeeded };
enum class ThisTDZMode { AlwaysCheck, CheckIfNeeded };
enum ProfilerMode { ProfilerOff, ProfilerOn };
enum DebuggerMode { DebuggerOff, DebuggerOn };
enum FunctionMode { FunctionExpression, FunctionDeclaration };
inline bool functionNameIsInScope(const Identifier& name, FunctionMode functionMode)
{
if (name.isNull())
return false;
if (functionMode != FunctionExpression)
return false;
return true;
}
inline bool functionNameScopeIsDynamic(bool usesEval, bool isStrictMode)
{
if (!usesEval)
return false;
if (isStrictMode)
return false;
return true;
}
typedef unsigned CodeFeatures;
const CodeFeatures NoFeatures = 0;
const CodeFeatures EvalFeature = 1 << 0;
const CodeFeatures ArgumentsFeature = 1 << 1;
const CodeFeatures WithFeature = 1 << 2;
const CodeFeatures CatchFeature = 1 << 3;
const CodeFeatures ThisFeature = 1 << 4;
const CodeFeatures StrictModeFeature = 1 << 5;
const CodeFeatures ShadowsArgumentsFeature = 1 << 6;
const CodeFeatures ModifiedParameterFeature = 1 << 7;
const CodeFeatures ModifiedArgumentsFeature = 1 << 8;
const CodeFeatures AllFeatures = EvalFeature | ArgumentsFeature | WithFeature | CatchFeature | ThisFeature | StrictModeFeature | ShadowsArgumentsFeature | ModifiedParameterFeature;
}
#endif // ParserModes_h