From: bdemsky Date: Wed, 8 Mar 2006 00:44:38 +0000 (+0000) Subject: Finish semantic checks X-Git-Tag: preEdgeChange~962 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=42e2e69f1b85905e6fde178adcb51269f1d37438;p=IRC.git Finish semantic checks --- diff --git a/Robust/src/IR/ClassDescriptor.java b/Robust/src/IR/ClassDescriptor.java index 173db73b..e256baff 100644 --- a/Robust/src/IR/ClassDescriptor.java +++ b/Robust/src/IR/ClassDescriptor.java @@ -48,12 +48,14 @@ public class ClassDescriptor extends Descriptor { st+="extends "+superclass.toString(); st+=" {\n"; indent=TreeNode.INDENT; - + boolean printcr=false; + for(Iterator it=getFields();it.hasNext();) { FieldDescriptor fd=(FieldDescriptor)it.next(); st+=TreeNode.printSpace(indent)+fd.toString()+"\n"; + printcr=true; } - if (fields.size()>0) + if (printcr) st+="\n"; for(Iterator it=getMethods();it.hasNext();) { diff --git a/Robust/src/IR/MethodDescriptor.java b/Robust/src/IR/MethodDescriptor.java index 28eb9724..32061222 100644 --- a/Robust/src/IR/MethodDescriptor.java +++ b/Robust/src/IR/MethodDescriptor.java @@ -14,10 +14,12 @@ public class MethodDescriptor extends Descriptor { protected Modifiers modifier; protected TypeDescriptor returntype; protected String identifier; - protected Vector param_name; - protected Vector param_type; + protected Vector params; protected SymbolTable paramtable; - + protected ClassDescriptor cd; + protected VarDescriptor thisvd; + + public MethodDescriptor(Modifiers m, TypeDescriptor rt, String identifier) { super(identifier); this.modifier=m; @@ -25,44 +27,85 @@ public class MethodDescriptor extends Descriptor { this.identifier=identifier; this.safename = "__" + name + "__"; this.uniqueid=count++; - param_name=new Vector(); - param_type=new Vector(); + params=new Vector(); paramtable=new SymbolTable(); + thisvd=null; + } + + public MethodDescriptor(Modifiers m, String identifier) { + super(identifier); + this.modifier=m; + this.returntype=null; + this.identifier=identifier; + this.safename = "__" + name + "__"; + this.uniqueid=count++; + params=new Vector(); + paramtable=new SymbolTable(); + thisvd=null; + } + + public void setThis(VarDescriptor vd) { + thisvd=vd; + paramtable.add(vd); + } + + public boolean isStatic() { + return modifier.isStatic(); } + + public boolean isConstructor() { + return (returntype==null); + } + public TypeDescriptor getReturnType() { return returntype; } + public void setClassDesc(ClassDescriptor cd) { + this.cd=cd; + } + + public ClassDescriptor getClassDesc() { + return cd; + } + public SymbolTable getParameterTable() { return paramtable; } public void addParameter(TypeDescriptor type, String paramname) { - param_name.add(paramname); - param_type.add(type); + if (paramname.equals("this")) + throw new Error("Can't have parameter named this"); + VarDescriptor vd=new VarDescriptor(type, paramname); + + params.add(vd); if (paramtable.getFromSameScope(paramname)!=null) { throw new Error("Parameter "+paramname+" already defined"); } - paramtable.add(paramname,type); + paramtable.add(vd); } public int numParameters() { - return param_name.size(); + return params.size(); } public String getParamName(int i) { - return (String) param_name.get(i); + return ((VarDescriptor)params.get(i)).getName(); } public TypeDescriptor getParamType(int i) { - return (TypeDescriptor) param_type.get(i); + return ((VarDescriptor)params.get(i)).getType(); } public String toString() { - String st=modifier.toString()+returntype.toString()+" "+identifier+"("; - for(int i=0;i