Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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();
            }
        }