adapt wc/r24255/#14395/ by Mitz Pettel <mitz@webkit.org>
[kdelibs.git] / kjs / internal.h
blob44046c4f0a07459ffcacefa0e19bd0f941c3e79d
1 // -*- c-basic-offset: 2 -*-
2 /*
3 * This file is part of the KDE libraries
4 * Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
5 * Copyright (C) 2001 Peter Kelly (pmk@post.com)
6 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public License
19 * along with this library; see the file COPYING.LIB. If not, write to
20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
25 #ifndef INTERNAL_H
26 #define INTERNAL_H
28 #include "JSType.h"
29 #include "interpreter.h"
30 #include "object.h"
31 #include "protect.h"
32 #include "scope_chain.h"
33 #include "types.h"
34 #include "ustring.h"
36 #include <wtf/Noncopyable.h>
38 #ifndef I18N_NOOP
39 #define I18N_NOOP(s) s
40 #endif
42 namespace KJS {
45 // ---------------------------------------------------------------------------
46 // Primitive impls
47 // ---------------------------------------------------------------------------
49 class StringImp : public JSCell {
50 public:
51 StringImp() : val(UString::empty) { }
52 StringImp(const UString& v) : val(v) { }
53 StringImp(const char* v) : val(v) { }
54 StringImp(const char* v, int len) : val(v, len) { }
55 const UString& value() const { return val; }
57 JSType type() const { return StringType; }
59 JSValue *toPrimitive(ExecState *exec, JSType preferred = UnspecifiedType) const;
60 bool toBoolean(ExecState *exec) const;
61 double toNumber(ExecState *exec) const;
62 UString toString(ExecState *exec) const;
63 JSObject *toObject(ExecState *exec) const;
65 private:
66 UString val;
69 class NumberImp : public JSCell {
70 friend class ConstantValues;
71 friend KJS_EXPORT JSValue *jsNumberCell(double);
72 public:
73 double value() const { return val; }
75 JSType type() const { return NumberType; }
77 JSValue *toPrimitive(ExecState *exec, JSType preferred = UnspecifiedType) const;
78 bool toBoolean(ExecState *exec) const;
79 double toNumber(ExecState *exec) const;
80 UString toString(ExecState *exec) const;
81 JSObject *toObject(ExecState *exec) const;
83 private:
84 NumberImp(double v) : val(v) { }
86 virtual bool getUInt32(uint32_t&) const;
88 double val;
91 // ---------------------------------------------------------------------------
92 // Evaluation
93 // ---------------------------------------------------------------------------
95 struct AttachedInterpreter;
96 class DebuggerImp {
97 public:
99 DebuggerImp() {
100 interps = 0;
101 isAborted = false;
104 void abort() { isAborted = true; }
105 bool aborted() const { return isAborted; }
107 AttachedInterpreter *interps;
108 bool isAborted;
111 // helper function for toInteger, toInt32, toUInt32 and toUInt16
112 double roundValue(double d);
113 inline double roundValue(ExecState *e, JSValue *v) { return roundValue(v->toNumber(e)); }
115 int32_t toInt32(double dd);
116 uint32_t toUInt32(double dd);
117 uint16_t toUInt16(double dd);
119 #ifndef NDEBUG
120 void printInfo(ExecState *exec, const char *s, JSValue *, int lineno = -1);
121 #endif
123 } // namespace
125 #endif // INTERNAL_H