From 02ad2744dcb59f88c860b4985dee48053af4ecf2 Mon Sep 17 00:00:00 2001 From: megacz Date: Sat, 14 Mar 2009 16:38:21 -0700 Subject: [PATCH] eliminate ShipDescription.Constant class, use BitVector instead --- src/edu/berkeley/fleet/Main.java | 8 ++-- src/edu/berkeley/fleet/api/Ship.java | 2 +- src/edu/berkeley/fleet/assembler/Parser.java | 44 +++++++------------ src/edu/berkeley/fleet/fpga/Fpga.java | 8 ++-- .../berkeley/fleet/interpreter/Interpreter.java | 2 +- src/edu/berkeley/fleet/marina/MarinaDock.java | 4 +- src/edu/berkeley/fleet/two/DockDescription.java | 8 ++-- src/edu/berkeley/fleet/two/FleetTwoDock.java | 2 +- src/edu/berkeley/fleet/two/FleetTwoFleet.java | 9 +++- src/edu/berkeley/fleet/two/ShipDescription.java | 46 +++++--------------- 10 files changed, 52 insertions(+), 81 deletions(-) diff --git a/src/edu/berkeley/fleet/Main.java b/src/edu/berkeley/fleet/Main.java index ff07e9a..f8e5956 100644 --- a/src/edu/berkeley/fleet/Main.java +++ b/src/edu/berkeley/fleet/Main.java @@ -61,9 +61,9 @@ public class Main { if (name.endsWith(".ship")) name = name.substring(0, name.length() - ".ship".length()); if (fleet instanceof edu.berkeley.fleet.fpga.Fpga) { - ((edu.berkeley.fleet.fpga.Fpga)fleet).expand(new ShipDescription(name, new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0)))))); + ((edu.berkeley.fleet.fpga.Fpga)fleet).expand(new ShipDescription(fleet, name, new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0)))))); } else { - ((Interpreter)fleet).expand(new ShipDescription(name, new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0)))))); + ((Interpreter)fleet).expand(new ShipDescription(fleet, name, new BufferedReader(new InputStreamReader(new FileInputStream(args.get(0)))))); } } else if (command.equals("doc")) { @@ -74,7 +74,7 @@ public class Main { for(String ss = br.readLine(); ss!=null; ss = br.readLine()) pw.println(ss); for(String f : new File("ships").list()) { - new ShipDescription(f, new BufferedReader(new InputStreamReader(new FileInputStream(new File("ships/"+f))))).printTeX(pw); + new ShipDescription(fleet, f, new BufferedReader(new InputStreamReader(new FileInputStream(new File("ships/"+f))))).printTeX(pw); } pw.println("\\end{document}"); pw.close(); @@ -155,7 +155,7 @@ public class Main { } else if (f.getPath().endsWith(".fleet") || f.getPath().endsWith(".test")) { runTest(fleet, new InputStreamReader(new FileInputStream(f)), f.getPath()); } else if (f.getPath().endsWith(".ship")) { - ShipDescription sd = new ShipDescription(f.getName(), new BufferedReader(new InputStreamReader(new FileInputStream(f)))); + ShipDescription sd = new ShipDescription(fleet, f.getName(), new BufferedReader(new InputStreamReader(new FileInputStream(f)))); String testsection = sd.getSection("test"); if (testsection == null) System.out.println("no test for " + sd.getName() + "!"); diff --git a/src/edu/berkeley/fleet/api/Ship.java b/src/edu/berkeley/fleet/api/Ship.java index f5eafa4..0b7945d 100644 --- a/src/edu/berkeley/fleet/api/Ship.java +++ b/src/edu/berkeley/fleet/api/Ship.java @@ -26,7 +26,7 @@ public abstract class Ship implements Iterable { /** get a constant associated with a ship; returns null if none found */ public BitVector getConstant(String constantName) { - return null; + throw new RuntimeException("unknown constant \""+constantName+"\" on ship " + this); } public String toString() { diff --git a/src/edu/berkeley/fleet/assembler/Parser.java b/src/edu/berkeley/fleet/assembler/Parser.java index e43b035..78049db 100644 --- a/src/edu/berkeley/fleet/assembler/Parser.java +++ b/src/edu/berkeley/fleet/assembler/Parser.java @@ -291,7 +291,7 @@ public class Parser { } } - private long parseSSL(Tree t) { + private BitVector parseSSL(Tree t) { String shipType = name(t.child(0)); String portName = name(t.child(1)); Ship chosenship = null; @@ -305,14 +305,12 @@ public class Parser { Dock chosenport = chosenship.getDock(portName); Tree specs = t.child(2); long literal = 0; - for(int i=0; i { else if (key.startsWith("constant")) { String constname = key.substring("constant".length()+1).trim(); String val = s.substring(s.indexOf(':')+1).trim(); - p.addConstant(constname, new Constant(val)); + p.addConstant(constname, new BitVector(fleet.getWordWidth()).set(Integer.parseInt(val))); continue; } else if (key.startsWith("shortcut to")) { continue; @@ -203,33 +208,4 @@ public class ShipDescription implements Iterable { pw.println(tex); } - // FIXME: merge with BitMask - public class Constant { - public long setbits = 0; - public long clearbits = 0; - public boolean signExtend = false; - public int numberOffset = 0; - public int numberWidth = 0; - public Constant(String s) { - if (s.startsWith("0x")) { - setbits = Long.parseLong(s.substring(2), 16); - clearbits = ~setbits; - } else if (s.length() == 37) { - for(int i=36; i>=0; i--) { - char c = s.charAt(36-i); - switch(c) { - case '0': clearbits |= (1<