Пример #1
0
        public void Visit(Pass p, bool recursive = true)
        {
            if (!p.Begin(this))
            {
                return;
            }

            var old = p.Type;

            p.Type = this;

            if (recursive)
            {
                for (int i = 0; i < NestedTypes.Count; i++)
                {
                    NestedTypes[i].Visit(p);
                }
            }

            p.Function = DummyMethod;

            Initializer?.Visit(p);
            Finalizer?.Visit(p);

            for (int i = 0; i < Methods.Count; i++)
            {
                Methods[i].Visit(p);
            }
            for (int i = 0; i < Constructors.Count; i++)
            {
                Constructors[i].Visit(p);
            }

            for (int i = 0; i < Properties.Count; i++)
            {
                var m = Properties[i];
                m.GetMethod?.Visit(p);
                m.SetMethod?.Visit(p);
            }

            for (int i = 0; i < Events.Count; i++)
            {
                var m = Events[i];
                m.AddMethod?.Visit(p);
                m.RemoveMethod?.Visit(p);
            }

            for (int i = 0; i < Operators.Count; i++)
            {
                Operators[i].Visit(p);
            }
            for (int i = 0; i < Casts.Count; i++)
            {
                Casts[i].Visit(p);
            }

            p.Function = null;

            Block?.Visit(p);

            p.Type = old;
            p.End(this);
        }