This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 150693
Collapse All | Expand All

(-)a/cnd.apt/src/org/netbeans/modules/cnd/apt/impl/support/aptexpr.g (-144 / +8 lines)
Lines 90-96 Link Here
90
        return r == 0 ? false : true;
90
        return r == 0 ? false : true;
91
    }
91
    }
92
92
93
    // Fixup: this hack is added due to bug in jdk6 Update 10 (see IZ#150693)
94
    private long counter = 0;
95
    private final long MAX_COUNTER = Long.MAX_VALUE - 2;
96
93
    private long toLong(boolean b) {
97
    private long toLong(boolean b) {
98
        // Fixup: this hack is added due to bug in jdk6 Update 10 (see IZ#150693)
99
        if (counter++ == MAX_COUNTER) {
100
            System.err.print("toLong " + b);
101
        }
94
        return b ? 1 : 0;
102
        return b ? 1 : 0;
95
    }
103
    }
96
104
Lines 191-337 Link Here
191
//          | f2: FLOATTWO {r=Integer.parseInt(f2.getText());}
199
//          | f2: FLOATTWO {r=Integer.parseInt(f2.getText());}
192
	;
200
	;
193
201
194
/* APTExpressionWalker is not used any more, because all evaluations are done in APTExprParser
195
class APTExpressionWalker extends TreeParser;
196
{
197
    private APTMacroCallback callback = null;
198
    public APTExpressionWalker(APTMacroCallback callback) {
199
        this.callback = callback;
200
    }
201
202
    private boolean isDefined(AST id) {
203
        if (id != null && callback != null) {
204
            return callback.isDefined(getToken(id));
205
        }
206
        return false;
207
    }
208
209
    private Token astToken = new CommonToken();
210
    private Token getToken(AST ast) {
211
        astToken.setType(ast.getType());
212
        astToken.setText(ast.getText());
213
        return astToken;
214
    }
215
216
    private long evalID(AST id) {
217
        // each not expanded ID in expression is '0' by specification
218
        return 0;
219
    }
220
221
    private boolean toBoolean(long r) {
222
        return r == 0 ? false : true;
223
    }
224
225
    private long toLong(boolean b) {
226
        return b ? 1 : 0;
227
    }
228
229
    private long toLong(String str) {
230
        long val = Long.MAX_VALUE;
231
        try {
232
            val = Long.decode(remSuffix(str)).longValue();
233
        } catch (NumberFormatException ex) {
234
            //ex.printStackTrace(System.err);
235
        }
236
        return val;
237
    }
238
239
    private String remSuffix(String num) {
240
        int len = num.length();
241
        boolean stop;
242
        do {
243
            stop = true;
244
            if (len > 0) {
245
                char last = num.charAt(len - 1);
246
                // remove postfix like u, U, l, L
247
                if (last == 'u' || last == 'U' || last == 'l' || last == 'L') {
248
                    num = num.substring(0, len - 1);
249
                    len--;
250
                    stop = false;
251
                }
252
            }
253
        } while (!stop);
254
        return num;
255
    }
256
}
257
258
expr returns [long r]
259
    { 
260
        long a,b; 
261
        long q;
262
        boolean def;
263
        r=0; 
264
    }
265
    : #(QUESTIONMARK q=expr a=expr b=expr) { r = toBoolean(q)?a:b;}
266
    | #(OR a=expr b=expr) { r=toLong(toBoolean(a)||toBoolean(b)); }
267
    | #(AND a=expr b=expr) { r=toLong(toBoolean(a)&&toBoolean(b)); }
268
    | #(BITWISEOR a=expr b=expr) { r= a | b; }  
269
    | #(BITWISEXOR a=expr b=expr) { r= a ^ b; }  
270
    | #(AMPERSAND a=expr b=expr) { r= a & b; }  
271
    | #(EQUAL a=expr b=expr) { r= toLong(a == b); }
272
    | #(NOTEQUAL a=expr b=expr) { r= toLong(a != b); }
273
    | #(LESSTHAN a=expr b=expr) { r= toLong(a < b); }
274
    | #(LESSTHANOREQUALTO a=expr b=expr) { r= toLong(a <= b); }
275
    | #(GREATERTHAN a=expr b=expr) { r= toLong(a > b); }
276
    | #(GREATERTHANOREQUALTO a=expr b=expr) { r= toLong(a >= b); }
277
    | #(SHIFTLEFT a=expr b=expr) { r= a << b; }
278
    | #(SHIFTRIGHT a=expr b=expr) { r= a >> b; }
279
    | #(PLUS  a=expr b=expr) { r=a+b; }
280
    | #(MINUS a=expr b=expr) { r=a-b; }
281
    | #(STAR   a=expr b=expr) { r=a*b; }
282
    | #(DIVIDE   a=expr b=expr) 
283
            {
284
                try {
285
                    r=a/b;
286
                } catch (ArithmeticException ex) {
287
                    //System.err.println(ex);
288
                    r = 0;
289
                }
290
            }
291
    | #(MOD   a=expr b=expr) 
292
            {
293
                try {
294
                    r=a%b;
295
                } catch (ArithmeticException ex) {
296
                    //System.err.println(ex);
297
                    r = 0;
298
                }
299
            }
300
    | #(SIGN_MINUS a=expr)   { r=-1*a; } 
301
    | #(SIGN_PLUS  a=expr)   { r= (a<0) ? 0-a : a; }
302
    | #(DEFINED def=defined) {r=toLong(def);}
303
    | #(NOT a=expr)   { r=toLong(!toBoolean(a)); } 
304
    | #(TILDE a=expr)   { r=~a; } 
305
    | #(LPAREN a=expr)       { r=a; }
306
    | LITERAL_true { r=toLong(true);}
307
    | LITERAL_false { r=toLong(false);}
308
    | n:NUMBER {r=toLong(n.getText());}
309
    | id: ID       {r=evalID(id);}
310
//  | i:constant { r=(double)Integer.parseInt(i.getText()); }
311
    | o:OCTALINT {r=toLong(o.getText());}
312
    | d:DECIMALINT {r=toLong(d.getText());}
313
    | x:HEXADECIMALINT {r=toLong(x.getText());}
314
    | c: CHAR_LITERAL { r=c.getText().charAt(1); }
315
//    | f1: FLOATONE {r=Integer.parseInt(f1.getText());}
316
//    | f2: FLOATTWO {r=Integer.parseInt(f2.getText());}
317
    | EOF { r = 0; }
318
  ;
319
320
defined returns [boolean r]
321
  { r=false; } : id: ID_DEFINED { r = isDefined(id); }
322
;
323
324
/*
325
constant return [long r]
326
  { r=10; }
327
    :	#(OCTALINT)
328
    |	#(DECIMALINT)
329
    |	#(HEXADECIMALINT)
330
//    |	CharLiteral
331
//	|	(StringLiteral)+
332
    |	#(FLOATONE)
333
    |	#(FLOATTWO)
334
    |	#(LITERAL_true)
335
    |	#(LITERAL_false)
336
;
337
*/  

Return to bug 150693