Changeset 10354 in webkit for trunk/JavaScriptCore
- Timestamp:
- Aug 26, 2005, 4:46:27 PM (20 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r10352 r10354 1 2005-08-26 Maciej Stachowiak <[email protected]> 2 3 Reviewed by John. 4 5 <rdar://problem/4224911> many many leaks in kjsyyparse with malformed Javascript 6 7 Record all nodes that are created during parsing, and delete any 8 that are left floating with a refcount of 0. 9 10 * kjs/internal.cpp: 11 (KJS::Parser::saveNewNode): 12 (KJS::clearNewNodes): 13 (KJS::Parser::parse): 14 * kjs/internal.h: 15 * kjs/nodes.cpp: 16 (Node::Node): 17 * kjs/nodes.h: 18 (KJS::Node::refcount): 19 1 20 2005-08-26 Maciej Stachowiak <[email protected]> 2 21 -
trunk/JavaScriptCore/kjs/internal.cpp
r10352 r10354 351 351 int Parser::sid = 0; 352 352 353 const int initialCapacity = 64; 354 const int growthFactor = 2; 355 356 static int numNewNodes; 357 static int newNodesCapacity; 358 static Node **newNodes; 359 360 void Parser::saveNewNode(Node *node) 361 { 362 if (numNewNodes == newNodesCapacity) { 363 newNodesCapacity = (newNodesCapacity == 0) ? initialCapacity : newNodesCapacity * growthFactor; 364 newNodes = (Node **)realloc(newNodes, sizeof(Node *) * newNodesCapacity); 365 } 366 367 newNodes[numNewNodes++] = node; 368 } 369 370 static void clearNewNodes() 371 { 372 for (int i = 0; i < numNewNodes; i++) { 373 if (newNodes[i]->refcount() == 0) 374 delete newNodes[i]; 375 } 376 delete newNodes; 377 newNodes = 0; 378 numNewNodes = 0; 379 newNodesCapacity = 0; 380 } 381 353 382 SharedPtr<ProgramNode> Parser::parse(const UString &sourceURL, int startingLineNumber, 354 383 const UChar *code, unsigned int length, int *sourceId, … … 376 405 *progNode = 0; 377 406 407 clearNewNodes(); 408 378 409 if (parseError || lexError) { 379 410 int eline = Lexer::curr()->lineNo(); … … 392 423 *progNode = prog; 393 424 } 394 395 425 396 426 // ------------------------------ InterpreterImp ------------------------------- -
trunk/JavaScriptCore/kjs/internal.h
r10352 r10354 39 39 namespace KJS { 40 40 41 class Node; 41 42 class ProgramNode; 42 43 class FunctionBodyNode; … … 201 202 static void accept(ProgramNode *prog); 202 203 204 static void saveNewNode(Node *node); 205 203 206 static int sid; 204 207 }; -
trunk/JavaScriptCore/kjs/nodes.cpp
r10352 r10354 100 100 sourceURL = Lexer::curr()->sourceURL(); 101 101 m_refcount = 0; 102 Parser::saveNewNode(this); 102 103 } 103 104 -
trunk/JavaScriptCore/kjs/nodes.h
r10352 r10354 95 95 void ref() { ++m_refcount; } 96 96 void deref() { --m_refcount; if (!m_refcount) delete this; } 97 unsigned int refcount() { return m_refcount; } 97 98 98 99 protected:
Note:
See TracChangeset
for help on using the changeset viewer.