Esempio n. 1
0
        public Expression Transform(StandardOperator item, ASTNode[] args)
        {
            var left = args[0].Transform(NodeTransformVisitor);

            return(item.OperatorType switch
            {
                OperatorType.Add => Expression.Add(left, args[1].Transform(NodeTransformVisitor)),
                OperatorType.LogicalNot => Expression.Block(
#if DEBUG
                    ExpressionEx.Console.Write("NOT : LEFT : "),
                    ExpressionEx.Console.WriteLine(left),
#endif
                    Expression.IfThenElse(
                        Expression.Call(typeof(object), nameof(object.Equals), Type.EmptyTypes, Expression.Convert(left, typeof(object)), Expression.Constant(null)),
                        Expression.Constant("NULL!"),
                        Expression.Not(left)
                        )
                    ),
                _ => throw new NotImplementedException(),
            });
        public object?Transform(StandardOperator item, ASTNode[] args)
        {
            switch (item.OperatorType)
            {
            case OperatorType.Subtract:
            case OperatorType.GreaterThan:
            case OperatorType.IsNot:
            case OperatorType.Is:
            case OperatorType.Equal:
            case OperatorType.NotEqual:
                return(TransformBinary(item, args[0], args[1]));

            case OperatorType.LogicalNot:
            case OperatorType.Negate:
                return(TransformUnary(item, args[0]));

            case OperatorType.Assign:
                return(item.AssignmentOperatorBehavior switch
                {
                    AssignmentOperatorBehavior.Assign => throw new NotImplementedException(),
                    AssignmentOperatorBehavior.NamedParameter => TransformNamedArgument(args[0], args[1]),
                    _ => throw new NotImplementedException(),
                });