boolean pruneGarbage,
boolean writeReferencers
*/
- og.writeGraph( d, true, true, true, false );
+ og.writeGraph( d, true, true, false, false );
// only methods have dependents, tasks cannot
// be invoked by any user program calls
if( isFlagged || isParameter ) {
alpha = new ReachabilitySet( new TokenTuple( id,
isNewSummary,
- TokenTuple.ARITY_ONE ) );
+ TokenTuple.ARITY_ONE )
+ ).makeCanonical();
} else {
- alpha = new ReachabilitySet();
+ alpha = new ReachabilitySet( new TokenTupleSet()
+ ).makeCanonical();
}
}
);
if( f != null ) {
// we can do a strong update here if one of two cases holds
+ // SAVE FOR LATER, WITHOUT STILL CORRECT
+ /*
if( (hrnX.getNumReferencers() == 1) ||
( lnX.getNumReferencees() == 1 && hrnX.isSingleObject() )
) {
clearReferenceEdgesFrom( hrnX, f, false );
}
+ */
addReferenceEdge( hrnX, hrnY, edgeNew );
// after tokens have been aged, reset newest node's reachability
- hrn0.setAlpha( new ReachabilitySet(
- new TokenTupleSet(
- new TokenTuple( hrn0 )
- )
- ).makeCanonical()
- );
+ if( hrn0.isFlagged() ) {
+ hrn0.setAlpha( new ReachabilitySet( new TokenTupleSet(
+ new TokenTuple( hrn0 )
+ )
+ ).makeCanonical()
+ );
+ } else {
+ hrn0.setAlpha( new ReachabilitySet( new TokenTupleSet()
+ ).makeCanonical()
+ );
+ }
}
// there is an edge in the right place with the right field,
// but do they have the same attributes?
- if( edgeA.isInitialParamReflexive() == edgeB.isInitialParamReflexive() &&
- edgeA.getBeta().equals( edgeB.getBeta() ) ) {
+ if( edgeA.getBeta().equals( edgeB.getBeta() ) ) {
edgeFound = true;
- } else {
- return false;
+ //} else {
+ //return false;
}
}
}
flag w;
int a, b;
Parameter f, g;
- Penguin penguin;
+ Penguin p;
+ Foo h;
public Parameter() { a = 0; b = 0; f = null; g = null; }
public class Penguin {
int x, y;
+ Foo h;
public Penguin() { x = 0; y = 0; }
Foo c;
while( false ) {
- c = new Foo();
- c.x = new Foo();
+ c = new Foo();
+ Foo f = new Foo();
+ c.x = f;
+ c.y = f;
}
taskexit( a{ !f }, b{ !f } );
-
// this task allocates a new object, so there should
// be a heap region for the parameter, and several
// heap regions for the allocation site, but the label
}
+task BackToItself( Parameter p0{ w } ) {
+
+ Penguin p = new Penguin();
+ p0.p = p;
+ p.h = p0.h;
+
+ while( false ) {
+ Parameter p1 = new Parameter();
+ p1.h = new Foo();
+ Penguin q = new Penguin();
+ p1.p = q;
+ q.h = p1.h;
+ }
+
+ taskexit( p0{ !w } );
+}
+
+
task SummaryNodeTokens( Foo p0{ f } ) {
while( false ) {