private void generateFlatNode(FlatMethod fm, FlatNode fn, PrintWriter output) {
switch(fn.kind()) {
+ case FKind.FlatAtomicEnterNode:
+ generateFlatAtomicEnterNode(fm, (FlatAtomicEnterNode) fn, output);
+ return;
+ case FKind.FlatAtomicExitNode:
+ generateFlatAtomicExitNode(fm, (FlatAtomicExitNode) fn, output);
+ return;
case FKind.FlatTagDeclaration:
generateFlatTagDeclaration(fm, (FlatTagDeclaration) fn,output);
return;
}
+
+ public void generateFlatAtomicEnterNode(FlatMethod fm, FlatAtomicEnterNode faen, PrintWriter output) {
+ }
+
+ public void generateFlatAtomicExitNode(FlatMethod fm, FlatAtomicExitNode faen, PrintWriter output) {
+ }
+
private void generateFlatCheckNode(FlatMethod fm, FlatCheckNode fcn, PrintWriter output) {
if (state.CONSCHECK) {
public static final int FlatMethod=17;
public static final int FlatAtomicEnterNode=18;
public static final int FlatAtomicExitNode=19;
+ public static final int FlagGlobalConvNode=20;
}
--- /dev/null
+package IR.Flat;
+import IR.TypeDescriptor;
+
+public class FlatGlobalConvNode extends FlatNode {
+ TempDescriptor src;
+ TempDescriptor dst;
+ boolean makePtr;
+
+ public FlatGlobalConvNode(TempDescriptor src, TempDescriptor dst, boolean makePtr) {
+ this.src=src;
+ this.dst=dst;
+ this.makePtr=makePtr;
+ }
+
+ public String toString() {
+ if (makePtr)
+ return dst.toString()+"=(PTR)"+src.toString();
+ else
+ return dst.toString()+"=(OID)"+src.toString();
+ }
+
+ public int kind() {
+ return FKind.FlatGlobalConvNode;
+ }
+
+ public boolean getMakePtr() {
+ return makePtr;
+ }
+
+ public TempDescriptor getSrc() {
+ return src;
+ }
+
+ public TempDescriptor getDst() {
+ return dst;
+ }
+
+ public TempDescriptor [] writesTemps() {
+ return new TempDescriptor[] {dst};
+ }
+
+ public TempDescriptor [] readsTemps() {
+ return new TempDescriptor[] {src};
+ }
+}