blob: 14d819d356f12d5876de9c8663a63b3ae608a5ad [file] [log] [blame]
oliver@apple.comf0c01b82012-11-07 00:13:54 +00001/*
fpizlo@apple.combb8aa752013-02-18 06:28:54 +00002 * Copyright (C) 2012, 2013 Apple Inc. All rights reserved.
oliver@apple.comf0c01b82012-11-07 00:13:54 +00003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26
27#ifndef ParserModes_h
28#define ParserModes_h
29
ggaren@apple.com7d92d072014-02-03 20:39:38 +000030#include "Identifier.h"
31
oliver@apple.comf0c01b82012-11-07 00:13:54 +000032namespace JSC {
33
oliver@apple.comba848d12014-02-12 17:14:23 +000034enum JSParserStrictness { JSParseNormal, JSParseBuiltin, JSParseStrict };
oliver@apple.comf0c01b82012-11-07 00:13:54 +000035enum JSParserMode { JSParseProgramCode, JSParseFunctionCode };
commit-queue@webkit.org5fb80322014-04-15 17:46:42 +000036
rniwa@webkit.orge6f83492015-03-13 23:01:51 +000037enum class ConstructorKind { None, Base, Derived };
rniwa@webkit.org059ef9b2015-03-09 23:47:06 +000038enum class SuperBinding { Needed, NotNeeded };
39
oliver@apple.comf0c01b82012-11-07 00:13:54 +000040enum ProfilerMode { ProfilerOff, ProfilerOn };
41enum DebuggerMode { DebuggerOff, DebuggerOn };
42
ggaren@apple.com7d92d072014-02-03 20:39:38 +000043enum FunctionMode { FunctionExpression, FunctionDeclaration };
44
45inline bool functionNameIsInScope(const Identifier& name, FunctionMode functionMode)
46{
47 if (name.isNull())
48 return false;
49
50 if (functionMode != FunctionExpression)
51 return false;
52
53 return true;
54}
55
56inline bool functionNameScopeIsDynamic(bool usesEval, bool isStrictMode)
57{
58 // If non-strict eval is in play, a function gets a separate object in the scope chain for its name.
59 // This enables eval to declare and then delete a name that shadows the function's name.
60
61 if (!usesEval)
62 return false;
63
64 if (isStrictMode)
65 return false;
66
67 return true;
68}
oliver@apple.comf0c01b82012-11-07 00:13:54 +000069
fpizlo@apple.combb8aa752013-02-18 06:28:54 +000070typedef unsigned CodeFeatures;
71
72const CodeFeatures NoFeatures = 0;
73const CodeFeatures EvalFeature = 1 << 0;
74const CodeFeatures ArgumentsFeature = 1 << 1;
75const CodeFeatures WithFeature = 1 << 2;
76const CodeFeatures CatchFeature = 1 << 3;
77const CodeFeatures ThisFeature = 1 << 4;
78const CodeFeatures StrictModeFeature = 1 << 5;
79const CodeFeatures ShadowsArgumentsFeature = 1 << 6;
oliver@apple.com2cfd3762013-08-06 21:20:10 +000080const CodeFeatures ModifiedParameterFeature = 1 << 7;
oliver@apple.com71684cb2014-10-17 16:07:08 +000081const CodeFeatures ModifiedArgumentsFeature = 1 << 8;
fpizlo@apple.combb8aa752013-02-18 06:28:54 +000082
oliver@apple.com2cfd3762013-08-06 21:20:10 +000083const CodeFeatures AllFeatures = EvalFeature | ArgumentsFeature | WithFeature | CatchFeature | ThisFeature | StrictModeFeature | ShadowsArgumentsFeature | ModifiedParameterFeature;
fpizlo@apple.combb8aa752013-02-18 06:28:54 +000084
85} // namespace JSC
86
87#endif // ParserModes_h