Changeset 5314 in webkit for trunk/JavaScriptCore/kjs/grammar.y


Ignore:
Timestamp:
Oct 30, 2003, 10:42:38 AM (22 years ago)
Author:
mjs
Message:

Reviewed by Darin.

  • kjs/grammar.cpp: (yyerror): Updated the commented code.
  • kjs/grammar.y: Don't delete string and identifier tokens when done with them any more, they'll get cleaned up by the lexer now.
  • kjs/internal.cpp: (Parser::parse): Tell lexer when done parsing.
  • kjs/lexer.cpp: (Lexer::Lexer): Initialize new data members. (Lexer::lex): Use new methods to make strings and identifiers, and save them. (Lexer::makeIdentifier): Make a new Identifier and save it in an auto-growing array. (Lexer::makeUString): Likewise for UStrings. (Lexer::doneParsing): Clean up arrays of Ifentifiers and UStrings.
  • kjs/lexer.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/grammar.y

    r4739 r5314  
    168168  | FALSETOKEN                     { $$ = new BooleanNode(false); }
    169169  | NUMBER                         { $$ = new NumberNode($1); }
    170   | STRING                         { $$ = new StringNode($1); delete $1; }
     170  | STRING                         { $$ = new StringNode($1); }
    171171  | '/'       /* a RegExp ? */     { Lexer *l = Lexer::curr();
    172172                                     if (!l->scanRegExp()) YYABORT;
     
    180180PrimaryExpr:
    181181    THIS                           { $$ = new ThisNode(); }
    182   | IDENT                          { $$ = new ResolveNode(*$1);
    183                                      delete $1; }
     182  | IDENT                          { $$ = new ResolveNode(*$1); }
    184183  | Literal
    185184  | ArrayLiteral
     
    218217
    219218PropertyName:
    220     IDENT                          { $$ = new PropertyNode(*$1); delete $1; }
    221   | STRING                         { $$ = new PropertyNode(Identifier(*$1)); delete $1; }
     219    IDENT                          { $$ = new PropertyNode(*$1); }
     220  | STRING                         { $$ = new PropertyNode(Identifier(*$1)); }
    222221  | NUMBER                         { $$ = new PropertyNode($1); }
    223222;
     
    227226  | FunctionExpr
    228227  | MemberExpr '[' Expr ']'        { $$ = new AccessorNode1($1, $3); }
    229   | MemberExpr '.' IDENT           { $$ = new AccessorNode2($1, *$3); delete $3; }
     228  | MemberExpr '.' IDENT           { $$ = new AccessorNode2($1, *$3); }
    230229  | NEW MemberExpr Arguments       { $$ = new NewExprNode($2, $3); }
    231230;
     
    240239  | CallExpr Arguments             { $$ = new FunctionCallNode($1, $2); }
    241240  | CallExpr '[' Expr ']'          { $$ = new AccessorNode1($1, $3); }
    242   | CallExpr '.' IDENT             { $$ = new AccessorNode2($1, *$3);
    243                                      delete $3; }
     241  | CallExpr '.' IDENT             { $$ = new AccessorNode2($1, *$3); }
    244242;
    245243
     
    429427
    430428VariableDeclaration:
    431     IDENT                          { $$ = new VarDeclNode(*$1, 0); delete $1; }
    432   | IDENT Initializer              { $$ = new VarDeclNode(*$1, $2); delete $1; }
     429    IDENT                          { $$ = new VarDeclNode(*$1, 0); }
     430  | IDENT Initializer              { $$ = new VarDeclNode(*$1, $2); }
    433431;
    434432
     
    471469  | FOR '(' VAR IDENT IN Expr ')'
    472470            Statement              { $$ = new ForInNode(*$4,0L,$6,$8);
    473                                      DBG($$,@1,@7);
    474                                      delete $4; }
     471                                     DBG($$,@1,@7); }
    475472  | FOR '(' VAR IDENT Initializer IN Expr ')'
    476473            Statement              { $$ = new ForInNode(*$4,$5,$7,$9);
    477                                      DBG($$,@1,@8);
    478                                      delete $4; }
     474                                     DBG($$,@1,@8); }
    479475;
    480476
     
    490486                                     } else
    491487                                       YYABORT; }
    492   | CONTINUE IDENT ';'             { $$ = new ContinueNode(*$2); DBG($$,@1,@3);
    493                                      delete $2; }
     488  | CONTINUE IDENT ';'             { $$ = new ContinueNode(*$2); DBG($$,@1,@3); }
    494489  | CONTINUE IDENT error           { if (automatic()) {
    495490                                       $$ = new ContinueNode(*$2);DBG($$,@1,@2);
    496                                        delete $2;
    497491                                     } else
    498492                                       YYABORT; }
     
    505499                                     } else
    506500                                       YYABORT; }
    507   | BREAK IDENT ';'                { $$ = new BreakNode(*$2); DBG($$,@1,@3);
    508                                      delete $2; }
     501  | BREAK IDENT ';'                { $$ = new BreakNode(*$2); DBG($$,@1,@3); }
    509502  | BREAK IDENT error              { if (automatic()) {
    510503                                       $$ = new BreakNode(*$2); DBG($$,@1,@2);
    511                                        delete $2;
    512504                                     } else
    513505                                       YYABORT;
     
    566558LabelledStatement:
    567559    IDENT ':' Statement            { $3->pushLabel(*$1);
    568                                      $$ = new LabelNode(*$1, $3);
    569                                      delete $1; }
     560                                     $$ = new LabelNode(*$1, $3); }
    570561;
    571562
     
    581572
    582573Catch:
    583     CATCH '(' IDENT ')' Block      { $$ = new CatchNode(*$3, $5); delete $3; }
     574    CATCH '(' IDENT ')' Block      { $$ = new CatchNode(*$3, $5); }
    584575;
    585576
     
    589580
    590581FunctionDeclaration:
    591     FUNCTION IDENT '(' ')' FunctionBody    { $$ = new FuncDeclNode(*$2, 0L, $5);
    592                                              delete $2; }
     582    FUNCTION IDENT '(' ')' FunctionBody    { $$ = new FuncDeclNode(*$2, 0L, $5); }
    593583  | FUNCTION IDENT '(' FormalParameterList ')' FunctionBody
    594                                    { $$ = new FuncDeclNode(*$2, $4, $6);
    595                                      delete $2; }
     584                                   { $$ = new FuncDeclNode(*$2, $4, $6); }
    596585
    597586FunctionExpr:
     
    603592
    604593FormalParameterList:
    605     IDENT                          { $$ = new ParameterNode(*$1); delete $1; }
    606   | FormalParameterList ',' IDENT  { $$ = new ParameterNode($1, *$3); delete $3; }
     594    IDENT                          { $$ = new ParameterNode(*$1); }
     595  | FormalParameterList ',' IDENT  { $$ = new ParameterNode($1, *$3); }
    607596;
    608597
     
    633622%%
    634623
    635 int yyerror (const char *)  /* Called by yyparse on error */
     624int yyerror (const char * /* s */)  /* Called by yyparse on error */
    636625{
    637 // fprintf(stderr, "ERROR: %s at line %d\n",
    638 //        s, KJScript::lexer()->lineNo());
     626  // fprintf(stderr, "ERROR: %s at line %d\n",
     627  //      s, KJS::Lexer::curr()->lineNo());
    639628  return 1;
    640629}
Note: See TracChangeset for help on using the changeset viewer.