Example #1
0
        private Expression FinishUnaryNegate() {
            // Special case to ensure that System.Int32.MinValue is an int and not a BigInteger
            if (PeekToken().Kind == TokenKind.Constant) {
                Token t = PeekToken();

                if (t.Value is BigInteger) {
                    BigInteger bi = (BigInteger)t.Value;
                    if (bi == 0x80000000) {
                        string tokenString = _tokenizer.GetTokenString(); ;
                        Debug.Assert(tokenString.Length > 0);

                        if (tokenString[tokenString.Length - 1] != 'L' &&
                            tokenString[tokenString.Length - 1] != 'l') {
                            string minusWhiteSpace = _tokenWhiteSpace;

                            NextToken();
                            // TODO Fix the white space here
                            var ret = new ConstantExpression(-2147483648);

                            if (_verbatim) {
                                AddExtraVerbatimText(ret, minusWhiteSpace + "-" + _tokenWhiteSpace + t.VerbatimImage);
                            }
                            return ret;
                        }
                    }
                }
            }

            string whitespace = _tokenWhiteSpace;
            var res = new UnaryExpression(PythonOperator.Negate, ParseFactor());
            if (_verbatim) {
                AddPreceedingWhiteSpace(res, whitespace);
            }
            return res;
        }
Example #2
0
 // factor: ('+'|'-'|'~') factor | power
 private Expression ParseFactor() {
     var start = _lookahead.Span.Start;
     Expression ret;
     switch (PeekToken().Kind) {
         case TokenKind.Add:
             NextToken();
             string posWhiteSpace = _tokenWhiteSpace;
             ret = new UnaryExpression(PythonOperator.Pos, ParseFactor());
             if (_verbatim) {
                 AddPreceedingWhiteSpace(ret, posWhiteSpace);
             }
             break;
         case TokenKind.Subtract:
             NextToken();
             ret = FinishUnaryNegate();
             break;
         case TokenKind.Twiddle:
             NextToken();
             string twiddleWhiteSpace = _tokenWhiteSpace;
             ret = new UnaryExpression(PythonOperator.Invert, ParseFactor());
             if (_verbatim) {
                 AddPreceedingWhiteSpace(ret, twiddleWhiteSpace);
             }
             break;
         default:
             return ParseAwaitExpr();
     }
     ret.SetLoc(start, GetEnd());
     return ret;
 }
Example #3
0
 //not_test: 'not' not_test | comparison
 private Expression ParseNotTest() {
     if (MaybeEat(TokenKind.KeywordNot)) {
         string proceeding = _tokenWhiteSpace;
         var start = GetStart();
         Expression ret = new UnaryExpression(PythonOperator.Not, ParseNotTest());
         if (_verbatim) {
             AddPreceedingWhiteSpace(ret, proceeding);
         }
         ret.SetLoc(start, GetEnd());
         return ret;
     } else {
         return ParseComparison();
     }
 }
Example #4
0
 public override bool Walk(UnaryExpression node) {
     return UpdateLineInfo(node, true);
 }
Example #5
0
 public override void PostWalk(UnaryExpression node) { PostWalkWorker(node); }
Example #6
0
 // UnaryExpression
 public override bool Walk(UnaryExpression node) { return ShouldWalkWorker(node); }