2  * Copyright (C) 2012, 2013 Apple Inc. All rights reserved. 
   4  * Redistribution and use in source and binary forms, with or without 
   5  * modification, are permitted provided that the following conditions 
   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. 
  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. 
  30 #include "Identifier.h" 
  34 enum JSParserStrictness 
{ JSParseNormal
, JSParseBuiltin
, JSParseStrict 
}; 
  35 enum JSParserMode 
{ JSParseProgramCode
, JSParseFunctionCode 
}; 
  37 enum ProfilerMode 
{ ProfilerOff
, ProfilerOn 
}; 
  38 enum DebuggerMode 
{ DebuggerOff
, DebuggerOn 
}; 
  40 enum FunctionMode 
{ FunctionExpression
, FunctionDeclaration 
}; 
  42 inline bool functionNameIsInScope(const Identifier
& name
, FunctionMode functionMode
) 
  47     if (functionMode 
!= FunctionExpression
) 
  53 inline bool functionNameScopeIsDynamic(bool usesEval
, bool isStrictMode
) 
  55     // If non-strict eval is in play, a function gets a separate object in the scope chain for its name. 
  56     // This enables eval to declare and then delete a name that shadows the function's name. 
  67 typedef unsigned CodeFeatures
; 
  69 const CodeFeatures NoFeatures 
= 0; 
  70 const CodeFeatures EvalFeature 
= 1 << 0; 
  71 const CodeFeatures ArgumentsFeature 
= 1 << 1; 
  72 const CodeFeatures WithFeature 
= 1 << 2; 
  73 const CodeFeatures CatchFeature 
= 1 << 3; 
  74 const CodeFeatures ThisFeature 
= 1 << 4; 
  75 const CodeFeatures StrictModeFeature 
= 1 << 5; 
  76 const CodeFeatures ShadowsArgumentsFeature 
= 1 << 6; 
  77 const CodeFeatures ModifiedParameterFeature 
= 1 << 7; 
  79 const CodeFeatures AllFeatures 
= EvalFeature 
| ArgumentsFeature 
| WithFeature 
| CatchFeature 
| ThisFeature 
| StrictModeFeature 
| ShadowsArgumentsFeature 
| ModifiedParameterFeature
; 
  83 #endif // ParserModes_h