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