Build fix: added some #includes.
[WebKit-https.git] / JavaScriptCore / kjs / JSImmediate.cpp
1 /*
2  *  This file is part of the KDE libraries
3  *  Copyright (C) 2003-2006 Apple Computer, Inc
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Library General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Library General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Library General Public License
16  *  along with this library; see the file COPYING.LIB.  If not, write to
17  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  *  Boston, MA 02110-1301, USA.
19  *
20  */
21
22 #include "config.h"
23 #include "JSImmediate.h"
24
25 #include "JSGlobalObject.h"
26 #include "object.h"
27
28 namespace KJS {
29
30 JSObject *JSImmediate::toObject(const JSValue *v, ExecState *exec)
31 {
32     ASSERT(isImmediate(v));
33     if (v == jsNull())
34         return throwError(exec, TypeError, "Null value");
35     else if (v == jsUndefined())
36         return throwError(exec, TypeError, "Undefined value");
37     else if (isBoolean(v)) {
38         List args;
39         args.append(const_cast<JSValue *>(v));
40         return exec->lexicalGlobalObject()->booleanConstructor()->construct(exec, args);
41     } else {
42         ASSERT(isNumber(v));
43         List args;
44         args.append(const_cast<JSValue *>(v));
45         return exec->lexicalGlobalObject()->numberConstructor()->construct(exec, args);
46     }
47 }
48
49 UString JSImmediate::toString(const JSValue *v)
50 {
51     ASSERT(isImmediate(v));
52     
53     if (v == jsNull())
54         return "null";
55     else if (v == jsUndefined())
56         return "undefined";
57     else if (v == jsBoolean(true))
58         return "true";
59     else if (v == jsBoolean(false))
60         return "false";
61     else {
62         ASSERT(isNumber(v));
63         double d = toDouble(v);
64         if (d == 0.0) // +0.0 or -0.0
65             return "0";
66         return UString::from(d);
67     }
68 }
69
70 JSType JSImmediate::type(const JSValue *v)
71 {
72     ASSERT(isImmediate(v));
73     
74     uintptr_t tag = getTag(v);
75     if (tag == UndefinedType)
76         return v == jsUndefined() ? UndefinedType : NullType;
77     return static_cast<JSType>(tag);
78 }
79
80 } // namespace KJS