Changeset 201542 in webkit for trunk/Source/JavaScriptCore/parser/ParserModes.h
- Timestamp:
- May 31, 2016, 9:30:57 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/parser/ParserModes.h
r201523 r201542 28 28 #define ParserModes_h 29 29 30 #include "ConstructAbility.h"31 30 #include "Identifier.h" 32 31 … … 44 43 enum class FunctionMode { FunctionExpression, FunctionDeclaration, MethodDefinition }; 45 44 46 // When you add a new source parse mode, do not forget to ensure that the predicates defined in this 47 // file work with the newly added mode. 48 enum class SourceParseMode : uint16_t { 49 NormalFunctionMode = 0b0000000000000001, 50 GeneratorBodyMode = 0b0000000000000010, 51 GeneratorWrapperFunctionMode = 0b0000000000000100, 52 GetterMode = 0b0000000000001000, 53 SetterMode = 0b0000000000010000, 54 MethodMode = 0b0000000000100000, 55 ArrowFunctionMode = 0b0000000001000000, 56 AsyncFunctionBodyMode = 0b0000000010000000, 57 AsyncArrowFunctionBodyMode = 0b0000000100000000, 58 AsyncFunctionMode = 0b0000001000000000, 59 AsyncMethodMode = 0b0000010000000000, 60 AsyncArrowFunctionMode = 0b0000100000000000, 61 ProgramMode = 0b0001000000000000, 62 ModuleAnalyzeMode = 0b0010000000000000, 63 ModuleEvaluateMode = 0b0100000000000000, 45 enum class SourceParseMode : uint8_t { 46 NormalFunctionMode, 47 GeneratorBodyMode, 48 GeneratorWrapperFunctionMode, 49 GetterMode, 50 SetterMode, 51 MethodMode, 52 ArrowFunctionMode, 53 ProgramMode, 54 ModuleAnalyzeMode, 55 ModuleEvaluateMode 64 56 }; 65 57 66 class SourceParseModeSet { 67 public: 68 template<typename... Modes> 69 SourceParseModeSet(Modes... args) 70 : m_mask(mergeSourceParseModes(args...)) 71 { 58 inline bool isFunctionParseMode(SourceParseMode parseMode) 59 { 60 switch (parseMode) { 61 case SourceParseMode::NormalFunctionMode: 62 case SourceParseMode::GeneratorBodyMode: 63 case SourceParseMode::GeneratorWrapperFunctionMode: 64 case SourceParseMode::GetterMode: 65 case SourceParseMode::SetterMode: 66 case SourceParseMode::MethodMode: 67 case SourceParseMode::ArrowFunctionMode: 68 return true; 69 70 case SourceParseMode::ProgramMode: 71 case SourceParseMode::ModuleAnalyzeMode: 72 case SourceParseMode::ModuleEvaluateMode: 73 return false; 72 74 } 73 74 ALWAYS_INLINE bool contains(SourceParseMode mode) 75 { 76 return static_cast<unsigned>(mode) & m_mask; 77 } 78 79 private: 80 ALWAYS_INLINE static unsigned mergeSourceParseModes(SourceParseMode mode) 81 { 82 return static_cast<unsigned>(mode); 83 } 84 85 template<typename... Rest> 86 ALWAYS_INLINE static unsigned mergeSourceParseModes(SourceParseMode mode, Rest... rest) 87 { 88 return static_cast<unsigned>(mode) | mergeSourceParseModes(rest...); 89 } 90 91 const unsigned m_mask; 92 }; 93 94 ALWAYS_INLINE bool isFunctionParseMode(SourceParseMode parseMode) 95 { 96 return SourceParseModeSet( 97 SourceParseMode::NormalFunctionMode, 98 SourceParseMode::GeneratorBodyMode, 99 SourceParseMode::GeneratorWrapperFunctionMode, 100 SourceParseMode::GetterMode, 101 SourceParseMode::SetterMode, 102 SourceParseMode::MethodMode, 103 SourceParseMode::ArrowFunctionMode, 104 SourceParseMode::AsyncFunctionBodyMode, 105 SourceParseMode::AsyncFunctionMode, 106 SourceParseMode::AsyncMethodMode, 107 SourceParseMode::AsyncArrowFunctionMode, 108 SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode); 75 RELEASE_ASSERT_NOT_REACHED(); 76 return false; 109 77 } 110 78 111 ALWAYS_INLINE bool isAsyncFunctionParseMode(SourceParseMode parseMode)79 inline bool isModuleParseMode(SourceParseMode parseMode) 112 80 { 113 return SourceParseModeSet( 114 SourceParseMode::AsyncFunctionBodyMode, 115 SourceParseMode::AsyncFunctionMode, 116 SourceParseMode::AsyncMethodMode, 117 SourceParseMode::AsyncArrowFunctionMode, 118 SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode); 81 switch (parseMode) { 82 case SourceParseMode::ModuleAnalyzeMode: 83 case SourceParseMode::ModuleEvaluateMode: 84 return true; 85 86 case SourceParseMode::NormalFunctionMode: 87 case SourceParseMode::GeneratorBodyMode: 88 case SourceParseMode::GeneratorWrapperFunctionMode: 89 case SourceParseMode::GetterMode: 90 case SourceParseMode::SetterMode: 91 case SourceParseMode::MethodMode: 92 case SourceParseMode::ArrowFunctionMode: 93 case SourceParseMode::ProgramMode: 94 return false; 95 } 96 RELEASE_ASSERT_NOT_REACHED(); 97 return false; 119 98 } 120 99 121 ALWAYS_INLINE bool isAsyncArrowFunctionParseMode(SourceParseMode parseMode)100 inline bool isProgramParseMode(SourceParseMode parseMode) 122 101 { 123 return SourceParseModeSet( 124 SourceParseMode::AsyncArrowFunctionMode, 125 SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode); 126 } 102 switch (parseMode) { 103 case SourceParseMode::ProgramMode: 104 return true; 127 105 128 ALWAYS_INLINE bool isAsyncFunctionWrapperParseMode(SourceParseMode parseMode) 129 { 130 return SourceParseModeSet( 131 SourceParseMode::AsyncArrowFunctionMode, 132 SourceParseMode::AsyncFunctionMode, 133 SourceParseMode::AsyncMethodMode).contains(parseMode); 134 } 135 136 ALWAYS_INLINE bool isAsyncFunctionBodyParseMode(SourceParseMode parseMode) 137 { 138 return SourceParseModeSet( 139 SourceParseMode::AsyncFunctionBodyMode, 140 SourceParseMode::AsyncArrowFunctionBodyMode).contains(parseMode); 141 } 142 143 ALWAYS_INLINE bool isModuleParseMode(SourceParseMode parseMode) 144 { 145 return SourceParseModeSet( 146 SourceParseMode::ModuleAnalyzeMode, 147 SourceParseMode::ModuleEvaluateMode).contains(parseMode); 148 } 149 150 ALWAYS_INLINE bool isProgramParseMode(SourceParseMode parseMode) 151 { 152 return SourceParseModeSet(SourceParseMode::ProgramMode).contains(parseMode); 153 } 154 155 ALWAYS_INLINE ConstructAbility constructAbilityForParseMode(SourceParseMode parseMode) 156 { 157 if (parseMode == SourceParseMode::NormalFunctionMode) 158 return ConstructAbility::CanConstruct; 159 return ConstructAbility::CannotConstruct; 106 case SourceParseMode::NormalFunctionMode: 107 case SourceParseMode::GeneratorBodyMode: 108 case SourceParseMode::GeneratorWrapperFunctionMode: 109 case SourceParseMode::GetterMode: 110 case SourceParseMode::SetterMode: 111 case SourceParseMode::MethodMode: 112 case SourceParseMode::ArrowFunctionMode: 113 case SourceParseMode::ModuleAnalyzeMode: 114 case SourceParseMode::ModuleEvaluateMode: 115 return false; 116 } 117 RELEASE_ASSERT_NOT_REACHED(); 118 return false; 160 119 } 161 120
Note:
See TracChangeset
for help on using the changeset viewer.