Changeset 188355 in webkit for trunk/Source/JavaScriptCore/parser/Parser.h
- Timestamp:
- Aug 12, 2015, 1:38:45 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/parser/Parser.h
r188219 r188355 99 99 }; 100 100 101 enum class DeclarationImportType { 102 Imported, 103 NotImported 104 }; 105 101 106 enum DeclarationResult { 102 107 Valid = 0, … … 258 263 259 264 VariableEnvironment& declaredVariables() { return m_declaredVariables; } 265 VariableEnvironment& lexicalVariables() { return m_lexicalVariables; } 260 266 VariableEnvironment& finalizeLexicalEnvironment() 261 267 { … … 316 322 } 317 323 318 DeclarationResultMask declareLexicalVariable(const Identifier* ident, bool isConstant )324 DeclarationResultMask declareLexicalVariable(const Identifier* ident, bool isConstant, DeclarationImportType importType = DeclarationImportType::NotImported) 319 325 { 320 326 ASSERT(m_allowsLexicalDeclarations); … … 327 333 else 328 334 addResult.iterator->value.setIsLet(); 335 336 if (importType == DeclarationImportType::Imported) 337 addResult.iterator->value.setIsImported(); 329 338 330 339 if (!addResult.isNewEntry) … … 612 621 613 622 template <class ParsedNode> 614 std::unique_ptr<ParsedNode> parse(ParserError&, const Identifier&, FunctionParseMode );623 std::unique_ptr<ParsedNode> parse(ParserError&, const Identifier&, FunctionParseMode, ModuleParseMode); 615 624 616 625 JSTextPosition positionBeforeLastNewline() const { return m_lexer->positionBeforeLastNewline(); } … … 770 779 } 771 780 772 DeclarationResultMask declareVariable(const Identifier* ident, DeclarationType type = DeclarationType::VarDeclaration )781 DeclarationResultMask declareVariable(const Identifier* ident, DeclarationType type = DeclarationType::VarDeclaration, DeclarationImportType importType = DeclarationImportType::NotImported) 773 782 { 774 783 unsigned i = m_scopeStack.size() - 1; … … 795 804 } 796 805 797 return m_scopeStack[i].declareLexicalVariable(ident, type == DeclarationType::ConstDeclaration );806 return m_scopeStack[i].declareLexicalVariable(ident, type == DeclarationType::ConstDeclaration, importType); 798 807 } 799 808 … … 826 835 } 827 836 837 bool exportName(const Identifier& ident) 838 { 839 ASSERT(currentScope().index() == 0); 840 return currentScope()->moduleScopeData().exportName(ident); 841 } 842 828 843 ScopeStack m_scopeStack; 829 844 … … 834 849 835 850 Parser(); 836 String parseInner(const Identifier&, FunctionParseMode );851 String parseInner(const Identifier&, FunctionParseMode, ModuleParseMode); 837 852 838 853 void didFinishParsing(SourceElements*, DeclarationStacks::FunctionStack&, VariableEnvironment&, CodeFeatures, int, const Vector<RefPtr<UniquedStringImpl>>&&); … … 1099 1114 template <class TreeBuilder> NEVER_INLINE TreeDestructuringPattern tryParseDestructuringPatternExpression(TreeBuilder&, AssignmentContext); 1100 1115 template <class TreeBuilder> NEVER_INLINE TreeExpression parseDefaultValueForDestructuringPattern(TreeBuilder&); 1101 template <class TreeBuilder> TreeSourceElements parseModuleSourceElements(TreeBuilder& );1116 template <class TreeBuilder> TreeSourceElements parseModuleSourceElements(TreeBuilder&, ModuleParseMode); 1102 1117 enum class ImportSpecifierType { NamespaceImport, NamedImport, DefaultImport }; 1103 1118 template <class TreeBuilder> typename TreeBuilder::ImportSpecifier parseImportClauseItem(TreeBuilder&, ImportSpecifierType); … … 1256 1271 template <typename LexerType> 1257 1272 template <class ParsedNode> 1258 std::unique_ptr<ParsedNode> Parser<LexerType>::parse(ParserError& error, const Identifier& calleeName, FunctionParseMode parseMode )1273 std::unique_ptr<ParsedNode> Parser<LexerType>::parse(ParserError& error, const Identifier& calleeName, FunctionParseMode parseMode, ModuleParseMode moduleParseMode) 1259 1274 { 1260 1275 int errLine; … … 1273 1288 unsigned startColumn = m_source->startColumn() - 1; 1274 1289 1275 String parseError = parseInner(calleeName, parseMode );1290 String parseError = parseInner(calleeName, parseMode, moduleParseMode); 1276 1291 1277 1292 int lineNumber = m_lexer->lineNumber(); … … 1341 1356 JSParserStrictMode strictMode, JSParserCodeType codeType, 1342 1357 ParserError& error, JSTextPosition* positionBeforeLastNewline = nullptr, 1343 FunctionParseMode parseMode = NotAFunctionMode, ConstructorKind defaultConstructorKind = ConstructorKind::None, 1344 ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded) 1358 FunctionParseMode parseMode = NotAFunctionMode, ConstructorKind defaultConstructorKind = ConstructorKind::None, 1359 ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded, 1360 ModuleParseMode moduleParseMode = ModuleParseMode::Analyze) 1345 1361 { 1346 1362 SamplingRegion samplingRegion("Parsing"); … … 1349 1365 if (source.provider()->source().is8Bit()) { 1350 1366 Parser<Lexer<LChar>> parser(vm, source, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode); 1351 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode );1367 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode, moduleParseMode); 1352 1368 if (positionBeforeLastNewline) 1353 1369 *positionBeforeLastNewline = parser.positionBeforeLastNewline(); … … 1362 1378 ASSERT_WITH_MESSAGE(defaultConstructorKind == ConstructorKind::None, "BuiltinExecutables::createDefaultConstructor should always use a 8-bit string"); 1363 1379 Parser<Lexer<UChar>> parser(vm, source, builtinMode, strictMode, codeType, defaultConstructorKind, thisTDZMode); 1364 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode );1380 std::unique_ptr<ParsedNode> result = parser.parse<ParsedNode>(error, name, parseMode, moduleParseMode); 1365 1381 if (positionBeforeLastNewline) 1366 1382 *positionBeforeLastNewline = parser.positionBeforeLastNewline();
Note:
See TracChangeset
for help on using the changeset viewer.