FIR: Reimplement implicit types calculator

Make it works through a single component tracking computation status
instead of storing it in the nodes
This commit is contained in:
Denis Zharkov
2020-01-23 11:35:56 +03:00
parent f256547cc8
commit c295f2dc25
11 changed files with 311 additions and 36 deletions
@@ -7,7 +7,7 @@ object Outer {
get() = 0
override fun get(index: Int): Char {
<!UNRESOLVED_REFERENCE!>checkSubtype<!><CharSequence>(x)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><CharSequence>(x)
return ' '
}
@@ -17,7 +17,7 @@ object Outer {
}
}
set(q) {
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><CharSequence>(x)
checkSubtype<CharSequence>(x)
y = q
x = q
}
@@ -27,10 +27,10 @@ object Outer {
fun foo() {
x = y
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><CharSequence>(x)
<!INAPPLICABLE_CANDIDATE!>checkSubtype<!><CharSequence>(y)
checkSubtype<CharSequence>(x)
checkSubtype<CharSequence>(y)
x.<!UNRESOLVED_REFERENCE!>bar<!>()
y.<!UNRESOLVED_REFERENCE!>bar<!>()
x.bar()
y.bar()
}
}
@@ -10,8 +10,8 @@ class A {
val a get() = b
val b get() = a
val z1 get() = <!UNRESOLVED_REFERENCE!>id<!>(z1)
val z2 get() = <!UNRESOLVED_REFERENCE!>l<!>(z2)
val z1 get() = <!INAPPLICABLE_CANDIDATE!>id<!>(z1)
val z2 get() = <!INAPPLICABLE_CANDIDATE!>l<!>(z2)
val u get() = field
}
@@ -7,7 +7,7 @@ class Test {
val a = y;
}
val z = y.<!UNRESOLVED_REFERENCE!>a<!>;
val z = y.a;
}
@@ -24,6 +24,6 @@ class Test2 {
val y = 1
}
val b = a.x
val b = a.<!UNRESOLVED_REFERENCE!>x<!>
val c = a.y
}
}
+1 -1
View File
@@ -26,4 +26,4 @@ class Test2 {
val b = <!NI;TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!><!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>a<!>.<!NI;DEBUG_INFO_MISSING_UNRESOLVED, OI;DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!><!>
val c = a.y
}
}