From 31853c9acb2c83adb9aef32549e1fcf5c1470d43 Mon Sep 17 00:00:00 2001 From: adam Date: Wed, 8 Aug 2007 07:05:22 +0100 Subject: [PATCH] preliminary support for constants --- ships/BitFifo.ship | 2 - .../berkeley/fleet/doc/BenkoBoxDescription.java | 9 +++ src/edu/berkeley/fleet/doc/Constant.java | 58 ++++++++++++++++++++ src/edu/berkeley/fleet/doc/ShipDescription.java | 25 +++++++-- 4 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 src/edu/berkeley/fleet/doc/Constant.java diff --git a/ships/BitFifo.ship b/ships/BitFifo.ship index 21fb528..acb9e33 100644 --- a/ships/BitFifo.ship +++ b/ships/BitFifo.ship @@ -2,8 +2,6 @@ ship: BitFifo == Ports =========================================================== in: inEnqueue - sibling: inEnqueueOp - in: inEnqueueOp constant rev: .......................1............. constant inv: ........................1............ diff --git a/src/edu/berkeley/fleet/doc/BenkoBoxDescription.java b/src/edu/berkeley/fleet/doc/BenkoBoxDescription.java index 990555d..7b689ac 100644 --- a/src/edu/berkeley/fleet/doc/BenkoBoxDescription.java +++ b/src/edu/berkeley/fleet/doc/BenkoBoxDescription.java @@ -21,6 +21,9 @@ public class BenkoBoxDescription implements Iterable { private final boolean tokenOnly; private ArrayList destinations = new ArrayList(); + // FIXME + public HashMap constants = new HashMap(); + BenkoBoxDescription(ShipDescription ship, String name, boolean tokenOnly, boolean inbox) { this(ship, name, tokenOnly, inbox, null); } @@ -35,4 +38,10 @@ public class BenkoBoxDescription implements Iterable { void addDest(String dest) { destinations.add(dest); } + + public Constant getConstant(String name) { + Constant ret = constants.get(name); + if (ret == null) ret = ship.getConstant(name); + return ret; + } } diff --git a/src/edu/berkeley/fleet/doc/Constant.java b/src/edu/berkeley/fleet/doc/Constant.java new file mode 100644 index 0000000..959e88c --- /dev/null +++ b/src/edu/berkeley/fleet/doc/Constant.java @@ -0,0 +1,58 @@ +package edu.berkeley.fleet.doc; + +import java.io.*; +import java.util.*; + +public class Constant { + + long setbits = 0; + long clearbits = 0; + boolean signExtend = false; + int numberOffset = 0; + 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=0; i<37; i++) { + char c = s.charAt(36-i); + switch(c) { + case '0': clearbits |= (1< { else if (key.equals("in")) { tokenOnly = false; inbox = true; } else if (key.equals("out")) { tokenOnly = false; inbox = false; } else if (key.startsWith("constant")) { - continue; - } else if (key.startsWith("sibling")) { - continue; + String constname = key.substring("constant".length()+1).trim(); + String val = s.substring(s.indexOf(':')+1).trim(); + p.constants.put(constname, new Constant(val)); } else if (key.startsWith("shortcut to")) { continue; } @@ -96,5 +114,4 @@ public class ShipDescription implements Iterable { } void add(BenkoBoxDescription b) { benkoBoxes.add(b); } - } \ No newline at end of file -- 1.7.10.4