From: bdemsky Date: Thu, 9 Mar 2006 02:35:06 +0000 (+0000) Subject: Flatten fields in namenodes X-Git-Tag: preEdgeChange~959 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b2ab439f1a59384c2c09ca1437f5012fc94857ac;p=IRC.git Flatten fields in namenodes --- diff --git a/Robust/src/IR/Flat/BuildFlat.java b/Robust/src/IR/Flat/BuildFlat.java index d1f35b14..32684bc6 100644 --- a/Robust/src/IR/Flat/BuildFlat.java +++ b/Robust/src/IR/Flat/BuildFlat.java @@ -169,15 +169,36 @@ public class BuildFlat { np_baseexp.getEnd().addNext(fsfn); return new NodePair(np_src.getBegin(), fsfn); } else if (an.getDest().kind()==Kind.NameNode) { - - //TODO: FIXME - FlatNop nop=new FlatNop(); - return new NodePair(nop,nop); - } else throw new Error(); + NameNode nn=(NameNode)an.getDest(); + if (nn.getExpression()!=null) { + FieldAccessNode fan=(FieldAccessNode)nn.getExpression(); + ExpressionNode en=fan.getExpression(); + TempDescriptor dst_tmp=TempDescriptor.tempFactory("dst"); + NodePair np_baseexp=flattenExpressionNode(en, dst_tmp); + last.addNext(np_baseexp.getBegin()); + FlatSetFieldNode fsfn=new FlatSetFieldNode(dst_tmp, fan.getField(), src_tmp); + np_baseexp.getEnd().addNext(fsfn); + return new NodePair(np_src.getBegin(), fsfn); + } else { + if (nn.getField()!=null) { + FlatSetFieldNode fsfn=new FlatSetFieldNode(getTempforVar(nn.getVar()), nn.getField(), src_tmp); + last.addNext(fsfn); + return new NodePair(np_src.getBegin(), fsfn); + } else { + FlatOpNode fon=new FlatOpNode(getTempforVar(nn.getVar()), src_tmp, null, new Operation(Operation.ASSIGN)); + last.addNext(fon); + return new NodePair(np_src.getBegin(),fon); + } + } + } + throw new Error(); } private NodePair flattenNameNode(NameNode nn,TempDescriptor out_temp) { - if (nn.getField()!=null) { + if (nn.getExpression()!=null) { + /* Hack - use subtree instead */ + return flattenExpressionNode(nn.getExpression(),out_temp); + } else if (nn.getField()!=null) { TempDescriptor tmp=getTempforVar(nn.getVar()); FlatFieldNode ffn=new FlatFieldNode(nn.getField(), tmp, out_temp); return new NodePair(ffn,ffn); diff --git a/Robust/src/IR/Flat/FlatCall.java b/Robust/src/IR/Flat/FlatCall.java index 057cb3c2..df88face 100644 --- a/Robust/src/IR/Flat/FlatCall.java +++ b/Robust/src/IR/Flat/FlatCall.java @@ -15,7 +15,17 @@ public class FlatCall extends FlatNode { } public String toString() { - String st=dst+"="+method.toString()+"("+this_temp; + String st=""; + if (dst==null) + st+=method.getSymbol()+"("; + else + st+=dst+"="+method.getSymbol()+"("; + if (this_temp!=null) { + st+=this_temp; + if (args.length!=0) + st+=", "; + } + for(int i=0;i