OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 2857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2868 for (int j = 0; j < quarks.length(); j++) { | 2868 for (int j = 0; j < quarks.length(); j++) { |
2869 #ifndef ENABLE_LATIN_1 | 2869 #ifndef ENABLE_LATIN_1 |
2870 if (quarks[j] > String::kMaxOneByteCharCode) { | 2870 if (quarks[j] > String::kMaxOneByteCharCode) { |
2871 return set_replacement(NULL); | 2871 return set_replacement(NULL); |
2872 } | 2872 } |
2873 #else | 2873 #else |
2874 if (quarks[j] <= String::kMaxOneByteCharCode) continue; | 2874 if (quarks[j] <= String::kMaxOneByteCharCode) continue; |
2875 if (!ignore_case) return set_replacement(NULL); | 2875 if (!ignore_case) return set_replacement(NULL); |
2876 // Here, we need to check for characters whose upper and lower cases | 2876 // Here, we need to check for characters whose upper and lower cases |
2877 // are outside the Latin-1 range. | 2877 // are outside the Latin-1 range. |
2878 // TODO(dcarney): Replace this code with a simple | 2878 if (!unibrow::Latin1::NonLatin1CanBeConvertedToLatin1(quarks[j])) { |
2879 // table lookup in unibrow::Latin-1. | 2879 return set_replacement(NULL); |
2880 // TODO(dcarney): Test cases!. | |
2881 unibrow::uchar result; | |
2882 int chars; | |
2883 chars = unibrow::ToLowercase::Convert(quarks[j], 0, &result, NULL); | |
2884 if (chars > 1 || | |
2885 (chars == 1 && result <= String::kMaxOneByteCharCodeU)) { | |
2886 continue; | |
2887 } | 2880 } |
2888 chars = unibrow::ToUppercase::Convert(quarks[j], 0, &result, NULL); | |
2889 if (chars > 1 || | |
2890 (chars == 1 && result <= String::kMaxOneByteCharCodeU)) { | |
2891 continue; | |
2892 } | |
2893 // This character is definitely not in the Latin-1 range. | |
2894 return set_replacement(NULL); | |
2895 #endif | 2881 #endif |
2896 } | 2882 } |
2897 } else { | 2883 } else { |
2898 ASSERT(elm.type == TextElement::CHAR_CLASS); | 2884 ASSERT(elm.type == TextElement::CHAR_CLASS); |
2899 #ifdef ENABLE_LATIN_1 | 2885 #ifdef ENABLE_LATIN_1 |
2900 // TODO(dcarney): Can this be improved? | 2886 // TODO(dcarney): Can this be improved? |
2901 if (ignore_case) continue; | 2887 if (ignore_case) continue; |
2902 #endif | 2888 #endif |
2903 RegExpCharacterClass* cc = elm.data.u_char_class; | 2889 RegExpCharacterClass* cc = elm.data.u_char_class; |
2904 ZoneList<CharacterRange>* ranges = cc->ranges(zone()); | 2890 ZoneList<CharacterRange>* ranges = cc->ranges(zone()); |
(...skipping 3288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6193 } | 6179 } |
6194 | 6180 |
6195 return compiler.Assemble(¯o_assembler, | 6181 return compiler.Assemble(¯o_assembler, |
6196 node, | 6182 node, |
6197 data->capture_count, | 6183 data->capture_count, |
6198 pattern); | 6184 pattern); |
6199 } | 6185 } |
6200 | 6186 |
6201 | 6187 |
6202 }} // namespace v8::internal | 6188 }} // namespace v8::internal |
OLD | NEW |