From 70b0f2e66596b795ae0cc13dfda564b0b496cc89 Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 13 Apr 2018 18:17:33 +0200 Subject: [PATCH] improved error message on vhdl naming issues --- .../digital/hdl/model2/HDLCircuit.java | 37 +++++++++++++------ .../digital/hdl/model2/HDLException.java | 4 +- .../digital/hdl/vhdl2/VHDLRenaming.java | 2 + .../digital/hdl/vhdl2/VHDLRenamingTest.java | 2 + 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/neemann/digital/hdl/model2/HDLCircuit.java b/src/main/java/de/neemann/digital/hdl/model2/HDLCircuit.java index 1346ce097..adf6bf61b 100644 --- a/src/main/java/de/neemann/digital/hdl/model2/HDLCircuit.java +++ b/src/main/java/de/neemann/digital/hdl/model2/HDLCircuit.java @@ -34,6 +34,7 @@ import de.neemann.digital.hdl.printer.CodePrinter; import de.neemann.digital.lang.Lang; import de.neemann.digital.testing.TestCaseElement; +import java.io.File; import java.io.IOException; import java.util.*; @@ -46,6 +47,7 @@ public class HDLCircuit implements Iterable, HDLModel.BitProvider, Prin private final ArrayList inputs; private final ArrayList listOfNets; private final String description; + private final File origin; private ArrayList ports; private NetList netList; private ArrayList nodes; @@ -93,6 +95,7 @@ public class HDLCircuit implements Iterable, HDLModel.BitProvider, Prin listOfNets = new ArrayList<>(); netList = new NetList(circuit); description = circuit.getAttributes().get(Keys.DESCRIPTION); + this.origin = circuit.getOrigin(); ArrayList clocks = new ArrayList<>(); @@ -410,20 +413,25 @@ public class HDLCircuit implements Iterable, HDLModel.BitProvider, Prin * @throws HDLException HDLException */ public void rename(HDLModel.Renaming renaming) throws HDLException { - for (HDLPort p : outputs) - p.rename(renaming); - for (HDLPort p : inputs) - p.rename(renaming); - for (HDLNet p : listOfNets) - p.rename(renaming); + try { + for (HDLPort p : outputs) + p.rename(renaming); + for (HDLPort p : inputs) + p.rename(renaming); + for (HDLNet p : listOfNets) + p.rename(renaming); - for (HDLNode n : nodes) - n.rename(renaming); + for (HDLNode n : nodes) + n.rename(renaming); - hdlEntityName = renaming.checkName(hdlEntityName); + hdlEntityName = renaming.checkName(hdlEntityName); - checkUnique(getPorts()); - checkUnique(listOfNets); + checkUnique(getPorts()); + checkUnique(listOfNets); + } catch (HDLException e) { + e.setOrigin(origin); + throw e; + } } private void checkUnique(Collection names) throws HDLException { @@ -498,7 +506,12 @@ public class HDLCircuit implements Iterable, HDLModel.BitProvider, Prin * @throws HDLException HDLException */ public HDLCircuit apply(Optimization optimization) throws HDLException { - optimization.optimize(this); + try { + optimization.optimize(this); + } catch (HDLException e) { + e.setOrigin(origin); + throw e; + } return this; } diff --git a/src/main/java/de/neemann/digital/hdl/model2/HDLException.java b/src/main/java/de/neemann/digital/hdl/model2/HDLException.java index 0aa89884e..d13ee1160 100644 --- a/src/main/java/de/neemann/digital/hdl/model2/HDLException.java +++ b/src/main/java/de/neemann/digital/hdl/model2/HDLException.java @@ -5,10 +5,12 @@ */ package de.neemann.digital.hdl.model2; +import de.neemann.digital.core.ExceptionWithOrigin; + /** * Exception thrown during model building */ -public class HDLException extends Exception { +public class HDLException extends ExceptionWithOrigin { /** * Creates a new instance * diff --git a/src/main/java/de/neemann/digital/hdl/vhdl2/VHDLRenaming.java b/src/main/java/de/neemann/digital/hdl/vhdl2/VHDLRenaming.java index 7bba56b2d..ed66766da 100644 --- a/src/main/java/de/neemann/digital/hdl/vhdl2/VHDLRenaming.java +++ b/src/main/java/de/neemann/digital/hdl/vhdl2/VHDLRenaming.java @@ -56,6 +56,8 @@ public class VHDLRenaming implements HDLModel.Renaming { sb.append(c); else { switch (c) { + case '/': + case '!': case '~': case '\u00AC': sb.append("not"); diff --git a/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLRenamingTest.java b/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLRenamingTest.java index 1334556a1..091047663 100644 --- a/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLRenamingTest.java +++ b/src/test/java/de/neemann/digital/hdl/vhdl2/VHDLRenamingTest.java @@ -19,6 +19,8 @@ public class VHDLRenamingTest extends TestCase { assertEquals("a_o_o", r.checkName("a\"o\"o")); assertEquals("o", r.checkName("\"o\"")); assertEquals("o", r.checkName("_o_")); + assertEquals("notQ", r.checkName("/Q")); + assertEquals("notQ", r.checkName("!Q")); assertEquals("notQ", r.checkName("~Q")); assertEquals("aleb", r.checkName("ab"));