From: Vijay S. <vj...@us...> - 2008-08-31 04:05:51
|
Update of /cvsroot/x10/x10.constraints/src/x10/constraint In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv16826/src/x10/constraint Modified Files: XPromise.java XLit_c.java XConstraint.java XPromise_c.java XConstraint_c.java Log Message: Changes to add an external representation of constrained types which hides the bindings to EQV terms. Index: XConstraint.java =================================================================== RCS file: /cvsroot/x10/x10.constraints/src/x10/constraint/XConstraint.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- XConstraint.java 29 Aug 2008 00:19:54 -0000 1.1 +++ XConstraint.java 31 Aug 2008 04:06:00 -0000 1.2 @@ -213,6 +213,14 @@ * @throws XFailure */ List<XTerm> constraints(); + /** + * Return in HashMap a set of bindings t1-> t2 equivalent to the current + * constraint except that equalities involving EQV variables are ignored. + * + * @return + * @throws XFailure + */ + List<XTerm> extConstraints(); /** * Return in HashMap a set of bindings t1 -> t2 entailed by the current Index: XPromise_c.java =================================================================== RCS file: /cvsroot/x10/x10.constraints/src/x10/constraint/XPromise_c.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- XPromise_c.java 29 Aug 2008 00:19:54 -0000 1.1 +++ XPromise_c.java 31 Aug 2008 04:06:00 -0000 1.2 @@ -190,7 +190,7 @@ return p.lookup(vars, index + 1); } - public XPromise lookup() throws XFailure { + public XPromise lookup() { if (value != null) return value.lookup(); return this; @@ -319,6 +319,29 @@ p.dump(result, prefix); } } + public void extDump(List<XTerm> result, XTerm prefix) { + XTerm t1 = term(); + if (t1 == null) + return; + if (t1.isAtomicFormula()) { + if (prefix != null && !(prefix.prefixes(t1))) + return; + result.add(t1); + } + + if (value != null && ! t1.isEQV()) { + XTerm t2 = lookup().var(); + // if (prefix != null && !(prefix.prefixes(t1) || prefix.prefixes(t2))) + // return; + // Report.report(1, "Promise_c: dumping " + t1 + "=" + t2); + result.add(XTerms.makeEquals(t1, t2)); + return; + } + if (fields != null) + for (XPromise p : fields.values()) { + p.extDump(result, prefix); + } + } public String toString() { return var + ((value != null) ? "->" + value : ((fields != null) ? fields.toString() : "")); @@ -359,6 +382,9 @@ public XPromise value() { return value; } + public XTerm var() { + return var; + } public HashMap<XName, XPromise> fields() { return fields; Index: XPromise.java =================================================================== RCS file: /cvsroot/x10/x10.constraints/src/x10/constraint/XPromise.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- XPromise.java 29 Aug 2008 00:19:54 -0000 1.1 +++ XPromise.java 31 Aug 2008 04:06:00 -0000 1.2 @@ -57,9 +57,9 @@ */ XPromise lookup(XVar[] vars, int index) throws XFailure; - XPromise lookup(XName s) throws XFailure; + XPromise lookup(XName s) throws XFailure ; - XPromise lookup() throws XFailure; + XPromise lookup(); /** * An eq link entering this has just been established. Now the @@ -101,10 +101,16 @@ /** * Traverse the subtree under this promise, and add t1 -> t2 into result for any term t1 - * which has an outgoing edge to a term tw. + * which has an outgoing edge to a term t2. * @param result */ void dump(List<XTerm> result, XTerm prefix); + /** + * Traverse the subtree under this promise, and add t1 -> t2 into result for any term t1 + * which has an outgoing edge to a term t2, and is not an EQV. + * @param result + */ + void extDump(List<XTerm> result, XTerm prefix); /** * Return the term that labels this promise. This term is intended to be the canonical C_Var @@ -145,4 +151,10 @@ * @param x */ XPromise cloneRecursively(HashMap<XPromise, XPromise> env); + + /** + * The externally visible term (if any) that this term represents. + * @return null -- if this promise is forwarded. + */ + XTerm var(); } Index: XLit_c.java =================================================================== RCS file: /cvsroot/x10/x10.constraints/src/x10/constraint/XLit_c.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- XLit_c.java 29 Aug 2008 00:19:54 -0000 1.1 +++ XLit_c.java 31 Aug 2008 04:06:00 -0000 1.2 @@ -21,6 +21,9 @@ public Object val() { return val; } + public XTerm var() { + return this; + } public String toString() { if (val == null) @@ -106,6 +109,9 @@ return this; } + public void extDump(List<XTerm> result, XTerm prefix) { + // nothing to dump. + } public void dump(List<XTerm> result, XTerm prefix) { // nothing to dump. } Index: XConstraint_c.java =================================================================== RCS file: /cvsroot/x10/x10.constraints/src/x10/constraint/XConstraint_c.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- XConstraint_c.java 29 Aug 2008 00:19:54 -0000 1.1 +++ XConstraint_c.java 31 Aug 2008 04:06:00 -0000 1.2 @@ -408,6 +408,18 @@ } return result; } + public List<XTerm> extConstraints() { + return extConstraints(new ArrayList<XTerm>(), null); + } + + public List<XTerm> extConstraints(List<XTerm> result, XTerm prefix) { + if (roots == null) + return result; + for (XPromise p : roots.values()) { + p.extDump(result, prefix); + } + return result; + } public List<XTerm> constraints(XTerm y) throws XFailure { XPromise p = lookup(y); @@ -552,7 +564,14 @@ } public String toString() { - String str = constraints().toString(); + String str = " failure "; + try { + XConstraint c = saturate(); + + str = c.extConstraints().toString(); + } catch (XFailure z) { + + } str = str.substring(1, str.length()-1); return "{" + str + "}"; // + " roots=" + roots ; } |