/// <summary> /// Create a type entry without setting its parent info. /// </summary> private TypeEntity CreateTypeCore(string name, bool isSealed, bool defaultCtor, bool prepare, Action <TypeEntity> extraInit = null) { if (_definedTypes.ContainsKey(name)) { Error(CompilerMessages.TypeDefined, name); } var te = new TypeEntity(this) { Name = name, IsSealed = isSealed, }; _definedTypes.Add(name, te); extraInit?.Invoke(te); if (prepare) { te.PrepareSelf(); } else { UnpreparedTypes.Add(te); } if (defaultCtor) { te.CreateConstructor(null, prepare); } return(te); }
/// <summary> /// Creates all assembly-level entities for types, fields, methods and constructors. /// </summary> private void prepareEntities(bool clearTypes = true) { if (UnpreparedTypes.Count > 0) { foreach (var curr in UnpreparedTypes) { curr.PrepareSelf(); } if (clearTypes) { UnpreparedTypes.Clear(); } } if (UnpreparedTypeContents.Count > 0) { foreach (var curr in UnpreparedTypeContents) { curr.PrepareSelf(); var me = curr as MethodEntity; if (me != null) { me.ContainerType.CheckMethod(me); } } UnpreparedTypeContents.Clear(); } }