Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/ExpressionNode.cc

    r0a2168f ra16764a6  
    1010// Created On       : Sat May 16 13:17:07 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat Mar  3 18:22:33 2018
    13 // Update Count     : 796
     12// Last Modified On : Wed Sep 27 22:51:55 2017
     13// Update Count     : 781
    1414//
    1515
     
    5858static inline bool checkD( char c ) { return c == 'd' || c == 'D'; }
    5959static inline bool checkI( char c ) { return c == 'i' || c == 'I'; }
    60 static inline bool checkB( char c ) { return c == 'b' || c == 'B'; }
    6160static inline bool checkX( char c ) { return c == 'x' || c == 'X'; }
    6261
     
    117116
    118117        unsigned long long int v;                                                       // converted integral value
    119         size_t last = str.length() - 1;                                         // last subscript of constant
     118        size_t last = str.length() - 1;                                         // last character of constant
    120119        Expression * ret;
    121120
     
    130129        } // if
    131130
    132         // Cannot be "0"
    133 
    134         if ( str[0] == '0' ) {                                                          // radix character ?
     131        if ( str[0] == '0' ) {                                                          // octal/hex constant ?
    135132                dec = false;
    136                 if ( checkX( str[1] ) ) {                                               // hex constant ?
     133                if ( last != 0 && checkX( str[1] ) ) {                  // hex constant ?
    137134                        sscanf( (char *)str.c_str(), "%llx", &v );
    138                         //printf( "%llx %llu\n", v, v );
    139                 } else if ( checkB( str[1] ) ) {                                // binary constant ?
    140                         v = 0;
    141                         for ( unsigned int i = 2;; i += 1 ) {           // compute value
    142                                 if ( str[i] == '1' ) v |= 1;
    143                           if ( i == last ) break;
    144                                 v <<= 1;
    145                         } // for
    146135                        //printf( "%llx %llu\n", v, v );
    147136                } else {                                                                                // octal constant
Note: See TracChangeset for help on using the changeset viewer.