예제 #1
0
파일: ShaderWriter.cs 프로젝트: cg123/xenko
 public virtual void Visit(ConditionalExpression conditionalExpression)
 {
     VisitDynamic(conditionalExpression.Condition);
     WriteSpace().Write("?").WriteSpace();
     VisitDynamic(conditionalExpression.Left);
     WriteSpace().Write(":").WriteSpace();
     VisitDynamic(conditionalExpression.Right);
 }
예제 #2
0
 private static ConditionalExpression Clone(ConditionalExpression expression)
 {
     return new ConditionalExpression(Clone(expression.Condition), Clone(expression.Left), Clone(expression.Right));
 }
예제 #3
0
파일: CastAnalysis.cs 프로젝트: cg123/xenko
        protected void Visit(ConditionalExpression conditionalExpression)
        {
            // First, dispatch to resolve type of node at deeper level
            Visit((Node)conditionalExpression);

            var leftType = conditionalExpression.Left.TypeInference.TargetType;
            var rightType = conditionalExpression.Right.TypeInference.TargetType;

            if (leftType == null || (leftType is ScalarType && !(rightType is ScalarType)))
            {
                conditionalExpression.Left = Cast(leftType, rightType, conditionalExpression.Left);
            }
            else
            {
                conditionalExpression.Right = Cast(rightType, leftType, conditionalExpression.Right);
            }
        }
예제 #4
0
        public override Node Visit(ConditionalExpression conditionalExpression)
        {
            // First, dispatch to resolve type of node at deeper level
            base.Visit(conditionalExpression);

            var leftType = conditionalExpression.Left.TypeInference.TargetType;
            var rightType = conditionalExpression.Right.TypeInference.TargetType;

            if (leftType == null || (leftType is ScalarType && !(rightType is ScalarType)))
            {
                conditionalExpression.Left = Cast(leftType, rightType, conditionalExpression.Left);
            }
            else
            {
                conditionalExpression.Right = Cast(rightType, leftType, conditionalExpression.Right);
            }

            return conditionalExpression;
        }
예제 #5
0
        protected virtual void Visit(ConditionalExpression conditionalExpression)
        {
            Visit((Node)conditionalExpression);

            // Type inference for conditional expression is using the left result
            var leftType = conditionalExpression.Left.TypeInference.TargetType;
            var rightType = conditionalExpression.Right.TypeInference.TargetType;

            conditionalExpression.TypeInference.TargetType = leftType;
            
            if (leftType == null || (leftType is ScalarType && !(rightType is ScalarType)))
            {
                conditionalExpression.TypeInference.TargetType = rightType;
            }
        }
예제 #6
0
        /// <summary>
        /// Visits the specified conditional expression.
        /// </summary>
        /// <param name="conditionalExpression">The conditional expression.</param>
        public override Node Visit(ConditionalExpression conditionalExpression)
        {
            base.Visit(conditionalExpression);

            // Type inference for conditional expression is using the left result
            var leftType = conditionalExpression.Left.TypeInference.TargetType;
            var rightType = conditionalExpression.Right.TypeInference.TargetType;

            conditionalExpression.TypeInference.TargetType = leftType;
            
            if (leftType == null || (leftType is ScalarType && !(rightType is ScalarType)))
            {
                conditionalExpression.TypeInference.TargetType = rightType;
            }

            return conditionalExpression;
        }