1 // -*- c-basic-offset: 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.
29 #include "interpreter.h"
32 #include "scope_chain.h"
36 #include <wtf/Noncopyable.h>
39 #define I18N_NOOP(s) s
45 // ---------------------------------------------------------------------------
47 // ---------------------------------------------------------------------------
49 class StringImp
: public JSCell
{
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;
69 class NumberImp
: public JSCell
{
70 friend class ConstantValues
;
71 friend KJS_EXPORT JSValue
*jsNumberCell(double);
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;
84 NumberImp(double v
) : val(v
) { }
86 virtual bool getUInt32(uint32_t&) const;
91 // ---------------------------------------------------------------------------
93 // ---------------------------------------------------------------------------
95 struct AttachedInterpreter
;
104 void abort() { isAborted
= true; }
105 bool aborted() const { return isAborted
; }
107 AttachedInterpreter
*interps
;
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
);
120 void printInfo(ExecState
*exec
, const char *s
, JSValue
*, int lineno
= -1);