From a09d0c8935cb9252fec219b3242445c7eddc32b4 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 6 Jan 2011 23:16:19 +0000 Subject: [PATCH] This update adds initializers, but not for arrays --- Robust/src/IR/FieldDescriptor.java | 5 ++++- Robust/src/IR/Tree/BuildIR.java | 24 ++++++++++++++++++++++-- Robust/src/Tests/DoTests | 3 ++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/Robust/src/IR/FieldDescriptor.java b/Robust/src/IR/FieldDescriptor.java index ecd6777a..4a693228 100644 --- a/Robust/src/IR/FieldDescriptor.java +++ b/Robust/src/IR/FieldDescriptor.java @@ -26,7 +26,10 @@ public class FieldDescriptor extends Descriptor { this.safename = "___" + name + "___"; this.uniqueid=count++; this.isglobal=isglobal; - if (en!=null) throw new Error("Field initializers not implemented"); + } + + public ExpressionNode getExpressionNode(){ + return en; } public boolean isStatic() { diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index aef10756..96b2537e 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -52,6 +52,7 @@ public class BuildIR { continue; if (isNode(type_pn,"class_declaration")) { ClassDescriptor cn=parseTypeDecl(type_pn); + parseInitializers(cn); if (toanalyze!=null) toanalyze.add(cn); state.addClass(cn); @@ -67,7 +68,7 @@ public class BuildIR { while(!tovisit.isEmpty()) { ClassDescriptor cd = (ClassDescriptor)tovisit.iterator().next(); tovisit.remove(cd); - + parseInitializers(cd); if(toanalyze != null) { toanalyze.add(cd); } @@ -133,7 +134,26 @@ public class BuildIR { } } } - + + public void parseInitializers(ClassDescriptor cn){ + Vector fv=cn.getFieldVec(); + for(int i=0;i