Bug 18512 - Snippet evaluation returning wrong result?
diff --git a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
index 8305f5e..42d1a92 100644
--- a/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
+++ b/org.eclipse.jdt.debug/eval/org/eclipse/jdt/internal/debug/eval/ast/engine/ASTInstructionCompiler.java
@@ -1809,26 +1809,29 @@
return false;
}
- int literalType = getTypeId(node);
- String token = node.getToken();
+ int literalType= getTypeId(node);
+ String token= node.getToken();
+ int tokenLastCharOffset= token.length() - 1;
+ char lastChar= token.charAt(tokenLastCharOffset);
+ String subToken= token.substring(0, tokenLastCharOffset);
- char lastChar = token.charAt(token.length() - 1);
- if ((lastChar < '0' || lastChar > '9') && lastChar != '.') {
- token = token.substring(0,token.length() - 1);
- }
switch (literalType) {
case Instruction.T_int:
push(new PushInt(Integer.decode(token).intValue()));
break;
case Instruction.T_long:
- push(new PushLong(Long.decode(token).longValue()));
+ push(new PushLong(Long.decode(subToken).longValue()));
break;
case Instruction.T_float:
- push(new PushFloat(Float.parseFloat(token)));
+ push(new PushFloat(Float.parseFloat(subToken)));
break;
case Instruction.T_double:
- push(new PushDouble(Double.parseDouble(token)));
+ if (lastChar == 'D' || lastChar == 'd') {
+ push(new PushDouble(Double.parseDouble(subToken)));
+ } else {
+ push(new PushDouble(Double.parseDouble(token)));
+ }
break;
}
@@ -2452,5 +2455,4 @@
// throw exception
return null;
}
-
-}
+}
\ No newline at end of file