Ignore:
Timestamp:
Nov 15, 2007, 10:54:09 PM (18 years ago)
Author:
[email protected]
Message:

Reviewed by Eric Seidel.

Another round of grammar / parsing cleanup.


  1. Created distinct parser calls for parsing function bodies vs programs. This will help later with optimizing global variable access.


  1. Turned Parser into a singleton. Cleaned up Lexer's singleton interface.


  1. Modified Lexer to free a little more memory when done lexing. (Added FIXMEs for similar issues that I didn't fix.)


  1. Changed Lexer::makeIdentifier and Lexer::makeUString to start respecting the arguments passed to them. (No behavior change, but this problem could have caused serious problems for an unsuspecting user of these functions.)


  1. Removed KJS_DEBUG_MEM because it was bit-rotted.


  1. Removed Parser::prettyPrint because the same work was simpler to do at the call site.


  1. Some renames:


"Parser::accept" => "Parser::didFinishParsing"
"Parser::sid" => "Parser::m_sourceID"
"Lexer::doneParsing" => "Lexer::clear"
"sid" => "sourceId"
"lineno" => "lineNo"


  • JavaScriptCore.exp:
  • kjs/Parser.cpp: (KJS::Parser::Parser): (KJS::Parser::parseProgram): (KJS::Parser::parseFunctionBody): (KJS::Parser::parse): (KJS::Parser::didFinishParsing): (KJS::parser):
  • kjs/Parser.h: (KJS::Parser::sourceId):
  • kjs/function.cpp: (KJS::GlobalFuncImp::callAsFunction):
  • kjs/function_object.cpp: (FunctionObjectImp::construct):
  • kjs/grammar.y:
  • kjs/interpreter.cpp: (KJS::Interpreter::checkSyntax): (KJS::Interpreter::evaluate):
  • kjs/interpreter.h:
  • kjs/lexer.cpp: (kjsyylex): (KJS::lexer): (KJS::Lexer::Lexer): (KJS::Lexer::~Lexer): (KJS::Lexer::scanRegExp): (KJS::Lexer::doneParsing): (KJS::Lexer::makeIdentifier): (KJS::Lexer::makeUString):
  • kjs/lexer.h: (KJS::Lexer::pattern): (KJS::Lexer::flags): (KJS::Lexer::sawError):
  • kjs/nodes.cpp: (KJS::Node::Node): (KJS::FunctionBodyNode::FunctionBodyNode):
  • kjs/nodes.h:
  • kjs/testkjs.cpp: (prettyPrintScript): (kjsmain):
  • kjs/ustring.cpp:
  • kjs/ustring.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/function_object.cpp

    r27448 r27842  
    186186
    187187  // parse the source code
    188   int sid;
     188  int sourceId;
    189189  int errLine;
    190190  UString errMsg;
    191   RefPtr<ProgramNode> progNode = Parser::parse(sourceURL, lineNumber, body.data(),body.size(),&sid,&errLine,&errMsg);
     191  RefPtr<FunctionBodyNode> functionBody = parser().parseFunctionBody(sourceURL, lineNumber, body.data(), body.size(), &sourceId, &errLine, &errMsg);
    192192
    193193  // notify debugger that source has been parsed
     
    195195  if (dbg) {
    196196    // send empty sourceURL to indicate constructed code
    197     bool cont = dbg->sourceParsed(exec, sid, UString(), body, lineNumber, errLine, errMsg);
     197    bool cont = dbg->sourceParsed(exec, sourceId, UString(), body, lineNumber, errLine, errMsg);
    198198    if (!cont) {
    199199      dbg->imp()->abort();
     
    203203
    204204  // no program node == syntax error - throw a syntax error
    205   if (!progNode)
     205  if (!functionBody)
    206206    // we can't return a Completion(Throw) here, so just set the exception
    207207    // and return it
    208     return throwError(exec, SyntaxError, errMsg, errLine, sid, sourceURL);
     208    return throwError(exec, SyntaxError, errMsg, errLine, sourceId, sourceURL);
    209209
    210210  ScopeChain scopeChain;
    211211  scopeChain.push(exec->lexicalInterpreter()->globalObject());
    212   FunctionBodyNode *bodyNode = progNode.get();
    213 
    214   FunctionImp* fimp = new FunctionImp(exec, functionName, bodyNode, scopeChain);
     212
     213  FunctionImp* fimp = new FunctionImp(exec, functionName, functionBody.get(), scopeChain);
    215214 
    216215  // parse parameter list. throw syntax error on illegal identifiers
     
    232231              c++, i++;
    233232          if (i == len) {
    234               bodyNode->addParam(Identifier(param));
     233              functionBody->addParam(Identifier(param));
    235234              params++;
    236235              break;
    237236          } else if (*c == ',') {
    238               bodyNode->addParam(Identifier(param));
     237              functionBody->addParam(Identifier(param));
    239238              params++;
    240239              c++, i++;
Note: See TracChangeset for help on using the changeset viewer.