11b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org// Copyright 2011 the V8 project authors. All rights reserved. 243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Redistribution and use in source and binary forms, with or without 343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// modification, are permitted provided that the following conditions are 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// met: 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions of source code must retain the above copyright 743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// notice, this list of conditions and the following disclaimer. 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Redistributions in binary form must reproduce the above 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// copyright notice, this list of conditions and the following 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// disclaimer in the documentation and/or other materials provided 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// with the distribution. 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// * Neither the name of Google Inc. nor the names of its 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// contributors may be used to endorse or promote products derived 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// from this software without specific prior written permission. 1543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 1643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_CHAR_PREDICATES_INL_H_ 2943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_CHAR_PREDICATES_INL_H_ 3043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#include "char-predicates.h" 3243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 3471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 3543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 373cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org// If c is in 'A'-'Z' or 'a'-'z', return its lower-case. 383cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org// Else, return something outside of 'A'-'Z' and 'a'-'z'. 393cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org// Note: it ignores LOCALE. 403cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.orginline int AsciiAlphaToLower(uc32 c) { 413cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org return c | 0x20; 423cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org} 433cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 443cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org 4543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hanseninline bool IsCarriageReturn(uc32 c) { 4643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return c == 0x000D; 4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hanseninline bool IsLineFeed(uc32 c) { 5143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return c == 0x000A; 5243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 5343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 551b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orginline bool IsInRange(int value, int lower_limit, int higher_limit) { 56bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org ASSERT(lower_limit <= higher_limit); 57bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return static_cast<unsigned int>(value - lower_limit) <= 58bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org static_cast<unsigned int>(higher_limit - lower_limit); 59bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org} 60bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 61bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 6243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hanseninline bool IsDecimalDigit(uc32 c) { 6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // ECMA-262, 3rd, 7.8.3 (p 16) 64bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return IsInRange(c, '0', '9'); 6543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hanseninline bool IsHexDigit(uc32 c) { 6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // ECMA-262, 3rd, 7.6 (p 15) 703cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org return IsDecimalDigit(c) || IsInRange(AsciiAlphaToLower(c), 'a', 'f'); 7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orginline bool IsOctalDigit(uc32 c) { 75ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org // ECMA-262, 6th, 7.8.3 76ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org return IsInRange(c, '0', '7'); 77ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org} 78ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 79ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 80ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orginline bool IsBinaryDigit(uc32 c) { 81ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org // ECMA-262, 6th, 7.8.3 82ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org return c == '0' || c == '1'; 83ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org} 84ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 85ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 86a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orginline bool IsRegExpWord(uc16 c) { 873cdd9e13bac71e7c5b63da6962f8d30f6622db14kmillikin@chromium.org return IsInRange(AsciiAlphaToLower(c), 'a', 'z') 88bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org || IsDecimalDigit(c) 89a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org || (c == '_'); 90a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 91a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 92a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 93a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orginline bool IsRegExpNewline(uc16 c) { 94a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org switch (c) { 95a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org // CR LF LS PS 96a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org case 0x000A: case 0x000D: case 0x2028: case 0x2029: 97a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return false; 98a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org default: 99a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return true; 100a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org } 101a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 102a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 103a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 10443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} } // namespace v8::internal 10543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif // V8_CHAR_PREDICATES_INL_H_ 107