Przeglądaj źródła

step in works now in both directions

Kolja Strohm 6 lat temu
rodzic
commit
b65ecf32a0

+ 31 - 0
small.json

@@ -0,0 +1,31 @@
+{
+  "layers": [
+    [
+      {
+        "name": "n1"
+      },
+      {
+        "name": "n2"
+      }
+    ],
+    [
+      {
+        "name": "n3"
+      },
+      {
+        "name": "n4"
+      }
+    ]
+  ],
+  "edges": [
+    {
+      "source": "n1",
+      "target": "n4"
+    },
+    {
+      "source": "n2",
+      "target": "n4"
+    }
+  ],
+  "name": "n1"
+}

+ 1 - 6
src/codeline/SetVariable.java

@@ -14,7 +14,6 @@ import processor.Memory.Visibility;
  */
 public abstract class SetVariable <T> extends CodeLine {
 
-    private boolean oldExists;
     private String name;
     
     public SetVariable( String name )
@@ -25,14 +24,10 @@ public abstract class SetVariable <T> extends CodeLine {
     @Override
     public ControlFlow runForward(Memory m) {
         
-        oldExists = m.isDefined( name, Visibility.LOCAL );
         T oldVal = m.read( name, Visibility.LOCAL );
         m.write( name, value( m.createReadOnlyMemory() ), Visibility.LOCAL );
         actions.push( (Memory mem) -> {
-            if( !oldExists )
-                mem.undeclare( name, Visibility.LOCAL );
-            else
-                mem.write( name, oldVal, Visibility.LOCAL );
+            mem.write( name, oldVal, Visibility.LOCAL );
         });
         return new ControlFlow( ControlFlow.STEP_OVER );
     }

+ 1 - 1
src/main/Main.java

@@ -17,7 +17,7 @@ public class Main {
      * @param args the command line arguments, currently not in use
      */
     public static void main(String[] args) {
-        Reader r = new Reader( "logo.json" );
+        Reader r = new Reader( "small.json" );
         LayeredGraphNode graph = r.readInputGraph();
         SimpleNodePlacement.placeNodes( graph );
         new MainView( graph );

+ 2 - 0
src/processor/StackFrame.java

@@ -36,6 +36,8 @@ public class StackFrame {
     
     public <T> void declare( String name, T value )
     {
+        if( data.containsKey( name ) )
+            throw new IllegalStateException( "Variable is already declared" );
         data.put( name, (Object)value );
     }
     

+ 2 - 2
src/test/StepInProcessor.java

@@ -6,7 +6,7 @@ import graph.LayeredGraphNode;
 import processor.PseudoCodeNode;
 import processor.PseudoCodeProcessor;
 
-class StepInProcessor extends PseudoCodeProcessor{
+public class StepInProcessor extends PseudoCodeProcessor{
 
     public StepInProcessor(PseudoCodeNode start, LayeredGraphNode graph, JFrame view) {
         super(start, graph, view);
@@ -41,13 +41,13 @@ class StepInProcessor extends PseudoCodeProcessor{
         {
             CodeStatus status = null;
             try {
+                backwardStep();
                 status = backwardStep();
                 if( status == CodeStatus.FINISHED )
                 {
                     System.out.println( "Step Into works in backward direction.");
                     break;
                 }
-                backwardStep();
                 forwardStep();
             } catch (Exception e) {
                 e.printStackTrace();

+ 1 - 1
src/test/TestProcessor.java

@@ -11,7 +11,7 @@ import processor.PseudoCodeNode;
 
 class TestProcessor {
     
-    static void main(String[] args) {
+    public static void main(String[] args) {
         Reader r = new Reader( "logo.json" );
         LayeredGraphNode graph = r.readInputGraph();
         SimpleNodePlacement.placeNodes( graph );

+ 1 - 0
src/view/MainView.java

@@ -50,6 +50,7 @@ import processor.Action;
 import processor.ProcessController;
 import processor.PseudoCodeNode;
 import processor.PseudoCodeProcessor;
+import test.StepInProcessor;
 
 /**
  * The main window of the application.