package ch.epfl.lamp.compiler.msil;
import ch.epfl.lamp.compiler.msil.util.PECustomMod;
public final class PrimitiveType extends Type {
public PrimitiveType(Module module,
int attributes,
String fullName,
Type baseType,
Type[] interfaces,
Type declType,
int auxAttr,
Type elemType) {
super(module, attributes, fullName,
baseType, interfaces, declType, auxAttr, elemType);
clearMembers();
}
public void clearMembers() {
fields = FieldInfo.EMPTY_ARRAY;
methods = MethodInfo.EMPTY_ARRAY;
constructors = ConstructorInfo.EMPTY_ARRAY;
events = EventInfo.EMPTY_ARRAY;
initBaseType();
initInterfaces();
initFields();
initMethods();
initEvents();
initProperties();
initNestedTypes();
}
public FieldInfo addField(String name, int attrs, Type fieldType) {
PECustomMod fieldTypeWithMods = new PECustomMod(fieldType, null);
FieldInfo res = new FieldInfo(name, this, attrs, fieldTypeWithMods, null);
FieldInfo[] ms = new FieldInfo[fields.length + 1];
System.arraycopy(fields, 0, ms, 0, fields.length);
ms[ms.length - 1] = res;
fields = ms;
return res;
}
public MethodInfo addMethod(String name, int attrs, Type returnType, Type[] paramTypes) {
MethodInfo res = new MethodInfo(name, this, attrs, returnType, paramTypes);
MethodInfo[] ms = new MethodInfo[methods.length + 1];
System.arraycopy(methods, 0, ms, 0, methods.length);
ms[ms.length - 1] = res;
return res;
}
public ConstructorInfo addConstructor(int attrs, Type[] paramTypes) {
ConstructorInfo res = new ConstructorInfo(this, attrs, paramTypes);
ConstructorInfo[] ms = new ConstructorInfo[constructors.length + 1];
System.arraycopy(constructors, 0, ms, 0, constructors.length);
ms[ms.length - 1] = res;
return res;
}
}