public void BeginTypeDef (TypeAttr attr, string name, BaseClassRef parent,
ArrayList impl_list, Location location, GenericParameters gen_params)
{
TypeDef outer = null;
string cache_name = CacheName (name);
if (typedef_stack_top > 0) {
StringBuilder sb = new StringBuilder ();
for (int i = 0; i < typedef_stack_top; i++){
outer = (TypeDef) typedef_stack [i];
if (i == 0)
/* Use FullName for outermost class to get the
namespace also */
sb.Append (outer.FullName);
else
sb.Append (outer.Name);
sb.Append ("/");
}
sb.Append (name);
cache_name = sb.ToString ();
}
TypeDef typedef = type_manager[cache_name];
if (typedef != null) {
// Class head is allready defined, we are just reopening the class
current_customattrtarget = current_typedef = typedef;
current_declsectarget = typedef;
typedef_stack.Add (current_typedef);
typedef_stack_top++;
return;
}
typedef = new TypeDef (attr, current_namespace,
name, parent, impl_list, location, gen_params, outer);
type_manager[cache_name] = typedef;
current_customattrtarget = current_typedef = typedef;
current_declsectarget = typedef;
typedef_stack.Add (typedef);
typedef_stack_top++;
}