Control flow changes for secondary constructors

This commit is contained in:
Denis Zharkov
2015-03-10 19:42:45 +03:00
parent 61ae694be4
commit 7f20c4a237
39 changed files with 1785 additions and 30 deletions
@@ -0,0 +1,19 @@
package
internal final class A {
public constructor A()
public constructor A(/*0*/ w: kotlin.Char)
public constructor A(/*0*/ a: kotlin.Int, /*1*/ b: kotlin.Int = ...)
internal final val overinitialized: kotlin.Int
internal final val uninitialized: kotlin.Int
internal final val useInitialized: kotlin.Int
internal final val useUnitialized: kotlin.Int
internal final val v: kotlin.Int = -1
internal final val w: kotlin.Char
internal final val x: kotlin.Int
internal final var y: kotlin.Int
internal final val z: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,20 @@
package
internal final class A {
public constructor A()
public constructor A(/*0*/ a: kotlin.Double, /*1*/ b: kotlin.Int = ...)
public constructor A(/*0*/ a: kotlin.Int, /*1*/ b: kotlin.Int = ...)
public constructor A(/*0*/ x: kotlin.String)
public constructor A(/*0*/ a: kotlin.String, /*1*/ b: kotlin.Int = ...)
internal final val overinitialized: kotlin.Int
internal final val uninitialized: kotlin.Int
internal final val useInitialized: kotlin.Int
internal final val useUnitialized: kotlin.Int
internal final val v: kotlin.Int = -1
internal final val x: kotlin.Int
internal final var y: kotlin.Int
internal final val z: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,33 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class A(val w: Char) {
val x: Int
var y: Int
val z: Int
val v = -1
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
val overinitialized: Int
constructor(): this('a') {
y = 1
<!VAL_REASSIGNMENT!>overinitialized<!> = 2
<!VAL_REASSIGNMENT!>uninitialized<!> = 3
}
// anonymous
init {
x = 4
z = 5
overinitialized = 6
}
constructor(a: Int): this('b') {
y = 7
}
// anonymous
init {
y = 8
}
}
@@ -0,0 +1,17 @@
package
internal final class A {
public constructor A()
public constructor A(/*0*/ w: kotlin.Char)
public constructor A(/*0*/ a: kotlin.Int)
internal final val overinitialized: kotlin.Int
internal final val uninitialized: kotlin.Int
internal final val v: kotlin.Int = -1
internal final val w: kotlin.Char
internal final val x: kotlin.Int
internal final var y: kotlin.Int
internal final val z: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,39 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class A {
val x: Int
var y: Int
val z: Int
val v = -1
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
val overinitialized: Int
constructor() {
x = 1
y = 2
<!VAL_REASSIGNMENT!>overinitialized<!> = 3
uninitialized = 4
}
constructor(a: Int): super() {
x = 5
y = 6
}
constructor(x: String): this() {
y = 7
<!VAL_REASSIGNMENT!>uninitialized<!> = 8
}
//anonymous
init {
z = 9
overinitialized = 10
}
// anonymous
init {
y = 12
}
}
@@ -0,0 +1,16 @@
package
internal final class A {
public constructor A()
public constructor A(/*0*/ a: kotlin.Int)
public constructor A(/*0*/ x: kotlin.String)
internal final val overinitialized: kotlin.Int
internal final val uninitialized: kotlin.Int
internal final val v: kotlin.Int = -1
internal final val x: kotlin.Int
internal final var y: kotlin.Int
internal final val z: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,17 +1,16 @@
class A {
init {
<!RETURN_NOT_ALLOWED!>return<!>
<!RETURN_NOT_ALLOWED!>return 1<!>
<!RETURN_NOT_ALLOWED, UNREACHABLE_CODE!>return 1<!>
}
constructor() {
constructor() <!UNREACHABLE_CODE!>{
if (1 == 1) {
return
return <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>
}
return
return <!TYPE_MISMATCH!>foo()<!>
}
}<!>
fun foo(): Int = 1
}
@@ -0,0 +1,38 @@
class A0 {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val x: Int<!>
constructor() {
if (1 == 1) {
return
}
x = 1
}
constructor(arg: Int) {
x = arg
}
}
class A1 {
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val x: Int<!>
constructor() {
if (1 == 1) {
return
} else null!!
<!UNREACHABLE_CODE!>x = 1<!>
}
}
class A2 {
val x: Int
constructor() {
if (1 == 1) {
x = 1
return
}
else {
x = 2
}
}
constructor(arg: Int) {
x = arg
}
}
@@ -0,0 +1,27 @@
package
internal final class A0 {
public constructor A0()
public constructor A0(/*0*/ arg: kotlin.Int)
internal final val x: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class A1 {
public constructor A1()
internal final val x: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class A2 {
public constructor A2()
public constructor A2(/*0*/ arg: kotlin.Int)
internal final val x: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,30 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class A(val w: Int) {
val x: Int
val useUnitialized = <!UNINITIALIZED_VARIABLE!>x<!> +
<!UNINITIALIZED_VARIABLE!>y<!> +
<!UNINITIALIZED_VARIABLE!>v<!>
var y: Int
val v = -1
val useInitialized = useUnitialized + v + w
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
constructor(): this(1) {
x + y + v + uninitialized + w
}
// anonymous
init {
<!UNINITIALIZED_VARIABLE!>x<!> + <!UNINITIALIZED_VARIABLE!>y<!> + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
x = 1
x + <!UNINITIALIZED_VARIABLE!>y<!> + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
}
// anonymous
init {
x + <!UNINITIALIZED_VARIABLE!>y<!> + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
y = 7
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!> + w
}
}
@@ -0,0 +1,16 @@
package
internal final class A {
public constructor A()
public constructor A(/*0*/ w: kotlin.Int)
internal final val uninitialized: kotlin.Int
internal final val useInitialized: kotlin.Int
internal final val useUnitialized: kotlin.Int
internal final val v: kotlin.Int = -1
internal final val w: kotlin.Int
internal final val x: kotlin.Int
internal final var y: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,46 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class A {
val x: Int
val useUnitialized = <!UNINITIALIZED_VARIABLE, UNINITIALIZED_VARIABLE!>x<!> + // reported on each secondary constructor
<!UNINITIALIZED_VARIABLE, UNINITIALIZED_VARIABLE!>y<!> +
<!UNINITIALIZED_VARIABLE, UNINITIALIZED_VARIABLE!>v<!>
var y: Int
val v = -1
val useInitialized = useUnitialized + v
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val uninitialized: Int<!>
constructor() {
x = 1
y = 2
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!>
uninitialized = 3
x + y + v + uninitialized
}
constructor(a: Int): super() {
<!UNINITIALIZED_VARIABLE!>x<!> + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!>
x = 4
y = 5
x + y + v + <!UNINITIALIZED_VARIABLE!>uninitialized<!>
}
constructor(x: String): this() {
x + y + v + uninitialized
}
//anonymous
init {
<!UNINITIALIZED_VARIABLE, UNINITIALIZED_VARIABLE!>y<!>
}
// anonymous
init {
y = 9
}
}
@@ -0,0 +1,16 @@
package
internal final class A {
public constructor A()
public constructor A(/*0*/ a: kotlin.Int)
public constructor A(/*0*/ x: kotlin.String)
internal final val uninitialized: kotlin.Int
internal final val useInitialized: kotlin.Int
internal final val useUnitialized: kotlin.Int
internal final val v: kotlin.Int = -1
internal final val x: kotlin.Int
internal final var y: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}