Changeset 27842 in webkit for trunk/JavaScriptCore/kjs/Parser.cpp
- Timestamp:
- Nov 15, 2007, 10:54:09 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/Parser.cpp
r27215 r27842 4 4 * Copyright (C) 1999-2001 Harri Porten ([email protected]) 5 5 * Copyright (C) 2001 Peter Kelly ([email protected]) 6 * Copyright (C) 2003, 2006 Apple Computer,Inc.6 * Copyright (C) 2003, 2006, 2007 Apple Inc. 7 7 * 8 8 * This library is free software; you can redistribute it and/or … … 31 31 #include <wtf/Vector.h> 32 32 33 extern int kjsyyparse();34 35 33 namespace KJS { 36 34 37 int Parser::sid = 0; 35 Parser::Parser() 36 : m_sourceId(0) 37 { 38 } 38 39 39 static RefPtr<ProgramNode>* progNode; 40 41 PassRefPtr<ProgramNode> Parser::parse(const UString& sourceURL, int startingLineNumber, 40 PassRefPtr<ProgramNode> Parser::parseProgram(const UString& sourceURL, int startingLineNumber, 42 41 const UChar* code, unsigned length, 43 42 int* sourceId, int* errLine, UString* errMsg) 44 43 { 44 parse(sourceURL, startingLineNumber, code, length, sourceId, errLine, errMsg); 45 return m_progNode.release(); 46 } 47 48 PassRefPtr<FunctionBodyNode> Parser::parseFunctionBody(const UString& sourceURL, int startingLineNumber, 49 const UChar* code, unsigned length, 50 int* sourceId, int* errLine, UString* errMsg) 51 { 52 parse(sourceURL, startingLineNumber, code, length, sourceId, errLine, errMsg); 53 return m_progNode.release(); 54 } 55 56 void Parser::parse(const UString& sourceURL, int startingLineNumber, 57 const UChar* code, unsigned length, 58 int* sourceId, int* errLine, UString* errMsg) 59 { 60 ASSERT(!m_progNode); 61 45 62 if (errLine) 46 63 *errLine = -1; 47 64 if (errMsg) 48 65 *errMsg = 0; 49 if (!progNode)50 progNode = new RefPtr<ProgramNode>;66 67 Lexer& lexer = KJS::lexer(); 51 68 52 Lexer::curr()->setCode(sourceURL, startingLineNumber, code, length); 53 *progNode = 0; 54 sid++; 69 lexer.setCode(sourceURL, startingLineNumber, code, length); 70 m_sourceId++; 55 71 if (sourceId) 56 *sourceId = sid; 57 58 // Enable this and the #define YYDEBUG in grammar.y to debug a parse error 59 //extern int kjsyydebug; 60 //kjsyydebug=1; 72 *sourceId = m_sourceId; 61 73 62 74 int parseError = kjsyyparse(); 63 bool lexError = Lexer::curr()->sawError(); 64 Lexer::curr()->doneParsing(); 65 PassRefPtr<ProgramNode> prog = progNode->release(); 66 *progNode = 0; 75 bool lexError = lexer.sawError(); 76 lexer.clear(); 67 77 68 78 Node::clearNewNodes(); 69 79 70 80 if (parseError || lexError) { 71 int eline = Lexer::curr()->lineNo();72 81 if (errLine) 73 *errLine = eline;82 *errLine = lexer.lineNo(); 74 83 if (errMsg) 75 84 *errMsg = "Parse error"; 76 return0;85 m_progNode = 0; 77 86 } 78 79 return prog;80 87 } 81 88 82 void Parser:: accept(PassRefPtr<ProgramNode> prog)89 void Parser::didFinishParsing(PassRefPtr<ProgramNode> progNode) 83 90 { 84 *progNode = prog;91 m_progNode = progNode; 85 92 } 86 93 87 UString Parser::prettyPrint(const UString& code, int* errLine, UString* errMsg)94 Parser& parser() 88 95 { 89 RefPtr<ProgramNode> progNode = parse(UString(), 0, code.data(), code.size(), 0, errLine, errMsg); 90 if (!progNode) 91 return 0; 92 93 return progNode->toString(); 96 ASSERT(JSLock::currentThreadIsHoldingLock()); 97 98 static Parser staticParser; 99 return staticParser; 94 100 } 95 101 96 } 102 } // namespace KJS
Note:
See TracChangeset
for help on using the changeset viewer.