Commit e7c3af0d authored by LULUDBR\Lulu's avatar LULUDBR\Lulu
Browse files

Merge remote-tracking branch 'origin/master'

parents b36a3c1f 93bd3ef3
...@@ -114,6 +114,7 @@ public class TransformAst implements ScriptLanguageVisitor<Object> { ...@@ -114,6 +114,7 @@ public class TransformAst implements ScriptLanguageVisitor<Object> {
s.setSignature(sig); s.setSignature(sig);
} }
s.setBody((Statements) ctx.body.accept(this)); s.setBody((Statements) ctx.body.accept(this));
s.getBody().setParent(s);
return s; return s;
} }
......
...@@ -98,13 +98,9 @@ public class MatcherFacadeTest { ...@@ -98,13 +98,9 @@ public class MatcherFacadeTest {
shouldMatch("1*j", "1 + ?Y", "[]"); shouldMatch("1*j", "1 + ?Y", "[]");
shouldMatch("1*j", "1 * ?Y", "[{?Y=j}]"); shouldMatch("1*j", "1 * ?Y", "[{?Y=j}]");
//does not match
shouldMatch("1*j", "?Y * 1", "[{?Y=j}]"); shouldMatch("1*j", "?Y * 1", "[{?Y=j}]");
//shouldMatch("f(a) ==> f(a), f(b)" , "==> f(?X)", [{?X=a}]);
//shouldMatch("f(a) ==> f(a), f(b)" , "f(a) ==> f(?X)", [{?X=a}]);
//shouldNotMatch("f(a) ==> f(a), f(b)" , "f(?X) ==> f(?X), f(a)");
} }
@Test @Test
......
package edu.kit.iti.formal.psdbg.interpreter; package edu.kit.iti.formal.psdbg.interpreter;
import de.uka.ilkd.key.api.ProofApi;
import de.uka.ilkd.key.java.Services; import de.uka.ilkd.key.java.Services;
import de.uka.ilkd.key.logic.Name; import de.uka.ilkd.key.logic.Name;
import de.uka.ilkd.key.logic.Term; import de.uka.ilkd.key.logic.Term;
...@@ -163,10 +162,11 @@ public class KeYMatcher implements MatcherApi<KeyData> { ...@@ -163,10 +162,11 @@ public class KeYMatcher implements MatcherApi<KeyData> {
private Value<String> toValueTerm(KeyData currentState, Term matched) { private Value<String> toValueTerm(KeyData currentState, Term matched) {
String reprTerm = LogicPrinter.quickPrintTerm(matched, currentState.getEnv().getServices()); String reprTerm = LogicPrinter.quickPrintTerm(matched, currentState.getEnv().getServices());
//Hack: to avoid newlines
String reprTermReformatted = reprTerm.trim();
return new Value<>( return new Value<>(
new TermType(new SortType(matched.sort())), new TermType(new SortType(matched.sort())),
reprTerm reprTermReformatted
); );
} }
......
...@@ -4,7 +4,6 @@ import de.uka.ilkd.key.control.AbstractUserInterfaceControl; ...@@ -4,7 +4,6 @@ import de.uka.ilkd.key.control.AbstractUserInterfaceControl;
import de.uka.ilkd.key.control.DefaultUserInterfaceControl; import de.uka.ilkd.key.control.DefaultUserInterfaceControl;
import de.uka.ilkd.key.macros.scripts.EngineState; import de.uka.ilkd.key.macros.scripts.EngineState;
import de.uka.ilkd.key.macros.scripts.ProofScriptCommand; import de.uka.ilkd.key.macros.scripts.ProofScriptCommand;
import de.uka.ilkd.key.macros.scripts.meta.ProofScriptArgument;
import de.uka.ilkd.key.proof.Goal; import de.uka.ilkd.key.proof.Goal;
import de.uka.ilkd.key.proof.Node; import de.uka.ilkd.key.proof.Node;
import edu.kit.iti.formal.psdbg.interpreter.Interpreter; import edu.kit.iti.formal.psdbg.interpreter.Interpreter;
...@@ -15,10 +14,14 @@ import edu.kit.iti.formal.psdbg.interpreter.data.VariableAssignment; ...@@ -15,10 +14,14 @@ import edu.kit.iti.formal.psdbg.interpreter.data.VariableAssignment;
import edu.kit.iti.formal.psdbg.parser.ast.CallStatement; import edu.kit.iti.formal.psdbg.parser.ast.CallStatement;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.key_project.util.collection.ImmutableList; import org.key_project.util.collection.ImmutableList;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
...@@ -61,7 +64,11 @@ public class ProofScriptCommandBuilder implements CommandHandler<KeyData> { ...@@ -61,7 +64,11 @@ public class ProofScriptCommandBuilder implements CommandHandler<KeyData> {
GoalNode<KeyData> expandedNode = state.getSelectedGoalNode(); GoalNode<KeyData> expandedNode = state.getSelectedGoalNode();
KeyData kd = expandedNode.getData(); KeyData kd = expandedNode.getData();
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
params.asMap().forEach((k, v) -> map.put(k.getIdentifier(), v.getData().toString())); params.asMap().forEach((k, v) -> {
System.out.println("v.getData().toString() = " + v.getData().toString());
map.put(k.getIdentifier(), v.getData().toString());
}
);
try { try {
EngineState estate = new EngineState(kd.getProof()); EngineState estate = new EngineState(kd.getProof());
estate.setGoal(kd.getNode()); estate.setGoal(kd.getNode());
...@@ -100,6 +107,17 @@ public class ProofScriptCommandBuilder implements CommandHandler<KeyData> { ...@@ -100,6 +107,17 @@ public class ProofScriptCommandBuilder implements CommandHandler<KeyData> {
@Override @Override
public String getHelp(CallStatement call) { public String getHelp(CallStatement call) {
ProofScriptCommand c = commands.get(call.getCommand()); ProofScriptCommand c = commands.get(call.getCommand());
URL res = getClass().getResource("/commands/" + call.getCommand() + ".html");
try {
return IOUtils.toString(res.toURI(), "utf-8");
} catch (NullPointerException | IOException | URISyntaxException e) {
return "No Help found for " + call.getCommand();
}
/*
StringBuilder html = new StringBuilder(); StringBuilder html = new StringBuilder();
...@@ -150,5 +168,6 @@ public class ProofScriptCommandBuilder implements CommandHandler<KeyData> { ...@@ -150,5 +168,6 @@ public class ProofScriptCommandBuilder implements CommandHandler<KeyData> {
html.append("</body></html>"); html.append("</body></html>");
return html.toString(); return html.toString();
*/
} }
} }
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
</html>
\ No newline at end of file
...@@ -161,10 +161,10 @@ public class Interpreter<T> extends DefaultASTVisitor<Object> ...@@ -161,10 +161,10 @@ public class Interpreter<T> extends DefaultASTVisitor<Object>
} }
private Value evaluate(GoalNode<T> g, Expression expr) { private Value evaluate(GoalNode<T> g, Expression expr) {
enterScope(expr); //enterScope(expr);
Evaluator<T> evaluator = new Evaluator<>(g.getAssignments(), g); Evaluator<T> evaluator = new Evaluator<>(g.getAssignments(), g);
evaluator.setMatcher(matcherApi); evaluator.setMatcher(matcherApi);
exitScope(expr); //exitScope(expr);
return evaluator.eval(expr); return evaluator.eval(expr);
} }
......
...@@ -134,7 +134,7 @@ public class DebuggerFramework<T> { ...@@ -134,7 +134,7 @@ public class DebuggerFramework<T> {
private void run() { private void run() {
try { try {
interpreter.interpret(mainScript); interpreter.interpret(mainScript);
//dummyproofnode ptreeManager.fireStatePointerChanged();
succeedListener.accept(this); succeedListener.accept(this);
} catch (Exception e) { } catch (Exception e) {
error = e; error = e;
......
...@@ -76,7 +76,7 @@ public class ProofTreeManager<T> { ...@@ -76,7 +76,7 @@ public class ProofTreeManager<T> {
int ctxLength = node.getContext().length; int ctxLength = node.getContext().length;
// We got a step deeper in the ASTNode stack. // We got a step deeper in the ASTNode stack.
// So we a caller // So we have a caller
if (getContextDepth() < ctxLength) { if (getContextDepth() < ctxLength) {
pushContext(); pushContext();
intoCurrentContext(node); intoCurrentContext(node);
......
package edu.kit.iti.formal.psdbg; package edu.kit.iti.formal.psdbg.interpreter.dbg;
import edu.kit.iti.formal.psdbg.interpreter.dbg.*;
public class StepIntoCommand<T> extends DebuggerCommand<T> { public class StepIntoCommand<T> extends DebuggerCommand<T> {
@Override @Override
public void execute(DebuggerFramework<T> dbg) { public void execute(DebuggerFramework<T> dbg) {
PTreeNode<T> statePointer = dbg.getStatePointer(); PTreeNode<T> statePointer = dbg.getStatePointer();
assert statePointer != null; assert statePointer != null;
if (statePointer.isAtomic()) { if (statePointer.isAtomic()) { // atomic same as step over
new StepOverCommand<T>().execute(dbg); new StepOverCommand<T>().execute(dbg);
} else { } else {
dbg.releaseUntil(new Blocker.CounterBlocker(1)); if (statePointer.getStepInto() != null) { // if there is already an step into take it!
dbg.setStatePointer(statePointer.getStepInto());
} else {
if (!statePointer.isLastNode()) { // execute non last commands, one step wide!
dbg.releaseUntil(new Blocker.CounterBlocker(1));
}
}
} }
} }
} }
package edu.kit.iti.formal.psdbg.interpreter.dbg; package edu.kit.iti.formal.psdbg.interpreter.dbg;
import lombok.val;
public class StepIntoReverseCommand<T> extends DebuggerCommand<T> { public class StepIntoReverseCommand<T> extends DebuggerCommand<T> {
@Override @Override
public void execute(DebuggerFramework<T> dbg) throws DebuggerException { public void execute(DebuggerFramework<T> dbg) throws DebuggerException {
val statePointer = dbg.getCurrentStatePointer(); PTreeNode<T> statePointer = dbg.getStatePointer();
PTreeNode<T> stepBack = statePointer.getStepInvInto() != null ? assert statePointer != null;
statePointer.getStepInvInto() :
statePointer.getStepInvOver();
if (stepBack == null) { if (statePointer.getStepInvInto() != null) {
info("There is no previous state to the current one."); dbg.setStatePointer(statePointer.getStepInvInto());
} else {
if (statePointer.getStepInvOver() != null) {
PTreeNode<T> statementBefore = statePointer.getStepInvOver();
dbg.setStatePointer(statementBefore);
} else{
dbg.setStatePointer(statePointer);
}
} }
dbg.setStatePointer(stepBack);
} }
} }
...@@ -114,7 +114,7 @@ public class ContractChooser extends Dialog<Contract> { ...@@ -114,7 +114,7 @@ public class ContractChooser extends Dialog<Contract> {
text.getChildren().add(contract); text.getChildren().add(contract);
text.getChildren().add(name); text.getChildren().add(name);
text.getChildren().add(new Text("\n")); text.getChildren().add(new Text("\n"));
//text.getChildren().add(tcontent); //text.getChildren().addCell(tcontent);
for (String line : content.split("\n")) { for (String line : content.split("\n")) {
if (line.contains(":")) { if (line.contains(":")) {
......
...@@ -15,11 +15,12 @@ import de.uka.ilkd.key.proof.init.ProofInputException; ...@@ -15,11 +15,12 @@ import de.uka.ilkd.key.proof.init.ProofInputException;
import de.uka.ilkd.key.proof.io.ProblemLoaderException; import de.uka.ilkd.key.proof.io.ProblemLoaderException;
import de.uka.ilkd.key.speclang.Contract; import de.uka.ilkd.key.speclang.Contract;
import edu.kit.iti.formal.psdbg.ShortCommandPrinter; import edu.kit.iti.formal.psdbg.ShortCommandPrinter;
import edu.kit.iti.formal.psdbg.StepIntoCommand;
import edu.kit.iti.formal.psdbg.examples.Examples; import edu.kit.iti.formal.psdbg.examples.Examples;
import edu.kit.iti.formal.psdbg.fmt.DefaultFormatter; import edu.kit.iti.formal.psdbg.fmt.DefaultFormatter;
import edu.kit.iti.formal.psdbg.gui.ProofScriptDebugger; import edu.kit.iti.formal.psdbg.gui.ProofScriptDebugger;
import edu.kit.iti.formal.psdbg.gui.controls.*; import edu.kit.iti.formal.psdbg.gui.controls.*;
import edu.kit.iti.formal.psdbg.gui.graph.Graph;
import edu.kit.iti.formal.psdbg.gui.graph.GraphView;
import edu.kit.iti.formal.psdbg.gui.model.DebuggerMainModel; import edu.kit.iti.formal.psdbg.gui.model.DebuggerMainModel;
import edu.kit.iti.formal.psdbg.gui.model.InspectionModel; import edu.kit.iti.formal.psdbg.gui.model.InspectionModel;
import edu.kit.iti.formal.psdbg.gui.model.InterpreterThreadState; import edu.kit.iti.formal.psdbg.gui.model.InterpreterThreadState;
...@@ -28,6 +29,7 @@ import edu.kit.iti.formal.psdbg.interpreter.KeYProofFacade; ...@@ -28,6 +29,7 @@ import edu.kit.iti.formal.psdbg.interpreter.KeYProofFacade;
import edu.kit.iti.formal.psdbg.interpreter.KeyInterpreter; import edu.kit.iti.formal.psdbg.interpreter.KeyInterpreter;
import edu.kit.iti.formal.psdbg.interpreter.data.GoalNode; import edu.kit.iti.formal.psdbg.interpreter.data.GoalNode;
import edu.kit.iti.formal.psdbg.interpreter.data.KeyData; import edu.kit.iti.formal.psdbg.interpreter.data.KeyData;
import edu.kit.iti.formal.psdbg.interpreter.data.State;
import edu.kit.iti.formal.psdbg.interpreter.dbg.*; import edu.kit.iti.formal.psdbg.interpreter.dbg.*;
import edu.kit.iti.formal.psdbg.parser.ast.ProofScript; import edu.kit.iti.formal.psdbg.parser.ast.ProofScript;
import javafx.application.Platform; import javafx.application.Platform;
...@@ -88,76 +90,53 @@ public class DebuggerMain implements Initializable { ...@@ -88,76 +90,53 @@ public class DebuggerMain implements Initializable {
@Getter @Getter
private final DebuggerMainModel model = new DebuggerMainModel(); private final DebuggerMainModel model = new DebuggerMainModel();
private final GraphView graphView = new GraphView();
private final Graph.PTreeGraph graph = graphView.getGraph();
private final DockNode graphViewNode = new DockNode(graphView, "Debug graph");
private InspectionViewsController inspectionViewsController; private InspectionViewsController inspectionViewsController;
private ScriptController scriptController; private ScriptController scriptController;
@FXML @FXML
private DebuggerStatusBar statusBar; private DebuggerStatusBar statusBar;
@FXML @FXML
private DockPane dockStation; private DockPane dockStation;
@FXML @FXML
private ToggleButton togBtnCommandHelp; private ToggleButton togBtnCommandHelp;
@FXML @FXML
private ToggleButton togBtnProofTree; private ToggleButton togBtnProofTree;
@FXML @FXML
private ToggleButton togBtnActiveInspector; private ToggleButton togBtnActiveInspector;
@FXML @FXML
private ToggleButton togBtnWelcome; private ToggleButton togBtnWelcome;
@FXML @FXML
private ToggleButton togBtnCodeDock; private ToggleButton togBtnCodeDock;
@FXML @FXML
private CheckMenuItem miCommandHelp; private CheckMenuItem miCommandHelp;
@FXML @FXML
private CheckMenuItem miCodeDock; private CheckMenuItem miCodeDock;
@FXML @FXML
private CheckMenuItem miWelcomeDock; private CheckMenuItem miWelcomeDock;
@FXML @FXML
private CheckMenuItem miActiveInspector; private CheckMenuItem miActiveInspector;
@FXML @FXML
private CheckMenuItem miProofTree; private CheckMenuItem miProofTree;
@FXML @FXML
private ToggleButton btnInteractiveMode; private ToggleButton btnInteractiveMode;
private JavaArea javaArea = new JavaArea(); private JavaArea javaArea = new JavaArea();
private DockNode javaAreaDock = new DockNode(javaArea, "Java Source", private DockNode javaAreaDock = new DockNode(javaArea, "Java Source",
new MaterialDesignIconView(MaterialDesignIcon.CODEPEN) new MaterialDesignIconView(MaterialDesignIcon.CODEPEN)
); );
//----------------------------------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------------------------------
private ProofTree proofTree = new ProofTree(); private ProofTree proofTree = new ProofTree();
private DockNode proofTreeDock = new DockNode(proofTree, "Proof Tree"); private DockNode proofTreeDock = new DockNode(proofTree, "Proof Tree");
private WelcomePane welcomePane = new WelcomePane(this); private WelcomePane welcomePane = new WelcomePane(this);
private DockNode welcomePaneDock = new DockNode(welcomePane, "Welcome", new MaterialDesignIconView(MaterialDesignIcon.ACCOUNT)); private DockNode welcomePaneDock = new DockNode(welcomePane, "Welcome", new MaterialDesignIconView(MaterialDesignIcon.ACCOUNT));
private DockNode activeInspectorDock; private DockNode activeInspectorDock;
private CommandHelp commandHelp = new CommandHelp(); private CommandHelp commandHelp = new CommandHelp();
private DockNode commandHelpDock = new DockNode(commandHelp, "DebuggerCommand Help"); private DockNode commandHelpDock = new DockNode(commandHelp, "DebuggerCommand Help");
private InteractiveModeController interactiveModeController; private InteractiveModeController interactiveModeController;
@FXML @FXML
private Menu examplesMenu; private Menu examplesMenu;
private Timer interpreterThreadTimer; private Timer interpreterThreadTimer;
@Subscribe @Subscribe
...@@ -303,6 +282,8 @@ public class DebuggerMain implements Initializable { ...@@ -303,6 +282,8 @@ public class DebuggerMain implements Initializable {
* @see {@link #handleStatePointer(PTreeNode)} * @see {@link #handleStatePointer(PTreeNode)}
*/ */
private void handleStatePointerUI(PTreeNode<KeyData> node) { private void handleStatePointerUI(PTreeNode<KeyData> node) {
graph.addPartiallyAndMark(node);
if (node != null) { if (node != null) {
getInspectionViewsController().getActiveInspectionViewTab().activate(node, node.getStateBeforeStmt()); getInspectionViewsController().getActiveInspectionViewTab().activate(node, node.getStateBeforeStmt());
scriptController.getDebugPositionHighlighter().highlight(node.getStatement()); scriptController.getDebugPositionHighlighter().highlight(node.getStatement());
...@@ -326,7 +307,7 @@ public class DebuggerMain implements Initializable { ...@@ -326,7 +307,7 @@ public class DebuggerMain implements Initializable {
showCodeDock(null); showCodeDock(null);
}); });
//add listener for linehighlighting when changing selection in inspectionview //addCell listener for linehighlighting when changing selection in inspectionview
getInspectionViewsController().getActiveInspectionViewTab().getModel().highlightedJavaLinesProperty(). getInspectionViewsController().getActiveInspectionViewTab().getModel().highlightedJavaLinesProperty().
addListener((observable, oldValue, newValue) -> { addListener((observable, oldValue, newValue) -> {
if (newValue != null) { if (newValue != null) {
...@@ -346,6 +327,19 @@ public class DebuggerMain implements Initializable { ...@@ -346,6 +327,19 @@ public class DebuggerMain implements Initializable {
} }
//region Actions: Menu
/*@FXML
public void saveAsScript() throws IOException {
File f = openFileChooserSaveDialog("Save script", "Save Script files", "kps");
if (f != null) {
/* if(!f.exists()){
f.createNewFile();
}
saveScript(f);
}
}*/
public KeYProofFacade getFacade() { public KeYProofFacade getFacade() {
return FACADE; return FACADE;
} }
...@@ -365,19 +359,6 @@ public class DebuggerMain implements Initializable { ...@@ -365,19 +359,6 @@ public class DebuggerMain implements Initializable {
}); });
} }
//region Actions: Menu
/*@FXML
public void saveAsScript() throws IOException {
File f = openFileChooserSaveDialog("Save script", "Save Script files", "kps");
if (f != null) {
/* if(!f.exists()){
f.createNewFile();
}
saveScript(f);
}
}*/
public void showCodeDock(ActionEvent actionEvent) { public void showCodeDock(ActionEvent actionEvent) {
if (!javaAreaDock.isDocked()) { if (!javaAreaDock.isDocked()) {
javaAreaDock.dock(dockStation, DockPos.RIGHT); javaAreaDock.dock(dockStation, DockPos.RIGHT);
...@@ -474,7 +455,6 @@ public class DebuggerMain implements Initializable { ...@@ -474,7 +455,6 @@ public class DebuggerMain implements Initializable {
} }
} }
/** /**
* Execute the script that with using the interpreter that is build using the interpreterbuilder * Execute the script that with using the interpreter that is build using the interpreterbuilder
* *
...@@ -527,20 +507,54 @@ public class DebuggerMain implements Initializable { ...@@ -527,20 +507,54 @@ public class DebuggerMain implements Initializable {
btnInteractiveMode.setDisable(false); btnInteractiveMode.setDisable(false);
assert model.getDebuggerFramework() != null; assert model.getDebuggerFramework() != null;
btnInteractiveMode.setSelected(true); btnInteractiveMode.setSelected(true);
/*PTreeNode<KeyData> statePointer = model.getDebuggerFramework().getStatePointer(); PTreeNode<KeyData> statePointer = model.getDebuggerFramework().getStatePointer();
assert statePointer!=null; assert statePointer!=null;
State<KeyData> lastState = statePointer.getStateAfterStmt(); State<KeyData> lastState = statePointer.getStateAfterStmt();
getInspectionViewsController().getActiveInspectionViewTab().activate(statePointer, lastState); getInspectionViewsController().getActiveInspectionViewTab().activate(statePointer, lastState);
*/
});