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(), });