User: olegnitz
  Date: 01/08/09 14:51:14

  Modified:    src/main/org/jboss/ejb/plugins/cmp/ejbql NumberState.java
  Log:
  After careful reading of the EJB QL specification we came to conclusion that 
0xffffffff literal should be treated as long.
  
  Revision  Changes    Path
  1.4       +19 -22    jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/NumberState.java
  
  Index: NumberState.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/ejbql/NumberState.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- NumberState.java  2001/08/09 20:24:32     1.3
  +++ NumberState.java  2001/08/09 21:51:14     1.4
  @@ -174,32 +174,29 @@
           if(number.endsWith("l") || number.endsWith("L")) {
               // chop off the suffix
               number = number.substring(0, number.length() - 1);
  -            System.out.println("decode long number [" + number + "]");
  -            if (number.startsWith("0X") || number.startsWith("0x")) {  // hex
  -                // handle literals from 0x8000000000000000L to 0xffffffffffffffffL:
  -                // remove sign bit, parse as positive, then calculate the negative 
value with the sign bit
  -                if (number.length() == 18) {
  -                    first = Byte.decode(number.substring(0, 3)).byteValue();
  -                    if (first >= 8) {
  -                        number = "0x" + (first - 8) + number.substring(3);
  -                        return new 
ExactNumericToken(Long.decode(number).longValue() - Long.MAX_VALUE - 1);
  -                    }
  +        }
  +        System.out.println("decode exact number [" + number + "]");
  +        if (number.startsWith("0X") || number.startsWith("0x")) {  // hex
  +            // handle literals from 0x8000000000000000L to 0xffffffffffffffffL:
  +            // remove sign bit, parse as positive, then calculate the negative 
value with the sign bit
  +            if (number.length() == 18) {
  +                first = Byte.decode(number.substring(0, 3)).byteValue();
  +                if (first >= 8) {
  +                    number = "0x" + (first - 8) + number.substring(3);
  +                    return new ExactNumericToken(Long.decode(number).longValue() - 
Long.MAX_VALUE - 1);
                   }
  -            } else if (number.startsWith("0")) {  // octal
  -                // handle literals from 01000000000000000000000L to 
01777777777777777777777L
  -                // remove sign bit, parse as positive, then calculate the negative 
value with the sign bit
  -                if (number.length() == 23) {
  -                    if (number.charAt(1) == '1') {
  -                        number = "0" + number.substring(2);
  -                        return new 
ExactNumericToken(Long.decode(number).longValue() - Long.MAX_VALUE - 1);
  -                    }
  +            }
  +        } else if (number.startsWith("0")) {  // octal
  +            // handle literals from 01000000000000000000000L to 
01777777777777777777777L
  +            // remove sign bit, parse as positive, then calculate the negative 
value with the sign bit
  +            if (number.length() == 23) {
  +                if (number.charAt(1) == '1') {
  +                    number = "0" + number.substring(2);
  +                    return new ExactNumericToken(Long.decode(number).longValue() - 
Long.MAX_VALUE - 1);
                   }
               }
  -            return new ExactNumericToken(Long.decode(number).longValue());
  -        } else {
  -            // integer hex and octal literals like 0xffffffff are handled by 
Long.decode()
  -            return new ExactNumericToken(Long.decode(number).intValue());
           }
  +        return new ExactNumericToken(Long.decode(number).longValue());
       }
   
        private ApproximateNumericToken createApproximateNumericToken(String number) 
throws IOException {
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to