From c59a365bc39213f70417fef3702a585afb8cd2b3 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Fri, 19 Nov 2004 22:32:37 +0000 Subject: [PATCH] Use the qualified name when creating a register. Destroy the corresponding gdb variable on register's disposal. Added the "dispose" method to the "Register" class. --- debug/org.eclipse.cdt.debug.mi.core/ChangeLog | 8 ++++++ .../debug/mi/core/cdi/RegisterManager.java | 27 +++++++++++++++++-- .../cdt/debug/mi/core/cdi/model/Register.java | 10 +++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog index f22f5ee8867..3344c46928a 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog @@ -1,3 +1,11 @@ +2004-11-19 Alain Magloire + Use the qualified name when creating a register. + Destroy the corresponding gdb variable on register's disposal. + * cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java + + Added the "dispose" method. + * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java + 2004-11-19 Alain Magloire RegisterManager.findRegister() was not implemented correctly * cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java index 20ea6b3dcd7..ff5cf4278a7 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java @@ -32,12 +32,14 @@ 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; import org.eclipse.cdt.debug.mi.core.command.MIVarCreate; +import org.eclipse.cdt.debug.mi.core.command.MIVarDelete; import org.eclipse.cdt.debug.mi.core.command.MIVarUpdate; import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent; import org.eclipse.cdt.debug.mi.core.output.MIDataListChangedRegistersInfo; import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo; +import org.eclipse.cdt.debug.mi.core.output.MIVar; import org.eclipse.cdt.debug.mi.core.output.MIVarChange; import org.eclipse.cdt.debug.mi.core.output.MIVarCreateInfo; import org.eclipse.cdt.debug.mi.core.output.MIVarUpdateInfo; @@ -102,7 +104,7 @@ public class RegisterManager extends Manager { Register reg = findRegister(regDesc); if (reg == null) { try { - String name = "$" + regDesc.getName(); //$NON-NLS-1$ + String name = regDesc.getQualifiedName(); //$NON-NLS-1$ Target target = (Target)regDesc.getTarget(); MISession mi = target.getMISession(); CommandFactory factory = mi.getCommandFactory(); @@ -127,7 +129,28 @@ public class RegisterManager extends Manager { Target target = (Target)reg.getTarget(); List regList = (List)regsMap.get(target); if (regList != null) { - regList.remove(reg); + if (regList.remove(reg)) { + MISession miSession = target.getMISession(); + try { + removeMIVar(miSession, reg.getMIVar()); + } catch (CDIException e) { + // + } + } + } + } + + /** + * Tell gdb to remove the underlying var-object also. + */ + void removeMIVar(MISession miSession, MIVar miVar) throws CDIException { + CommandFactory factory = miSession.getCommandFactory(); + MIVarDelete var = factory.createMIVarDelete(miVar.getVarName()); + try { + miSession.postCommand(var); + var.getMIInfo(); + } catch (MIException e) { + throw new MI2CDIException(e); } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java index f88a97ec394..1b99a27e45d 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java @@ -10,7 +10,11 @@ *******************************************************************************/ 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.ICDIRegister; +import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; +import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager; +import org.eclipse.cdt.debug.mi.core.cdi.Session; import org.eclipse.cdt.debug.mi.core.output.MIVar; /** @@ -53,4 +57,10 @@ public class Register extends Variable implements ICDIRegister { return new Register(target, thread, frame, name, fullName, pos, depth, miVar); } + public void dispose() throws CDIException { + ICDITarget target = getTarget(); + RegisterManager regMgr = ((Session)target.getSession()).getRegisterManager(); + regMgr.destroyRegister(this); + } + }