Esempio n. 1
0
            public static bool Run(Pass parent, string operatorName, Expression e, ExpressionUsage u)
            {
                var p = new NoLocalAccessOrLValueValidator(parent, operatorName);

                p.VisitNullable(ref e, u);
                return(!p.HasError);
            }
Esempio n. 2
0
        public override void Begin(ref Expression e, ExpressionUsage u)
        {
            switch (e.ExpressionType)
            {
            case ExpressionType.Base:
            case ExpressionType.This:
            case ExpressionType.GetMetaObject:
            case ExpressionType.GetMetaProperty:
            case ExpressionType.CapturedArgument:
            case ExpressionType.CapturedLocal:
            {
                var s = Generator.ProcessValue(e);

                if (Expressions.IsVariableOrGlobal(s.Value))
                {
                    e = s.Value;
                    SetMinStage(e.Source, s.MinStage);
                    SetMaxStage(e.Source, s.MaxStage);
                }
                else
                {
                    e = AddArgument(e.Source, s);
                }
            }
            break;

            case ExpressionType.NewVertexAttrib:
            case ExpressionType.NewPixelSampler:
            {
                if (!NoLocalAccessOrLValueValidator.Run(this, e.ExpressionType == ExpressionType.NewVertexAttrib ? "vertex_attrib" : "pixel_sampler", e, u))
                {
                    e = Expression.Invalid;
                    break;
                }

                var s = Generator.ProcessValue(e);
                SetMinStage(e.Source, s.MinStage);
                SetMaxStage(e.Source, s.MaxStage);
                e = s.Value;
            }
            break;

            case ExpressionType.Swizzle:
                OnObject(ref e, ref (e as Swizzle).Object);
                break;

            case ExpressionType.LoadField:
                OnObject(ref e, ref (e as LoadField).Object);
                break;

            case ExpressionType.GetProperty:
                OnObject(ref e, ref (e as GetProperty).Object);
                break;

            case ExpressionType.CallMethod:
                OnObject(ref e, ref (e as CallMethod).Object);
                break;
            }
        }