//////////////////////////////////////////////////////////////////////////
// Methods
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// Define a new class to emit for this assembly. This class
/// becomes the 'current' class, where subsequent EmitMethod
/// and EmitField calls will popuate this class.
/// </summary>
public void emitClass(string baseQName, string qname, string[] interfaces, TypeAttr attr)
{
string[] s = FanUtil.splitQName(qname);
className = qname;
// first check if this type was already stubbed out
classDef = (ClassDef)types[qname];
if (classDef == null)
{
// if not, we need to create it
if (qname.IndexOf("/") != -1)
{
// Nested class
PERWAPI.ClassDef cdef = (PERWAPI.ClassDef)findType(s[0]);
classDef = cdef.AddNestedClass(attr, s[1]);
}
else
{
// Normal class
classDef = peFile.AddClass(attr, s[0], s[1]);
}
}
else
{
// if stubbed out, make sure we define the type correctly
classDef.SetAttribute(attr);
}
// base class
if (baseQName == null)
{
classDef.SuperType = null;
}
else
{
classDef.SuperType = findType(baseQName) as PERWAPI.Class;
}
// interfaces
for (int i = 0; i < interfaces.Length; i++)
{
classDef.AddImplementedInterface(findType(interfaces[i]) as PERWAPI.Class);
}
types[qname] = classDef;
}