# HG changeset patch # User Christian Wimmer # Date 1428555582 25200 # Node ID 8ad82587f08d41b9928ad45cc4c676013e454872 # Parent 1bfa14fd1275d37c0eec56e9873752bdf11b4716 Allow scaling factors in integer options; add support for Long values in addition to Integer values diff -r 1bfa14fd1275 -r 8ad82587f08d graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionUtils.java --- a/graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionUtils.java Wed Apr 08 21:58:46 2015 -0700 +++ b/graal/com.oracle.graal.options/src/com/oracle/graal/options/OptionUtils.java Wed Apr 08 21:59:42 2015 -0700 @@ -91,7 +91,9 @@ } else if (optionType == Double.class) { value = Double.parseDouble(valueString); } else if (optionType == Integer.class) { - value = Integer.parseInt(valueString); + value = Integer.valueOf((int) parseLong(valueString)); + } else if (optionType == Long.class) { + value = Long.valueOf(parseLong(valueString)); } else if (optionType == String.class) { value = valueString; } @@ -118,6 +120,27 @@ return true; } + private static long parseLong(String v) { + String valueString = v.toLowerCase(); + long scale = 1; + if (valueString.endsWith("k")) { + scale = 1024L; + } else if (valueString.endsWith("m")) { + scale = 1024L * 1024L; + } else if (valueString.endsWith("g")) { + scale = 1024L * 1024L * 1024L; + } else if (valueString.endsWith("t")) { + scale = 1024L * 1024L * 1024L * 1024L; + } + + if (scale != 1) { + /* Remove trailing scale character. */ + valueString = valueString.substring(0, valueString.length() - 1); + } + + return Long.parseLong(valueString) * scale; + } + public static void printNoMatchMessage(SortedMap options, String optionName, String prefix) { OptionDescriptor desc = options.get(optionName); if (desc != null) {