package IR.Flat; import IR.*; import IR.Tree.*; import java.util.*; public class BuildFlat { State state; Hashtable temptovar; MethodDescriptor currmd; TypeUtil typeutil; public BuildFlat(State st, TypeUtil typeutil) { state=st; temptovar=new Hashtable(); this.typeutil=typeutil; } public Hashtable getMap() { return temptovar; } public void buildFlat() { Iterator it=state.getClassSymbolTable().getDescriptorsIterator(); while(it.hasNext()) { ClassDescriptor cn=(ClassDescriptor)it.next(); flattenClass(cn); } Iterator task_it=state.getTaskSymbolTable().getDescriptorsIterator(); while(task_it.hasNext()) { TaskDescriptor td=(TaskDescriptor)task_it.next(); flattenTask(td); } } private void flattenTask(TaskDescriptor td) { BlockNode bn=state.getMethodBody(td); NodePair np=flattenBlockNode(bn); FlatNode fn=np.getBegin(); if (np.getEnd().kind()!=FKind.FlatReturnNode) { FlatReturnNode rnflat=new FlatReturnNode(null); np.getEnd().addNext(rnflat); } FlatFlagActionNode ffan=new FlatFlagActionNode(FlatFlagActionNode.PRE); ffan.addNext(fn); FlatMethod fm=new FlatMethod(td); fm.addNext(ffan); Hashtable visitedset=new Hashtable(); for(int i=0;i