Пример #1
0
        void Write(CiUnaryExpr expr)
        {
            switch (expr.Op)
            {
            case CiToken.Increment: Write("++"); break;

            case CiToken.Decrement: Write("--"); break;

            case CiToken.Minus: Write('-'); break;

            case CiToken.Not: Write('~'); break;

            default: throw new ArgumentException(expr.Op.ToString());
            }
            WriteChild(expr, expr.Inner);
        }
Пример #2
0
 void Write(CiUnaryExpr expr)
 {
     switch (expr.Op) {
     case CiToken.Increment: Write("++"); break;
     case CiToken.Decrement: Write("--"); break;
     case CiToken.Minus: Write('-'); break;
     case CiToken.Not: Write('~'); break;
     default: throw new ArgumentException(expr.Op.ToString());
     }
     WriteChild(expr, expr.Inner);
 }
Пример #3
0
 CiExpr ICiExprVisitor.Visit(CiUnaryExpr expr)
 {
     CiExpr resolved;
     if (expr.Op == CiToken.Increment || expr.Op == CiToken.Decrement)
     resolved = ResolveLValue(expr.Inner);
     else
     resolved = Resolve(expr.Inner);
     expr.Inner = Coerce(resolved, CiIntType.Value);
     if (expr.Op == CiToken.Minus && expr.Inner is CiConstExpr)
     return new CiConstExpr(-GetConstInt(expr.Inner));
     return expr;
 }