Compile() public abstract method

public abstract Compile ( System.Linq.Expressions.ParameterExpression stateParameterExpression, LabelTarget returnTarget ) : Expression
stateParameterExpression System.Linq.Expressions.ParameterExpression
returnTarget System.Linq.Expressions.LabelTarget
return System.Linq.Expressions.Expression
        public override Expression Compile(ParameterExpression stateParameterExpression, LabelTarget returnTarget, LogicExpression valueExpression)
        {
            var value = this.Target.Compile(stateParameterExpression, returnTarget);
            var convertedValue = Expression.Convert(value, typeof(LogicStructureInstance));

            var valueVariable = Expression.Variable(typeof(LogicStructureInstance), "value");
            var field = Expression.Variable(typeof(LogicField), "field");

            Expression<Func<LogicStructureInstance, string, LogicField>> lookupField =
                (x, z) => x.Fields.Keys.First(y => y.Name == z);

            var assignValue = Expression.Assign(valueVariable, convertedValue);
            var assignFieldName = Expression.Assign(
                field,
                Expression.Invoke(lookupField, valueVariable, Expression.Constant(this.Field)));
            var assignField =
                Expression.Assign(
                    Expression.Property(Expression.Property(valueVariable, "Fields"), "Item", field),
                    Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object)));
            var assignFieldSet =
                Expression.Assign(
                    Expression.Property(Expression.Property(valueVariable, "FieldsSet"), "Item", field),
                    Expression.Constant(true));

            return Expression.Block(
                new[] { valueVariable, field },
                assignValue,
                assignFieldName,
                assignField,
                assignFieldSet);
        }
        public override Expression Compile(ParameterExpression stateParameterExpression, LabelTarget returnTarget, LogicExpression valueExpression)
        {
            var value          = this.Target.Compile(stateParameterExpression, returnTarget);
            var convertedValue = Expression.Convert(value, typeof(LogicStructureInstance));

            var valueVariable = Expression.Variable(typeof(LogicStructureInstance), "value");
            var field         = Expression.Variable(typeof(LogicField), "field");

            Expression <Func <LogicStructureInstance, string, LogicField> > lookupField =
                (x, z) => x.Fields.Keys.First(y => y.Name == z);

            var assignValue     = Expression.Assign(valueVariable, convertedValue);
            var assignFieldName = Expression.Assign(
                field,
                Expression.Invoke(lookupField, valueVariable, Expression.Constant(this.Field)));
            var assignField =
                Expression.Assign(
                    Expression.Property(Expression.Property(valueVariable, "Fields"), "Item", field),
                    Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object)));
            var assignFieldSet =
                Expression.Assign(
                    Expression.Property(Expression.Property(valueVariable, "FieldsSet"), "Item", field),
                    Expression.Constant(true));

            return(Expression.Block(
                       new[] { valueVariable, field },
                       assignValue,
                       assignFieldName,
                       assignField,
                       assignFieldSet));
        }
 public override Expression Compile(
     ParameterExpression stateParameterExpression,
     LabelTarget returnTarget,
     LogicExpression valueExpression)
 {
     return
         Expression.Assign(
             Expression.Property(
                 Expression.Property(stateParameterExpression, "Variables"),
                 "Item",
                 Expression.Constant(this.Identifier)),
             Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object)));
 }
Example #4
0
 public override Expression Compile(
     ParameterExpression stateParameterExpression,
     LabelTarget returnTarget,
     LogicExpression valueExpression)
 {
     return
         (Expression.Assign(
              Expression.Property(
                  Expression.Property(stateParameterExpression, "Variables"),
                  "Item",
                  Expression.Constant(this.Identifier)),
              Expression.Convert(valueExpression.Compile(stateParameterExpression, returnTarget), typeof(object))));
 }