static protected Hashtable<TypeDescriptor, FieldDescriptor>
mapTypeToArrayField;
+
+ protected boolean suppressOutput;
+
// for controlling DOT file output
protected boolean writeFinalDOTs;
protected boolean writeAllIncrementalDOTs;
this.arrayReferencees = arrayReferencees;
this.sitesToFlag = sitesToFlag;
this.rblockRel = rra;
+ this.suppressOutput = suppressOutput;
if( rblockRel != null ) {
doEffectsAnalysis = true;
ReachGraph.debugCallSiteVisitCounter
= 0; // count visits from 1, is incremented before first visit
-
+ if( suppressOutput ) {
+ System.out.println( "* Running disjoint reachability analysis with output suppressed! *" );
+ }
allocateStructures();
// reachable from the roots that will be analyzed
if( state.TASK ) {
- System.out.println( "Bamboo mode..." );
+ if( !suppressOutput ) {
+ System.out.println( "Bamboo mode..." );
+ }
Iterator taskItr = state.getTaskSymbolTable().getDescriptorsIterator();
while( taskItr.hasNext() ) {
}
} else {
- System.out.println( "Java mode..." );
+ if( !suppressOutput ) {
+ System.out.println( "Java mode..." );
+ }
// add all methods transitively reachable from the
// source's main to set for analysis
// If there is a change detected, add any methods/tasks
// that depend on this one to the "to visit" set.
- System.out.println( "Analyzing " + d );
+ if( !suppressOutput ) {
+ System.out.println( "Analyzing " + d );
+ }
if( state.DISJOINTDVISITSTACKEESONTOP ) {
assert calleesToEnqueue.isEmpty();
livenessAnalysisBackward(fm);
}
- /*
// 5th pass, use disjointness with NO FLAGGED REGIONS
// to compute taints and effects
disjointAnalysisTaints =
rblockRel,
true ); // suppress output--this is an intermediate pass
+ /*
// 6th pass, not available analysis FOR VARIABLES!
methItr = descriptorsToAnalyze.iterator();
while (methItr.hasNext()) {