From d6013220de636bdbf1de9b703f5a052b1c3773e9 Mon Sep 17 00:00:00 2001
From: root <root>
Date: Fri, 17 Feb 2006 00:47:00 +0000
Subject: [PATCH] bug fixes

---
 Robust/src/IR/Flat/BuildFlat.java       | 17 ++++++++++++++++-
 Robust/src/IR/Tree/DeclarationNode.java |  8 ++++++++
 Robust/src/IR/VarDescriptor.java        |  4 ++++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/Robust/src/IR/Flat/BuildFlat.java b/Robust/src/IR/Flat/BuildFlat.java
index b2aa3fdb..0c44e833 100644
--- a/Robust/src/IR/Flat/BuildFlat.java
+++ b/Robust/src/IR/Flat/BuildFlat.java
@@ -5,8 +5,11 @@ import java.util.*;
 
 public class BuildFlat {
     State state;
+    Hashtable temptovar;
+
     public BuildFlat(State st) {
 	state=st;
+	temptovar=new Hashtable();
     }
 
     public void buildFlat() {
@@ -108,9 +111,21 @@ public class BuildFlat {
     }
 
     private NodePair flattenDeclarationNode(DeclarationNode dn) {
-	throw new Error();
+	VarDescriptor vd=dn.getVarDescriptor();
+	TempDescriptor td=getTempforVar(vd);
+	return flattenExpressionNode(dn.getExpression(),td);
     }
         
+    private TempDescriptor getTempforVar(VarDescriptor vd) {
+	if (temptovar.containsKey(vd))
+	    return (TempDescriptor)temptovar.get(vd);
+	else {
+	    TempDescriptor td=TempDescriptor.tempFactory(vd.getName());
+	    temptovar.put(vd,td);
+	    return td;
+	}
+    }
+
     private NodePair flattenIfStatementNode(IfStatementNode isn) {
 	TempDescriptor cond_temp=TempDescriptor.tempFactory("condition");
 	NodePair cond=flattenExpressionNode(isn.getCondition(),cond_temp);
diff --git a/Robust/src/IR/Tree/DeclarationNode.java b/Robust/src/IR/Tree/DeclarationNode.java
index b354be9c..aa1b4eb5 100644
--- a/Robust/src/IR/Tree/DeclarationNode.java
+++ b/Robust/src/IR/Tree/DeclarationNode.java
@@ -15,6 +15,14 @@ public class DeclarationNode extends BlockStatementNode {
 	else return vd.toString()+"="+init_en.printNode(0);
     }
 
+    public ExpressionNode getExpression() {
+	return init_en;
+    }
+    
+    public VarDescriptor getVarDescriptor() {
+	return vd;
+    }
+
     public int kind() {
 	return Kind.DeclarationNode;
     }
diff --git a/Robust/src/IR/VarDescriptor.java b/Robust/src/IR/VarDescriptor.java
index 610e7a66..d8726f28 100644
--- a/Robust/src/IR/VarDescriptor.java
+++ b/Robust/src/IR/VarDescriptor.java
@@ -21,6 +21,10 @@ public class VarDescriptor extends Descriptor {
 	this.uniqueid=count++;
     }
 
+    public String getName() {
+	return identifier;
+    }
+
     public String toString() {
 	    return td.toString()+" "+identifier;
     }
-- 
2.34.1