Changeset 27842 in webkit for trunk/JavaScriptCore/kjs/lexer.cpp
- Timestamp:
- Nov 15, 2007, 10:54:09 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/lexer.cpp
r27695 r27842 52 52 int kjsyylex() 53 53 { 54 return Lexer::curr()->lex();54 return lexer().lex(); 55 55 } 56 56 57 57 namespace KJS { 58 58 59 static Lexer* currLexer = 0;60 61 59 static bool isDecimalDigit(int); 60 61 Lexer& lexer() 62 { 63 ASSERT(JSLock::currentThreadIsHoldingLock()); 64 65 // FIXME: We'd like to avoid calling new here, but we don't currently 66 // support tearing down the Lexer at app quit time, since that would involve 67 // tearing down its UString data members without holding the JSLock. 68 static Lexer* staticLexer = new Lexer; 69 return *staticLexer; 70 } 62 71 63 72 Lexer::Lexer() … … 76 85 buffer8 = new char[size8]; 77 86 buffer16 = new KJS::UChar[size16]; 78 currLexer = this;79 87 } 80 88 81 89 Lexer::~Lexer() 82 90 { 83 doneParsing();84 91 delete [] buffer8; 85 92 delete [] buffer16; 86 93 } 87 88 Lexer *Lexer::curr()89 {90 if (!currLexer) {91 // create singleton instance92 currLexer = new Lexer();93 }94 return currLexer;95 }96 97 #ifdef KJS_DEBUG_MEM98 void Lexer::globalClear()99 {100 delete currLexer;101 currLexer = 0L;102 }103 #endif104 94 105 95 void Lexer::setCode(const UString &sourceURL, int startingLineNumber, const KJS::UChar *c, unsigned int len) … … 786 776 KJS::UChar Lexer::convertUnicode(int c1, int c2, int c3, int c4) 787 777 { 778 // FIXME: This conversion is lossy. See http://bugs.webkit.org/show_bug.cgi?id=4920. 788 779 return KJS::UChar((convertHex(c1) << 4) + convertHex(c2), 789 780 (convertHex(c3) << 4) + convertHex(c4)); … … 851 842 } 852 843 else { // end of regexp 853 pattern = UString(buffer16, pos16);844 m_pattern = UString(buffer16, pos16); 854 845 pos16 = 0; 855 846 shift(1); … … 863 854 shift(1); 864 855 } 865 flags = UString(buffer16, pos16);856 m_flags = UString(buffer16, pos16); 866 857 867 858 return true; 868 859 } 869 860 870 871 void Lexer::doneParsing() 872 { 873 for (unsigned i = 0; i < numIdentifiers; i++) { 861 void Lexer::clear() 862 { 863 for (unsigned i = 0; i < numIdentifiers; i++) 874 864 delete identifiers[i]; 875 }876 865 fastFree(identifiers); 877 866 identifiers = 0; … … 879 868 identifiersCapacity = 0; 880 869 881 for (unsigned i = 0; i < numStrings; i++) {870 for (unsigned i = 0; i < numStrings; i++) 882 871 delete strings[i]; 883 }884 872 fastFree(strings); 885 873 strings = 0; 886 874 numStrings = 0; 887 875 stringsCapacity = 0; 876 877 m_pattern = 0; 878 m_flags = 0; 879 m_sourceURL = 0; 888 880 } 889 881 … … 891 883 const int growthFactor = 2; 892 884 893 // FIXME: this completely ignores its parameters, instead using buffer16 and pos16 - wtf? 894 Identifier *Lexer::makeIdentifier(KJS::UChar*, unsigned int) 885 Identifier* Lexer::makeIdentifier(KJS::UChar* buffer, unsigned int pos) 895 886 { 896 887 if (numIdentifiers == identifiersCapacity) { … … 899 890 } 900 891 901 KJS::Identifier *identifier = new KJS::Identifier(buffer 16, pos16);892 KJS::Identifier *identifier = new KJS::Identifier(buffer, pos); 902 893 identifiers[numIdentifiers++] = identifier; 903 894 return identifier; 904 895 } 905 896 906 // FIXME: this completely ignores its parameters, instead using buffer16 and pos16 - wtf? 907 UString *Lexer::makeUString(KJS::UChar*, unsigned int) 897 UString* Lexer::makeUString(KJS::UChar* buffer, unsigned int pos) 908 898 { 909 899 if (numStrings == stringsCapacity) { … … 912 902 } 913 903 914 UString *string = new UString(buffer 16, pos16);904 UString *string = new UString(buffer, pos); 915 905 strings[numStrings++] = string; 916 906 return string; 917 907 } 918 908 919 } 909 } // namespace KJS
Note:
See TracChangeset
for help on using the changeset viewer.