Some work on improving BitVector<->String conversions
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / launch / MachineRegister.java
index 8c0685d..e470420 100644 (file)
@@ -3,6 +3,7 @@ package net.mograsim.plugin.launch;
 import java.util.Arrays;
 import java.util.function.Consumer;
 
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.PlatformObject;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugEvent;
@@ -17,8 +18,9 @@ import org.eclipse.debug.core.model.IValue;
 import org.eclipse.swt.SWT;
 
 import net.mograsim.logic.core.types.BitVector;
+import net.mograsim.logic.core.types.BitVectorFormatter;
 import net.mograsim.machine.Machine;
-import net.mograsim.machine.Register;
+import net.mograsim.machine.registers.Register;
 import net.mograsim.plugin.MograsimActivator;
 
 public class MachineRegister extends PlatformObject implements IRegister
@@ -95,14 +97,17 @@ public class MachineRegister extends PlatformObject implements IRegister
 
        public String getValueString()
        {
-               return getMachine().getRegister(machineRegister).toString();
+               return BitVectorFormatter.formatAsString(getMachine().getRegister(machineRegister));
        }
 
        @Override
        public void setValue(String expression) throws DebugException
        {
-               // TODO exception handling
-               getMachine().setRegister(machineRegister, BitVector.parse(expression));
+               BitVector bitvector = BitVectorFormatter.parseUserBitVector(expression, machineRegister.getWidth());
+               if (bitvector == null)
+                       throw new DebugException(
+                                       new Status(IStatus.ERROR, MograsimActivator.PLUGIN_ID, "Couldn't parse value string: " + expression, null));
+               getMachine().setRegister(machineRegister, bitvector);
        }
 
        @Override
@@ -122,16 +127,7 @@ public class MachineRegister extends PlatformObject implements IRegister
        @Override
        public boolean verifyValue(String expression) throws DebugException
        {
-               // TODO do this prettier; also check length too
-               try
-               {
-                       BitVector.parse(expression);
-               }
-               catch (@SuppressWarnings("unused") Exception e)
-               {
-                       return false;
-               }
-               return true;
+               return BitVectorFormatter.parseUserBitVector(expression, machineRegister.getWidth()) != null;
        }
 
        @Override