Changeset 31809 in webkit for trunk/JavaScriptCore/kjs
- Timestamp:
- Apr 11, 2008, 1:14:45 AM (17 years ago)
- Location:
- trunk/JavaScriptCore/kjs
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/Parser.cpp
r31072 r31809 30 30 #include <wtf/Vector.h> 31 31 32 extern int kjsyyparse( );32 extern int kjsyyparse(void*); 33 33 34 34 namespace KJS { … … 57 57 *sourceId = m_sourceId; 58 58 59 int parseError = kjsyyparse( );59 int parseError = kjsyyparse(&lexer); 60 60 bool lexError = lexer.sawError(); 61 61 lexer.clear(); -
trunk/JavaScriptCore/kjs/function.cpp
r31746 r31809 587 587 return true; 588 588 default: 589 return isSeparatorSpace(c);589 return c > 0xff && isSeparatorSpace(c); 590 590 } 591 591 } -
trunk/JavaScriptCore/kjs/grammar.y
r31072 r31809 1 %pure_parser 2 1 3 %{ 2 4 … … 37 39 #include <wtf/MathExtras.h> 38 40 39 // Not sure why, but yacc doesn't add this define along with the others.40 #define yylloc kjsyylloc41 42 41 #define YYMAXDEPTH 10000 43 42 #define YYENABLE_NLS 0 … … 51 50 #endif 52 51 53 extern int kjsyylex( );54 int kjsyyerror(const char 55 static bool allowAutomaticSemicolon();56 57 #define AUTO_SEMICOLON do { if (!allowAutomaticSemicolon( )) YYABORT; } while (0)52 extern int kjsyylex(YYSTYPE* lvalp, YYLTYPE* llocp, void* lexer); 53 int kjsyyerror(const char*); 54 static inline bool allowAutomaticSemicolon(Lexer&, int); 55 56 #define AUTO_SEMICOLON do { if (!allowAutomaticSemicolon(*static_cast<Lexer*>(lexer), yychar)) YYABORT; } while (0) 58 57 #define DBG(l, s, e) (l)->setLoc((s).first_line, (e).last_line) 59 58 … … 89 88 90 89 #endif 90 91 #define YYPARSE_PARAM lexer 92 #define YYLEX_PARAM lexer 91 93 92 94 template <typename T> NodeDeclarationInfo<T> createNodeDeclarationInfo(T node, ParserRefCountedData<DeclarationStacks::VarStack>* varDecls, … … 280 282 | STRING { $$ = createNodeFeatureInfo<ExpressionNode*>(new StringNode($1), 0); } 281 283 | '/' /* regexp */ { 282 Lexer& l = lexer();284 Lexer& l = *static_cast<Lexer*>(lexer); 283 285 if (!l.scanRegExp()) 284 286 YYABORT; … … 286 288 } 287 289 | DIVEQUAL /* regexp with /= */ { 288 Lexer& l = lexer();290 Lexer& l = *static_cast<Lexer*>(lexer); 289 291 if (!l.scanRegExp()) 290 292 YYABORT; … … 1287 1289 1288 1290 /* may we automatically insert a semicolon ? */ 1289 static bool allowAutomaticSemicolon( )1290 { 1291 return yychar == '}' || yychar == 0 || lexer ().prevTerminator();1291 static bool allowAutomaticSemicolon(Lexer& lexer, int yychar) 1292 { 1293 return yychar == '}' || yychar == 0 || lexer.prevTerminator(); 1292 1294 } 1293 1295 -
trunk/JavaScriptCore/kjs/lexer.cpp
r31147 r31809 48 48 #include "lexer.lut.h" 49 49 50 extern YYLTYPE kjsyylloc; // global bison variable holding token info51 52 50 // a bridge for yacc from the C world to C++ 53 int kjsyylex( )54 { 55 return lexer().lex();51 int kjsyylex(YYSTYPE* lvalp, YYLTYPE* llocp, void* lexer) 52 { 53 return static_cast<Lexer*>(lexer)->lex(lvalp, llocp); 56 54 } 57 55 … … 144 142 } 145 143 146 int Lexer::lex( )144 int Lexer::lex(YYSTYPE* lvalp, YYLTYPE* llocp) 147 145 { 148 146 int token = 0; … … 529 527 restrKeyword = false; 530 528 delimited = false; 531 kjsyylloc.first_line = yylineno; // ???532 kjsyylloc.last_line = yylineno;529 llocp->first_line = yylineno; // ??? 530 llocp->last_line = yylineno; 533 531 534 532 switch (state) { … … 544 542 if (eatNextIdentifier) { 545 543 eatNextIdentifier = false; 546 token = lex( );544 token = lex(lvalp, llocp); 547 545 break; 548 546 } 549 kjsyylval.ident = makeIdentifier(m_buffer16);547 lvalp->ident = makeIdentifier(m_buffer16); 550 548 token = IDENT; 551 549 break; 552 550 case IdentifierOrKeyword: 553 kjsyylval.ident = makeIdentifier(m_buffer16);554 if ((token = mainTable.value(* kjsyylval.ident)) < 0) {551 lvalp->ident = makeIdentifier(m_buffer16); 552 if ((token = mainTable.value(*lvalp->ident)) < 0) { 555 553 // Lookup for keyword failed, means this is an identifier. 556 554 token = IDENT; … … 563 561 break; 564 562 case String: 565 kjsyylval.string = makeUString(m_buffer16);563 lvalp->string = makeUString(m_buffer16); 566 564 token = STRING; 567 565 break; 568 566 case Number: 569 kjsyylval.doubleValue = dval;567 lvalp->doubleValue = dval; 570 568 token = NUMBER; 571 569 break; -
trunk/JavaScriptCore/kjs/lexer.h
r29538 r31809 28 28 #include <wtf/Vector.h> 29 29 30 union YYSTYPE; 31 struct YYLTYPE; 32 30 33 namespace KJS { 31 34 … … 36 39 public: 37 40 void setCode(int startingLineNumber, const UChar *c, unsigned int len); 38 int lex( );41 int lex(YYSTYPE* lvalp, YYLTYPE* llocp); 39 42 40 43 int lineNo() const { return yylineno; }
Note:
See TracChangeset
for help on using the changeset viewer.