1 /* 2 * Copyright (C) 1999-2002 Harri Porten (porten (at) kde.org) 3 * Copyright (C) 2001 Peter Kelly (pmk (at) post.com) 4 * Copyright (C) 2004, 2007, 2008 Apple Inc. All rights reserved. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Library General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Library General Public License for more details. 15 * 16 * You should have received a copy of the GNU Library General Public License 17 * along with this library; see the file COPYING.LIB. If not, write to 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 * 21 */ 22 23 #include "config.h" 24 #include "JSNumberCell.h" 25 26 #if USE(JSVALUE32) 27 28 #include "NumberObject.h" 29 #include "UString.h" 30 31 namespace JSC { 32 33 JSValue JSNumberCell::toPrimitive(ExecState*, PreferredPrimitiveType) const 34 { 35 return const_cast<JSNumberCell*>(this); 36 } 37 38 bool JSNumberCell::getPrimitiveNumber(ExecState*, double& number, JSValue& value) 39 { 40 number = m_value; 41 value = this; 42 return true; 43 } 44 45 bool JSNumberCell::toBoolean(ExecState*) const 46 { 47 return m_value < 0.0 || m_value > 0.0; // false for NaN 48 } 49 50 double JSNumberCell::toNumber(ExecState*) const 51 { 52 return m_value; 53 } 54 55 UString JSNumberCell::toString(ExecState*) const 56 { 57 return UString::from(m_value); 58 } 59 60 UString JSNumberCell::toThisString(ExecState*) const 61 { 62 return UString::from(m_value); 63 } 64 65 JSObject* JSNumberCell::toObject(ExecState* exec) const 66 { 67 return constructNumber(exec, const_cast<JSNumberCell*>(this)); 68 } 69 70 JSObject* JSNumberCell::toThisObject(ExecState* exec) const 71 { 72 return constructNumber(exec, const_cast<JSNumberCell*>(this)); 73 } 74 75 bool JSNumberCell::getUInt32(uint32_t& uint32) const 76 { 77 uint32 = static_cast<uint32_t>(m_value); 78 return uint32 == m_value; 79 } 80 81 JSValue JSNumberCell::getJSNumber() 82 { 83 return this; 84 } 85 86 JSValue jsNumberCell(ExecState* exec, double d) 87 { 88 return new (exec) JSNumberCell(exec, d); 89 } 90 91 JSValue jsNumberCell(JSGlobalData* globalData, double d) 92 { 93 return new (globalData) JSNumberCell(globalData, d); 94 } 95 96 } // namespace JSC 97 98 #else // USE(JSVALUE32) 99 100 // Keep our exported symbols lists happy. 101 namespace JSC { 102 103 JSValue jsNumberCell(ExecState*, double); 104 105 JSValue jsNumberCell(ExecState*, double) 106 { 107 ASSERT_NOT_REACHED(); 108 return JSValue(); 109 } 110 111 } // namespace JSC 112 113 #endif // USE(JSVALUE32) 114