changes to MGC class library
[IRC.git] / Robust / src / IR / MethodDescriptor.java
index 274236194fa861f0fe6346a9aa6172964fd65fa5..167b7f420454ea14a87278d03905c33cc266bbe9 100644 (file)
@@ -19,6 +19,10 @@ public class MethodDescriptor extends Descriptor {
   protected ClassDescriptor cd;
   protected VarDescriptor thisvd;
   protected boolean isglobal;
+  protected boolean isstaticblock;  // flag to indicate if this is a static block
+  protected boolean isinvokedbystatic;  // flag to indicate if this method is invoked by some static block
+
+  protected boolean isdefaultconstructor; // flag to indicate if this is a default constructor
 
   public MethodDescriptor(Modifiers m, TypeDescriptor rt, String identifier) {
     super(identifier);
@@ -30,6 +34,9 @@ public class MethodDescriptor extends Descriptor {
     params=new Vector();
     paramtable=new SymbolTable();
     thisvd=null;
+    isstaticblock = false;
+    this.isinvokedbystatic = false;
+    this.isdefaultconstructor = false;
   }
 
   public Modifiers getModifiers() {
@@ -45,10 +52,10 @@ public class MethodDescriptor extends Descriptor {
     for(int i=0; i<numParameters(); i++) {
       Descriptor d1=getParameter(i);
       Descriptor d2=md.getParameter(i);
-      TypeDescriptor td1=(d1 instanceof TagVarDescriptor) ? ((TagVarDescriptor)d1).getType() : ((VarDescriptor)d1).getType();
-      TypeDescriptor td2=(d2 instanceof TagVarDescriptor) ? ((TagVarDescriptor)d2).getType() : ((VarDescriptor)d2).getType();
+      TypeDescriptor td1=(d1 instanceof TagVarDescriptor)?((TagVarDescriptor)d1).getType():((VarDescriptor)d1).getType();
+      TypeDescriptor td2=(d2 instanceof TagVarDescriptor)?((TagVarDescriptor)d2).getType():((VarDescriptor)d2).getType();
       if (!td1.equals(td2))
-       return false;
+        return false;
     }
     return true;
   }
@@ -68,6 +75,7 @@ public class MethodDescriptor extends Descriptor {
     params=new Vector();
     paramtable=new SymbolTable();
     thisvd=null;
+    isstaticblock = false;
   }
 
 
@@ -75,6 +83,22 @@ public class MethodDescriptor extends Descriptor {
     return isglobal;
   }
 
+  public boolean isStaticBlock() {
+    return isstaticblock;
+  }
+
+  public void setAsStaticBlock() {
+    isstaticblock = true;
+  }
+
+  public boolean isInvokedByStatic() {
+    return this.isinvokedbystatic;
+  }
+
+  public void setIsInvokedByStatic(boolean isinvokedbystatic) {
+    this.isinvokedbystatic = isinvokedbystatic;
+  }
+
   public void setThis(VarDescriptor vd) {
     thisvd=vd;
     paramtable.add(vd);
@@ -93,7 +117,7 @@ public class MethodDescriptor extends Descriptor {
     for(int i=0; i<numParameters(); i++) {
       st+=getParamType(i).getSafeDescriptor();
       if ((i+1)<numParameters())
-       st+="_";
+        st+="_";
     }
     return st;
   }
@@ -102,8 +126,12 @@ public class MethodDescriptor extends Descriptor {
     return modifier.isStatic();
   }
 
+  public boolean isAbstract() {
+    return modifier.isAbstract();
+  }
+
   public boolean isConstructor() {
-    return (returntype==null);
+    return (returntype==null) && !isstaticblock;
   }
 
   public TypeDescriptor getReturnType() {
@@ -167,6 +195,10 @@ public class MethodDescriptor extends Descriptor {
     else throw new Error();
   }
 
+  public String getSafeSymbol() {
+    return safename.replace(".","___________");
+  }
+
   public String toString() {
     String st="";
     String type="";
@@ -179,9 +211,17 @@ public class MethodDescriptor extends Descriptor {
     for(int i=0; i<params.size(); i++) {
       st+=getParamType(i)+" "+getParamName(i);
       if ((i+1)!=params.size())
-       st+=", ";
+        st+=", ";
     }
     st+=")";
     return st;
   }
+
+  public boolean isDefaultConstructor() {
+    return this.isdefaultconstructor;
+  }
+
+  public void setDefaultConstructor() {
+    this.isdefaultconstructor = true;
+  }
 }