1ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// Copyright 2011 the V8 project authors. All rights reserved.
2ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// Redistribution and use in source and binary forms, with or without
3ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// modification, are permitted provided that the following conditions are
4ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// met:
5ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//
6ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//     * Redistributions of source code must retain the above copyright
7ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//       notice, this list of conditions and the following disclaimer.
8ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//     * Redistributions in binary form must reproduce the above
9ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//       copyright notice, this list of conditions and the following
10ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//       disclaimer in the documentation and/or other materials provided
11ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//       with the distribution.
12ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//     * Neither the name of Google Inc. nor the names of its
13ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//       contributors may be used to endorse or promote products derived
14ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//       from this software without specific prior written permission.
15ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org//
16ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
28ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org#ifndef V8_V8CONVERSIONS_H_
29ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org#define V8_V8CONVERSIONS_H_
30ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
31ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org#include "conversions.h"
32ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
33ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.orgnamespace v8 {
34ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.orgnamespace internal {
35ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
36ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// Convert from Number object to C integer.
371b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orginline int32_t NumberToInt32(Object* number) {
38ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org  if (number->IsSmi()) return Smi::cast(number)->value();
39ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org  return DoubleToInt32(number->Number());
40ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org}
41ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
42ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
431b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orginline uint32_t NumberToUint32(Object* number) {
44ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org  if (number->IsSmi()) return Smi::cast(number)->value();
45ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org  return DoubleToUint32(number->Number());
46ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org}
47ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
48ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
49ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// Converts a string into a double value according to ECMA-262 9.3.1
50ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.orgdouble StringToDouble(UnicodeCache* unicode_cache,
51ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org                      String* str,
52ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org                      int flags,
53ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org                      double empty_string_val = 0);
54ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
55ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org// Converts a string into an integer.
56ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.orgdouble StringToInt(UnicodeCache* unicode_cache, String* str, int radix);
57ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
58e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org// Converts a number into size_t.
59e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orginline size_t NumberToSize(Isolate* isolate,
60e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org                           Object* number) {
6179e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org  SealHandleScope shs(isolate);
62e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  if (number->IsSmi()) {
63e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    return Smi::cast(number)->value();
64e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  } else {
65e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    ASSERT(number->IsHeapNumber());
66e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    double value = HeapNumber::cast(number)->value();
67e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org    return static_cast<size_t>(value);
68e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org  }
69e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org}
70e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
71ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org} }  // namespace v8::internal
72ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org
73ddda9e81d3175130f2029c0e1205d265a00c32edjkummerow@chromium.org#endif  // V8_V8CONVERSIONS_H_
74