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:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@14834 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/JavaScriptCore/kjs/ExecState.h b/JavaScriptCore/kjs/ExecState.h
new file mode 100644
index 0000000..7a6f0cc
--- /dev/null
+++ b/JavaScriptCore/kjs/ExecState.h
@@ -0,0 +1,85 @@
+/*
+ * This file is part of the KDE libraries
+ * Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
+ * Copyright (C) 2001 Peter Kelly (pmk@post.com)
+ * Copyright (C) 2003 Apple Computer, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ExecState_H
+#define ExecState_H
+
+#include "value.h"
+#include "types.h"
+
+namespace KJS {
+ class Context;
+
+ /**
+ * Represents the current state of script execution. This object allows you
+ * obtain a handle the interpreter that is currently executing the script,
+ * and also the current execution context.
+ */
+ class ExecState {
+ friend class Interpreter;
+ friend class FunctionImp;
+ friend class RuntimeMethodImp;
+ friend class GlobalFuncImp;
+ public:
+ /**
+ * Returns the interpreter associated with this execution state
+ *
+ * @return The interpreter executing the script
+ */
+ Interpreter* dynamicInterpreter() const { return m_interpreter; }
+
+ /**
+ * Returns the interpreter associated with the current scope's
+ * global object
+ *
+ * @return The interpreter currently in scope
+ */
+ Interpreter* lexicalInterpreter() const;
+
+ /**
+ * Returns the execution context associated with this execution state
+ *
+ * @return The current execution state context
+ */
+ Context* context() const { return m_context; }
+
+ void setException(JSValue* e) { m_exception = e; }
+ void clearException() { m_exception = 0; }
+ JSValue* exception() const { return m_exception; }
+ bool hadException() const { return m_exception; }
+
+ private:
+ ExecState(Interpreter* interp, Context* con)
+ : m_interpreter(interp)
+ , m_context(con)
+ , m_exception(0)
+ {
+ }
+ Interpreter* m_interpreter;
+ Context* m_context;
+ JSValue* m_exception;
+ };
+
+} // namespace KJS
+
+#endif // ExecState_H