Changeset 47738 in webkit for trunk/JavaScriptCore/parser/Parser.h
- Timestamp:
- Aug 24, 2009, 7:53:51 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/parser/Parser.h
r47664 r47738 27 27 #include "Executable.h" 28 28 #include "JSGlobalObject.h" 29 #include "Lexer.h" 29 30 #include "Nodes.h" 30 31 #include "ParserArena.h" … … 46 47 public: 47 48 template <class ParsedNode> 48 PassRefPtr<ParsedNode> parse(ExecState*, Debugger*, const SourceCode&, int* errLine = 0, UString* errMsg = 0); 49 template <class ParsedNode> 50 PassRefPtr<ParsedNode> reparse(JSGlobalData*, ParsedNode*); 51 void reparseInPlace(JSGlobalData*, FunctionBodyNode*); 52 PassRefPtr<FunctionBodyNode> parseFunctionFromGlobalCode(ExecState*, Debugger*, const SourceCode&, int* errLine = 0, UString* errMsg = 0); 49 PassRefPtr<ParsedNode> parse(JSGlobalData* globalData, Debugger*, ExecState*, const SourceCode& source, int* errLine = 0, UString* errMsg = 0); 53 50 54 51 void didFinishParsing(SourceElements*, ParserArenaData<DeclarationStacks::VarStack>*, … … 71 68 72 69 template <class ParsedNode> 73 PassRefPtr<ParsedNode> Parser::parse( ExecState* exec, Debugger* debugger, const SourceCode& source, int* errLine, UString* errMsg)70 PassRefPtr<ParsedNode> Parser::parse(JSGlobalData* globalData, Debugger* debugger, ExecState* debuggerExecState, const SourceCode& source, int* errLine, UString* errMsg) 74 71 { 75 72 m_source = &source; 76 parse(&exec->globalData(), errLine, errMsg); 73 if (FunctionBodyNode::scopeIsFunction) 74 globalData->lexer->setIsReparsing(); 75 parse(globalData, errLine, errMsg); 76 77 77 RefPtr<ParsedNode> result; 78 78 if (m_sourceElements) { 79 result = ParsedNode::create( &exec->globalData(),80 81 m_varDeclarations ? &m_varDeclarations->data : 0,82 83 *m_source,84 85 79 result = ParsedNode::create(globalData, 80 m_sourceElements, 81 m_varDeclarations ? &m_varDeclarations->data : 0, 82 m_funcDeclarations ? &m_funcDeclarations->data : 0, 83 source, 84 m_features, 85 m_numConstants); 86 86 result->setLoc(m_source->firstLine(), m_lastLine); 87 87 } … … 90 90 91 91 m_source = 0; 92 m_sourceElements = 0; 92 93 m_varDeclarations = 0; 93 94 m_funcDeclarations = 0; 94 95 95 if (debugger )96 debugger->sourceParsed( exec, source, *errLine, *errMsg);96 if (debugger && !FunctionBodyNode::scopeIsFunction) 97 debugger->sourceParsed(debuggerExecState, source, *errLine, *errMsg); 97 98 return result.release(); 98 }99 100 template <class ParsedNode>101 PassRefPtr<ParsedNode> Parser::reparse(JSGlobalData* globalData, ParsedNode* oldParsedNode)102 {103 m_source = &oldParsedNode->source();104 parse(globalData, 0, 0);105 RefPtr<ParsedNode> result;106 if (m_sourceElements) {107 result = ParsedNode::create(globalData,108 m_sourceElements,109 m_varDeclarations ? &m_varDeclarations->data : 0,110 m_funcDeclarations ? &m_funcDeclarations->data : 0,111 *m_source,112 oldParsedNode->features(),113 m_numConstants);114 result->setLoc(m_source->firstLine(), m_lastLine);115 }116 117 m_arena.reset();118 119 m_source = 0;120 m_varDeclarations = 0;121 m_funcDeclarations = 0;122 123 return result.release();124 }125 126 inline PassRefPtr<FunctionBodyNode> Parser::parseFunctionFromGlobalCode(ExecState* exec, Debugger* debugger, const SourceCode& source, int* errLine, UString* errMsg)127 {128 RefPtr<ProgramNode> program = parse<ProgramNode>(exec, debugger, source, errLine, errMsg);129 if (!program)130 return 0;131 132 StatementNode* exprStatement = program->singleStatement();133 ASSERT(exprStatement);134 ASSERT(exprStatement->isExprStatement());135 if (!exprStatement || !exprStatement->isExprStatement())136 return 0;137 138 ExpressionNode* funcExpr = static_cast<ExprStatementNode*>(exprStatement)->expr();139 ASSERT(funcExpr);140 ASSERT(funcExpr->isFuncExprNode());141 if (!funcExpr || !funcExpr->isFuncExprNode())142 return 0;143 144 FunctionBodyNode* body = static_cast<FuncExprNode*>(funcExpr)->body();145 ASSERT(body);146 return body;147 }148 149 inline JSObject* EvalExecutable::parse(ExecState* exec, bool allowDebug)150 {151 int errLine;152 UString errMsg;153 m_node = exec->globalData().parser->parse<EvalNode>(exec, allowDebug ? exec->dynamicGlobalObject()->debugger() : 0, m_source, &errLine, &errMsg);154 if (!m_node)155 return Error::create(exec, SyntaxError, errMsg, errLine, m_source.provider()->asID(), m_source.provider()->url());156 return 0;157 }158 159 inline JSObject* ProgramExecutable::parse(ExecState* exec, bool allowDebug)160 {161 int errLine;162 UString errMsg;163 m_node = exec->globalData().parser->parse<ProgramNode>(exec, allowDebug ? exec->dynamicGlobalObject()->debugger() : 0, m_source, &errLine, &errMsg);164 if (!m_node)165 return Error::create(exec, SyntaxError, errMsg, errLine, m_source.provider()->asID(), m_source.provider()->url());166 return 0;167 99 } 168 100
Note:
See TracChangeset
for help on using the changeset viewer.