# HG changeset patch # User Vladimir Voskresensky # Date 1225382509 -10800 # Node ID c70fecbe56ad42bc6a1fb8c8ef01ceca0f700d97 # Parent bdcc3646b78d11efb790d0ca382bf30f3385ecd2 due to bug in JDK6_u10 workaround to fix IZ#150693 diff -r bdcc3646b78d -r c70fecbe56ad cnd.apt/src/org/netbeans/modules/cnd/apt/impl/support/aptexpr.g --- a/cnd.apt/src/org/netbeans/modules/cnd/apt/impl/support/aptexpr.g Thu Oct 30 11:24:14 2008 +0300 +++ b/cnd.apt/src/org/netbeans/modules/cnd/apt/impl/support/aptexpr.g Thu Oct 30 19:01:49 2008 +0300 @@ -90,7 +90,15 @@ return r == 0 ? false : true; } + // Fixup: this hack is added due to bug in jdk6 Update 10 (see IZ#150693) + private long counter = 0; + private final long MAX_COUNTER = Long.MAX_VALUE - 2; + private long toLong(boolean b) { + // Fixup: this hack is added due to bug in jdk6 Update 10 (see IZ#150693) + if (counter++ == MAX_COUNTER) { + System.err.print("toLong " + b); + } return b ? 1 : 0; } @@ -191,147 +199,3 @@ // | f2: FLOATTWO {r=Integer.parseInt(f2.getText());} ; -/* APTExpressionWalker is not used any more, because all evaluations are done in APTExprParser -class APTExpressionWalker extends TreeParser; -{ - private APTMacroCallback callback = null; - public APTExpressionWalker(APTMacroCallback callback) { - this.callback = callback; - } - - private boolean isDefined(AST id) { - if (id != null && callback != null) { - return callback.isDefined(getToken(id)); - } - return false; - } - - private Token astToken = new CommonToken(); - private Token getToken(AST ast) { - astToken.setType(ast.getType()); - astToken.setText(ast.getText()); - return astToken; - } - - private long evalID(AST id) { - // each not expanded ID in expression is '0' by specification - return 0; - } - - private boolean toBoolean(long r) { - return r == 0 ? false : true; - } - - private long toLong(boolean b) { - return b ? 1 : 0; - } - - private long toLong(String str) { - long val = Long.MAX_VALUE; - try { - val = Long.decode(remSuffix(str)).longValue(); - } catch (NumberFormatException ex) { - //ex.printStackTrace(System.err); - } - return val; - } - - private String remSuffix(String num) { - int len = num.length(); - boolean stop; - do { - stop = true; - if (len > 0) { - char last = num.charAt(len - 1); - // remove postfix like u, U, l, L - if (last == 'u' || last == 'U' || last == 'l' || last == 'L') { - num = num.substring(0, len - 1); - len--; - stop = false; - } - } - } while (!stop); - return num; - } -} - -expr returns [long r] - { - long a,b; - long q; - boolean def; - r=0; - } - : #(QUESTIONMARK q=expr a=expr b=expr) { r = toBoolean(q)?a:b;} - | #(OR a=expr b=expr) { r=toLong(toBoolean(a)||toBoolean(b)); } - | #(AND a=expr b=expr) { r=toLong(toBoolean(a)&&toBoolean(b)); } - | #(BITWISEOR a=expr b=expr) { r= a | b; } - | #(BITWISEXOR a=expr b=expr) { r= a ^ b; } - | #(AMPERSAND a=expr b=expr) { r= a & b; } - | #(EQUAL a=expr b=expr) { r= toLong(a == b); } - | #(NOTEQUAL a=expr b=expr) { r= toLong(a != b); } - | #(LESSTHAN a=expr b=expr) { r= toLong(a < b); } - | #(LESSTHANOREQUALTO a=expr b=expr) { r= toLong(a <= b); } - | #(GREATERTHAN a=expr b=expr) { r= toLong(a > b); } - | #(GREATERTHANOREQUALTO a=expr b=expr) { r= toLong(a >= b); } - | #(SHIFTLEFT a=expr b=expr) { r= a << b; } - | #(SHIFTRIGHT a=expr b=expr) { r= a >> b; } - | #(PLUS a=expr b=expr) { r=a+b; } - | #(MINUS a=expr b=expr) { r=a-b; } - | #(STAR a=expr b=expr) { r=a*b; } - | #(DIVIDE a=expr b=expr) - { - try { - r=a/b; - } catch (ArithmeticException ex) { - //System.err.println(ex); - r = 0; - } - } - | #(MOD a=expr b=expr) - { - try { - r=a%b; - } catch (ArithmeticException ex) { - //System.err.println(ex); - r = 0; - } - } - | #(SIGN_MINUS a=expr) { r=-1*a; } - | #(SIGN_PLUS a=expr) { r= (a<0) ? 0-a : a; } - | #(DEFINED def=defined) {r=toLong(def);} - | #(NOT a=expr) { r=toLong(!toBoolean(a)); } - | #(TILDE a=expr) { r=~a; } - | #(LPAREN a=expr) { r=a; } - | LITERAL_true { r=toLong(true);} - | LITERAL_false { r=toLong(false);} - | n:NUMBER {r=toLong(n.getText());} - | id: ID {r=evalID(id);} -// | i:constant { r=(double)Integer.parseInt(i.getText()); } - | o:OCTALINT {r=toLong(o.getText());} - | d:DECIMALINT {r=toLong(d.getText());} - | x:HEXADECIMALINT {r=toLong(x.getText());} - | c: CHAR_LITERAL { r=c.getText().charAt(1); } -// | f1: FLOATONE {r=Integer.parseInt(f1.getText());} -// | f2: FLOATTWO {r=Integer.parseInt(f2.getText());} - | EOF { r = 0; } - ; - -defined returns [boolean r] - { r=false; } : id: ID_DEFINED { r = isDefined(id); } -; - -/* -constant return [long r] - { r=10; } - : #(OCTALINT) - | #(DECIMALINT) - | #(HEXADECIMALINT) -// | CharLiteral -// | (StringLiteral)+ - | #(FLOATONE) - | #(FLOATTWO) - | #(LITERAL_true) - | #(LITERAL_false) -; -*/