public override object Visit(UnaryOperatorExpression unaryOperatorExpression, object data) { switch (unaryOperatorExpression.Op) { case UnaryOperatorType.Minus: if (unaryOperatorExpression.Expression is PrimitiveExpression) { PrimitiveExpression expression = (PrimitiveExpression)unaryOperatorExpression.Expression; if (expression.Value is int) { return new CodePrimitiveExpression(- (int)expression.Value); } if (expression.Value is long) { return new CodePrimitiveExpression(- (long)expression.Value); } if (expression.Value is double) { return new CodePrimitiveExpression(- (double)expression.Value); } if (expression.Value is float) { return new CodePrimitiveExpression(- (float)expression.Value); } } return new CodeBinaryOperatorExpression(new CodePrimitiveExpression(0), CodeBinaryOperatorType.Subtract, (CodeExpression)unaryOperatorExpression.Expression.AcceptVisitor(this, data)); case UnaryOperatorType.Plus: return unaryOperatorExpression.Expression.AcceptVisitor(this, data); } return null; }
void NotExpr( #line 1606 "VBNET.ATG" out Expression outExpr) { #line 1607 "VBNET.ATG" UnaryOperatorType uop = UnaryOperatorType.None; while (la.kind == 130) { lexer.NextToken(); #line 1608 "VBNET.ATG" uop = UnaryOperatorType.Not; } EqualityExpr( #line 1609 "VBNET.ATG" out outExpr); #line 1610 "VBNET.ATG" if (uop != UnaryOperatorType.None) outExpr = new UnaryOperatorExpression(outExpr, uop); }
void UnaryExpr( #line 1457 "VBNET.ATG" out Expression uExpr) { #line 1459 "VBNET.ATG" Expression expr; UnaryOperatorType uop = UnaryOperatorType.None; bool isUOp = false; while (la.kind == 14 || la.kind == 15 || la.kind == 16) { if (la.kind == 14) { lexer.NextToken(); #line 1463 "VBNET.ATG" uop = UnaryOperatorType.Plus; isUOp = true; } else if (la.kind == 15) { lexer.NextToken(); #line 1464 "VBNET.ATG" uop = UnaryOperatorType.Minus; isUOp = true; } else { lexer.NextToken(); #line 1466 "VBNET.ATG" uop = UnaryOperatorType.Star; isUOp = true; } } SimpleExpr( #line 1468 "VBNET.ATG" out expr); #line 1470 "VBNET.ATG" if (isUOp) { uExpr = new UnaryOperatorExpression(expr, uop); } else { uExpr = expr; } }
public object Visit(UnaryOperatorExpression unaryOperatorExpression, object data) { DebugOutput(unaryOperatorExpression); switch (unaryOperatorExpression.Op) { case UnaryOperatorType.BitNot: return String.Concat("~", unaryOperatorExpression.Expression.AcceptVisitor(this, data)); case UnaryOperatorType.Decrement: return String.Concat("--", unaryOperatorExpression.Expression.AcceptVisitor(this, data), ")"); case UnaryOperatorType.Increment: return String.Concat("++", unaryOperatorExpression.Expression.AcceptVisitor(this, data), ")"); case UnaryOperatorType.Minus: return String.Concat("-", unaryOperatorExpression.Expression.AcceptVisitor(this, data)); case UnaryOperatorType.Not: return String.Concat("!(", unaryOperatorExpression.Expression.AcceptVisitor(this, data), ")"); case UnaryOperatorType.Plus: return String.Concat("+", unaryOperatorExpression.Expression.AcceptVisitor(this, data)); case UnaryOperatorType.PostDecrement: return String.Concat(unaryOperatorExpression.Expression.AcceptVisitor(this, data), "--"); case UnaryOperatorType.PostIncrement: return String.Concat(unaryOperatorExpression.Expression.AcceptVisitor(this, data), "++"); } throw new System.NotSupportedException(); }
public virtual object Visit(UnaryOperatorExpression unaryOperatorExpression, object data) { return unaryOperatorExpression.Expression.AcceptVisitor(this, data); }
public override object Visit(UnaryOperatorExpression unaryOperatorExpression, object data) { if (unaryOperatorExpression == null) { return null; } ReturnType expressionType = unaryOperatorExpression.Expression.AcceptVisitor(this, data) as ReturnType; // TODO: Little bug: unary operator MAY change the return type, // but that is only a minor issue switch (unaryOperatorExpression.Op) { case UnaryOperatorType.Not: break; case UnaryOperatorType.BitNot: break; case UnaryOperatorType.Minus: break; case UnaryOperatorType.Plus: break; case UnaryOperatorType.Increment: case UnaryOperatorType.PostIncrement: break; case UnaryOperatorType.Decrement: case UnaryOperatorType.PostDecrement: break; case UnaryOperatorType.Star: // dereference --expressionType.PointerNestingLevel; break; case UnaryOperatorType.BitWiseAnd: // get reference ++expressionType.PointerNestingLevel; break; case UnaryOperatorType.None: break; } return expressionType; }