From 83790b86d8b067953d202d4fc18ee5d9d6a0d0cd Mon Sep 17 00:00:00 2001 From: bdemsky Date: Wed, 5 Apr 2006 20:38:42 +0000 Subject: [PATCH] Changes to allow multiple source files & library support --- Robust/src/IR/Flat/BuildCode.java | 3 ++- Robust/src/IR/MethodDescriptor.java | 5 ++++ Robust/src/IR/State.java | 12 ++++++--- Robust/src/IR/Tree/BuildIR.java | 12 ++++++--- Robust/src/IR/Tree/Modifiers.java | 4 +++ Robust/src/IR/Tree/SemanticCheck.java | 4 ++- Robust/src/IR/TypeUtil.java | 1 + Robust/src/Main/Main.java | 38 ++++++++++++++++++++------- 8 files changed, 62 insertions(+), 17 deletions(-) diff --git a/Robust/src/IR/Flat/BuildCode.java b/Robust/src/IR/Flat/BuildCode.java index fd2eff59..30b61291 100644 --- a/Robust/src/IR/Flat/BuildCode.java +++ b/Robust/src/IR/Flat/BuildCode.java @@ -84,7 +84,8 @@ public class BuildCode { /* Classify parameters */ MethodDescriptor md=(MethodDescriptor)methodit.next(); FlatMethod fm=state.getMethodFlat(md); - generateFlatMethod(fm,outmethod); + if (!md.getModifiers().isNative()) + generateFlatMethod(fm,outmethod); } } outmethod.close(); diff --git a/Robust/src/IR/MethodDescriptor.java b/Robust/src/IR/MethodDescriptor.java index 211448f9..195d7076 100644 --- a/Robust/src/IR/MethodDescriptor.java +++ b/Robust/src/IR/MethodDescriptor.java @@ -32,6 +32,11 @@ public class MethodDescriptor extends Descriptor { thisvd=null; } + + public Modifiers getModifiers() { + return modifier; + } + public boolean matches(MethodDescriptor md) { /* Check the name */ if (!identifier.equals(md.identifier)) diff --git a/Robust/src/IR/State.java b/Robust/src/IR/State.java index a83b1af7..83ec6f46 100644 --- a/Robust/src/IR/State.java +++ b/Robust/src/IR/State.java @@ -5,15 +5,21 @@ import IR.*; import java.util.*; public class State { - public State(ParseNode parsetree) { - this.parsetree=parsetree; + public String main; + + public State() { this.classes=new SymbolTable(); this.treemethodmap=new Hashtable(); this.flatmethodmap=new Hashtable(); + this.parsetrees=new HashSet(); + } + + public void addParseNode(ParseNode parsetree) { + parsetrees.add(parsetree); } public SymbolTable classes; - public ParseNode parsetree; + public Set parsetrees; public Hashtable treemethodmap; public Hashtable flatmethodmap; diff --git a/Robust/src/IR/Tree/BuildIR.java b/Robust/src/IR/Tree/BuildIR.java index 472254b6..b716a7ba 100644 --- a/Robust/src/IR/Tree/BuildIR.java +++ b/Robust/src/IR/Tree/BuildIR.java @@ -1,6 +1,7 @@ package IR.Tree; import IR.*; -import java.util.Vector; +import java.util.*; + public class BuildIR { State state; @@ -8,8 +9,10 @@ public class BuildIR { this.state=state; } public void buildtree() { - ParseNode pn=state.parsetree; - parseFile(pn); + for(Iterator it=state.parsetrees.iterator();it.hasNext();) { + ParseNode pn=(ParseNode)it.next(); + parseFile(pn); + } } /** Parse the classes in this file */ @@ -35,6 +38,9 @@ public class BuildIR { ParseNode snn=pn.getChild("super").getChild("type").getChild("class").getChild("name"); NameDescriptor nd=parseName(snn); cn.setSuper(nd.toString()); + } else { + if (!cn.getSymbol().equals(TypeUtil.ObjectClass)) + cn.setSuper(TypeUtil.ObjectClass); } cn.setModifiers(parseModifiersList(pn.getChild("modifiers"))); parseClassBody(cn, pn.getChild("classbody")); diff --git a/Robust/src/IR/Tree/Modifiers.java b/Robust/src/IR/Tree/Modifiers.java index f3b3af74..0fcb74ad 100644 --- a/Robust/src/IR/Tree/Modifiers.java +++ b/Robust/src/IR/Tree/Modifiers.java @@ -27,6 +27,10 @@ public class Modifiers { return ((value&STATIC)!=0); } + public boolean isNative() { + return ((value&NATIVE)!=0); + } + public String toString() { String st=""; if ((value&PUBLIC)!=0) diff --git a/Robust/src/IR/Tree/SemanticCheck.java b/Robust/src/IR/Tree/SemanticCheck.java index 6e777c07..33889fdb 100644 --- a/Robust/src/IR/Tree/SemanticCheck.java +++ b/Robust/src/IR/Tree/SemanticCheck.java @@ -251,13 +251,15 @@ public class SemanticCheck { ln.setType(new TypeDescriptor(TypeDescriptor.LONG)); } else if (o instanceof Float) { ln.setType(new TypeDescriptor(TypeDescriptor.FLOAT)); + } else if (o instanceof Boolean) { + ln.setType(new TypeDescriptor(TypeDescriptor.BOOLEAN)); } else if (o instanceof Double) { ln.setType(new TypeDescriptor(TypeDescriptor.DOUBLE)); } else if (o instanceof Character) { ln.setType(new TypeDescriptor(TypeDescriptor.CHAR)); } else if (o instanceof String) { ln.setType(new TypeDescriptor(typeutil.getClass(TypeUtil.StringClass))); - } + } if (td!=null) if (!typeutil.isSuperorType(td,ln.getType())) diff --git a/Robust/src/IR/TypeUtil.java b/Robust/src/IR/TypeUtil.java index 2cb73968..3a3cf8d8 100644 --- a/Robust/src/IR/TypeUtil.java +++ b/Robust/src/IR/TypeUtil.java @@ -3,6 +3,7 @@ import java.util.*; public class TypeUtil { public static final String StringClass="String"; + public static final String ObjectClass="Object"; State state; Hashtable supertable; Hashtable subclasstable; diff --git a/Robust/src/Main/Main.java b/Robust/src/Main/Main.java index 51e69ccc..dea270a0 100644 --- a/Robust/src/Main/Main.java +++ b/Robust/src/Main/Main.java @@ -13,30 +13,38 @@ import IR.TypeUtil; public class Main { public static void main(String args[]) throws Exception { + String ClassLibraryPrefix="./ClassLibrary/"; if (args.length<1) { System.out.println("Must input source file"); System.exit(-1); } - for(int i=1;i