Move parseFloat and parseDouble to LiteralTools
diff --git a/smali/src/main/antlr3/smaliTreeWalker.g b/smali/src/main/antlr3/smaliTreeWalker.g
index 44c0078..326d5bd 100644
--- a/smali/src/main/antlr3/smaliTreeWalker.g
+++ b/smali/src/main/antlr3/smaliTreeWalker.g
@@ -96,42 +96,6 @@
return val;
}
- private static Pattern specialFloatRegex = Pattern.compile("((-)?infinityf)|(nanf)", Pattern.CASE_INSENSITIVE);
- private float parseFloat(String floatString) {
- Matcher m = specialFloatRegex.matcher(floatString);
- if (m.matches()) {
- //got an infinity
- if (m.start(1) != -1) {
- if (m.start(2) != -1) {
- return Float.NEGATIVE_INFINITY;
- } else {
- return Float.POSITIVE_INFINITY;
- }
- } else {
- return Float.NaN;
- }
- }
- return Float.parseFloat(floatString);
- }
-
- private static Pattern specialDoubleRegex = Pattern.compile("((-)?infinityd?)|(nand?)", Pattern.CASE_INSENSITIVE);
- private double parseDouble(String doubleString) {
- Matcher m = specialDoubleRegex.matcher(doubleString);
- if (m.matches()) {
- //got an infinity
- if (m.start(1) != -1) {
- if (m.start(2) != -1) {
- return Double.NEGATIVE_INFINITY;
- } else {
- return Double.POSITIVE_INFINITY;
- }
- } else {
- return Double.NaN;
- }
- }
- return Double.parseDouble(doubleString);
- }
-
public String getErrorMessage(RecognitionException e, String[] tokenNames) {
if ( e instanceof SemanticException ) {
return e.getMessage();
@@ -1503,10 +1467,10 @@
: BYTE_LITERAL { $value = LiteralTools.parseByte($BYTE_LITERAL.text); };
float_literal returns[float value]
- : FLOAT_LITERAL { $value = parseFloat($FLOAT_LITERAL.text); };
+ : FLOAT_LITERAL { $value = LiteralTools.parseFloat($FLOAT_LITERAL.text); };
double_literal returns[double value]
- : DOUBLE_LITERAL { $value = parseDouble($DOUBLE_LITERAL.text); };
+ : DOUBLE_LITERAL { $value = LiteralTools.parseDouble($DOUBLE_LITERAL.text); };
char_literal returns[char value]
: CHAR_LITERAL { $value = $CHAR_LITERAL.text.charAt(1); };
diff --git a/smali/src/main/java/org/jf/smali/LiteralTools.java b/smali/src/main/java/org/jf/smali/LiteralTools.java
index 1c7fb78..e2262c1 100644
--- a/smali/src/main/java/org/jf/smali/LiteralTools.java
+++ b/smali/src/main/java/org/jf/smali/LiteralTools.java
@@ -28,6 +28,9 @@
package org.jf.smali;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
public class LiteralTools
{
public static byte parseByte(String byteLiteral)
@@ -304,6 +307,42 @@
}
}
+ private static Pattern specialFloatRegex = Pattern.compile("((-)?infinityf)|(nanf)", Pattern.CASE_INSENSITIVE);
+ public static float parseFloat(String floatString) {
+ Matcher m = specialFloatRegex.matcher(floatString);
+ if (m.matches()) {
+ //got an infinity
+ if (m.start(1) != -1) {
+ if (m.start(2) != -1) {
+ return Float.NEGATIVE_INFINITY;
+ } else {
+ return Float.POSITIVE_INFINITY;
+ }
+ } else {
+ return Float.NaN;
+ }
+ }
+ return Float.parseFloat(floatString);
+ }
+
+ private static Pattern specialDoubleRegex = Pattern.compile("((-)?infinityd?)|(nand?)", Pattern.CASE_INSENSITIVE);
+ public static double parseDouble(String doubleString) {
+ Matcher m = specialDoubleRegex.matcher(doubleString);
+ if (m.matches()) {
+ //got an infinity
+ if (m.start(1) != -1) {
+ if (m.start(2) != -1) {
+ return Double.NEGATIVE_INFINITY;
+ } else {
+ return Double.POSITIVE_INFINITY;
+ }
+ } else {
+ return Double.NaN;
+ }
+ }
+ return Double.parseDouble(doubleString);
+ }
+
public static byte[] longToBytes(long value) {
byte[] bytes = new byte[8];