objectparams.addPrim(temp);
}
+ for(int i=0;i<fm.numTags();i++) {
+ TempDescriptor temp=fm.getTag(i);
+ if (GENERATEPRECISEGC)
+ objectparams.addPtr(temp);
+ else
+ objectparams.addPrim(temp);
+ }
+
TempObject objecttemps=md!=null?new TempObject(objectparams,md,tag++):new TempObject(objectparams, task, tag++);
if (md!=null)
tempstable.put(md, objecttemps);
TempDescriptor temp=objectparams.getPointer(i);
output.println(" struct "+temp.getType().getSafeSymbol()+" * "+temp.getSafeSymbol()+";");
}
- for(int i=0;i<fm.numTags();i++) {
- TempDescriptor temp=fm.getTag(i);
- output.println(" struct ___TagDescriptor___ * "+temp.getSafeSymbol()+";");
- }
output.println("};\n");
if ((objectparams.numPointers()+fm.numTags())>maxtaskparams) {
FlatMethod fm=new FlatMethod(td);
fm.addNext(ffan);
- HashSet visitedset=new HashSet();
+ Hashtable visitedset=new Hashtable();
for(int i=0;i<td.numParameters();i++) {
VarDescriptor paramvd=td.getParameter(i);
for(int j=0;j<tel.numTags();j++) {
TagVarDescriptor tvd=(TagVarDescriptor) td.getParameterTable().getFromSameScope(tel.getName(j));
TempDescriptor tagtmp=getTempforVar(tvd);
- if (!visitedset.contains(tvd)) {
- visitedset.add(tvd);
+ if (!visitedset.containsKey(tvd.getName())) {
+ visitedset.put(tvd.getName(),tvd.getTag());
fm.addTagTemp(tagtmp);
+ } else {
+ TagDescriptor tmptd=(TagDescriptor) visitedset.get(tvd.getName());
+ if (!tmptd.equals(tvd.getTag()))
+ throw new Error("Two different tag types with same name as parameters to:"+td);
}
tel.setTemp(j, tagtmp);
}
return new TypeDescriptor(TypeDescriptor.TAG);
}
- public boolean equals(Object o) {
+ /* public boolean equals(Object o) {
if (o instanceof TagVarDescriptor) {
TagVarDescriptor tvd=(TagVarDescriptor)o;
if (tvd.identifier.equals(identifier)) {
public int hashCode() {
return identifier.hashCode();
- }
+ }*/
public String toString() {
return td.toString()+" "+identifier;
TagVarDescriptor tvd=new TagVarDescriptor(new TagDescriptor(tel.getType(i)), tel.getName(i));
if (paramtable.getFromSameScope(tel.getName(i))==null) {
paramtable.add(tvd);
- } else if (!((paramtable.getFromSameScope(tel.getName(i)) instanceof TagVarDescriptor)&¶mtable.getFromSameScope(tel.getName(i)).equals(tvd)))
+ } else if (!((paramtable.getFromSameScope(tel.getName(i)) instanceof TagVarDescriptor)&&((TagVarDescriptor)paramtable.getFromSameScope(tel.getName(i))).getTag().equals(tvd.getTag())))
throw new Error("Parameter "+paramname+" already defined");
}
}