Changeset 5314 in webkit for trunk/JavaScriptCore/kjs/lexer.cpp
- Timestamp:
- Oct 30, 2003, 10:42:38 AM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/lexer.cpp
r5083 r5314 68 68 bol(true), 69 69 #endif 70 current(0), next1(0), next2(0), next3(0) 70 current(0), next1(0), next2(0), next3(0), 71 strings(0), numStrings(0), stringsCapacity(0), 72 identifiers(0), numIdentifiers(0), identifiersCapacity(0) 71 73 { 72 74 // allocate space for read buffers … … 74 76 buffer16 = new UChar[size16]; 75 77 currLexer = this; 76 77 78 } 78 79 79 80 Lexer::~Lexer() 80 81 { 82 doneParsing(); 81 83 delete [] buffer8; 82 84 delete [] buffer16; … … 503 505 break; 504 506 } 505 /* TODO: close leak on parse error. same holds true for String */ 506 kjsyylval.ident = new KJS::Identifier(buffer16, pos16); 507 kjsyylval.ident = makeIdentifier(buffer16, pos16); 507 508 token = IDENT; 508 509 break; … … 519 520 break; 520 521 case String: 521 kjsyylval.ustr = newUString(buffer16, pos16);522 kjsyylval.ustr = makeUString(buffer16, pos16); 522 523 token = STRING; 523 524 break; … … 817 818 return true; 818 819 } 820 821 822 void Lexer::doneParsing() 823 { 824 for (unsigned i = 0; i < numIdentifiers; i++) { 825 delete identifiers[i]; 826 } 827 free (identifiers); 828 identifiers = 0; 829 numIdentifiers = 0; 830 identifiersCapacity = 0; 831 832 for (unsigned i = 0; i < numStrings; i++) { 833 delete strings[i]; 834 } 835 free (strings); 836 strings = 0; 837 numStrings = 0; 838 stringsCapacity = 0; 839 } 840 841 const int initialCapacity = 64; 842 const int growthFactor = 2; 843 844 Identifier *Lexer::makeIdentifier(UChar *buffer, unsigned int pos) 845 { 846 if (numIdentifiers == identifiersCapacity) { 847 identifiersCapacity = (identifiersCapacity == 0) ? initialCapacity : identifiersCapacity *growthFactor; 848 identifiers = (KJS::Identifier **)realloc(identifiers, sizeof(KJS::Identifier *) * identifiersCapacity); 849 } 850 851 KJS::Identifier *identifier = new KJS::Identifier(buffer16, pos16); 852 identifiers[numIdentifiers++] = identifier; 853 return identifier; 854 } 855 856 UString *Lexer::makeUString(UChar *buffer, unsigned int pos) 857 { 858 if (numStrings == stringsCapacity) { 859 stringsCapacity = (stringsCapacity == 0) ? initialCapacity : stringsCapacity *growthFactor; 860 strings = (UString **)realloc(strings, sizeof(UString *) * stringsCapacity); 861 } 862 863 UString *string = new UString(buffer16, pos16); 864 strings[numStrings++] = string; 865 return string; 866 }
Note:
See TracChangeset
for help on using the changeset viewer.