source: webkit/trunk/JavaScriptCore/kjs/debugger.cpp@ 28468

Last change on this file since 28468 was 28468, checked in by [email protected], 17 years ago

JavaScriptCore:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and
functions accessing data members from Interpreter to JSGlobalObject.
Changed Interpreter member functions to static functions.


This resolves a bug in global object bootstrapping, where the global
ExecState could be used when uninitialized.


This is a big change, but it's mostly code motion and renaming.


Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports
a .7% regression, but Shark sees no difference related to this patch,
and SunSpider reported a .7% speedup from an earlier step in this
refactoring, so I think it's fair to call that a wash.

JavaScriptGlue:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject. Replaced JSInterpreter
subclass with JSGlobalObject subclass.


  • JSRun.cpp: (JSRun::JSRun): (JSRun::Evaluate): (JSRun::CheckSyntax):
  • JSRun.h: (JSGlueGlobalObject::JSGlueGlobalObject):
  • JSUtils.cpp: (KJSValueToCFTypeInternal):
  • JSValueWrapper.cpp: (getThreadGlobalExecState):

WebCore:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject. Changed Interpreter
member functions to static functions. Same for the subclass,
ScriptInterpreter.


This is a big change, but it's mostly code motion and renaming.

WebKit/mac:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject.


  • WebView/WebFrame.mm: (-[WebFrame _attachScriptDebugger]):

WebKit/win:

Reviewed by Darin Adler.

Third step in refactoring JSGlobalObject: Moved data members and data
member access from Interpreter to JSGlobalObject.


  • WebFrame.cpp: (WebFrame::globalContext): (WebFrame::attachScriptDebugger): (WebFrame::windowObjectCleared):
  • WebScriptDebugger.cpp: (WebScriptDebugger::WebScriptDebugger):
  • Property svn:eol-style set to native
File size: 3.5 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 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 *
21 */
22
23#include "config.h"
24#include "debugger.h"
25#include "ustring.h"
26
27#include "internal.h"
28
29using namespace KJS;
30
31// ------------------------------ Debugger -------------------------------------
32
33namespace KJS {
34 struct AttachedGlobalObject
35 {
36 public:
37 AttachedGlobalObject(JSGlobalObject* o, AttachedGlobalObject* ai) : globalObj(o), next(ai) { ++Debugger::debuggersPresent; }
38 ~AttachedGlobalObject() { --Debugger::debuggersPresent; }
39 JSGlobalObject* globalObj;
40 AttachedGlobalObject* next;
41 };
42
43}
44
45int Debugger::debuggersPresent = 0;
46
47Debugger::Debugger()
48{
49 rep = new DebuggerImp();
50}
51
52Debugger::~Debugger()
53{
54 detach(0);
55 delete rep;
56}
57
58void Debugger::attach(JSGlobalObject* globalObject)
59{
60 Debugger* other = globalObject->debugger();
61 if (other == this)
62 return;
63 if (other)
64 other->detach(globalObject);
65 globalObject->setDebugger(this);
66 rep->globalObjects = new AttachedGlobalObject(globalObject, rep->globalObjects);
67}
68
69void Debugger::detach(JSGlobalObject* globalObj)
70{
71 // iterate the addresses where AttachedGlobalObject pointers are stored
72 // so we can unlink items from the list
73 AttachedGlobalObject **p = &rep->globalObjects;
74 AttachedGlobalObject *q;
75 while ((q = *p)) {
76 if (!globalObj || q->globalObj == globalObj) {
77 *p = q->next;
78 q->globalObj->setDebugger(0);
79 delete q;
80 } else
81 p = &q->next;
82 }
83
84 if (globalObj)
85 latestExceptions.remove(globalObj);
86 else
87 latestExceptions.clear();
88}
89
90bool Debugger::hasHandledException(ExecState *exec, JSValue *exception)
91{
92 if (latestExceptions.get(exec->dynamicGlobalObject()).get() == exception)
93 return true;
94
95 latestExceptions.set(exec->dynamicGlobalObject(), exception);
96 return false;
97}
98
99bool Debugger::sourceParsed(ExecState*, int /*sourceId*/, const UString &/*sourceURL*/,
100 const UString &/*source*/, int /*startingLineNumber*/, int /*errorLine*/, const UString & /*errorMsg*/)
101{
102 return true;
103}
104
105bool Debugger::sourceUnused(ExecState*, int /*sourceId*/)
106{
107 return true;
108}
109
110bool Debugger::exception(ExecState*, int /*sourceId*/, int /*lineno*/,
111 JSValue* /*exception */)
112{
113 return true;
114}
115
116bool Debugger::atStatement(ExecState*, int /*sourceId*/, int /*firstLine*/,
117 int /*lastLine*/)
118{
119 return true;
120}
121
122bool Debugger::callEvent(ExecState*, int /*sourceId*/, int /*lineno*/,
123 JSObject* /*function*/, const List &/*args*/)
124{
125 return true;
126}
127
128bool Debugger::returnEvent(ExecState*, int /*sourceId*/, int /*lineno*/,
129 JSObject* /*function*/)
130{
131 return true;
132}
133
Note: See TracBrowser for help on using the repository browser.