Support Infinity and NaN in constant evaluator

This allows to store infinities and NaNs inside const vals
This commit is contained in:
Mikhail Zarechenskiy
2016-12-01 11:19:25 +03:00
parent 57964845ad
commit 25c3b43858
4 changed files with 67 additions and 11 deletions
@@ -1,4 +1,4 @@
// !DIAGNOSTICS:-UNUSED_VARIABLE,-CAST_NEVER_SUCCEEDS
// !DIAGNOSTICS:-UNUSED_VARIABLE,-CAST_NEVER_SUCCEEDS,-DIVISION_BY_ZERO
import kotlin.reflect.KProperty
@@ -75,6 +75,21 @@ const val nonConstInitializer2 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>1 as St
const val nonConstInitializer3 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>1.0 as String<!>
const val nonConstInitializer4 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>1 as Double<!>
const val nonConstInitializer5 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>"2" as Int<!>
const val nonConstInitializer6 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>1/0<!>
const val nonConstInitializer7 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>-1/0<!>
const val nonConstInitializer8 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>1/0 - 1/0<!>
const val nonConstInitializer9 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>1.0/0.0 - 1/0<!>
const val nonConstInitializer10 = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>0/0<!>
const val constInitializer1 = 1.0/0
const val constInitializer2 = 1/0.0
const val constInitializer3 = 1.0/0.0
const val constInitializer4 = -1.0/0
const val constInitializer5 = 0.0/0
const val constInitializer6 = 42 + 1.0/0
const val constInitializer7 = 42 - 1.0/0
const val constInitializer8 = 1.0/0 - 1.0/0
const val constInitializer9 = 0.0/0 + 1.0/0
// ------------------
class Delegate {
@@ -1,12 +1,26 @@
package
public const val constInitializer1: kotlin.Double = Infinity.toDouble()
public const val constInitializer2: kotlin.Double = Infinity.toDouble()
public const val constInitializer3: kotlin.Double = Infinity.toDouble()
public const val constInitializer4: kotlin.Double = -Infinity.toDouble()
public const val constInitializer5: kotlin.Double = NaN.toDouble()
public const val constInitializer6: kotlin.Double = Infinity.toDouble()
public const val constInitializer7: kotlin.Double = -Infinity.toDouble()
public const val constInitializer8: kotlin.Double = NaN.toDouble()
public const val constInitializer9: kotlin.Double = NaN.toDouble()
public const val defaultGetter: kotlin.Int = 19
public const val delegated: kotlin.Int
public const val nonConstInitializer1: kotlin.Int
public const val nonConstInitializer10: kotlin.Int
public const val nonConstInitializer2: kotlin.String
public const val nonConstInitializer3: kotlin.String
public const val nonConstInitializer4: kotlin.Double
public const val nonConstInitializer5: kotlin.Int
public const val nonConstInitializer6: kotlin.Int
public const val nonConstInitializer7: kotlin.Int
public const val nonConstInitializer8: kotlin.Int
public const val nonConstInitializer9: kotlin.Double
private val privateTopLevel: kotlin.Int = 3
public const var topLeveLVar: kotlin.Int
public const val topLevel: kotlin.Int = 0