a reference edge created between them. Actually, the reachability sets
arent' empty, they contain the empty token tuple set, but the edge that
gets created has the empty reachability set. Changed the field set method
to detect this and fill it in. This is not a good fix, find the reason
why it happens in the first place.
// then propagate back just up the edges from hrn
ChangeTupleSet Cx = R.unionUpArityToChangeSet(O);
// then propagate back just up the edges from hrn
ChangeTupleSet Cx = R.unionUpArityToChangeSet(O);
HashSet<ReferenceEdge> todoEdges = new HashSet<ReferenceEdge>();
Hashtable<ReferenceEdge, ChangeTupleSet> edgePlannedChanges =
HashSet<ReferenceEdge> todoEdges = new HashSet<ReferenceEdge>();
Hashtable<ReferenceEdge, ChangeTupleSet> edgePlannedChanges =
+ if( edgeY.getBetaNew().equals( new ReachabilitySet() ) ) {
+ edgeY.setBetaNew( new ReachabilitySet( new TokenTupleSet().makeCanonical() ).makeCanonical() );
+ }
- //System.out.println( edgeY.getBetaNew() + "\nbeing pruned by\n" + hrnX.getAlpha() );
+ /*
+ System.out.println( "---------------------------\n" +
+ edgeY.getBetaNew() +
+ "\nbeing pruned by\n" +
+ hrnX.getAlpha() +
+ "\nis\n" +
+ edgeY.getBetaNew().pruneBy(hrnX.getAlpha())
+ );
+ */
// create the actual reference edge hrnX.f -> hrnY
ReferenceEdge edgeNew = new ReferenceEdge(hrnX,
// create the actual reference edge hrnX.f -> hrnY
ReferenceEdge edgeNew = new ReferenceEdge(hrnX,
- Parameter f;
- Parameter g;
- Penguin p;
- Foo h;
+ //Parameter f;
+ //Parameter g;
+ //Penguin p;
+ //Foo h;
- public Parameter() { a = 0; b = 0; f = null; g = null; }
+ public Parameter() {} // a = 0; b = 0; f = null; g = null; }
- public void bar() { foo(); }
- public void foo() { bar(); }
+ //public void bar() { foo(); }
+ //public void foo() { bar(); }
+
+ static public void proof( Fooz p0, Fooz p1 ) {
+ Fooz c = new Fooz();
+ Fooz d = new Fooz();
+
+ c.x = d;
+ p0.x = c;
+ p1.x = d;
+ }
+}
+
+public class Fooz {
+ public Fooz() {}
+ public Fooz x;
public class Penguin {
int x;
int y;
public class Penguin {
int x;
int y;
static public void m2_( Foo p0 ) {
Foo g0 = new Foo();
static public void m2_( Foo p0 ) {
Foo g0 = new Foo();
// this empty task should still create a non-empty
// this empty task should still create a non-empty
// a heap region that is multi-object, flagged, not summary
task Startup( StartupObject s{ initialstate } ) {
// a heap region that is multi-object, flagged, not summary
task Startup( StartupObject s{ initialstate } ) {
- Parameter p0 = new Parameter();
+ //Parameter p0 = new Parameter();
+ Parameter.proof( null, null );
int a = 1;
int b = 2;
int c = 3;
b = c;
a = b;
int a = 1;
int b = 2;
int c = 3;
b = c;
a = b;
taskexit( s{ !initialstate } );
}
taskexit( s{ !initialstate } );
}
task methodTest01_( Foo p0{ f }, Foo p1{ f } ) {
Foo a0before = new Foo();
task methodTest01_( Foo p0{ f }, Foo p1{ f } ) {
Foo a0before = new Foo();
taskexit( p0{ !f }, p1{ !f } );
}
taskexit( p0{ !f }, p1{ !f } );
}
/*
task methodTest02_( Foo p0{ f }, Foo p1{ f } ) {
/*
task methodTest02_( Foo p0{ f }, Foo p1{ f } ) {