Changeset 10352 in webkit for trunk/JavaScriptCore/kjs/internal.cpp
- Timestamp:
- Aug 26, 2005, 4:42:16 PM (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/internal.cpp
r10207 r10352 53 53 54 54 extern int kjsyyparse(); 55 56 using namespace kxmlcore; 55 57 56 58 namespace KJS { … … 346 348 // ------------------------------ Parser --------------------------------------- 347 349 348 ProgramNode *Parser::progNode = 0;350 static SharedPtr<ProgramNode> *progNode; 349 351 int Parser::sid = 0; 350 352 351 ProgramNode *Parser::parse(const UString &sourceURL, int startingLineNumber,352 const UChar *code, unsigned int length, int *sourceId,353 353 SharedPtr<ProgramNode> Parser::parse(const UString &sourceURL, int startingLineNumber, 354 const UChar *code, unsigned int length, int *sourceId, 355 int *errLine, UString *errMsg) 354 356 { 355 357 if (errLine) … … 357 359 if (errMsg) 358 360 *errMsg = 0; 359 361 if (!progNode) 362 progNode = new SharedPtr<ProgramNode>; 363 360 364 Lexer::curr()->setCode(sourceURL, startingLineNumber, code, length); 361 progNode = 0;365 *progNode = 0; 362 366 sid++; 363 367 if (sourceId) … … 369 373 bool lexError = Lexer::curr()->sawError(); 370 374 Lexer::curr()->doneParsing(); 371 ProgramNode *prog =progNode;372 progNode = 0;375 SharedPtr<ProgramNode> prog = *progNode; 376 *progNode = 0; 373 377 374 378 if (parseError || lexError) { … … 378 382 if (errMsg) 379 383 *errMsg = "Parse error"; 380 if (prog) { 381 // must ref and deref to clean up properly 382 prog->ref(); 383 prog->deref(); 384 delete prog; 385 } 386 return 0; 384 return SharedPtr<ProgramNode>(); 387 385 } 388 386 389 387 return prog; 390 388 } 389 390 void Parser::accept(ProgramNode *prog) 391 { 392 *progNode = prog; 393 } 394 391 395 392 396 // ------------------------------ InterpreterImp ------------------------------- … … 612 616 { 613 617 // Parser::parse() returns 0 in a syntax error occurs, so we just check for that 614 ProgramNode *progNode = Parser::parse(UString(), 0, code.data(),code.size(),0,0,0); 615 bool ok = (progNode != 0); 616 if (progNode) { 617 // must ref and deref to clean up properly 618 progNode->ref(); 619 progNode->deref(); 620 delete progNode; 621 } 622 return ok; 618 SharedPtr<ProgramNode> progNode = Parser::parse(UString(), 0, code.data(),code.size(),0,0,0); 619 return progNode; 623 620 } 624 621 … … 643 640 int errLine; 644 641 UString errMsg; 645 ProgramNode *progNode = Parser::parse(sourceURL, startingLineNumber, code.data(),code.size(),&sid,&errLine,&errMsg);642 SharedPtr<ProgramNode> progNode = Parser::parse(sourceURL, startingLineNumber, code.data(),code.size(),&sid,&errLine,&errMsg); 646 643 647 644 // notify debugger that source has been parsed … … 671 668 672 669 recursion++; 673 progNode->ref();674 670 675 671 ObjectImp *globalObj = globalObject(); … … 699 695 } 700 696 701 if (progNode->deref())702 delete progNode;703 697 recursion--; 704 698
Note:
See TracChangeset
for help on using the changeset viewer.