source: webkit/trunk/JavaScriptCore/kjs/internal.h@ 14834

Last change on this file since 14834 was 14834, checked in by ggaren, 19 years ago

JavaScriptCore:

Reviewed by TimO, Maciej.


  • Merged InterpreterImp code into Interpreter, which implements all interpreter functionality now. This is part of my continuing quest to create an external notion of JS "execution context" that is unified and simple -- something to replace the mix of Context, ContextImp, ExecState, Interpreter, InterpreterImp, and JSRun.


All tests pass. Leaks test has not regressed from its baseline ~207 leaks
with ~3460 leaked nodes.

  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • bindings/NP_jsobject.cpp:
  • bindings/objc/WebScriptObject.mm: (+[WebScriptObject throwException:]):
  • bindings/runtime_root.cpp:
  • bindings/runtime_root.h:
  • kjs/Context.cpp: (KJS::Context::Context):
  • kjs/ExecState.cpp: Added. (KJS::ExecState::lexicalInterpreter):
  • kjs/ExecState.h: Added. (KJS::ExecState::dynamicInterpreter):
  • kjs/SavedBuiltins.h: Added.
  • kjs/bool_object.cpp: (BooleanPrototype::BooleanPrototype):
  • kjs/collector.cpp: (KJS::Collector::collect): (KJS::Collector::numInterpreters):
  • kjs/context.h:
  • kjs/debugger.cpp: (Debugger::attach): (Debugger::detach):
  • kjs/function.cpp: (KJS::FunctionImp::callAsFunction): (KJS::GlobalFuncImp::callAsFunction):
  • kjs/function_object.cpp: (FunctionObjectImp::construct):
  • kjs/internal.cpp:
  • kjs/internal.h:
  • kjs/interpreter.cpp: (KJS::interpreterMap): (KJS::Interpreter::Interpreter): (KJS::Interpreter::init): (KJS::Interpreter::~Interpreter): (KJS::Interpreter::globalObject): (KJS::Interpreter::initGlobalObject): (KJS::Interpreter::globalExec): (KJS::Interpreter::checkSyntax): (KJS::Interpreter::evaluate): (KJS::Interpreter::builtinObject): (KJS::Interpreter::builtinFunction): (KJS::Interpreter::builtinArray): (KJS::Interpreter::builtinBoolean): (KJS::Interpreter::builtinString): (KJS::Interpreter::builtinNumber): (KJS::Interpreter::builtinDate): (KJS::Interpreter::builtinRegExp): (KJS::Interpreter::builtinError): (KJS::Interpreter::builtinObjectPrototype): (KJS::Interpreter::builtinFunctionPrototype): (KJS::Interpreter::builtinArrayPrototype): (KJS::Interpreter::builtinBooleanPrototype): (KJS::Interpreter::builtinStringPrototype): (KJS::Interpreter::builtinNumberPrototype): (KJS::Interpreter::builtinDatePrototype): (KJS::Interpreter::builtinRegExpPrototype): (KJS::Interpreter::builtinErrorPrototype): (KJS::Interpreter::builtinEvalError): (KJS::Interpreter::builtinRangeError): (KJS::Interpreter::builtinReferenceError): (KJS::Interpreter::builtinSyntaxError): (KJS::Interpreter::builtinTypeError): (KJS::Interpreter::builtinURIError): (KJS::Interpreter::builtinEvalErrorPrototype): (KJS::Interpreter::builtinRangeErrorPrototype): (KJS::Interpreter::builtinReferenceErrorPrototype): (KJS::Interpreter::builtinSyntaxErrorPrototype): (KJS::Interpreter::builtinTypeErrorPrototype): (KJS::Interpreter::builtinURIErrorPrototype): (KJS::Interpreter::mark): (KJS::Interpreter::interpreterWithGlobalObject): (KJS::Interpreter::saveBuiltins): (KJS::Interpreter::restoreBuiltins):
  • kjs/interpreter.h: (KJS::Interpreter::setCompatMode): (KJS::Interpreter::compatMode): (KJS::Interpreter::firstInterpreter): (KJS::Interpreter::nextInterpreter): (KJS::Interpreter::prevInterpreter): (KJS::Interpreter::debugger): (KJS::Interpreter::setDebugger): (KJS::Interpreter::setContext): (KJS::Interpreter::context):
  • kjs/nodes.cpp: (StatementNode::hitStatement): (RegExpNode::evaluate):
  • kjs/protect.h:

JavaScriptGlue:

Reviewed by TimO, Maciej.


  • JSGlue part of merging InterpreterImp into Interpreter.


Since there's now a kjs forwarding header, I moved all forwarding
headers into a "ForwardingHeaders" directory, like in WebCore.

  • ForwardingHeaders: Added.
  • ForwardingHeaders/kjs: Added.
  • ForwardingHeaders/kjs/ExecState.h: Added.
  • ForwardingHeaders/wtf: Added.
  • JavaScriptGlue.xcodeproj/project.pbxproj:
  • config.h:
  • wtf: Removed.
  • wtf/AlwaysInline.h: Removed.
  • wtf/Assertions.h: Removed.
  • wtf/FastMalloc.h: Removed.
  • wtf/Forward.h: Removed.
  • wtf/HashCountedSet.h: Removed.
  • wtf/HashSet.h: Removed.
  • wtf/Noncopyable.h: Removed.
  • wtf/OwnArrayPtr.h: Removed.
  • wtf/OwnPtr.h: Removed.
  • wtf/PassRefPtr.h: Removed.
  • wtf/Platform.h: Removed.
  • wtf/RefPtr.h: Removed.
  • wtf/Vector.h: Removed.

WebCore:

Reviewed by TimO, Maciej.

  • WebCore part of merging InterpreterImp into Interpreter. No test because there's no behavior change.


A substantive change here is that ScriptInterpreter::mark must now chain to
Interpreter::mark, since Interpreter needs to mark the things that
InterpreterImp used to mark.


  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/kjs_binding.cpp:
  • bindings/js/kjs_window.cpp: (KJS::Window::put):
  • bridge/mac/WebCoreFrameBridge.mm:
  • bridge/mac/WebCoreScriptDebugger.mm: (-[WebCoreScriptCallFrame evaluateWebScript:]):
  • kwq/KWQPageState.mm:
  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1// -*- c-basic-offset: 2 -*-
2/*
3 * This file is part of the KDE libraries
4 * Copyright (C) 1999-2001 Harri Porten ([email protected])
5 * Copyright (C) 2001 Peter Kelly ([email protected])
6 * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
7 *
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.
12 *
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.
17 *
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.
22 *
23 */
24
25#ifndef INTERNAL_H
26#define INTERNAL_H
27
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"
35
36#include <wtf/Noncopyable.h>
37
38#define I18N_NOOP(s) s
39
40namespace KJS {
41
42 class FunctionPrototype;
43
44 // ---------------------------------------------------------------------------
45 // Primitive impls
46 // ---------------------------------------------------------------------------
47
48 class StringImp : public JSCell {
49 public:
50 StringImp(const UString& v) : val(v) { }
51 UString value() const { return val; }
52
53 JSType type() const { return StringType; }
54
55 JSValue *toPrimitive(ExecState *exec, JSType preferred = UnspecifiedType) const;
56 bool toBoolean(ExecState *exec) const;
57 double toNumber(ExecState *exec) const;
58 UString toString(ExecState *exec) const;
59 JSObject *toObject(ExecState *exec) const;
60
61 private:
62 UString val;
63 };
64
65 class NumberImp : public JSCell {
66 friend class ConstantValues;
67 friend JSValue *jsNumberCell(double);
68 public:
69 double value() const { return val; }
70
71 JSType type() const { return NumberType; }
72
73 JSValue *toPrimitive(ExecState *exec, JSType preferred = UnspecifiedType) const;
74 bool toBoolean(ExecState *exec) const;
75 double toNumber(ExecState *exec) const;
76 UString toString(ExecState *exec) const;
77 JSObject *toObject(ExecState *exec) const;
78
79 private:
80 NumberImp(double v) : val(v) { }
81
82 virtual bool getUInt32(uint32_t&) const;
83
84 double val;
85 };
86
87
88 /**
89 * @short The "label set" in Ecma-262 spec
90 */
91 class LabelStack : Noncopyable {
92 public:
93 LabelStack()
94 : tos(0)
95 {
96 }
97 ~LabelStack();
98
99 /**
100 * If id is not empty and is not in the stack already, puts it on top of
101 * the stack and returns true, otherwise returns false
102 */
103 bool push(const Identifier &id);
104 /**
105 * Is the id in the stack?
106 */
107 bool contains(const Identifier &id) const;
108 /**
109 * Removes from the stack the last pushed id (what else?)
110 */
111 void pop();
112
113 private:
114 struct StackElem {
115 Identifier id;
116 StackElem *prev;
117 };
118
119 StackElem *tos;
120 };
121
122
123 // ---------------------------------------------------------------------------
124 // Evaluation
125 // ---------------------------------------------------------------------------
126
127 enum CodeType { GlobalCode,
128 EvalCode,
129 FunctionCode,
130 AnonymousCode };
131
132 class AttachedInterpreter;
133 class DebuggerImp {
134 public:
135
136 DebuggerImp() {
137 interps = 0;
138 isAborted = false;
139 }
140
141 void abort() { isAborted = true; }
142 bool aborted() const { return isAborted; }
143
144 AttachedInterpreter *interps;
145 bool isAborted;
146 };
147
148 class InternalFunctionImp : public JSObject {
149 public:
150 InternalFunctionImp();
151 InternalFunctionImp(FunctionPrototype*);
152 InternalFunctionImp(FunctionPrototype*, const Identifier&);
153
154 virtual bool implementsCall() const;
155 virtual JSValue* callAsFunction(ExecState*, JSObject* thisObjec, const List& args) = 0;
156 virtual bool implementsHasInstance() const;
157 virtual bool hasInstance(ExecState*, JSValue*);
158
159 virtual const ClassInfo* classInfo() const { return &info; }
160 static const ClassInfo info;
161 const Identifier& functionName() const { return m_name; }
162
163 private:
164 Identifier m_name;
165 };
166
167 // helper function for toInteger, toInt32, toUInt32 and toUInt16
168 double roundValue(ExecState *, JSValue *);
169
170#ifndef NDEBUG
171 void printInfo(ExecState *exec, const char *s, JSValue *, int lineno = -1);
172#endif
173
174inline LabelStack::~LabelStack()
175{
176 StackElem *prev;
177 for (StackElem *e = tos; e; e = prev) {
178 prev = e->prev;
179 delete e;
180 }
181}
182
183inline void LabelStack::pop()
184{
185 if (StackElem *e = tos) {
186 tos = e->prev;
187 delete e;
188 }
189}
190
191} // namespace
192
193#endif // INTERNAL_H
Note: See TracBrowser for help on using the repository browser.