Added threads, stackframes, and registers to the debug model
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / launch / MachineRegisterGroup.java
diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MachineRegisterGroup.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/launch/MachineRegisterGroup.java
new file mode 100644 (file)
index 0000000..081ec41
--- /dev/null
@@ -0,0 +1,74 @@
+package net.mograsim.plugin.launch;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.model.IDebugTarget;
+import org.eclipse.debug.core.model.IRegister;
+import org.eclipse.debug.core.model.IRegisterGroup;
+
+import net.mograsim.machine.Machine;
+import net.mograsim.machine.Register;
+import net.mograsim.plugin.MograsimActivator;
+
+public class MachineRegisterGroup extends PlatformObject implements IRegisterGroup
+{
+       private final MachineStackFrame stackFrame;
+       private final List<MachineRegister> registers;
+
+       public MachineRegisterGroup(MachineStackFrame stackFrame)
+       {
+               this.stackFrame = stackFrame;
+               Set<Register> machineRegisters = getMachine().getDefinition().getRegisters();
+               List<MachineRegister> registersModifiable = machineRegisters.stream().map(r -> new MachineRegister(this, r))
+                               .collect(Collectors.toList());
+               this.registers = Collections.unmodifiableList(registersModifiable);
+       }
+
+       @Override
+       public String getModelIdentifier()
+       {
+               return MograsimActivator.PLUGIN_ID;
+       }
+
+       public Machine getMachine()
+       {
+               return stackFrame.getMachine();
+       }
+
+       @Override
+       public IDebugTarget getDebugTarget()
+       {
+               return stackFrame.getDebugTarget();
+       }
+
+       @Override
+       public ILaunch getLaunch()
+       {
+               return stackFrame.getLaunch();
+       }
+
+       @Override
+       public String getName() throws DebugException
+       {
+               return "pseudo register group";
+       }
+
+       @Override
+       public IRegister[] getRegisters() throws DebugException
+       {
+               // TODO sort
+               return registers.toArray(IRegister[]::new);
+       }
+
+       @Override
+       public boolean hasRegisters() throws DebugException
+       {
+               return true;
+       }
+}
\ No newline at end of file