18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block *  Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Lesser General Public
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Lesser General Public License for more details.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Lesser General Public
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License along with this library; if not, write to the Free Software
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef Debugger_h
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define Debugger_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/HashSet.h>
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC {
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class DebuggerCallFrame;
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class ExecState;
31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class JSGlobalData;
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class JSGlobalObject;
33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class JSValue;
34ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    class SourceProvider;
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class UString;
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class Debugger {
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual ~Debugger();
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void attach(JSGlobalObject*);
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        virtual void detach(JSGlobalObject*);
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
44ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        virtual void sourceParsed(ExecState*, SourceProvider*, int errorLineNumber, const UString& errorMessage) = 0;
45d0825bca7fe65beaee391d30da42e937db621564Steve Block        virtual void exception(const DebuggerCallFrame&, intptr_t sourceID, int lineNumber, bool hasHandler) = 0;
46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void atStatement(const DebuggerCallFrame&, intptr_t sourceID, int lineNumber) = 0;
47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void callEvent(const DebuggerCallFrame&, intptr_t sourceID, int lineNumber) = 0;
48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void returnEvent(const DebuggerCallFrame&, intptr_t sourceID, int lineNumber) = 0;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void willExecuteProgram(const DebuggerCallFrame&, intptr_t sourceID, int lineNumber) = 0;
51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void didExecuteProgram(const DebuggerCallFrame&, intptr_t sourceID, int lineNumber) = 0;
52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void didReachBreakpoint(const DebuggerCallFrame&, intptr_t sourceID, int lineNumber) = 0;
53231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void recompileAllJSFunctions(JSGlobalData*);
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        HashSet<JSGlobalObject*> m_globalObjects;
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    // This function exists only for backwards compatibility with existing WebScriptDebugger clients.
615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    JSValue evaluateInGlobalCallFrame(const UString&, JSValue& exception, JSGlobalObject*);
62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace JSC
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // Debugger_h
66