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