package nebula.vm;
public class MethodSymbol {
final ClassSymbol definedClass;
final String name;
final Type returnType;
final int hashcode;
int nargs; // how many arguments are there?
int nlocals; // how many locals are there?
int[] code;
boolean resolved = false;
public MethodSymbol(ClassSymbol parent, String name, Type returnType) {
this(parent, name, returnType, 0, 0, null);
}
public MethodSymbol(ClassSymbol parent, String name, Type returnType, int nargs, int nlocals, int[] code) {
this.definedClass = parent;
this.name = name;
this.returnType = returnType;
this.nargs = nargs;
this.nlocals = nlocals;
this.code = code;
hashcode = (parent.name + name).hashCode();
}
@Override
public int hashCode() {
return this.hashcode;
}
public Object[] getConstPool() {
return this.definedClass.poolLocalK;
}
@Override
public boolean equals(Object o) {
return o instanceof MethodSymbol && definedClass.name.equals(((MethodSymbol) o).definedClass.name)
&& name.equals(((MethodSymbol) o).name);
}
@Override
public String toString() {
return "MethodSymbol{" + "name='" + name + '\'' + ", args=" + nargs + ", locals=" + nlocals + '}';
}
}