[FIR] Introduce TYPE_ARGUMENTS_NOT_ALLOWED & some other type errors

This commit introduces several different things, in particular:
- check type arguments in expressions
- new TypeArgumentList node to deal with diagnostic source
- ConeDiagnostic was moved to fir:cones
- ConeIntermediateDiagnostic to use in inference (?) without reporting
- detailed diagnostics on error type
This commit is contained in:
Mikhail Glukhikh
2020-07-22 10:29:59 +03:00
parent c744dfba9c
commit 0804c6a0f3
196 changed files with 774 additions and 484 deletions
@@ -41,10 +41,10 @@ interface Test<in I, out O, P> {
fun neOk11(i: Inv<in I>)
fun neOk12(i: Inv<out O>)
fun neOk30(i: Pair<O, >)
fun neOk31(i: Pair<O, Inv>)
fun neOk32(i: Inv)
fun neOk30(i: <!OTHER_ERROR!>Pair<O, ><!>)
fun neOk31(i: <!OTHER_ERROR!>Pair<O, Inv><!>)
fun neOk32(i: <!OTHER_ERROR!>Inv<!>)
fun neOk33(i: Inv<<!SYNTAX!><!>>)
fun neOk34(i: Inv<C>)
fun neOk35(i: Inv<P, P>)
fun neOk34(i: <!OTHER_ERROR!>Inv<C><!>)
fun neOk35(i: <!OTHER_ERROR!>Inv<P, P><!>)
}
@@ -38,10 +38,10 @@ interface Test<in I, out O, P> {
var neOk22: Inv<out O>
var neOk23: Inv<out I>
var neOk30: Pair<I, >
var neOk31: Pair<I, Inv>
var neOk32: Inv
var neOk30: <!OTHER_ERROR, OTHER_ERROR, OTHER_ERROR!>Pair<I, ><!>
var neOk31: <!OTHER_ERROR, OTHER_ERROR, OTHER_ERROR!>Pair<I, Inv><!>
var neOk32: <!OTHER_ERROR, OTHER_ERROR, OTHER_ERROR!>Inv<!>
var neOk33: Inv<<!SYNTAX!><!>>
var neOk34: Inv<C>
var neOk35: Inv<P, P>
var neOk34: <!OTHER_ERROR, OTHER_ERROR, OTHER_ERROR!>Inv<C><!>
var neOk35: <!OTHER_ERROR, OTHER_ERROR, OTHER_ERROR!>Inv<P, P><!>
}
@@ -33,10 +33,10 @@ interface Test<in I, out O, P> {
fun neOk10(): Inv<in O>
fun neOk11(): Inv<out I>
fun neOk30(): Pair<I, >
fun neOk31(): Pair<I, Inv>
fun neOk32(): Inv
fun neOk30(): <!OTHER_ERROR!>Pair<I, ><!>
fun neOk31(): <!OTHER_ERROR!>Pair<I, Inv><!>
fun neOk32(): <!OTHER_ERROR!>Inv<!>
fun neOk33(): Inv<<!SYNTAX!><!>>
fun neOk34(): Inv<C>
fun neOk35(): Inv<P, P>
fun neOk34(): <!OTHER_ERROR!>Inv<C><!>
fun neOk35(): <!OTHER_ERROR!>Inv<P, P><!>
}
@@ -11,11 +11,11 @@
typealias EachSegmentComparator<SegmentType> = (currentSegment: SegmentType, otherSegment: SegmentType, relationship: Int) -> Boolean
interface ComputablePath<NumberType, PointType, out SegmentType>
: Path<NumberType, PointType, SegmentType>
: <!OTHER_ERROR!>Path<NumberType, PointType, SegmentType><!>
where
NumberType: Number,
PointType: ComputablePoint<NumberType>,
SegmentType: ComputableLineSegment<NumberType, PointType>
PointType: <!OTHER_ERROR!>ComputablePoint<NumberType><!>,
SegmentType: <!OTHER_ERROR!>ComputableLineSegment<NumberType, PointType><!>
{
fun anyTwoSegments(comparator: EachSegmentComparator<ComputableSegment<NumberType, PointType>>): Boolean
fun anyTwoSegments(comparator: EachSegmentComparator<<!OTHER_ERROR!>ComputableSegment<NumberType, PointType><!>>): Boolean
}