[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Refactoring mi.core.cdi
|
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.54
diff -u -r1.54 ChangeLog
--- ChangeLog 8 Jan 2003 17:46:57 -0000 1.54
+++ ChangeLog 9 Jan 2003 03:43:50 -0000
@@ -1,7 +1,17 @@
2003-01-08 Alain Magloire
+ Refactoring, split the org.eclipse.cdt.debug.mi.core.cdi in pacackages
+ org.eclipse.cdt.debug.mi.core.cdi
+ org.eclipse.cdt.debug.mi.core.cdi.event
+ org.eclipse.cdt.debug.mi.core.cdi.model
+ This help structure things up.
+ * src/.../mi/core/cdi/event: New files.
+ * src/.../mi/core/cdi/model: New files.
+
+2003-01-08 Alain Magloire
+
* src/.../mi/core/cdi/EventManager.java (update): bug fix
- was calling DestroedEvent() incorrectly.
+ was calling DestroyedEvent() incorrectly.
2003-01-08 Alain Magloire
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Argument.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Argument.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Argument.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Argument.java 26 Aug 2002 05:14:48 -0000 1.5
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,17 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument;
-import org.eclipse.cdt.debug.mi.core.output.MIVar;
-
-/**
- */
-public class Argument extends Variable implements ICDIArgument {
-
- public Argument(StackFrame frame, String name, MIVar var) {
- super(frame, name, var);
- }
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Breakpoint.java 8 Jan 2003 21:33:12 -0000 1.10
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,104 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.ICDICondition;
-import org.eclipse.cdt.debug.core.cdi.ICDILocation;
-import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
-import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
-
-/**
- */
-public class Breakpoint extends CObject implements ICDILocationBreakpoint {
-
- ICDILocation location;
- ICDICondition condition;
- MIBreakpoint miBreakpoint;
- BreakpointManager mgr;
-
- public Breakpoint(BreakpointManager m, MIBreakpoint miBreak) {
- super(m.getCSession().getCTarget());
- miBreakpoint = miBreak;
- mgr = m;
- }
-
- MIBreakpoint getMIBreakpoint() {
- return miBreakpoint;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#getCondition()
- */
- public ICDICondition getCondition() throws CDIException {
- if (condition == null) {
- condition = new Condition(miBreakpoint.getIgnoreCount(),
- miBreakpoint.getWhat());
- }
- return condition;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#getThreadId()
- */
- public String getThreadId() throws CDIException {
- return miBreakpoint.getThreadId();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isEnabled()
- */
- public boolean isEnabled() throws CDIException {
- return miBreakpoint.isEnabled();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isHardware()
- */
- public boolean isHardware() {
- return miBreakpoint.isHardware();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isTemporary()
- */
- public boolean isTemporary() {
- return miBreakpoint.isTemporary();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#setCondition(ICDICondition)
- */
- public void setCondition(ICDICondition condition) throws CDIException {
- if (isEnabled()) {
- mgr.setCondition(this, condition);
- }
- this.condition = condition;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#setEnabled(boolean)
- */
- public void setEnabled(boolean enable) throws CDIException {
- if (enable == false && isEnabled() == true) {
- mgr.disableBreakpoint(this);
- } else if (enable == true && isEnabled() == false) {
- mgr.enableBreakpoint(this);
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDILocationBreakpoint#getLocation()
- */
- public ICDILocation getLocation() throws CDIException {
- if (location == null) {
- location = new Location (miBreakpoint.getFile(),
- miBreakpoint.getFunction(),
- miBreakpoint.getLine(),
- miBreakpoint.getAddress());
- }
- return location;
- }
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java,v
retrieving revision 1.3
diff -u -r1.3 BreakpointHit.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java 8 Jan 2003 21:33:12 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java 9 Jan 2003 03:43:58 -0000
@@ -7,6 +7,7 @@
import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit;
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Breakpoint;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointHitEvent;
/**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java,v
retrieving revision 1.25
diff -u -r1.25 BreakpointManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java 8 Jan 2003 21:33:12 -0000 1.25
+++ src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointManager.java 9 Jan 2003 03:43:57 -0000
@@ -19,6 +19,9 @@
import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Breakpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Watchpoint;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIBreakAfter;
import org.eclipse.cdt.debug.mi.core.command.MIBreakCondition;
@@ -34,8 +37,8 @@
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.output.MIBreakInsertInfo;
import org.eclipse.cdt.debug.mi.core.output.MIBreakListInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
import org.eclipse.cdt.debug.mi.core.output.MIBreakWatchInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
import org.eclipse.cdt.debug.mi.core.output.MIInfo;
/**
@@ -121,7 +124,7 @@
return false;
}
- Breakpoint getBreakpoint(int number) {
+ public Breakpoint getBreakpoint(int number) {
ICDIBreakpoint[] bkpts = listBreakpoints();
for (int i = 0; i < bkpts.length; i++) {
if (bkpts[i] instanceof Breakpoint) {
@@ -230,7 +233,7 @@
mi.fireEvents(events);
}
- Breakpoint deleteBreakpoint (int no) {
+ public Breakpoint deleteBreakpoint (int no) {
Breakpoint point = null;
Breakpoint[] points = (Breakpoint[])delList.toArray(new Breakpoint[delList.size()]);
for (int i = 0; i < points.length; i++) {
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CObject.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/CObject.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/CObject.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CObject.java 5 Dec 2002 16:01:53 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,31 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
-
-/**
- */
-public class CObject implements ICDIObject {
-
- CTarget target;
-
- public CObject(CTarget t) {
- target = t;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIObject#getTarget()
- */
- public ICDITarget getTarget() {
- return target;
- }
-
- public CTarget getCTarget() {
- return target;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CSession.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CSession.java,v
retrieving revision 1.22
diff -u -r1.22 CSession.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CSession.java 5 Dec 2002 16:01:53 -0000 1.22
+++ src/org/eclipse/cdt/debug/mi/core/cdi/CSession.java 9 Jan 2003 03:43:53 -0000
@@ -22,6 +22,7 @@
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIEnvironmentDirectory;
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java 5 Dec 2002 15:59:27 -0000 1.36
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,557 +0,0 @@
-/*
- *(c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.ICDILocation;
-import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject;
-import org.eclipse.cdt.debug.core.cdi.ICDISession;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIGlobalVariable;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister;
-import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary;
-import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIDataEvaluateExpression;
-import org.eclipse.cdt.debug.mi.core.command.MIExecContinue;
-import org.eclipse.cdt.debug.mi.core.command.MIExecFinish;
-import org.eclipse.cdt.debug.mi.core.command.MIExecNext;
-import org.eclipse.cdt.debug.mi.core.command.MIExecNextInstruction;
-import org.eclipse.cdt.debug.mi.core.command.MIExecRun;
-import org.eclipse.cdt.debug.mi.core.command.MIExecStep;
-import org.eclipse.cdt.debug.mi.core.command.MIExecStepInstruction;
-import org.eclipse.cdt.debug.mi.core.command.MIExecUntil;
-import org.eclipse.cdt.debug.mi.core.command.MIInfoThreads;
-import org.eclipse.cdt.debug.mi.core.command.MITargetDetach;
-import org.eclipse.cdt.debug.mi.core.command.MIThreadSelect;
-import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
-import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIInfoThreadsInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIThreadSelectInfo;
-
-/**
- */
-public class CTarget implements ICDITarget {
-
- CSession session;
- CThread[] noThreads = new CThread[0];
- CThread[] currentThreads;
- int currentThreadId;
- int lastExecutionToken;
-
- public CTarget(CSession s) {
- session = s;
- currentThreads = noThreads;
- }
-
- CSession getCSession() {
- return session;
- }
-
- int getLastExecutionToken() {
- return lastExecutionToken;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getSession()
- */
- public ICDISession getSession() {
- return session;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIObject#getTarget()
- */
- public ICDITarget getTarget() {
- return this;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#setCurrentThread(ICDIThread)
- */
- public void setCurrentThread(ICDIThread cthread) throws CDIException {
- if (cthread instanceof CThread) {
- setCurrentThread((CThread)cthread);
- }
- }
-
- /**
- */
- public void setCurrentThread(CThread cthread) throws CDIException {
- session.setCurrentTarget(this);
- int id = cthread.getId();
- // No need to set thread id 0, it is a dummy thread.
- if (id == 0) {
- return;
- }
- // already the current thread?
- if (currentThreadId != id) {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIThreadSelect select = factory.createMIThreadSelect(id);
- try {
- mi.postCommand(select);
- MIThreadSelectInfo info = select.getMIThreadSelectInfo();
- if (info == null) {
- throw new CDIException("No Answer");
- }
- currentThreadId = info.getNewThreadId();
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
-
- // Resetting threads may change the value of
- // some variables like Register. Send an update
- // To generate changeEvents.
- RegisterManager regMgr = session.getRegisterManager();
- regMgr.update();
- }
-
- // We should be allright now.
- if (currentThreadId != id) {
- // thread is gone. Generate a Thread destroyed.
- MISession mi = session.getMISession();
- mi.fireEvent(new MIThreadExitEvent(id));
- throw new CDIException("Thread destroyed");
- }
- }
-
- /**
- * Called when stopping because of breakpoints etc ..
- */
- void updateState(int newThreadId) {
- CThread[] oldThreads = currentThreads;
-
- // If we use "info threads" in getCThreads() this
- // will be overwritten. However if we use -stack-list-threads
- // it does not provide to the current thread
- currentThreadId = newThreadId;
- // get the new Threads.
- CThread[] newThreads = getCThreads();
-
- currentThreads = newThreads;
-
- // Fire destroyedEvent for old threads.
- if (oldThreads != null && oldThreads.length > 0) {
- List dList = new ArrayList(oldThreads.length);
- for (int i = 0; i < oldThreads.length; i++) {
- boolean found = false;
- for (int j = 0; j < newThreads.length; j++) {
- if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
- found = true;
- break;
- }
- }
- if (!found) {
- dList.add(new Integer(oldThreads[i].getId()));
- }
- }
- if (!dList.isEmpty()) {
- MIThreadExitEvent[] events = new MIThreadExitEvent[dList.size()];
- for (int j = 0; j < events.length; j++) {
- int id = ((Integer)dList.get(j)).intValue();
- events[j] = new MIThreadExitEvent(id);
- }
- MISession miSession = session.getMISession();
- miSession.fireEvents(events);
- }
- }
- }
-
- /**
- * Do the real work of call -thread-list-ids.
- */
- public CThread[] getCThreads() { //throws CDIException {
- CThread[] cthreads = noThreads;
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIInfoThreads tids = factory.createMIInfoThreads();
- try {
- // HACK/FIXME: gdb/mi thread-list-ids does not
- // show any newly create thread, we workaround by
- // issuing "info threads" instead.
- //MIThreadListIds tids = factory.createMIThreadListIds();
- //MIThreadListIdsInfo info = tids.getMIThreadListIdsInfo();
- mi.postCommand(tids);
- MIInfoThreadsInfo info = tids.getMIInfoThreadsInfo();
- int [] ids;
- if (info == null) {
- ids = new int[0];
- } else {
- ids = info.getThreadIds();
- }
- if (ids != null && ids.length > 0) {
- cthreads = new CThread[ids.length];
- // Ok that means it is a multiThreaded.
- for (int i = 0; i < ids.length; i++) {
- cthreads[i] = new CThread(this, ids[i]);
- }
- } else {
- // Provide a dummy.
- cthreads = new CThread[]{new CThread(this, 0)};
- }
- currentThreadId = info.getCurrentThread();
- } catch (MIException e) {
- // Do not throw anything in this case.
- //throw new CDIException(e.getMessage());
- }
- return cthreads;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getCurrentThread()
- */
- public ICDIThread getCurrentThread() throws CDIException {
- ICDIThread[] threads = getThreads();
- for (int i = 0; i < threads.length; i++) {
- CThread cthread = (CThread)threads[i];
- if (cthread.getId() == currentThreadId) {
- return cthread;
- }
- }
- return null;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getThreads()
- */
- public ICDIThread[] getThreads() throws CDIException {
- if (currentThreads.length == 0) {
- currentThreads = getCThreads();
- }
- return currentThreads;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#restart()
- */
- public void restart() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIExecRun run = factory.createMIExecRun(new String[0]);
- try {
- mi.postCommand(run);
- MIInfo info = run.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = run.getToken();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#resume()
- */
- public void resume() throws CDIException {
- MISession mi = session.getMISession();
- if (mi.getMIInferior().isRunning()) {
- throw new CDIException("Inferior already running");
- } else if (mi.getMIInferior().isSuspended()) {
- CommandFactory factory = mi.getCommandFactory();
- MIExecContinue cont = factory.createMIExecContinue();
- try {
- mi.postCommand(cont);
- MIInfo info = cont.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = cont.getToken();
- } else if (mi.getMIInferior().isTerminated()) {
- restart();
- } else {
- restart();
- //throw new CDIException("Unknow state");
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepInto()
- */
- public void stepInto() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIExecStep step = factory.createMIExecStep();
- try {
- mi.postCommand(step);
- MIInfo info = step.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = step.getToken();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepIntoInstruction()
- */
- public void stepIntoInstruction() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIExecStepInstruction stepi = factory.createMIExecStepInstruction();
- try {
- mi.postCommand(stepi);
- MIInfo info = stepi.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = stepi.getToken();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepOver()
- */
- public void stepOver() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIExecNext next = factory.createMIExecNext();
- try {
- mi.postCommand(next);
- MIInfo info = next.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = next.getToken();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepOverInstruction()
- */
- public void stepOverInstruction() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIExecNextInstruction nexti = factory.createMIExecNextInstruction();
- try {
- mi.postCommand(nexti);
- MIInfo info = nexti.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = nexti.getToken();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepReturn()
- */
- public void stepReturn() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIExecFinish finish = factory.createMIExecFinish();
- try {
- mi.postCommand(finish);
- MIInfo info = finish.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = finish.getToken();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#suspend()
- */
- public void suspend() throws CDIException {
- // send a noop to see if we get an aswer.
- MISession mi = session.getMISession();
- try {
- mi.getMIInferior().interrupt();
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#disconnect()
- */
- public void disconnect() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MITargetDetach detach = factory.createMITargetDetach();
- try {
- mi.postCommand(detach);
- MIInfo info = detach.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- // Unfortunately -target-detach does not generate an
- // event so we do it here.
- MISession miSession = session.getMISession();
- miSession.fireEvent(new MIDetachedEvent(detach.getToken()));
- session.getMISession().getMIInferior().setDisconnected();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#finish()
- */
- public void finish() throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIExecFinish finish = factory.createMIExecFinish();
- try {
- mi.postCommand(finish);
- MIInfo info = finish.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = finish.getToken();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#runUntil(ICDILocation)
- */
- public void runUntil(ICDILocation location) throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- String loc = "";
- if (location.getFile() != null) {
- loc = location.getFile() + ":" + location.getLineNumber();
- } else if (location.getFunction() != null) {
- loc = location.getFunction();
- } else if (location.getAddress() != 0) {
- loc = "" + location.getAddress();
- }
- MIExecUntil until = factory.createMIExecUntil(loc);
- try {
- mi.postCommand(until);
- MIInfo info = until.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- lastExecutionToken = until.getToken();
-
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#evaluateExpressionToString(String)
- */
- public String evaluateExpressionToString(String expressionText)
- throws CDIException {
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIDataEvaluateExpression evaluate =
- factory.createMIDataEvaluateExpression(expressionText);
- try {
- mi.postCommand(evaluate);
- MIDataEvaluateExpressionInfo info =
- evaluate.getMIDataEvaluateExpressionInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- return info.getExpression();
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#terminate()
- */
- public void terminate() throws CDIException {
- session.getMISession().getMIInferior().destroy();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#isTerminated()
- */
- public boolean isTerminated() {
- return session.getMISession().getMIInferior().isTerminated();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#isDisconnected()
- */
- public boolean isDisconnected() {
- return !session.getMISession().getMIInferior().isConnected();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#isSuspended()
- */
- public boolean isSuspended() {
- return session.getMISession().getMIInferior().isSuspended();
- }
-
- public boolean isRunning() {
- return session.getMISession().getMIInferior().isRunning();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getGlobalVariables()
- */
- public ICDIGlobalVariable[] getGlobalVariables() throws CDIException {
- return new ICDIGlobalVariable[0];
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getRegisterObjects()
- */
- public ICDIRegisterObject[] getRegisterObjects() throws CDIException {
- RegisterManager mgr = session.getRegisterManager();
- return mgr.getRegisterObjects();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getRegisters(ICDIRegisterObject[])
- */
- public ICDIRegister[] getRegisters(ICDIRegisterObject[] regs) throws CDIException {
- ICDIRegister[] registers = null;
- RegisterManager mgr = session.getRegisterManager();
- registers = new ICDIRegister[regs.length];
- for (int i = 0; i < registers.length; i++) {
- registers[i] = mgr.createRegister(regs[i]);
- }
- return registers;
- }
-
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getSharedLibraries()
- */
- public ICDISharedLibrary[] getSharedLibraries() throws CDIException {
- return new ICDISharedLibrary[0];
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getProcess()
- */
- public Process getProcess() {
- return session.getMISession().getMIInferior();
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CThread.java 5 Dec 2002 16:00:05 -0000 1.23
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,285 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.ICDILocation;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIStackInfoDepth;
-import org.eclipse.cdt.debug.mi.core.command.MIStackListFrames;
-import org.eclipse.cdt.debug.mi.core.command.MIStackSelectFrame;
-import org.eclipse.cdt.debug.mi.core.output.MIFrame;
-import org.eclipse.cdt.debug.mi.core.output.MIInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIStackInfoDepthInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIStackListFramesInfo;
-
-/**
- */
-public class CThread extends CObject implements ICDIThread {
-
- int id;
- static StackFrame[] noStack = new StackFrame[0];
- StackFrame currentFrame;
-
- public CThread(CTarget target, int threadId) {
- super(target);
- id = threadId;
- }
-
- int getId() {
- return id;
- }
-
- public String toString() {
- return Integer.toString(id);
- }
-
- StackFrame getCurrentStackFrame() throws CDIException {
- if (currentFrame == null) {
- ICDIStackFrame[] frames = getStackFrames(0, 0);
- if (frames.length > 0) {
- currentFrame = (StackFrame)frames[0];
- }
- }
- return currentFrame;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#getStackFrames()
- */
- public ICDIStackFrame[] getStackFrames() throws CDIException {
-
- StackFrame[] stack = noStack;
- CSession session = getCTarget().getCSession();
-
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIStackListFrames frames = factory.createMIStackListFrames();
- try {
- ICDIThread oldThread = getCTarget().getCurrentThread();
- getCTarget().setCurrentThread(this);
- mi.postCommand(frames);
- MIStackListFramesInfo info = frames.getMIStackListFramesInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- MIFrame[] miFrames = info.getMIFrames();
- stack = new StackFrame[miFrames.length];
- for (int i = 0; i < stack.length; i++) {
- stack[i] = new StackFrame(this, miFrames[i]);
- }
- getCTarget().setCurrentThread(oldThread);
- return stack;
- } catch (MIException e) {
- //throw new CDIException(e.getMessage());
- //System.out.println(e);
- } catch (CDIException e) {
- //throw e;
- //System.out.println(e);
- }
- return stack;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#getStackFrames()
- */
- public int getStackFrameCount() throws CDIException {
- CSession session = getCTarget().getCSession();
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIStackInfoDepth depth = factory.createMIStackInfoDepth();
- try {
- ICDIThread oldThread = getCTarget().getCurrentThread();
- getCTarget().setCurrentThread(this);
- mi.postCommand(depth);
- MIStackInfoDepthInfo info = depth.getMIStackInfoDepthInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- getCTarget().setCurrentThread(oldThread);
- return info.getDepth();
- } catch (MIException e) {
- throw new MI2CDIException(e);
- //System.out.println(e);
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#getStackFrames()
- */
- public ICDIStackFrame[] getStackFrames(int low, int high) throws CDIException {
- StackFrame[] stack = noStack;
- CSession session = getCTarget().getCSession();
-
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIStackListFrames frames = factory.createMIStackListFrames(low, high);
- try {
- ICDIThread oldThread = getCTarget().getCurrentThread();
- getCTarget().setCurrentThread(this);
- mi.postCommand(frames);
- MIStackListFramesInfo info = frames.getMIStackListFramesInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- MIFrame[] miFrames = info.getMIFrames();
- stack = new StackFrame[miFrames.length];
- for (int i = 0; i < stack.length; i++) {
- stack[i] = new StackFrame(this, miFrames[i]);
- }
- getCTarget().setCurrentThread(oldThread);
- return stack;
- } catch (MIException e) {
- //throw new CDIException(e.getMessage());
- //System.out.println(e);
- } catch (CDIException e) {
- //throw e;
- //System.out.println(e);
- }
- return stack;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#setCurrentStackFrame(ICDIStackFrame)
- */
- public void setCurrentStackFrame(ICDIStackFrame stackframe) throws CDIException {
- if (stackframe instanceof StackFrame) {
- setCurrentStackFrame((StackFrame)stackframe);
- }
- }
-
- public void setCurrentStackFrame(StackFrame stackframe) throws CDIException {
- CSession session = getCTarget().getCSession();
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- int frameNum = 0;
- if (stackframe != null) {
- frameNum = stackframe.getLevel();
- }
-
- // Check to see if we are already at this level
- StackFrame current = getCurrentStackFrame();
- if (current != null && current.getLevel() == frameNum) {
- // noop
- return;
- }
-
- MIStackSelectFrame frame = factory.createMIStackSelectFrame(frameNum);
- try {
- // Set ourself as the current thread first.
- getCTarget().setCurrentThread(this);
- mi.postCommand(frame);
- MIInfo info = frame.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- currentFrame = stackframe;
-
- // Resetting threads may change the value of
- // some variables like Register. Send an update
- // To generate changeEvents.
- RegisterManager regMgr = session.getRegisterManager();
- regMgr.update();
-
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#isSuspended()
- */
- public boolean isSuspended() {
- return getTarget().isSuspended();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#finish()
- */
- public void finish() throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().finish();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#resume()
- */
- public void resume() throws CDIException {
- getTarget().resume();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepInto()
- */
- public void stepInto() throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().stepInto();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepIntoInstruction()
- */
- public void stepIntoInstruction() throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().stepIntoInstruction();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepOver()
- */
- public void stepOver() throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().stepOver();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepOverInstruction()
- */
- public void stepOverInstruction() throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().stepOverInstruction();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepReturn()
- */
- public void stepReturn() throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().stepReturn();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#runUntil(ICDILocation)
- */
- public void runUntil(ICDILocation location) throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().runUntil(location);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#suspend()
- */
- public void suspend() throws CDIException {
- getCTarget().setCurrentThread(this);
- getTarget().suspend();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#equals(ICDIThread)
- */
- public boolean equals(ICDIThread thread) {
- if (thread instanceof CThread) {
- CThread cthread = (CThread) thread;
- return id == cthread.getId();
- }
- return super.equals(thread);
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Catchpoint.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Catchpoint.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Catchpoint.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Catchpoint.java 8 Jan 2003 21:33:12 -0000 1.4
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,26 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.ICDICatchEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDICatchpoint;
-import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
-
-/**
- */
-public class Catchpoint extends Breakpoint implements ICDICatchpoint {
-
- public Catchpoint(BreakpointManager m, MIBreakpoint miBreak) {
- super(m, miBreak);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDICatchpoint#getEvent()
- */
- public ICDICatchEvent getEvent() throws CDIException {
- return null;
- }
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/ChangedEvent.java 8 Jan 2003 21:33:12 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,74 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.mi.core.event.MIBreakpointChangedEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
-
-/**
- */
-public class ChangedEvent implements ICDIChangedEvent {
-
- CSession session;
- ICDIObject source;
-
- public ChangedEvent(CSession s, MIVarChangedEvent var) {
- session = s;
- VariableManager mgr = session.getVariableManager();
- String varName = var.getVarName();
- VariableManager.Element element = mgr.getElement(varName);
- if (element != null && element.variable != null) {
- source = element.variable;
- } else {
- source = new CObject(session.getCTarget());
- }
- }
-
- public ChangedEvent(CSession s, MIRegisterChangedEvent var) {
- session = s;
- RegisterManager mgr = session.getRegisterManager();
- int regno = var.getNumber();
- Register reg = null;
- try {
- reg = mgr.getRegister(regno);
- } catch (CDIException e) {
- }
- if (reg != null) {
- source = reg;
- } else {
- source = new CObject(session.getCTarget());
- }
- }
-
- public ChangedEvent(CSession s, MIBreakpointChangedEvent bpoint) {
- session = s;
- BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
- int number = bpoint.getNumber();
- ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
- if (breakpoint != null) {
- source = breakpoint;
- } else {
- source = new CObject(session.getCTarget());
- }
- }
-
- public ChangedEvent(CSession s, ICDIObject src) {
- session = s;
- source = src;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- return source;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CreatedEvent.java 8 Jan 2003 21:33:12 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,43 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
-
-/**
- */
-public class CreatedEvent implements ICDICreatedEvent {
-
- CSession session;
- ICDIObject source;
-
- public CreatedEvent(CSession s, MIBreakpointCreatedEvent bpoint) {
- session = s;
- BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
- int number = bpoint.getNumber();
- ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
- if (breakpoint != null) {
- source = breakpoint;
- } else {
- source = new CObject(session.getCTarget());
- }
- }
-
- public CreatedEvent(CSession s, ICDIObject src) {
- session = s;
- source = src;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- return source;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/DestroyedEvent.java 8 Jan 2003 21:33:12 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,66 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.mi.core.event.MIBreakpointDeletedEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
-
-/**
- */
-public class DestroyedEvent implements ICDIDestroyedEvent {
-
- CSession session;
- ICDIObject source;
-
- public DestroyedEvent(CSession s, MIThreadExitEvent ethread) {
- session = s;
- source = new CThread(session.getCTarget(), ethread.getId());
- }
-
- public DestroyedEvent(CSession s, MIVarChangedEvent var) {
- session = s;
- VariableManager mgr = session.getVariableManager();
- String varName = var.getVarName();
- VariableManager.Element element = mgr.removeOutOfScope(varName);
- if (element != null && element.variable != null) {
- source = element.variable;
- } else {
- source = new CObject(session.getCTarget());
- }
- }
-
- public DestroyedEvent(CSession s, MIBreakpointDeletedEvent bpoint) {
- session = s;
- BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
- int number = bpoint.getNumber();
- Breakpoint breakpoint = mgr.deleteBreakpoint(number);
- if (breakpoint != null) {
- source = breakpoint;
- } else {
- source = new CObject(session.getCTarget());
- }
- }
-
- public DestroyedEvent(CSession s, ICDIObject src) {
- session = s;
- source = src;
- }
-
- public DestroyedEvent(CSession s) {
- session = s;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- return source;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/DisconnectedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/DisconnectedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/DisconnectedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/DisconnectedEvent.java 27 Sep 2002 19:22:51 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,23 +0,0 @@
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.event.ICDIDisconnectedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-
-/**
- */
-public class DisconnectedEvent implements ICDIDisconnectedEvent {
-
- ICDIObject source;
-
- public DisconnectedEvent(CSession session) {
- source = (ICDIObject)session.getCTarget();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core..ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- return source;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java,v
retrieving revision 1.29
diff -u -r1.29 EventManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 8 Jan 2003 21:33:12 -0000 1.29
+++ src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 9 Jan 2003 03:43:59 -0000
@@ -15,6 +15,15 @@
import org.eclipse.cdt.debug.core.cdi.ICDIEventManager;
import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
+import org.eclipse.cdt.debug.mi.core.cdi.event.ChangedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.event.CreatedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.event.DestroyedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.event.DisconnectedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.event.ExitedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.event.MemoryChangedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.event.ResumedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.event.SuspendedEvent;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointDeletedEvent;
Index: src/org/eclipse/cdt/debug/mi/core/cdi/ExitedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/ExitedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/ExitedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/ExitedEvent.java 5 Oct 2002 19:47:00 -0000 1.5
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,39 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.ICDIExitInfo;
-import org.eclipse.cdt.debug.core.cdi.event.ICDIExitedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
-
-/**
- */
-public class ExitedEvent implements ICDIExitedEvent {
-
- MIInferiorExitEvent event;
- CSession session;
-
- public ExitedEvent(CSession s, MIInferiorExitEvent e) {
- session = s;
- event = e;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIExitedEvent#getExitInfo()
- */
- public ICDIExitInfo getExitInfo() {
- return new ExitInfo(session, event);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- return session.getCurrentTarget();
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Expression.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Expression.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Expression.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Expression.java 26 Aug 2002 05:16:43 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,18 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
-import org.eclipse.cdt.debug.mi.core.output.MIVar;
-
-/**
- */
-public class Expression extends Variable implements ICDIExpression {
-
- public Expression(StackFrame stackframe, String name, MIVar var) {
- super(stackframe, name, var);
- }
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Instruction.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Instruction.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Instruction.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Instruction.java 12 Oct 2002 01:22:05 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,49 +0,0 @@
-/*
- *(c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
-import org.eclipse.cdt.debug.mi.core.output.MIAsm;
-
-/**
- */
-public class Instruction extends CObject implements ICDIInstruction {
-
- MIAsm asm;
-
- public Instruction(CTarget target, MIAsm a) {
- super(target);
- asm = a;
- }
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getAdress()
- */
- public long getAdress() {
- return asm.getAddress();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getFuntionName()
- */
- public String getFuntionName() {
- return asm.getFunction();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getInstruction()
- */
- public String getInstruction() {
- return asm.getInstruction();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getOffset()
- */
- public long getOffset() {
- return asm.getOffset();
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java,v
retrieving revision 1.12
diff -u -r1.12 MemoryBlock.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java 5 Dec 2002 15:59:36 -0000 1.12
+++ src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java 9 Jan 2003 03:43:56 -0000
@@ -8,6 +8,8 @@
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MIFormat;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIDataWriteMemory;
import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryChangedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryChangedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/MemoryChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryChangedEvent.java 19 Oct 2002 19:20:11 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,50 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
-
-/**
- */
-public class MemoryChangedEvent implements ICDIMemoryChangedEvent {
-
- CSession session;
- MemoryBlock source;
- MIMemoryChangedEvent miMem;
-
- public MemoryChangedEvent(CSession s, MemoryBlock block, MIMemoryChangedEvent mem) {
- session = s;
- source = block;
- miMem = mem;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getAddresses()
- */
- public Long[] getAddresses() {
- /* But only returns the address that are in the block. */
- Long[] longs = miMem.getAddresses();
- List aList = new ArrayList(longs.length);
- for (int i = 0; i < longs.length; i++) {
- if (source.contains(longs[i])) {
- aList.add(longs[i]);
- }
- }
- return (Long[])aList.toArray(new Long[0]);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- return source;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MixedInstruction.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/MixedInstruction.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/MixedInstruction.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MixedInstruction.java 12 Oct 2002 01:21:29 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,50 +0,0 @@
-/*
- *(c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction;
-import org.eclipse.cdt.debug.mi.core.output.MIAsm;
-import org.eclipse.cdt.debug.mi.core.output.MISrcAsm;
-
-/**
- */
-public class MixedInstruction extends CObject implements ICDIMixedInstruction {
-
- MISrcAsm srcAsm;
-
- public MixedInstruction (CTarget target, MISrcAsm a) {
- super(target);
- srcAsm = a;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction#getFileName()
- */
- public String getFileName() {
- return srcAsm.getFile();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction#getInstructions()
- */
- public ICDIInstruction[] getInstructions() {
- MIAsm[] asms = srcAsm.getMIAsms();
- ICDIInstruction[] instructions = new ICDIInstruction[asms.length];
- for (int i = 0; i < asms.length; i++) {
- instructions[i] = new Instruction(getCTarget(), asms[i]);
- }
- return instructions;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction#getLineNumber()
- */
- public int getLineNumber() {
- return srcAsm.getLine();
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Register.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Register.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Register.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Register.java 17 Dec 2002 18:57:21 -0000 1.7
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,317 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MIFormat;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterValues;
-import org.eclipse.cdt.debug.mi.core.command.MIDataWriteRegisterValues;
-import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
-import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterValuesInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIRegisterValue;
-
-/**
- */
-public class Register extends CObject implements ICDIRegister, ICDIValue {
-
- RegisterObject regObject;
- int format = MIFormat.HEXADECIMAL;
- Register parent;
- String lastname;
-
- /**
- * A container class to hold the values of the registers and sub values
- * for example on x86, xmm0 register is consider to be a struct
- * gdb/mi -data-list-register-values returns the value like this
- * value="{f = {0x0, 0x0, 0x0, 0x0}}"
- * we'll parse() it and change it to:
- * Argument[0] = { "xmm0", "{f = {0x0, 0x0, 0x0, 0x0}}"
- * Argument[1] = { "xmm0.f", "{0x0, 0x0, 0x0, 0x0}"}
- * Argument[2] = { "xmm0.f.0", "0x0"}
- * Argument[3] = { "xmm0.f.1", "0x0"}
- * Argument[4] = { "xmm0.f.2", "0x0"}
- * Argument[5] = { "xmm0.f.3", "0x0"}
- * see @parse()
- */
- class Argument {
- String name;
- String val;
- Argument(String n, String v) {
- name = n;
- val = v;
- }
- String getKey() {
- return name;
- }
- String getValue() {
- return val;
- }
- }
-
- public Register(CTarget target, ICDIRegisterObject r) {
- super(target);
- parent = null;
- lastname = r.getName();
- regObject = (RegisterObject)r;
- }
-
- public Register(Register p, String n) {
- super(p.getCTarget());
- parent = p;
- lastname = n;
- }
-
- /**
- * return the MI regno.
- */
- public int getId() {
- return regObject.getId();
- }
-
- /**
- * Returns a Unique name separated by '.' to describe the path
- * for example xmm0.f.0
- */
- public String getUniqName() {
- String n = "";
- if (parent != null) {
- n = parent.getUniqName() + "." + getLastName();
- } else {
- n = getLastName();
- }
- return n;
- }
-
- /**
- * Returns the name of the register, for example xmm0.
- */
- public String getBaseName() {
- String base = "";
- if (parent != null) {
- base = parent.getBaseName();
- } else {
- base = getLastName();
- }
- return base;
- }
-
- /**
- * Returns the current name for xmm0.f the last name is "f".
- */
- public String getLastName() {
- return lastname;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getName()
- */
- public String getName() throws CDIException {
- return getLastName();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getTypeName()
- */
- public String getTypeName() throws CDIException {
- String v = getValueString();
- if (v.startsWith("{")) {
- // Use ptype?
- return "struct ";
- }
- return "int";
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getValue()
- */
- public ICDIValue getValue() throws CDIException {
- return this;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getValueString()
- */
- public String getValueString() throws CDIException {
- if (parent == null) {
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- int[] regno = new int[]{regObject.getId()};
- MIDataListRegisterValues registers =
- factory.createMIDataListRegisterValues(format, regno);
- try {
- mi.postCommand(registers);
- MIDataListRegisterValuesInfo info =
- registers.getMIDataListRegisterValuesInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- MIRegisterValue[] regValues = info.getMIRegisterValues();
- // We only ask for one. But do the right thing
- for (int i = 0; i < regValues.length; i++) {
- if (regValues[i].getNumber() == regno[i]) {
- return regValues[i].getValue();
- }
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- } else {
- String u = getUniqName();
- String v = parent.getValueString();
- Argument[] args = parse(parent.getUniqName(), v);
- for (int i = 0; i < args.length; i++) {
- if (u.equals(args[i].getKey())) {
- return args[i].getValue();
- }
- }
- }
- return "";
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#isEditable()
- */
- public boolean isEditable() throws CDIException {
- return false;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(ICDIValue)
- */
- public void setValue(ICDIValue val) throws CDIException {
- setValue(val.getValueString());
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(String)
- */
- public void setValue(String expression) throws CDIException {
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- int[] regnos = new int[]{regObject.getId()};
- String[] values = new String[]{expression};
- MIDataWriteRegisterValues registers =
- factory.createMIDataWriteRegisterValues(format, regnos, values);
- try {
- mi.postCommand(registers);
- MIInfo info = registers.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- // If the assign was succesfull fire a MIRegisterChangedEvent()
- MIRegisterChangedEvent change = new MIRegisterChangedEvent(registers.getToken(),
- regObject.getName(), regObject.getId());
- mi.fireEvent(change);
-
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setFormat()
- */
- public void setFormat(int fmt) throws CDIException {
- format = Format.toMIFormat(fmt);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getChildrenNumber()
- */
- public int getChildrenNumber() throws CDIException {
- return getVariables().length;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
- */
- public ICDIVariable[] getVariables() throws CDIException {
- List aList = new ArrayList(1);
- String v = getValueString();
- Argument[] args = parse(getUniqName(), v);
- /* The idea here s to get the first level
- *
- * Argument[0] = { "xmm0", "{f = {0x0, 0x0, 0x0, 0x0}}"
- * Argument[1] = { "xmm0.f", "{0x0, 0x0, 0x0, 0x0}"}
- * Argument[2] = { "xmm0.f.0", "0x0"}
- * Argument[3] = { "xmm0.f.1", "0x0"}
- * Argument[4] = { "xmm0.f.2", "0x0"}
- * Argument[5] = { "xmm0.f.3", "0x0"}
- *
- * For example the children or xmm0.f are xmm0.f.{0,1,2,3,}
- *
- */
- for (int i = 0; i < args.length; i++) {
- String n = args[i].getKey();
- String u = getUniqName();
- if (n.startsWith(u) && n.length() > u.length()) {
- String p = n.substring(u.length());
- StringTokenizer st = new StringTokenizer(p, ".");
- if (st.countTokens() == 1) {
- aList.add(new Register(this, (String)st.nextElement()));
- }
- }
- }
- return (ICDIVariable[])aList.toArray(new ICDIVariable[0]);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#hasChildren()
- */
- public boolean hasChildren() throws CDIException {
- return getChildrenNumber() > 0;
- }
-
- /**
- * We are parsing this:
- * "{f = {0x0, 0x0, 0x0, 0x0}}"
- * into:
- * Argument[0] = { "xmm0", "{f = {0x0, 0x0, 0x0, 0x0}}"
- * Argument[1] = { "xmm0.f", "{0x0, 0x0, 0x0, 0x0}"}
- * Argument[2] = { "xmm0.f.0", "0x0"}
- * Argument[3] = { "xmm0.f.1", "0x0"}
- * Argument[4] = { "xmm0.f.2", "0x0"}
- * Argument[5] = { "xmm0.f.3", "0x0"}
- */
- Argument[] parse(String base, String v) throws CDIException {
- List aList = new ArrayList(1);
- StringBuffer sb = new StringBuffer(base);
- aList.add(new Argument(sb.toString(), v.trim()));
- while (v.startsWith("{")) {
- int idx;
- v = v.substring(1);
- if (v.endsWith("}")) {
- idx = v.lastIndexOf('}');
- v = v.substring(0, idx);
- }
- idx = v.indexOf('=');
- if (idx != -1) {
- String n = v.substring(0, idx).trim();
- sb.append('.').append(n);
- v = v.substring(idx + 1).trim();
- aList.add(new Argument(sb.toString(), v));
- } else {
- StringTokenizer st = new StringTokenizer(v, ",");
- for (int i = 0; st.hasMoreElements(); i++) {
- aList.add(new Argument(sb.toString() + "." + Integer.toString(i), ((String)st.nextElement()).trim()));
- }
- }
- }
- return (Argument[])aList.toArray(new Argument[0]);
- }
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java,v
retrieving revision 1.3
diff -u -r1.3 RegisterManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java 5 Dec 2002 15:59:55 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java 9 Jan 2003 03:43:58 -0000
@@ -12,6 +12,7 @@
import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Register;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIDataListChangedRegisters;
import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames;
@@ -60,7 +61,7 @@
return (Register[])regList.toArray(new Register[0]);
}
- Register getRegister(int regno) throws CDIException {
+ public Register getRegister(int regno) throws CDIException {
Register[] regs = getRegisters();
for (int i = 0; i < regs.length; i++) {
if (regs[i].getId() == regno) {
@@ -80,7 +81,7 @@
return null;
}
- Register createRegister(ICDIRegisterObject regObject) throws CDIException {
+ public Register createRegister(ICDIRegisterObject regObject) throws CDIException {
Register reg = getRegister(regObject);
if (reg == null) {
reg = new Register(getCSession().getCTarget(), regObject);
@@ -97,7 +98,7 @@
return regs;
}
- void update() throws CDIException {
+ public void update() throws CDIException {
MISession mi = getCSession().getMISession();
CommandFactory factory = mi.getCommandFactory();
MIDataListChangedRegisters changed = factory.createMIDataListChangedRegisters();
Index: src/org/eclipse/cdt/debug/mi/core/cdi/ResumedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/ResumedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/ResumedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/ResumedEvent.java 2 Oct 2002 04:51:31 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,71 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
-
-/**
- */
-public class ResumedEvent implements ICDIResumedEvent {
-
- CSession session;
- MIRunningEvent event;
-
- public ResumedEvent(CSession s, MIRunningEvent e) {
- session = s;
- event = e;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- return session.getCurrentTarget();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent#getType()
- */
- public int getType() {
- MIRunningEvent running = (MIRunningEvent)event;
- int type = running.getType();
- int cdiType = 0;
- switch (type) {
- case MIRunningEvent.CONTINUE:
- cdiType = ICDIResumedEvent.CONTINUE;
- break;
-
- case MIRunningEvent.UNTIL:
- case MIRunningEvent.NEXT:
- cdiType = ICDIResumedEvent.STEP_OVER;
- break;
-
- case MIRunningEvent.NEXTI:
- cdiType = ICDIResumedEvent.STEP_OVER_INSTRUCTION;
- break;
-
- case MIRunningEvent.STEP:
- cdiType = ICDIResumedEvent.STEP_INTO;
- break;
-
- case MIRunningEvent.STEPI:
- cdiType = ICDIResumedEvent.STEP_INTO_INSTRUCTION;
- break;
-
- case MIRunningEvent.FINISH:
- cdiType = ICDIResumedEvent.STEP_RETURN;
- break;
-
- //MIRunningEvent.UNTIL:
- //cdiType = ICDIResumedEvent.STEP_UNTIL;
- //break;
- }
- return cdiType;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java,v
retrieving revision 1.18
diff -u -r1.18 SourceManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java 3 Jan 2003 20:29:16 -0000 1.18
+++ src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java 9 Jan 2003 03:43:55 -0000
@@ -11,6 +11,8 @@
import org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Instruction;
+import org.eclipse.cdt.debug.mi.core.cdi.model.MixedInstruction;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIDataDisassemble;
import org.eclipse.cdt.debug.mi.core.command.MIEnvironmentDirectory;
Index: src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java 6 Nov 2002 21:04:57 -0000 1.13
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,165 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.ICDILocation;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIStackListArguments;
-import org.eclipse.cdt.debug.mi.core.command.MIStackListLocals;
-import org.eclipse.cdt.debug.mi.core.output.MIArg;
-import org.eclipse.cdt.debug.mi.core.output.MIFrame;
-import org.eclipse.cdt.debug.mi.core.output.MIStackListArgumentsInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIStackListLocalsInfo;
-
-/**
- */
-public class StackFrame extends CObject implements ICDIStackFrame {
-
- MIFrame frame;
- CThread cthread;
-
- public StackFrame(CThread thread, MIFrame f) {
- super(thread.getCTarget());
- cthread = thread;
- frame = f;
- }
-
- MIFrame getMIFrame() {
- return frame;
- }
-
- CThread getCThread() {
- return cthread;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getArguments()
- */
- public ICDIArgument[] getArguments() throws CDIException {
- List cdiList = new ArrayList();
- if (frame != null) {
- CSession session = getCTarget().getCSession();
- VariableManager mgr = (VariableManager)session.getVariableManager();
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- int level = frame.getLevel();
- MIStackListArguments listArgs =
- factory.createMIStackListArguments(false, level, level);
- try {
- cthread.setCurrentStackFrame(this);
- MIArg[] args = null;
- mi.postCommand(listArgs);
- MIStackListArgumentsInfo info =
- listArgs.getMIStackListArgumentsInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- MIFrame[] miFrames = info.getMIFrames();
- if (miFrames != null && miFrames.length == 1) {
- args = miFrames[0].getArgs();
- }
- if (args != null) {
- for (int i = 0; i < args.length; i++) {
- try {
- cdiList.add(mgr.createArgument(this, args[i].getName()));
- } catch (CDIException e) {
- }
- }
- }
- } catch (MIException e) {
- //throw new CDIException(e.getMessage());
- //System.err.println(e);
- } catch (CDIException e) {
- //throw e;
- //System.err.println(e);
- }
- }
- return (ICDIArgument[])cdiList.toArray(new ICDIArgument[0]);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLocalVariables()
- */
- public ICDIVariable[] getLocalVariables() throws CDIException {
- List cdiList = new ArrayList();
- CSession session = getCTarget().getCSession();
- VariableManager mgr = (VariableManager)session.getVariableManager();
- MISession mi = session.getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIStackListLocals locals = factory.createMIStackListLocals(false);
- try {
- cthread.setCurrentStackFrame(this);
- MIArg[] args = null;
- mi.postCommand(locals);
- MIStackListLocalsInfo info = locals.getMIStackListLocalsInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- args = info.getLocals();
- if (args != null) {
- for (int i = 0; i < args.length; i++) {
- try {
- cdiList.add(mgr.createVariable(this, args[i].getName()));
- } catch (CDIException e) {
- }
- }
- }
- } catch (MIException e) {
- //throw new CDIException(e.getMessage());
- //System.err.println(e);
- } catch (CDIException e) {
- //throw e;
- //System.err.println(e);
- }
- return (ICDIVariable[])cdiList.toArray(new ICDIVariable[0]);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLocation()
- */
- public ICDILocation getLocation() {
- if (frame != null) {
- return new Location(frame.getFile(), frame.getFunction(),
- frame.getLine(), frame.getAddress());
- }
- return new Location("", "", 0, 0);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLevel()
- */
- public int getLevel() {
- if (frame != null) {
- return frame.getLevel();
- }
- return 0;
- }
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#equals(ICDIStackFrame)
- */
- public boolean equals(ICDIStackFrame stackframe) {
- if (stackframe instanceof StackFrame) {
- StackFrame stack = (StackFrame)stackframe;
- return cthread != null &&
- cthread.equals(stack.getCThread()) &&
- frame != null &&
- frame.getLevel() == stack.getMIFrame().getLevel() &&
- frame.getFile().equals(stack.getMIFrame().getFile()) &&
- frame.getFunction().equals(stack.getMIFrame().getFunction());
- }
- return super.equals(stackframe);
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/SuspendedEvent.java 8 Jan 2003 21:33:12 -0000 1.14
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,66 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.ICDISessionObject;
-import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
-import org.eclipse.cdt.debug.mi.core.event.MIBreakpointHitEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIErrorEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
-import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
-import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
-import org.eclipse.cdt.debug.mi.core.event.MISteppingRangeEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIWatchpointScopeEvent;
-import org.eclipse.cdt.debug.mi.core.event.MIWatchpointTriggerEvent;
-
-/**
- *
- */
-public class SuspendedEvent implements ICDISuspendedEvent {
-
- MIEvent event;
- CSession session;
-
- public SuspendedEvent(CSession s, MIEvent e) {
- session = s;
- event = e;
- }
-
- public ICDISessionObject getReason() {
- if (event instanceof MIBreakpointHitEvent) {
- return new BreakpointHit(session, (MIBreakpointHitEvent)event);
- } else if (event instanceof MIWatchpointTriggerEvent) {
- return new WatchpointTrigger(session, (MIWatchpointTriggerEvent)event);
- } else if (event instanceof MIWatchpointScopeEvent) {
- return new WatchpointScope(session, (MIWatchpointScopeEvent)event);
- } else if (event instanceof MISteppingRangeEvent) {
- return new EndSteppingRange(session);
- } else if (event instanceof MISignalEvent) {
- return new Signal(session, (MISignalEvent)event);
- } else if (event instanceof MILocationReachedEvent) {
- return new EndSteppingRange(session);
- } else if (event instanceof MIFunctionFinishedEvent) {
- return new EndSteppingRange(session);
- } else if (event instanceof MIErrorEvent) {
- return new ErrorInfo(session, (MIErrorEvent)event);
- }
- return session;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
- */
- public ICDIObject getSource() {
- CTarget target = session.getCTarget();
- // We can send the target as the Source. CDI
- // Will assume that all threads are supended for this.
- // This is true for gdb when it suspend the inferior
- // all threads are suspended.
- return target;
- }
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Value.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Value.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Value.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Value.java 2 Jan 2003 21:20:22 -0000 1.14
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,121 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIVarEvaluateExpression;
-import org.eclipse.cdt.debug.mi.core.command.MIVarListChildren;
-import org.eclipse.cdt.debug.mi.core.output.MIVar;
-import org.eclipse.cdt.debug.mi.core.output.MIVarEvaluateExpressionInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIVarListChildrenInfo;
-
-/**
- */
-public class Value extends CObject implements ICDIValue {
-
- Variable variable;
-
- public Value(Variable v) {
- super(v.getCTarget());
- variable = v;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getTypeName()
- */
- public String getTypeName() throws CDIException {
- return variable.getTypeName();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getValueString()
- */
- public String getValueString() throws CDIException {
- String result = "";
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIVarEvaluateExpression var =
- factory.createMIVarEvaluateExpression(variable.getMIVar().getVarName());
- try {
- mi.postCommand(var);
- MIVarEvaluateExpressionInfo info = var.getMIVarEvaluateExpressionInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- result = info.getValue();
- } catch (MIException e) {
- //throw new CDIException(e.getMessage());
- }
- return result;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
- */
- public int getChildrenNumber() throws CDIException {
- return variable.getMIVar().getNumChild();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
- */
- public boolean hasChildren() throws CDIException {
- /*
- int number = 0;
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIVarInfoNumChildren children =
- factory.createMIVarInfoNumChildren(variable.getMIVar().getVarName());
- try {
- mi.postCommand(children);
- MIVarInfoNumChildrenInfo info = children.getMIVarInfoNumChildrenInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- number = info.getChildNumber();
- } catch (MIException e) {
- throw new CDIException(e.getMessage());
- }
- return (number > 0);
- */
- return (getChildrenNumber() > 0);
- }
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
- */
- public ICDIVariable[] getVariables() throws CDIException {
- Variable[] variables = null;
- CSession session = getCTarget().getCSession();
- MISession mi = session.getMISession();
- VariableManager mgr = (VariableManager)session.getVariableManager();
- CommandFactory factory = mi.getCommandFactory();
- MIVarListChildren var =
- factory.createMIVarListChildren(variable.getMIVar().getVarName());
- try {
- mi.postCommand(var);
- MIVarListChildrenInfo info = var.getMIVarListChildrenInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- MIVar[] vars = info.getMIVars();
- variables = new Variable[vars.length];
- for (int i = 0; i < vars.length; i++) {
- variables[i] = mgr.createVariable(variable.getStackFrame(),
- vars[i].getExp(), vars[i]);
-
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- return variables;
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java 5 Dec 2002 15:59:55 -0000 1.11
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,147 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIVarAssign;
-import org.eclipse.cdt.debug.mi.core.command.MIVarSetFormat;
-import org.eclipse.cdt.debug.mi.core.command.MIVarShowAttributes;
-import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
-import org.eclipse.cdt.debug.mi.core.output.MIInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIVar;
-import org.eclipse.cdt.debug.mi.core.output.MIVarShowAttributesInfo;
-
-/**
- */
-public class Variable extends CObject implements ICDIVariable {
-
- MIVar miVar;
- String name;
- Value value;
- StackFrame stack;
-
- public Variable(StackFrame stackframe, String n, MIVar v) {
- super(stackframe.getCTarget());
- stack = stackframe;
- name = n;
- miVar = v;
- }
-
- StackFrame getStackFrame() {
- return stack;
- }
-
- MIVar getMIVar() {
- return miVar;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getName()
- */
- public String getName() throws CDIException {
- return name;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getTypeName()
- */
- public String getTypeName() throws CDIException {
- return miVar.getType();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getValue()
- */
- public ICDIValue getValue() throws CDIException {
- if (value == null) {
- value = new Value(this);
- }
- return value;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(ICDIValue)
- */
- public void setValue(ICDIValue value) throws CDIException {
- setValue(value.getValueString());
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(String)
- */
- public void setValue(String expression) throws CDIException {
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIVarAssign var = factory.createMIVarAssign(miVar.getVarName(), expression);
- try {
- mi.postCommand(var);
- MIInfo info = var.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
-
- // If the assign was succesfull fire a MIVarChangedEvent()
- MIVarChangedEvent change = new MIVarChangedEvent(var.getToken(), miVar.getVarName(), true);
- mi.fireEvent(change);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#isEditable()
- */
- public boolean isEditable() throws CDIException {
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIVarShowAttributes var = factory.createMIVarShowAttributes(miVar.getVarName());
- try {
- mi.postCommand(var);
- MIVarShowAttributesInfo info = var.getMIVarShowAttributesInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- return info.isEditable();
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setFormat()
- */
- public void setFormat(int format) throws CDIException {
- int fmt = Format.toMIFormat(format);
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- MIVarSetFormat var = factory.createMIVarSetFormat(miVar.getVarName(), fmt);
- try {
- mi.postCommand(var);
- MIInfo info = var.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#equals()
- */
- public boolean equals(ICDIVariable var) {
- if (var instanceof Variable) {
- Variable variable = (Variable)var;
- return miVar.getVarName().equals(variable.getMIVar().getVarName());
- }
- return super.equals(var);
- }
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java,v
retrieving revision 1.12
diff -u -r1.12 VariableManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java 2 Jan 2003 21:44:57 -0000 1.12
+++ src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java 9 Jan 2003 03:43:54 -0000
@@ -15,6 +15,12 @@
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Argument;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CThread;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Expression;
+import org.eclipse.cdt.debug.mi.core.cdi.model.StackFrame;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Variable;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIVarCreate;
import org.eclipse.cdt.debug.mi.core.command.MIVarDelete;
@@ -36,12 +42,12 @@
/**
* Class container to regroup all info concerning a variable.
*/
- class Element {
- MIVar miVar;
- String name;
- StackFrame stackframe;
- int stackdepth;
- Variable variable;
+ public class Element {
+ public MIVar miVar;
+ public String name;
+ public StackFrame stackframe;
+ public int stackdepth;
+ public Variable variable;
}
public VariableManager(CSession session) {
@@ -53,7 +59,7 @@
/**
* Return the element that have the uniq varName.
*/
- Element getElement(String varName) {
+ public Element getElement(String varName) {
Element[] elements = getElements();
for (int i = 0; i < elements.length; i++) {
if (elements[i].miVar.getVarName().equals(varName)) {
@@ -183,7 +189,7 @@
/**
* Remove element from the OutOfscope list(oos).
*/
- Element removeOutOfScope(String varName) {
+ public Element removeOutOfScope(String varName) {
Element[] oos = (Element[])oosList.toArray(new Element[0]);
for (int i = 0; i < oos.length; i++) {
if (oos[i].miVar.getVarName().equals(varName)) {
@@ -249,7 +255,7 @@
}
}
- ICDIVariable createVariable(StackFrame stack, String name) throws CDIException {
+ public ICDIVariable createVariable(StackFrame stack, String name) throws CDIException {
Element element = createElement(stack, name);
Variable var;
if (element.variable != null) {
@@ -262,7 +268,7 @@
return var;
}
- Variable createVariable(StackFrame stack, String name, MIVar miVar )
+ public Variable createVariable(StackFrame stack, String name, MIVar miVar )
throws CDIException {
Element element = new Element();
element.miVar = miVar;
@@ -274,7 +280,7 @@
return var;
}
- ICDIArgument createArgument(StackFrame stack, String name) throws CDIException {
+ public ICDIArgument createArgument(StackFrame stack, String name) throws CDIException {
Element element = createElement(stack, name);
Argument carg;
if (element.variable != null && element.variable instanceof Argument) {
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Watchpoint.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/Watchpoint.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/Watchpoint.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Watchpoint.java 8 Jan 2003 21:33:12 -0000 1.6
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,41 +0,0 @@
-/*
- * (c) Copyright QNX Software Systems Ltd. 2002.
- * All Rights Reserved.
- *
- */
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
-import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
-
-/**
- */
-public class Watchpoint extends Breakpoint implements ICDIWatchpoint {
-
- public Watchpoint(BreakpointManager m, MIBreakpoint miBreak) {
- super(m, miBreak);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#getWatchExpression()
- */
- public String getWatchExpression() throws CDIException {
- return getMIBreakpoint().getWhat();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isReadType()
- */
- public boolean isReadType() {
- return getMIBreakpoint().isReadWatchpoint() || getMIBreakpoint().isAccessWatchpoint();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isWriteType()
- */
- public boolean isWriteType() {
- return getMIBreakpoint().isAccessWatchpoint() || getMIBreakpoint().isWriteWatchpoint();
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java,v
retrieving revision 1.3
diff -u -r1.3 WatchpointScope.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java 6 Sep 2002 20:18:21 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java 9 Jan 2003 03:43:52 -0000
@@ -7,6 +7,7 @@
import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointScope;
import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Watchpoint;
import org.eclipse.cdt.debug.mi.core.event.MIWatchpointScopeEvent;
/**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java,v
retrieving revision 1.3
diff -u -r1.3 WatchpointTrigger.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java 6 Sep 2002 20:18:21 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java 9 Jan 2003 03:43:52 -0000
@@ -7,6 +7,7 @@
import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointTrigger;
import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Watchpoint;
import org.eclipse.cdt.debug.mi.core.event.MIWatchpointTriggerEvent;
/**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/ChangedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/ChangedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/ChangedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/ChangedEvent.java 9 Jan 2003 03:44:00 -0000
@@ -0,0 +1,80 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
+import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Register;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakpointChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
+
+/**
+ */
+public class ChangedEvent implements ICDIChangedEvent {
+
+ CSession session;
+ ICDIObject source;
+
+ public ChangedEvent(CSession s, MIVarChangedEvent var) {
+ session = s;
+ VariableManager mgr = session.getVariableManager();
+ String varName = var.getVarName();
+ VariableManager.Element element = mgr.getElement(varName);
+ if (element != null && element.variable != null) {
+ source = element.variable;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public ChangedEvent(CSession s, MIRegisterChangedEvent var) {
+ session = s;
+ RegisterManager mgr = session.getRegisterManager();
+ int regno = var.getNumber();
+ Register reg = null;
+ try {
+ reg = mgr.getRegister(regno);
+ } catch (CDIException e) {
+ }
+ if (reg != null) {
+ source = reg;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public ChangedEvent(CSession s, MIBreakpointChangedEvent bpoint) {
+ session = s;
+ BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+ int number = bpoint.getNumber();
+ ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
+ if (breakpoint != null) {
+ source = breakpoint;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public ChangedEvent(CSession s, ICDIObject src) {
+ session = s;
+ source = src;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return source;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java 9 Jan 2003 03:43:59 -0000
@@ -0,0 +1,46 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
+
+/**
+ */
+public class CreatedEvent implements ICDICreatedEvent {
+
+ CSession session;
+ ICDIObject source;
+
+ public CreatedEvent(CSession s, MIBreakpointCreatedEvent bpoint) {
+ session = s;
+ BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+ int number = bpoint.getNumber();
+ ICDIBreakpoint breakpoint = mgr.getBreakpoint(number);
+ if (breakpoint != null) {
+ source = breakpoint;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public CreatedEvent(CSession s, ICDIObject src) {
+ session = s;
+ source = src;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return source;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/DestroyedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/DestroyedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/DestroyedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/DestroyedEvent.java 9 Jan 2003 03:43:59 -0000
@@ -0,0 +1,72 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Breakpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CThread;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakpointDeletedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
+
+/**
+ */
+public class DestroyedEvent implements ICDIDestroyedEvent {
+
+ CSession session;
+ ICDIObject source;
+
+ public DestroyedEvent(CSession s, MIThreadExitEvent ethread) {
+ session = s;
+ source = new CThread(session.getCTarget(), ethread.getId());
+ }
+
+ public DestroyedEvent(CSession s, MIVarChangedEvent var) {
+ session = s;
+ VariableManager mgr = session.getVariableManager();
+ String varName = var.getVarName();
+ VariableManager.Element element = mgr.removeOutOfScope(varName);
+ if (element != null && element.variable != null) {
+ source = element.variable;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public DestroyedEvent(CSession s, MIBreakpointDeletedEvent bpoint) {
+ session = s;
+ BreakpointManager mgr = (BreakpointManager)session.getBreakpointManager();
+ int number = bpoint.getNumber();
+ Breakpoint breakpoint = mgr.deleteBreakpoint(number);
+ if (breakpoint != null) {
+ source = breakpoint;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public DestroyedEvent(CSession s, ICDIObject src) {
+ session = s;
+ source = src;
+ }
+
+ public DestroyedEvent(CSession s) {
+ session = s;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return source;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/DisconnectedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/DisconnectedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/DisconnectedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/DisconnectedEvent.java 9 Jan 2003 03:44:00 -0000
@@ -0,0 +1,24 @@
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.event.ICDIDisconnectedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+
+/**
+ */
+public class DisconnectedEvent implements ICDIDisconnectedEvent {
+
+ ICDIObject source;
+
+ public DisconnectedEvent(CSession session) {
+ source = (ICDIObject)session.getCTarget();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core..ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return source;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/ExitedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/ExitedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/ExitedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/ExitedEvent.java 9 Jan 2003 03:43:59 -0000
@@ -0,0 +1,41 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.ICDIExitInfo;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIExitedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.ExitInfo;
+import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
+
+/**
+ */
+public class ExitedEvent implements ICDIExitedEvent {
+
+ MIInferiorExitEvent event;
+ CSession session;
+
+ public ExitedEvent(CSession s, MIInferiorExitEvent e) {
+ session = s;
+ event = e;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIExitedEvent#getExitInfo()
+ */
+ public ICDIExitInfo getExitInfo() {
+ return new ExitInfo(session, event);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return session.getCurrentTarget();
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java 9 Jan 2003 03:43:59 -0000
@@ -0,0 +1,52 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.MemoryBlock;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
+
+/**
+ */
+public class MemoryChangedEvent implements ICDIMemoryChangedEvent {
+
+ CSession session;
+ MemoryBlock source;
+ MIMemoryChangedEvent miMem;
+
+ public MemoryChangedEvent(CSession s, MemoryBlock block, MIMemoryChangedEvent mem) {
+ session = s;
+ source = block;
+ miMem = mem;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getAddresses()
+ */
+ public Long[] getAddresses() {
+ /* But only returns the address that are in the block. */
+ Long[] longs = miMem.getAddresses();
+ List aList = new ArrayList(longs.length);
+ for (int i = 0; i < longs.length; i++) {
+ if (source.contains(longs[i])) {
+ aList.add(longs[i]);
+ }
+ }
+ return (Long[])aList.toArray(new Long[0]);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return source;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/ResumedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/ResumedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/ResumedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/ResumedEvent.java 9 Jan 2003 03:43:59 -0000
@@ -0,0 +1,72 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
+
+/**
+ */
+public class ResumedEvent implements ICDIResumedEvent {
+
+ CSession session;
+ MIRunningEvent event;
+
+ public ResumedEvent(CSession s, MIRunningEvent e) {
+ session = s;
+ event = e;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ return session.getCurrentTarget();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent#getType()
+ */
+ public int getType() {
+ MIRunningEvent running = (MIRunningEvent)event;
+ int type = running.getType();
+ int cdiType = 0;
+ switch (type) {
+ case MIRunningEvent.CONTINUE:
+ cdiType = ICDIResumedEvent.CONTINUE;
+ break;
+
+ case MIRunningEvent.UNTIL:
+ case MIRunningEvent.NEXT:
+ cdiType = ICDIResumedEvent.STEP_OVER;
+ break;
+
+ case MIRunningEvent.NEXTI:
+ cdiType = ICDIResumedEvent.STEP_OVER_INSTRUCTION;
+ break;
+
+ case MIRunningEvent.STEP:
+ cdiType = ICDIResumedEvent.STEP_INTO;
+ break;
+
+ case MIRunningEvent.STEPI:
+ cdiType = ICDIResumedEvent.STEP_INTO_INSTRUCTION;
+ break;
+
+ case MIRunningEvent.FINISH:
+ cdiType = ICDIResumedEvent.STEP_RETURN;
+ break;
+
+ //MIRunningEvent.UNTIL:
+ //cdiType = ICDIResumedEvent.STEP_UNTIL;
+ //break;
+ }
+ return cdiType;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/SuspendedEvent.java 9 Jan 2003 03:44:00 -0000
@@ -0,0 +1,74 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.event;
+
+import org.eclipse.cdt.debug.core.cdi.ICDISessionObject;
+import org.eclipse.cdt.debug.core.cdi.event.ICDISuspendedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.mi.core.cdi.BreakpointHit;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.EndSteppingRange;
+import org.eclipse.cdt.debug.mi.core.cdi.ErrorInfo;
+import org.eclipse.cdt.debug.mi.core.cdi.Signal;
+import org.eclipse.cdt.debug.mi.core.cdi.WatchpointScope;
+import org.eclipse.cdt.debug.mi.core.cdi.WatchpointTrigger;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
+import org.eclipse.cdt.debug.mi.core.event.MIBreakpointHitEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIErrorEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MISignalEvent;
+import org.eclipse.cdt.debug.mi.core.event.MISteppingRangeEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIWatchpointScopeEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIWatchpointTriggerEvent;
+
+/**
+ *
+ */
+public class SuspendedEvent implements ICDISuspendedEvent {
+
+ MIEvent event;
+ CSession session;
+
+ public SuspendedEvent(CSession s, MIEvent e) {
+ session = s;
+ event = e;
+ }
+
+ public ICDISessionObject getReason() {
+ if (event instanceof MIBreakpointHitEvent) {
+ return new BreakpointHit(session, (MIBreakpointHitEvent)event);
+ } else if (event instanceof MIWatchpointTriggerEvent) {
+ return new WatchpointTrigger(session, (MIWatchpointTriggerEvent)event);
+ } else if (event instanceof MIWatchpointScopeEvent) {
+ return new WatchpointScope(session, (MIWatchpointScopeEvent)event);
+ } else if (event instanceof MISteppingRangeEvent) {
+ return new EndSteppingRange(session);
+ } else if (event instanceof MISignalEvent) {
+ return new Signal(session, (MISignalEvent)event);
+ } else if (event instanceof MILocationReachedEvent) {
+ return new EndSteppingRange(session);
+ } else if (event instanceof MIFunctionFinishedEvent) {
+ return new EndSteppingRange(session);
+ } else if (event instanceof MIErrorEvent) {
+ return new ErrorInfo(session, (MIErrorEvent)event);
+ }
+ return session;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEvent#getSource()
+ */
+ public ICDIObject getSource() {
+ CTarget target = session.getCTarget();
+ // We can send the target as the Source. CDI
+ // Will assume that all threads are supended for this.
+ // This is true for gdb when it suspend the inferior
+ // all threads are suspended.
+ return target;
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Argument.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Argument.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Argument.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Argument.java 9 Jan 2003 03:44:03 -0000
@@ -0,0 +1,17 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument;
+import org.eclipse.cdt.debug.mi.core.output.MIVar;
+
+/**
+ */
+public class Argument extends Variable implements ICDIArgument {
+
+ public Argument(StackFrame frame, String name, MIVar var) {
+ super(frame, name, var);
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Breakpoint.java 9 Jan 2003 03:44:03 -0000
@@ -0,0 +1,107 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.ICDICondition;
+import org.eclipse.cdt.debug.core.cdi.ICDILocation;
+import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
+import org.eclipse.cdt.debug.mi.core.cdi.Condition;
+import org.eclipse.cdt.debug.mi.core.cdi.Location;
+import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
+
+/**
+ */
+public class Breakpoint extends CObject implements ICDILocationBreakpoint {
+
+ ICDILocation location;
+ ICDICondition condition;
+ MIBreakpoint miBreakpoint;
+ BreakpointManager mgr;
+
+ public Breakpoint(BreakpointManager m, MIBreakpoint miBreak) {
+ super(m.getCSession().getCTarget());
+ miBreakpoint = miBreak;
+ mgr = m;
+ }
+
+ public MIBreakpoint getMIBreakpoint() {
+ return miBreakpoint;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#getCondition()
+ */
+ public ICDICondition getCondition() throws CDIException {
+ if (condition == null) {
+ condition = new Condition(miBreakpoint.getIgnoreCount(),
+ miBreakpoint.getWhat());
+ }
+ return condition;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#getThreadId()
+ */
+ public String getThreadId() throws CDIException {
+ return miBreakpoint.getThreadId();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isEnabled()
+ */
+ public boolean isEnabled() throws CDIException {
+ return miBreakpoint.isEnabled();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isHardware()
+ */
+ public boolean isHardware() {
+ return miBreakpoint.isHardware();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#isTemporary()
+ */
+ public boolean isTemporary() {
+ return miBreakpoint.isTemporary();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#setCondition(ICDICondition)
+ */
+ public void setCondition(ICDICondition condition) throws CDIException {
+ if (isEnabled()) {
+ mgr.setCondition(this, condition);
+ }
+ this.condition = condition;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIBreakpoint#setEnabled(boolean)
+ */
+ public void setEnabled(boolean enable) throws CDIException {
+ if (enable == false && isEnabled() == true) {
+ mgr.disableBreakpoint(this);
+ } else if (enable == true && isEnabled() == false) {
+ mgr.enableBreakpoint(this);
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDILocationBreakpoint#getLocation()
+ */
+ public ICDILocation getLocation() throws CDIException {
+ if (location == null) {
+ location = new Location (miBreakpoint.getFile(),
+ miBreakpoint.getFunction(),
+ miBreakpoint.getLine(),
+ miBreakpoint.getAddress());
+ }
+ return location;
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/CObject.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/CObject.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/CObject.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/CObject.java 9 Jan 2003 03:44:02 -0000
@@ -0,0 +1,31 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
+
+/**
+ */
+public class CObject implements ICDIObject {
+
+ CTarget target;
+
+ public CObject(CTarget t) {
+ target = t;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIObject#getTarget()
+ */
+ public ICDITarget getTarget() {
+ return target;
+ }
+
+ public CTarget getCTarget() {
+ return target;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java 9 Jan 2003 03:44:01 -0000
@@ -0,0 +1,560 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.ICDILocation;
+import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject;
+import org.eclipse.cdt.debug.core.cdi.ICDISession;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIGlobalVariable;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister;
+import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary;
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
+import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIDataEvaluateExpression;
+import org.eclipse.cdt.debug.mi.core.command.MIExecContinue;
+import org.eclipse.cdt.debug.mi.core.command.MIExecFinish;
+import org.eclipse.cdt.debug.mi.core.command.MIExecNext;
+import org.eclipse.cdt.debug.mi.core.command.MIExecNextInstruction;
+import org.eclipse.cdt.debug.mi.core.command.MIExecRun;
+import org.eclipse.cdt.debug.mi.core.command.MIExecStep;
+import org.eclipse.cdt.debug.mi.core.command.MIExecStepInstruction;
+import org.eclipse.cdt.debug.mi.core.command.MIExecUntil;
+import org.eclipse.cdt.debug.mi.core.command.MIInfoThreads;
+import org.eclipse.cdt.debug.mi.core.command.MITargetDetach;
+import org.eclipse.cdt.debug.mi.core.command.MIThreadSelect;
+import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
+import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIInfoThreadsInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIThreadSelectInfo;
+
+/**
+ */
+public class CTarget implements ICDITarget {
+
+ CSession session;
+ CThread[] noThreads = new CThread[0];
+ CThread[] currentThreads;
+ int currentThreadId;
+ int lastExecutionToken;
+
+ public CTarget(CSession s) {
+ session = s;
+ currentThreads = noThreads;
+ }
+
+ public CSession getCSession() {
+ return session;
+ }
+
+ public int getLastExecutionToken() {
+ return lastExecutionToken;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getSession()
+ */
+ public ICDISession getSession() {
+ return session;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIObject#getTarget()
+ */
+ public ICDITarget getTarget() {
+ return this;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#setCurrentThread(ICDIThread)
+ */
+ public void setCurrentThread(ICDIThread cthread) throws CDIException {
+ if (cthread instanceof CThread) {
+ setCurrentThread((CThread)cthread);
+ }
+ }
+
+ /**
+ */
+ public void setCurrentThread(CThread cthread) throws CDIException {
+ session.setCurrentTarget(this);
+ int id = cthread.getId();
+ // No need to set thread id 0, it is a dummy thread.
+ if (id == 0) {
+ return;
+ }
+ // already the current thread?
+ if (currentThreadId != id) {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIThreadSelect select = factory.createMIThreadSelect(id);
+ try {
+ mi.postCommand(select);
+ MIThreadSelectInfo info = select.getMIThreadSelectInfo();
+ if (info == null) {
+ throw new CDIException("No Answer");
+ }
+ currentThreadId = info.getNewThreadId();
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+
+ // Resetting threads may change the value of
+ // some variables like Register. Send an update
+ // To generate changeEvents.
+ RegisterManager regMgr = session.getRegisterManager();
+ regMgr.update();
+ }
+
+ // We should be allright now.
+ if (currentThreadId != id) {
+ // thread is gone. Generate a Thread destroyed.
+ MISession mi = session.getMISession();
+ mi.fireEvent(new MIThreadExitEvent(id));
+ throw new CDIException("Thread destroyed");
+ }
+ }
+
+ /**
+ * Called when stopping because of breakpoints etc ..
+ */
+ public void updateState(int newThreadId) {
+ CThread[] oldThreads = currentThreads;
+
+ // If we use "info threads" in getCThreads() this
+ // will be overwritten. However if we use -stack-list-threads
+ // it does not provide to the current thread
+ currentThreadId = newThreadId;
+ // get the new Threads.
+ CThread[] newThreads = getCThreads();
+
+ currentThreads = newThreads;
+
+ // Fire destroyedEvent for old threads.
+ if (oldThreads != null && oldThreads.length > 0) {
+ List dList = new ArrayList(oldThreads.length);
+ for (int i = 0; i < oldThreads.length; i++) {
+ boolean found = false;
+ for (int j = 0; j < newThreads.length; j++) {
+ if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ dList.add(new Integer(oldThreads[i].getId()));
+ }
+ }
+ if (!dList.isEmpty()) {
+ MIThreadExitEvent[] events = new MIThreadExitEvent[dList.size()];
+ for (int j = 0; j < events.length; j++) {
+ int id = ((Integer)dList.get(j)).intValue();
+ events[j] = new MIThreadExitEvent(id);
+ }
+ MISession miSession = session.getMISession();
+ miSession.fireEvents(events);
+ }
+ }
+ }
+
+ /**
+ * Do the real work of call -thread-list-ids.
+ */
+ public CThread[] getCThreads() { //throws CDIException {
+ CThread[] cthreads = noThreads;
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIInfoThreads tids = factory.createMIInfoThreads();
+ try {
+ // HACK/FIXME: gdb/mi thread-list-ids does not
+ // show any newly create thread, we workaround by
+ // issuing "info threads" instead.
+ //MIThreadListIds tids = factory.createMIThreadListIds();
+ //MIThreadListIdsInfo info = tids.getMIThreadListIdsInfo();
+ mi.postCommand(tids);
+ MIInfoThreadsInfo info = tids.getMIInfoThreadsInfo();
+ int [] ids;
+ if (info == null) {
+ ids = new int[0];
+ } else {
+ ids = info.getThreadIds();
+ }
+ if (ids != null && ids.length > 0) {
+ cthreads = new CThread[ids.length];
+ // Ok that means it is a multiThreaded.
+ for (int i = 0; i < ids.length; i++) {
+ cthreads[i] = new CThread(this, ids[i]);
+ }
+ } else {
+ // Provide a dummy.
+ cthreads = new CThread[]{new CThread(this, 0)};
+ }
+ currentThreadId = info.getCurrentThread();
+ } catch (MIException e) {
+ // Do not throw anything in this case.
+ //throw new CDIException(e.getMessage());
+ }
+ return cthreads;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getCurrentThread()
+ */
+ public ICDIThread getCurrentThread() throws CDIException {
+ ICDIThread[] threads = getThreads();
+ for (int i = 0; i < threads.length; i++) {
+ CThread cthread = (CThread)threads[i];
+ if (cthread.getId() == currentThreadId) {
+ return cthread;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getThreads()
+ */
+ public ICDIThread[] getThreads() throws CDIException {
+ if (currentThreads.length == 0) {
+ currentThreads = getCThreads();
+ }
+ return currentThreads;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#restart()
+ */
+ public void restart() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecRun run = factory.createMIExecRun(new String[0]);
+ try {
+ mi.postCommand(run);
+ MIInfo info = run.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = run.getToken();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#resume()
+ */
+ public void resume() throws CDIException {
+ MISession mi = session.getMISession();
+ if (mi.getMIInferior().isRunning()) {
+ throw new CDIException("Inferior already running");
+ } else if (mi.getMIInferior().isSuspended()) {
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecContinue cont = factory.createMIExecContinue();
+ try {
+ mi.postCommand(cont);
+ MIInfo info = cont.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = cont.getToken();
+ } else if (mi.getMIInferior().isTerminated()) {
+ restart();
+ } else {
+ restart();
+ //throw new CDIException("Unknow state");
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepInto()
+ */
+ public void stepInto() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecStep step = factory.createMIExecStep();
+ try {
+ mi.postCommand(step);
+ MIInfo info = step.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = step.getToken();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepIntoInstruction()
+ */
+ public void stepIntoInstruction() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecStepInstruction stepi = factory.createMIExecStepInstruction();
+ try {
+ mi.postCommand(stepi);
+ MIInfo info = stepi.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = stepi.getToken();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepOver()
+ */
+ public void stepOver() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecNext next = factory.createMIExecNext();
+ try {
+ mi.postCommand(next);
+ MIInfo info = next.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = next.getToken();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepOverInstruction()
+ */
+ public void stepOverInstruction() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecNextInstruction nexti = factory.createMIExecNextInstruction();
+ try {
+ mi.postCommand(nexti);
+ MIInfo info = nexti.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = nexti.getToken();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#stepReturn()
+ */
+ public void stepReturn() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecFinish finish = factory.createMIExecFinish();
+ try {
+ mi.postCommand(finish);
+ MIInfo info = finish.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = finish.getToken();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#suspend()
+ */
+ public void suspend() throws CDIException {
+ // send a noop to see if we get an aswer.
+ MISession mi = session.getMISession();
+ try {
+ mi.getMIInferior().interrupt();
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#disconnect()
+ */
+ public void disconnect() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MITargetDetach detach = factory.createMITargetDetach();
+ try {
+ mi.postCommand(detach);
+ MIInfo info = detach.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ // Unfortunately -target-detach does not generate an
+ // event so we do it here.
+ MISession miSession = session.getMISession();
+ miSession.fireEvent(new MIDetachedEvent(detach.getToken()));
+ session.getMISession().getMIInferior().setDisconnected();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#finish()
+ */
+ public void finish() throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIExecFinish finish = factory.createMIExecFinish();
+ try {
+ mi.postCommand(finish);
+ MIInfo info = finish.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = finish.getToken();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#runUntil(ICDILocation)
+ */
+ public void runUntil(ICDILocation location) throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ String loc = "";
+ if (location.getFile() != null) {
+ loc = location.getFile() + ":" + location.getLineNumber();
+ } else if (location.getFunction() != null) {
+ loc = location.getFunction();
+ } else if (location.getAddress() != 0) {
+ loc = "" + location.getAddress();
+ }
+ MIExecUntil until = factory.createMIExecUntil(loc);
+ try {
+ mi.postCommand(until);
+ MIInfo info = until.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ lastExecutionToken = until.getToken();
+
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#evaluateExpressionToString(String)
+ */
+ public String evaluateExpressionToString(String expressionText)
+ throws CDIException {
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIDataEvaluateExpression evaluate =
+ factory.createMIDataEvaluateExpression(expressionText);
+ try {
+ mi.postCommand(evaluate);
+ MIDataEvaluateExpressionInfo info =
+ evaluate.getMIDataEvaluateExpressionInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ return info.getExpression();
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#terminate()
+ */
+ public void terminate() throws CDIException {
+ session.getMISession().getMIInferior().destroy();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#isTerminated()
+ */
+ public boolean isTerminated() {
+ return session.getMISession().getMIInferior().isTerminated();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#isDisconnected()
+ */
+ public boolean isDisconnected() {
+ return !session.getMISession().getMIInferior().isConnected();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#isSuspended()
+ */
+ public boolean isSuspended() {
+ return session.getMISession().getMIInferior().isSuspended();
+ }
+
+ public boolean isRunning() {
+ return session.getMISession().getMIInferior().isRunning();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getGlobalVariables()
+ */
+ public ICDIGlobalVariable[] getGlobalVariables() throws CDIException {
+ return new ICDIGlobalVariable[0];
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getRegisterObjects()
+ */
+ public ICDIRegisterObject[] getRegisterObjects() throws CDIException {
+ RegisterManager mgr = session.getRegisterManager();
+ return mgr.getRegisterObjects();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getRegisters(ICDIRegisterObject[])
+ */
+ public ICDIRegister[] getRegisters(ICDIRegisterObject[] regs) throws CDIException {
+ ICDIRegister[] registers = null;
+ RegisterManager mgr = session.getRegisterManager();
+ registers = new ICDIRegister[regs.length];
+ for (int i = 0; i < registers.length; i++) {
+ registers[i] = mgr.createRegister(regs[i]);
+ }
+ return registers;
+ }
+
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getSharedLibraries()
+ */
+ public ICDISharedLibrary[] getSharedLibraries() throws CDIException {
+ return new ICDISharedLibrary[0];
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getProcess()
+ */
+ public Process getProcess() {
+ return session.getMISession().getMIInferior();
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/CThread.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/CThread.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/CThread.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/CThread.java 9 Jan 2003 03:44:03 -0000
@@ -0,0 +1,288 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.ICDILocation;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
+import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIStackInfoDepth;
+import org.eclipse.cdt.debug.mi.core.command.MIStackListFrames;
+import org.eclipse.cdt.debug.mi.core.command.MIStackSelectFrame;
+import org.eclipse.cdt.debug.mi.core.output.MIFrame;
+import org.eclipse.cdt.debug.mi.core.output.MIInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIStackInfoDepthInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIStackListFramesInfo;
+
+/**
+ */
+public class CThread extends CObject implements ICDIThread {
+
+ int id;
+ static StackFrame[] noStack = new StackFrame[0];
+ StackFrame currentFrame;
+
+ public CThread(CTarget target, int threadId) {
+ super(target);
+ id = threadId;
+ }
+
+ int getId() {
+ return id;
+ }
+
+ public String toString() {
+ return Integer.toString(id);
+ }
+
+ public StackFrame getCurrentStackFrame() throws CDIException {
+ if (currentFrame == null) {
+ ICDIStackFrame[] frames = getStackFrames(0, 0);
+ if (frames.length > 0) {
+ currentFrame = (StackFrame)frames[0];
+ }
+ }
+ return currentFrame;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#getStackFrames()
+ */
+ public ICDIStackFrame[] getStackFrames() throws CDIException {
+
+ StackFrame[] stack = noStack;
+ CSession session = getCTarget().getCSession();
+
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIStackListFrames frames = factory.createMIStackListFrames();
+ try {
+ ICDIThread oldThread = getCTarget().getCurrentThread();
+ getCTarget().setCurrentThread(this);
+ mi.postCommand(frames);
+ MIStackListFramesInfo info = frames.getMIStackListFramesInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ MIFrame[] miFrames = info.getMIFrames();
+ stack = new StackFrame[miFrames.length];
+ for (int i = 0; i < stack.length; i++) {
+ stack[i] = new StackFrame(this, miFrames[i]);
+ }
+ getCTarget().setCurrentThread(oldThread);
+ return stack;
+ } catch (MIException e) {
+ //throw new CDIException(e.getMessage());
+ //System.out.println(e);
+ } catch (CDIException e) {
+ //throw e;
+ //System.out.println(e);
+ }
+ return stack;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#getStackFrames()
+ */
+ public int getStackFrameCount() throws CDIException {
+ CSession session = getCTarget().getCSession();
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIStackInfoDepth depth = factory.createMIStackInfoDepth();
+ try {
+ ICDIThread oldThread = getCTarget().getCurrentThread();
+ getCTarget().setCurrentThread(this);
+ mi.postCommand(depth);
+ MIStackInfoDepthInfo info = depth.getMIStackInfoDepthInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ getCTarget().setCurrentThread(oldThread);
+ return info.getDepth();
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ //System.out.println(e);
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#getStackFrames()
+ */
+ public ICDIStackFrame[] getStackFrames(int low, int high) throws CDIException {
+ StackFrame[] stack = noStack;
+ CSession session = getCTarget().getCSession();
+
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIStackListFrames frames = factory.createMIStackListFrames(low, high);
+ try {
+ ICDIThread oldThread = getCTarget().getCurrentThread();
+ getCTarget().setCurrentThread(this);
+ mi.postCommand(frames);
+ MIStackListFramesInfo info = frames.getMIStackListFramesInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ MIFrame[] miFrames = info.getMIFrames();
+ stack = new StackFrame[miFrames.length];
+ for (int i = 0; i < stack.length; i++) {
+ stack[i] = new StackFrame(this, miFrames[i]);
+ }
+ getCTarget().setCurrentThread(oldThread);
+ return stack;
+ } catch (MIException e) {
+ //throw new CDIException(e.getMessage());
+ //System.out.println(e);
+ } catch (CDIException e) {
+ //throw e;
+ //System.out.println(e);
+ }
+ return stack;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#setCurrentStackFrame(ICDIStackFrame)
+ */
+ public void setCurrentStackFrame(ICDIStackFrame stackframe) throws CDIException {
+ if (stackframe instanceof StackFrame) {
+ setCurrentStackFrame((StackFrame)stackframe);
+ }
+ }
+
+ public void setCurrentStackFrame(StackFrame stackframe) throws CDIException {
+ CSession session = getCTarget().getCSession();
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ int frameNum = 0;
+ if (stackframe != null) {
+ frameNum = stackframe.getLevel();
+ }
+
+ // Check to see if we are already at this level
+ StackFrame current = getCurrentStackFrame();
+ if (current != null && current.getLevel() == frameNum) {
+ // noop
+ return;
+ }
+
+ MIStackSelectFrame frame = factory.createMIStackSelectFrame(frameNum);
+ try {
+ // Set ourself as the current thread first.
+ getCTarget().setCurrentThread(this);
+ mi.postCommand(frame);
+ MIInfo info = frame.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ currentFrame = stackframe;
+
+ // Resetting threads may change the value of
+ // some variables like Register. Send an update
+ // To generate changeEvents.
+ RegisterManager regMgr = session.getRegisterManager();
+ regMgr.update();
+
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#isSuspended()
+ */
+ public boolean isSuspended() {
+ return getTarget().isSuspended();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#finish()
+ */
+ public void finish() throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().finish();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#resume()
+ */
+ public void resume() throws CDIException {
+ getTarget().resume();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepInto()
+ */
+ public void stepInto() throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().stepInto();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepIntoInstruction()
+ */
+ public void stepIntoInstruction() throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().stepIntoInstruction();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepOver()
+ */
+ public void stepOver() throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().stepOver();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepOverInstruction()
+ */
+ public void stepOverInstruction() throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().stepOverInstruction();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#stepReturn()
+ */
+ public void stepReturn() throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().stepReturn();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#runUntil(ICDILocation)
+ */
+ public void runUntil(ICDILocation location) throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().runUntil(location);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#suspend()
+ */
+ public void suspend() throws CDIException {
+ getCTarget().setCurrentThread(this);
+ getTarget().suspend();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIThread#equals(ICDIThread)
+ */
+ public boolean equals(ICDIThread thread) {
+ if (thread instanceof CThread) {
+ CThread cthread = (CThread) thread;
+ return id == cthread.getId();
+ }
+ return super.equals(thread);
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Catchpoint.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Catchpoint.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Catchpoint.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Catchpoint.java 9 Jan 2003 03:44:02 -0000
@@ -0,0 +1,27 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.ICDICatchEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDICatchpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
+import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
+
+/**
+ */
+public class Catchpoint extends Breakpoint implements ICDICatchpoint {
+
+ public Catchpoint(BreakpointManager m, MIBreakpoint miBreak) {
+ super(m, miBreak);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDICatchpoint#getEvent()
+ */
+ public ICDICatchEvent getEvent() throws CDIException {
+ return null;
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Expression.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Expression.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Expression.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Expression.java 9 Jan 2003 03:44:03 -0000
@@ -0,0 +1,18 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
+import org.eclipse.cdt.debug.mi.core.output.MIVar;
+
+/**
+ */
+public class Expression extends Variable implements ICDIExpression {
+
+ public Expression(StackFrame stackframe, String name, MIVar var) {
+ super(stackframe, name, var);
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Instruction.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Instruction.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Instruction.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Instruction.java 9 Jan 2003 03:44:02 -0000
@@ -0,0 +1,49 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
+import org.eclipse.cdt.debug.mi.core.output.MIAsm;
+
+/**
+ */
+public class Instruction extends CObject implements ICDIInstruction {
+
+ MIAsm asm;
+
+ public Instruction(CTarget target, MIAsm a) {
+ super(target);
+ asm = a;
+ }
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getAdress()
+ */
+ public long getAdress() {
+ return asm.getAddress();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getFuntionName()
+ */
+ public String getFuntionName() {
+ return asm.getFunction();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getInstruction()
+ */
+ public String getInstruction() {
+ return asm.getInstruction();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction#getOffset()
+ */
+ public long getOffset() {
+ return asm.getOffset();
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/MixedInstruction.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/MixedInstruction.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/MixedInstruction.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/MixedInstruction.java 9 Jan 2003 03:44:02 -0000
@@ -0,0 +1,50 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction;
+import org.eclipse.cdt.debug.mi.core.output.MIAsm;
+import org.eclipse.cdt.debug.mi.core.output.MISrcAsm;
+
+/**
+ */
+public class MixedInstruction extends CObject implements ICDIMixedInstruction {
+
+ MISrcAsm srcAsm;
+
+ public MixedInstruction (CTarget target, MISrcAsm a) {
+ super(target);
+ srcAsm = a;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction#getFileName()
+ */
+ public String getFileName() {
+ return srcAsm.getFile();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction#getInstructions()
+ */
+ public ICDIInstruction[] getInstructions() {
+ MIAsm[] asms = srcAsm.getMIAsms();
+ ICDIInstruction[] instructions = new ICDIInstruction[asms.length];
+ for (int i = 0; i < asms.length; i++) {
+ instructions[i] = new Instruction(getCTarget(), asms[i]);
+ }
+ return instructions;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction#getLineNumber()
+ */
+ public int getLineNumber() {
+ return srcAsm.getLine();
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java 9 Jan 2003 03:44:04 -0000
@@ -0,0 +1,320 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MIFormat;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.Format;
+import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
+import org.eclipse.cdt.debug.mi.core.cdi.RegisterObject;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterValues;
+import org.eclipse.cdt.debug.mi.core.command.MIDataWriteRegisterValues;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
+import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterValuesInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIRegisterValue;
+
+/**
+ */
+public class Register extends CObject implements ICDIRegister, ICDIValue {
+
+ RegisterObject regObject;
+ int format = MIFormat.HEXADECIMAL;
+ Register parent;
+ String lastname;
+
+ /**
+ * A container class to hold the values of the registers and sub values
+ * for example on x86, xmm0 register is consider to be a struct
+ * gdb/mi -data-list-register-values returns the value like this
+ * value="{f = {0x0, 0x0, 0x0, 0x0}}"
+ * we'll parse() it and change it to:
+ * Argument[0] = { "xmm0", "{f = {0x0, 0x0, 0x0, 0x0}}"
+ * Argument[1] = { "xmm0.f", "{0x0, 0x0, 0x0, 0x0}"}
+ * Argument[2] = { "xmm0.f.0", "0x0"}
+ * Argument[3] = { "xmm0.f.1", "0x0"}
+ * Argument[4] = { "xmm0.f.2", "0x0"}
+ * Argument[5] = { "xmm0.f.3", "0x0"}
+ * see @parse()
+ */
+ class Argument {
+ String name;
+ String val;
+ Argument(String n, String v) {
+ name = n;
+ val = v;
+ }
+ String getKey() {
+ return name;
+ }
+ String getValue() {
+ return val;
+ }
+ }
+
+ public Register(CTarget target, ICDIRegisterObject r) {
+ super(target);
+ parent = null;
+ lastname = r.getName();
+ regObject = (RegisterObject)r;
+ }
+
+ public Register(Register p, String n) {
+ super(p.getCTarget());
+ parent = p;
+ lastname = n;
+ }
+
+ /**
+ * return the MI regno.
+ */
+ public int getId() {
+ return regObject.getId();
+ }
+
+ /**
+ * Returns a Unique name separated by '.' to describe the path
+ * for example xmm0.f.0
+ */
+ public String getUniqName() {
+ String n = "";
+ if (parent != null) {
+ n = parent.getUniqName() + "." + getLastName();
+ } else {
+ n = getLastName();
+ }
+ return n;
+ }
+
+ /**
+ * Returns the name of the register, for example xmm0.
+ */
+ public String getBaseName() {
+ String base = "";
+ if (parent != null) {
+ base = parent.getBaseName();
+ } else {
+ base = getLastName();
+ }
+ return base;
+ }
+
+ /**
+ * Returns the current name for xmm0.f the last name is "f".
+ */
+ public String getLastName() {
+ return lastname;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getName()
+ */
+ public String getName() throws CDIException {
+ return getLastName();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getTypeName()
+ */
+ public String getTypeName() throws CDIException {
+ String v = getValueString();
+ if (v.startsWith("{")) {
+ // Use ptype?
+ return "struct ";
+ }
+ return "int";
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getValue()
+ */
+ public ICDIValue getValue() throws CDIException {
+ return this;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getValueString()
+ */
+ public String getValueString() throws CDIException {
+ if (parent == null) {
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ int[] regno = new int[]{regObject.getId()};
+ MIDataListRegisterValues registers =
+ factory.createMIDataListRegisterValues(format, regno);
+ try {
+ mi.postCommand(registers);
+ MIDataListRegisterValuesInfo info =
+ registers.getMIDataListRegisterValuesInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ MIRegisterValue[] regValues = info.getMIRegisterValues();
+ // We only ask for one. But do the right thing
+ for (int i = 0; i < regValues.length; i++) {
+ if (regValues[i].getNumber() == regno[i]) {
+ return regValues[i].getValue();
+ }
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ } else {
+ String u = getUniqName();
+ String v = parent.getValueString();
+ Argument[] args = parse(parent.getUniqName(), v);
+ for (int i = 0; i < args.length; i++) {
+ if (u.equals(args[i].getKey())) {
+ return args[i].getValue();
+ }
+ }
+ }
+ return "";
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#isEditable()
+ */
+ public boolean isEditable() throws CDIException {
+ return false;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(ICDIValue)
+ */
+ public void setValue(ICDIValue val) throws CDIException {
+ setValue(val.getValueString());
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(String)
+ */
+ public void setValue(String expression) throws CDIException {
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ int[] regnos = new int[]{regObject.getId()};
+ String[] values = new String[]{expression};
+ MIDataWriteRegisterValues registers =
+ factory.createMIDataWriteRegisterValues(format, regnos, values);
+ try {
+ mi.postCommand(registers);
+ MIInfo info = registers.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ // If the assign was succesfull fire a MIRegisterChangedEvent()
+ MIRegisterChangedEvent change = new MIRegisterChangedEvent(registers.getToken(),
+ regObject.getName(), regObject.getId());
+ mi.fireEvent(change);
+
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setFormat()
+ */
+ public void setFormat(int fmt) throws CDIException {
+ format = Format.toMIFormat(fmt);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getChildrenNumber()
+ */
+ public int getChildrenNumber() throws CDIException {
+ return getVariables().length;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
+ */
+ public ICDIVariable[] getVariables() throws CDIException {
+ List aList = new ArrayList(1);
+ String v = getValueString();
+ Argument[] args = parse(getUniqName(), v);
+ /* The idea here s to get the first level
+ *
+ * Argument[0] = { "xmm0", "{f = {0x0, 0x0, 0x0, 0x0}}"
+ * Argument[1] = { "xmm0.f", "{0x0, 0x0, 0x0, 0x0}"}
+ * Argument[2] = { "xmm0.f.0", "0x0"}
+ * Argument[3] = { "xmm0.f.1", "0x0"}
+ * Argument[4] = { "xmm0.f.2", "0x0"}
+ * Argument[5] = { "xmm0.f.3", "0x0"}
+ *
+ * For example the children or xmm0.f are xmm0.f.{0,1,2,3,}
+ *
+ */
+ for (int i = 0; i < args.length; i++) {
+ String n = args[i].getKey();
+ String u = getUniqName();
+ if (n.startsWith(u) && n.length() > u.length()) {
+ String p = n.substring(u.length());
+ StringTokenizer st = new StringTokenizer(p, ".");
+ if (st.countTokens() == 1) {
+ aList.add(new Register(this, (String)st.nextElement()));
+ }
+ }
+ }
+ return (ICDIVariable[])aList.toArray(new ICDIVariable[0]);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#hasChildren()
+ */
+ public boolean hasChildren() throws CDIException {
+ return getChildrenNumber() > 0;
+ }
+
+ /**
+ * We are parsing this:
+ * "{f = {0x0, 0x0, 0x0, 0x0}}"
+ * into:
+ * Argument[0] = { "xmm0", "{f = {0x0, 0x0, 0x0, 0x0}}"
+ * Argument[1] = { "xmm0.f", "{0x0, 0x0, 0x0, 0x0}"}
+ * Argument[2] = { "xmm0.f.0", "0x0"}
+ * Argument[3] = { "xmm0.f.1", "0x0"}
+ * Argument[4] = { "xmm0.f.2", "0x0"}
+ * Argument[5] = { "xmm0.f.3", "0x0"}
+ */
+ Argument[] parse(String base, String v) throws CDIException {
+ List aList = new ArrayList(1);
+ StringBuffer sb = new StringBuffer(base);
+ aList.add(new Argument(sb.toString(), v.trim()));
+ while (v.startsWith("{")) {
+ int idx;
+ v = v.substring(1);
+ if (v.endsWith("}")) {
+ idx = v.lastIndexOf('}');
+ v = v.substring(0, idx);
+ }
+ idx = v.indexOf('=');
+ if (idx != -1) {
+ String n = v.substring(0, idx).trim();
+ sb.append('.').append(n);
+ v = v.substring(idx + 1).trim();
+ aList.add(new Argument(sb.toString(), v));
+ } else {
+ StringTokenizer st = new StringTokenizer(v, ",");
+ for (int i = 0; st.hasMoreElements(); i++) {
+ aList.add(new Argument(sb.toString() + "." + Integer.toString(i), ((String)st.nextElement()).trim()));
+ }
+ }
+ }
+ return (Argument[])aList.toArray(new Argument[0]);
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/StackFrame.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/StackFrame.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/StackFrame.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/StackFrame.java 9 Jan 2003 03:44:04 -0000
@@ -0,0 +1,168 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.ICDILocation;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.Location;
+import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIStackListArguments;
+import org.eclipse.cdt.debug.mi.core.command.MIStackListLocals;
+import org.eclipse.cdt.debug.mi.core.output.MIArg;
+import org.eclipse.cdt.debug.mi.core.output.MIFrame;
+import org.eclipse.cdt.debug.mi.core.output.MIStackListArgumentsInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIStackListLocalsInfo;
+
+/**
+ */
+public class StackFrame extends CObject implements ICDIStackFrame {
+
+ MIFrame frame;
+ CThread cthread;
+
+ public StackFrame(CThread thread, MIFrame f) {
+ super(thread.getCTarget());
+ cthread = thread;
+ frame = f;
+ }
+
+ MIFrame getMIFrame() {
+ return frame;
+ }
+
+ public CThread getCThread() {
+ return cthread;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getArguments()
+ */
+ public ICDIArgument[] getArguments() throws CDIException {
+ List cdiList = new ArrayList();
+ if (frame != null) {
+ CSession session = getCTarget().getCSession();
+ VariableManager mgr = (VariableManager)session.getVariableManager();
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ int level = frame.getLevel();
+ MIStackListArguments listArgs =
+ factory.createMIStackListArguments(false, level, level);
+ try {
+ cthread.setCurrentStackFrame(this);
+ MIArg[] args = null;
+ mi.postCommand(listArgs);
+ MIStackListArgumentsInfo info =
+ listArgs.getMIStackListArgumentsInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ MIFrame[] miFrames = info.getMIFrames();
+ if (miFrames != null && miFrames.length == 1) {
+ args = miFrames[0].getArgs();
+ }
+ if (args != null) {
+ for (int i = 0; i < args.length; i++) {
+ try {
+ cdiList.add(mgr.createArgument(this, args[i].getName()));
+ } catch (CDIException e) {
+ }
+ }
+ }
+ } catch (MIException e) {
+ //throw new CDIException(e.getMessage());
+ //System.err.println(e);
+ } catch (CDIException e) {
+ //throw e;
+ //System.err.println(e);
+ }
+ }
+ return (ICDIArgument[])cdiList.toArray(new ICDIArgument[0]);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLocalVariables()
+ */
+ public ICDIVariable[] getLocalVariables() throws CDIException {
+ List cdiList = new ArrayList();
+ CSession session = getCTarget().getCSession();
+ VariableManager mgr = (VariableManager)session.getVariableManager();
+ MISession mi = session.getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIStackListLocals locals = factory.createMIStackListLocals(false);
+ try {
+ cthread.setCurrentStackFrame(this);
+ MIArg[] args = null;
+ mi.postCommand(locals);
+ MIStackListLocalsInfo info = locals.getMIStackListLocalsInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ args = info.getLocals();
+ if (args != null) {
+ for (int i = 0; i < args.length; i++) {
+ try {
+ cdiList.add(mgr.createVariable(this, args[i].getName()));
+ } catch (CDIException e) {
+ }
+ }
+ }
+ } catch (MIException e) {
+ //throw new CDIException(e.getMessage());
+ //System.err.println(e);
+ } catch (CDIException e) {
+ //throw e;
+ //System.err.println(e);
+ }
+ return (ICDIVariable[])cdiList.toArray(new ICDIVariable[0]);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLocation()
+ */
+ public ICDILocation getLocation() {
+ if (frame != null) {
+ return new Location(frame.getFile(), frame.getFunction(),
+ frame.getLine(), frame.getAddress());
+ }
+ return new Location("", "", 0, 0);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLevel()
+ */
+ public int getLevel() {
+ if (frame != null) {
+ return frame.getLevel();
+ }
+ return 0;
+ }
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#equals(ICDIStackFrame)
+ */
+ public boolean equals(ICDIStackFrame stackframe) {
+ if (stackframe instanceof StackFrame) {
+ StackFrame stack = (StackFrame)stackframe;
+ return cthread != null &&
+ cthread.equals(stack.getCThread()) &&
+ frame != null &&
+ frame.getLevel() == stack.getMIFrame().getLevel() &&
+ frame.getFile().equals(stack.getMIFrame().getFile()) &&
+ frame.getFunction().equals(stack.getMIFrame().getFunction());
+ }
+ return super.equals(stackframe);
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Value.java 9 Jan 2003 03:44:02 -0000
@@ -0,0 +1,124 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
+import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIVarEvaluateExpression;
+import org.eclipse.cdt.debug.mi.core.command.MIVarListChildren;
+import org.eclipse.cdt.debug.mi.core.output.MIVar;
+import org.eclipse.cdt.debug.mi.core.output.MIVarEvaluateExpressionInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIVarListChildrenInfo;
+
+/**
+ */
+public class Value extends CObject implements ICDIValue {
+
+ Variable variable;
+
+ public Value(Variable v) {
+ super(v.getCTarget());
+ variable = v;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getTypeName()
+ */
+ public String getTypeName() throws CDIException {
+ return variable.getTypeName();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getValueString()
+ */
+ public String getValueString() throws CDIException {
+ String result = "";
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIVarEvaluateExpression var =
+ factory.createMIVarEvaluateExpression(variable.getMIVar().getVarName());
+ try {
+ mi.postCommand(var);
+ MIVarEvaluateExpressionInfo info = var.getMIVarEvaluateExpressionInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ result = info.getValue();
+ } catch (MIException e) {
+ //throw new CDIException(e.getMessage());
+ }
+ return result;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
+ */
+ public int getChildrenNumber() throws CDIException {
+ return variable.getMIVar().getNumChild();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
+ */
+ public boolean hasChildren() throws CDIException {
+ /*
+ int number = 0;
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIVarInfoNumChildren children =
+ factory.createMIVarInfoNumChildren(variable.getMIVar().getVarName());
+ try {
+ mi.postCommand(children);
+ MIVarInfoNumChildrenInfo info = children.getMIVarInfoNumChildrenInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ number = info.getChildNumber();
+ } catch (MIException e) {
+ throw new CDIException(e.getMessage());
+ }
+ return (number > 0);
+ */
+ return (getChildrenNumber() > 0);
+ }
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIValue#getVariables()
+ */
+ public ICDIVariable[] getVariables() throws CDIException {
+ Variable[] variables = null;
+ CSession session = getCTarget().getCSession();
+ MISession mi = session.getMISession();
+ VariableManager mgr = (VariableManager)session.getVariableManager();
+ CommandFactory factory = mi.getCommandFactory();
+ MIVarListChildren var =
+ factory.createMIVarListChildren(variable.getMIVar().getVarName());
+ try {
+ mi.postCommand(var);
+ MIVarListChildrenInfo info = var.getMIVarListChildrenInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ MIVar[] vars = info.getMIVars();
+ variables = new Variable[vars.length];
+ for (int i = 0; i < vars.length; i++) {
+ variables[i] = mgr.createVariable(variable.getStackFrame(),
+ vars[i].getExp(), vars[i]);
+
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ return variables;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java 9 Jan 2003 03:44:04 -0000
@@ -0,0 +1,149 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.Format;
+import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIVarAssign;
+import org.eclipse.cdt.debug.mi.core.command.MIVarSetFormat;
+import org.eclipse.cdt.debug.mi.core.command.MIVarShowAttributes;
+import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
+import org.eclipse.cdt.debug.mi.core.output.MIInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIVar;
+import org.eclipse.cdt.debug.mi.core.output.MIVarShowAttributesInfo;
+
+/**
+ */
+public class Variable extends CObject implements ICDIVariable {
+
+ MIVar miVar;
+ String name;
+ Value value;
+ StackFrame stack;
+
+ public Variable(StackFrame stackframe, String n, MIVar v) {
+ super(stackframe.getCTarget());
+ stack = stackframe;
+ name = n;
+ miVar = v;
+ }
+
+ StackFrame getStackFrame() {
+ return stack;
+ }
+
+ public MIVar getMIVar() {
+ return miVar;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getName()
+ */
+ public String getName() throws CDIException {
+ return name;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getTypeName()
+ */
+ public String getTypeName() throws CDIException {
+ return miVar.getType();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getValue()
+ */
+ public ICDIValue getValue() throws CDIException {
+ if (value == null) {
+ value = new Value(this);
+ }
+ return value;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(ICDIValue)
+ */
+ public void setValue(ICDIValue value) throws CDIException {
+ setValue(value.getValueString());
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(String)
+ */
+ public void setValue(String expression) throws CDIException {
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIVarAssign var = factory.createMIVarAssign(miVar.getVarName(), expression);
+ try {
+ mi.postCommand(var);
+ MIInfo info = var.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+
+ // If the assign was succesfull fire a MIVarChangedEvent()
+ MIVarChangedEvent change = new MIVarChangedEvent(var.getToken(), miVar.getVarName(), true);
+ mi.fireEvent(change);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#isEditable()
+ */
+ public boolean isEditable() throws CDIException {
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIVarShowAttributes var = factory.createMIVarShowAttributes(miVar.getVarName());
+ try {
+ mi.postCommand(var);
+ MIVarShowAttributesInfo info = var.getMIVarShowAttributesInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ return info.isEditable();
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setFormat()
+ */
+ public void setFormat(int format) throws CDIException {
+ int fmt = Format.toMIFormat(format);
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ MIVarSetFormat var = factory.createMIVarSetFormat(miVar.getVarName(), fmt);
+ try {
+ mi.postCommand(var);
+ MIInfo info = var.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#equals()
+ */
+ public boolean equals(ICDIVariable var) {
+ if (var instanceof Variable) {
+ Variable variable = (Variable)var;
+ return miVar.getVarName().equals(variable.getMIVar().getVarName());
+ }
+ return super.equals(var);
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Watchpoint.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/Watchpoint.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/Watchpoint.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Watchpoint.java 9 Jan 2003 03:44:02 -0000
@@ -0,0 +1,42 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint;
+import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
+import org.eclipse.cdt.debug.mi.core.output.MIBreakpoint;
+
+/**
+ */
+public class Watchpoint extends Breakpoint implements ICDIWatchpoint {
+
+ public Watchpoint(BreakpointManager m, MIBreakpoint miBreak) {
+ super(m, miBreak);
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#getWatchExpression()
+ */
+ public String getWatchExpression() throws CDIException {
+ return getMIBreakpoint().getWhat();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isReadType()
+ */
+ public boolean isReadType() {
+ return getMIBreakpoint().isReadWatchpoint() || getMIBreakpoint().isAccessWatchpoint();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.ICDIWatchpoint#isWriteType()
+ */
+ public boolean isWriteType() {
+ return getMIBreakpoint().isAccessWatchpoint() || getMIBreakpoint().isWriteWatchpoint();
+ }
+
+}