void processSetFieldNodeSTM(LocalityBinding lb, FlatSetFieldNode fsfn, Hashtable<TempDescriptor, Integer> currtable) {
Integer srctype=currtable.get(fsfn.getSrc());
Integer dsttype=currtable.get(fsfn.getDst());
-
+ if (dsttype==null)
+ System.out.println(fsfn);
if (dsttype.equals(SCRATCH)) {
if (srctype.equals(SCRATCH) && fsfn.getField().getType().isPrimitive() && !fsfn.getField().getType().isArray())
return;
GlobalArgs.java \
../../../ClassLibrary/JavaSTM/Barrier.java
FLAGS=-mainclass ${MAINCLASS} -singleTM -optimize -debug -dcopts -joptimize -stmstats -fastmemcpy
-FLAGS2=-mainclass ${MAINCLASS} -singleTM -optimize -debug -joptimize -dcopts -fastmemcpy -abcclose
+FLAGS2=-mainclass ${MAINCLASS} -singleTM -optimize -debug -joptimize -fastmemcpy -abcclose -dcopts
FLAGS3=-mainclass ${MAINCLASS} -optimize -debug -joptimize -thread
private NodePair flattenCreateObjectNode(CreateObjectNode con,TempDescriptor out_temp) {
TypeDescriptor td=con.getType();
if (!td.isArray()) {
- FlatNew fn=new FlatNew(td, out_temp, con.isGlobal(), con.getDisjointId());
- TempDescriptor[] temps=new TempDescriptor[con.numArgs()];
+ FlatNode fn=new FlatNew(td, out_temp, con.isGlobal(), con.getDisjointId());
FlatNode last=fn;
+ //handle wrapper fields
+ ClassDescriptor cd=td.getClassDesc();
+ for(Iterator fieldit=cd.getFields();fieldit.hasNext();) {
+ FieldDescriptor fd=(FieldDescriptor)fieldit.next();
+ if (fd.getType().iswrapper()) {
+ TempDescriptor wrap_tmp=TempDescriptor.tempFactory("wrapper_obj",fd.getType());
+ FlatNode fnwrapper=new FlatNew(fd.getType(), wrap_tmp, con.isGlobal());
+ FlatSetFieldNode fsfn=new FlatSetFieldNode(out_temp, fd, wrap_tmp);
+ last.addNext(fnwrapper);
+ fnwrapper.addNext(fsfn);
+ last=fsfn;
+ }
+ }
+
+ TempDescriptor[] temps=new TempDescriptor[con.numArgs()];
+
// Build arguments
for(int i=0; i<con.numArgs(); i++) {
ExpressionNode en=con.getArg(i);
fan2.setField(fd);
fan.left=fan2;
fan.fieldname="value";
+
ExpressionNode leftwr=fan.getExpression();
- checkExpressionNode(md,nametable,leftwr,null);
TypeDescriptor ltdwr=leftwr.getType();
String fieldnamewr=fan.getFieldName();
FieldDescriptor fdwr=(FieldDescriptor) ltdwr.getClassDesc().getFieldTable().get(fieldnamewr);
+ fan.setField(fdwr);
if (fdwr==null)
throw new Error("Unknown field "+fieldnamewr + " in "+fan.printNode(0)+" in "+md);
+ } else {
+ fan.setField(fd);
}
- fan.setField(fd);
-
if (td!=null) {
if (!typeutil.isSuperorType(td,fan.getType()))
throw new Error("Field node returns "+fan.getType()+", but need "+td);
n.setField(fd);
n.setVar((VarDescriptor)nametable.get("this")); /* Need a pointer to this */
FieldAccessNode fan=new FieldAccessNode(n,"value");
+ FieldDescriptor fdval=(FieldDescriptor) fd.getType().getClassDesc().getFieldTable().get("value");
+ fan.setField(fdval);
nn.setExpression(fan);
- checkExpressionNode(md,nametable,fan,td);
} else {
nn.setField(fd);
nn.setVar((VarDescriptor)nametable.get("this")); /* Need a pointer to this */