Parse floats with 'F' or 'f' suffix
This commit is contained in:
+17
-1
@@ -85,7 +85,7 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet
|
||||
if (text == null) return null
|
||||
val result: Any? = when (expression.getNode().getElementType()) {
|
||||
JetNodeTypes.INTEGER_CONSTANT -> parseLong(text)
|
||||
JetNodeTypes.FLOAT_CONSTANT -> parseDouble(text)
|
||||
JetNodeTypes.FLOAT_CONSTANT -> parseFloatingLiteral(text)
|
||||
JetNodeTypes.BOOLEAN_CONSTANT -> parseBoolean(text)
|
||||
JetNodeTypes.CHARACTER_CONSTANT -> CompileTimeConstantResolver.parseChar(expression)
|
||||
JetNodeTypes.NULL -> null
|
||||
@@ -450,6 +450,13 @@ public fun parseLong(text: String): Long? {
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseFloatingLiteral(text: String): Any? {
|
||||
if (text.toLowerCase().endsWith('f')) {
|
||||
return parseFloat(text)
|
||||
}
|
||||
return parseDouble(text)
|
||||
}
|
||||
|
||||
private fun parseDouble(text: String): Double? {
|
||||
try {
|
||||
return java.lang.Double.parseDouble(text)
|
||||
@@ -459,6 +466,15 @@ private fun parseDouble(text: String): Double? {
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseFloat(text: String): Float? {
|
||||
try {
|
||||
return java.lang.Float.parseFloat(text)
|
||||
}
|
||||
catch (e: NumberFormatException) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseBoolean(text: String): Boolean {
|
||||
if ("true".equals(text)) {
|
||||
return true
|
||||
|
||||
@@ -95,10 +95,11 @@ BIN_INTEGER_LITERAL=0[Bb]({DIGIT})*
|
||||
//FLOAT_LITERAL=(({FLOATING_POINT_LITERAL1})[Ff])|(({FLOATING_POINT_LITERAL2})[Ff])|(({FLOATING_POINT_LITERAL3})[Ff])|(({FLOATING_POINT_LITERAL4})[Ff])
|
||||
//DOUBLE_LITERAL=(({FLOATING_POINT_LITERAL1})[Dd]?)|(({FLOATING_POINT_LITERAL2})[Dd]?)|(({FLOATING_POINT_LITERAL3})[Dd]?)|(({FLOATING_POINT_LITERAL4})[Dd])
|
||||
DOUBLE_LITERAL={FLOATING_POINT_LITERAL1}|{FLOATING_POINT_LITERAL2}|{FLOATING_POINT_LITERAL3}|{FLOATING_POINT_LITERAL4}
|
||||
FLOATING_POINT_LITERAL1=({DIGIT})+"."({DIGIT})+({EXPONENT_PART})?
|
||||
FLOATING_POINT_LITERAL2="."({DIGIT})+({EXPONENT_PART})?
|
||||
FLOATING_POINT_LITERAL3=({DIGIT})+({EXPONENT_PART})
|
||||
FLOATING_POINT_LITERAL4=({DIGIT})+
|
||||
FLOATING_POINT_LITERAL1=({DIGIT})+"."({DIGIT})+({EXPONENT_PART})?({FLOATING_POINT_LITERAL_SUFFIX})?
|
||||
FLOATING_POINT_LITERAL2="."({DIGIT})+({EXPONENT_PART})?({FLOATING_POINT_LITERAL_SUFFIX})?
|
||||
FLOATING_POINT_LITERAL3=({DIGIT})+({EXPONENT_PART})({FLOATING_POINT_LITERAL_SUFFIX})?
|
||||
FLOATING_POINT_LITERAL4=({DIGIT})+({FLOATING_POINT_LITERAL_SUFFIX})?
|
||||
FLOATING_POINT_LITERAL_SUFFIX=[Ff]
|
||||
EXPONENT_PART=[Ee]["+""-"]?({DIGIT})*
|
||||
HEX_FLOAT_LITERAL={HEX_SIGNIFICAND}{BINARY_EXPONENT}[Ff]
|
||||
//HEX_DOUBLE_LITERAL={HEX_SIGNIFICAND}{BINARY_EXPONENT}[Dd]?
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user