From 05cdde1f1b7910fb160d9fcec7afa68ca730b257 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Christophe=20Beaupr=C3=A9?= Date: Fri, 9 Jun 2017 01:30:16 -0400 Subject: [PATCH] modelize_class: Link `subset_kind` with its corresponding production MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jean-Christophe Beaupré --- src/modelize/modelize_class.nit | 3 +++ tests/base_error_class_kind.nit | 39 +++++++++++++++++++++++++++ tests/base_error_class_kind2.nit | 8 ++++++ tests/error_subset_no_new.nit | 28 +++++++++++++++++++ tests/sav/base_error_class_kind2_alt1.res | 2 +- tests/sav/base_error_class_kind2_alt10.res | 2 +- tests/sav/base_error_class_kind2_alt11.res | 2 +- tests/sav/base_error_class_kind2_alt12.res | 2 +- tests/sav/base_error_class_kind2_alt13.res | 2 +- tests/sav/base_error_class_kind2_alt14.res | 2 +- tests/sav/base_error_class_kind2_alt15.res | 2 +- tests/sav/base_error_class_kind2_alt16.res | 1 + tests/sav/base_error_class_kind2_alt17.res | 1 + tests/sav/base_error_class_kind2_alt18.res | 1 + tests/sav/base_error_class_kind2_alt19.res | 1 + tests/sav/base_error_class_kind2_alt2.res | 2 +- tests/sav/base_error_class_kind2_alt20.res | 1 + tests/sav/base_error_class_kind2_alt3.res | 2 +- tests/sav/base_error_class_kind2_alt4.res | 2 +- tests/sav/base_error_class_kind2_alt5.res | 2 +- tests/sav/base_error_class_kind2_alt6.res | 2 +- tests/sav/base_error_class_kind2_alt7.res | 2 +- tests/sav/base_error_class_kind2_alt8.res | 2 +- tests/sav/base_error_class_kind2_alt9.res | 2 +- tests/sav/base_error_class_kind_alt1.res | 2 +- tests/sav/base_error_class_kind_alt10.res | 2 +- tests/sav/base_error_class_kind_alt11.res | 2 +- tests/sav/base_error_class_kind_alt12.res | 2 +- tests/sav/base_error_class_kind_alt13.res | 2 +- tests/sav/base_error_class_kind_alt14.res | 2 +- tests/sav/base_error_class_kind_alt15.res | 2 +- tests/sav/base_error_class_kind_alt16.res | 1 + tests/sav/base_error_class_kind_alt17.res | 1 + tests/sav/base_error_class_kind_alt18.res | 1 + tests/sav/base_error_class_kind_alt19.res | 1 + tests/sav/base_error_class_kind_alt2.res | 2 +- tests/sav/base_error_class_kind_alt20.res | 1 + tests/sav/base_error_class_kind_alt26.res | 1 + tests/sav/base_error_class_kind_alt3.res | 2 +- tests/sav/base_error_class_kind_alt4.res | 2 +- tests/sav/base_error_class_kind_alt5.res | 2 +- tests/sav/base_error_class_kind_alt6.res | 2 +- tests/sav/base_error_class_kind_alt7.res | 2 +- tests/sav/base_error_class_kind_alt8.res | 2 +- tests/sav/base_error_class_kind_alt9.res | 2 +- tests/sav/error_subset_no_new.res | 1 + tests/sav/test_object_class_kind_alt5.res | 1 + tests/sav/test_subset_out_of_order_alt1.res | 1 + tests/test_object_class_kind.nit | 3 ++- tests/test_subset_out_of_order.nit | 22 +++++++++++++++ 50 files changed, 146 insertions(+), 31 deletions(-) create mode 100644 tests/error_subset_no_new.nit create mode 100644 tests/sav/base_error_class_kind2_alt16.res create mode 100644 tests/sav/base_error_class_kind2_alt17.res create mode 100644 tests/sav/base_error_class_kind2_alt18.res create mode 100644 tests/sav/base_error_class_kind2_alt19.res create mode 100644 tests/sav/base_error_class_kind2_alt20.res create mode 100644 tests/sav/base_error_class_kind_alt16.res create mode 100644 tests/sav/base_error_class_kind_alt17.res create mode 100644 tests/sav/base_error_class_kind_alt18.res create mode 100644 tests/sav/base_error_class_kind_alt19.res create mode 100644 tests/sav/base_error_class_kind_alt20.res create mode 100644 tests/sav/base_error_class_kind_alt26.res create mode 100644 tests/sav/error_subset_no_new.res create mode 100644 tests/sav/test_object_class_kind_alt5.res create mode 100644 tests/sav/test_subset_out_of_order_alt1.res create mode 100644 tests/test_subset_out_of_order.nit diff --git a/src/modelize/modelize_class.nit b/src/modelize/modelize_class.nit index 7580dde..553263b 100644 --- a/src/modelize/modelize_class.nit +++ b/src/modelize/modelize_class.nit @@ -500,6 +500,9 @@ end redef class AExternClasskind redef fun mkind do return extern_kind end +redef class ASubsetClasskind + redef fun mkind do return subset_kind +end redef class AFormaldef # The associated parameter type diff --git a/tests/base_error_class_kind.nit b/tests/base_error_class_kind.nit index 43644b0..16d7137 100644 --- a/tests/base_error_class_kind.nit +++ b/tests/base_error_class_kind.nit @@ -37,6 +37,9 @@ end extern class ExC end +subset SSet +end + ## interface SubI @@ -45,6 +48,7 @@ interface SubI #alt2# super CC #alt3# super EnC #alt4# super ExC + #alt16# super SSet end abstract class SubA @@ -53,6 +57,7 @@ abstract class SubA super CC #alt5# super EnC #alt6# super ExC + #alt17# super SSet end class SubC @@ -61,6 +66,7 @@ class SubC super CC #alt7# super EnC #alt8# super ExC + #alt18# super SSet end enum SubEn @@ -69,6 +75,7 @@ enum SubEn #alt10# super CC #alt11# super EnC #alt12# super ExC + #alt19# super SSet end extern class SubEx @@ -77,4 +84,36 @@ extern class SubEx #alt14# super CC #alt15# super EnC super ExC + #alt20# super SSet +end + +# A subset can inherit anything except a subset, and has only one direct parent. + +subset SSetI + super IC + # TODO: super AC + # TODO: super CC + # TODO: super EnC + # TODO: super ExC + # TODO: super SSet +end + +subset SSetA + super AC +end + +subset SSetC + super CC +end + +subset SSetEn + super EnC +end + +subset SSetEx + super ExC end + +#alt26# subset SubSSet +#alt26# super SSet +#alt26# end diff --git a/tests/base_error_class_kind2.nit b/tests/base_error_class_kind2.nit index 94ace22..e3efe27 100644 --- a/tests/base_error_class_kind2.nit +++ b/tests/base_error_class_kind2.nit @@ -29,12 +29,16 @@ end extern class ExC2 end +subset SSet2 +end + redef class SubI super IC2 #alt1# super AC2 #alt2# super CC2 #alt3# super EnC2 #alt4# super ExC2 + #alt16# super SSet2 end redef class SubA @@ -43,6 +47,7 @@ redef class SubA super CC2 #alt5# super EnC2 #alt6# super ExC2 + #alt17# super SSet2 end redef class SubC @@ -51,6 +56,7 @@ redef class SubC super CC2 #alt7# super EnC2 #alt8# super ExC2 + #alt18# super SSet2 end redef class SubEn @@ -59,6 +65,7 @@ redef class SubEn #alt10# super CC2 #alt11# super EnC2 #alt12# super ExC2 + #alt19# super SSet2 end redef class SubEx @@ -67,4 +74,5 @@ redef class SubEx #alt14# super CC2 #alt15# super EnC2 super ExC2 + #alt20# super SSet2 end diff --git a/tests/error_subset_no_new.nit b/tests/error_subset_no_new.nit new file mode 100644 index 0000000..499c335 --- /dev/null +++ b/tests/error_subset_no_new.nit @@ -0,0 +1,28 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import core::kernel + +class A + var x: Int +end + +subset S + super A +end + +var a = new A(1) +a.x.output +var s = new S(2) +s.x.output diff --git a/tests/sav/base_error_class_kind2_alt1.res b/tests/sav/base_error_class_kind2_alt1.res index afdebe3..c642e23 100644 --- a/tests/sav/base_error_class_kind2_alt1.res +++ b/tests/sav/base_error_class_kind2_alt1.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt1.nit:34,8--10: Error: interface `SubI` cannot specialize abstract class `AC2`. +alt/base_error_class_kind2_alt1.nit:37,8--10: Error: interface `SubI` cannot specialize abstract class `AC2`. diff --git a/tests/sav/base_error_class_kind2_alt10.res b/tests/sav/base_error_class_kind2_alt10.res index 063c8db..97e7f74 100644 --- a/tests/sav/base_error_class_kind2_alt10.res +++ b/tests/sav/base_error_class_kind2_alt10.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt10.nit:59,8--10: Error: enum `SubEn` cannot specialize class `CC2`. +alt/base_error_class_kind2_alt10.nit:65,8--10: Error: enum `SubEn` cannot specialize class `CC2`. diff --git a/tests/sav/base_error_class_kind2_alt11.res b/tests/sav/base_error_class_kind2_alt11.res index e0f1e73..d512b92 100644 --- a/tests/sav/base_error_class_kind2_alt11.res +++ b/tests/sav/base_error_class_kind2_alt11.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt11.nit:60,8--11: Error: enum `SubEn` cannot specialize enum `EnC2`. +alt/base_error_class_kind2_alt11.nit:66,8--11: Error: enum `SubEn` cannot specialize enum `EnC2`. diff --git a/tests/sav/base_error_class_kind2_alt12.res b/tests/sav/base_error_class_kind2_alt12.res index 35a83ac..963758d 100644 --- a/tests/sav/base_error_class_kind2_alt12.res +++ b/tests/sav/base_error_class_kind2_alt12.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt12.nit:61,8--11: Error: enum `SubEn` cannot specialize extern class `ExC2`. +alt/base_error_class_kind2_alt12.nit:67,8--11: Error: enum `SubEn` cannot specialize extern class `ExC2`. diff --git a/tests/sav/base_error_class_kind2_alt13.res b/tests/sav/base_error_class_kind2_alt13.res index de666ea..4609628 100644 --- a/tests/sav/base_error_class_kind2_alt13.res +++ b/tests/sav/base_error_class_kind2_alt13.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt13.nit:66,8--10: Error: extern class `SubEx` cannot specialize abstract class `AC2`. +alt/base_error_class_kind2_alt13.nit:73,8--10: Error: extern class `SubEx` cannot specialize abstract class `AC2`. diff --git a/tests/sav/base_error_class_kind2_alt14.res b/tests/sav/base_error_class_kind2_alt14.res index 50fbed1..9c62bfd 100644 --- a/tests/sav/base_error_class_kind2_alt14.res +++ b/tests/sav/base_error_class_kind2_alt14.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt14.nit:67,8--10: Error: extern class `SubEx` cannot specialize class `CC2`. +alt/base_error_class_kind2_alt14.nit:74,8--10: Error: extern class `SubEx` cannot specialize class `CC2`. diff --git a/tests/sav/base_error_class_kind2_alt15.res b/tests/sav/base_error_class_kind2_alt15.res index 5aa6030..5852de9 100644 --- a/tests/sav/base_error_class_kind2_alt15.res +++ b/tests/sav/base_error_class_kind2_alt15.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt15.nit:68,8--11: Error: extern class `SubEx` cannot specialize enum `EnC2`. +alt/base_error_class_kind2_alt15.nit:75,8--11: Error: extern class `SubEx` cannot specialize enum `EnC2`. diff --git a/tests/sav/base_error_class_kind2_alt16.res b/tests/sav/base_error_class_kind2_alt16.res new file mode 100644 index 0000000..437ef40 --- /dev/null +++ b/tests/sav/base_error_class_kind2_alt16.res @@ -0,0 +1 @@ +alt/base_error_class_kind2_alt16.nit:41,8--12: Error: interface `SubI` cannot specialize subset `SSet2`. diff --git a/tests/sav/base_error_class_kind2_alt17.res b/tests/sav/base_error_class_kind2_alt17.res new file mode 100644 index 0000000..98b66f8 --- /dev/null +++ b/tests/sav/base_error_class_kind2_alt17.res @@ -0,0 +1 @@ +alt/base_error_class_kind2_alt17.nit:50,8--12: Error: abstract class `SubA` cannot specialize subset `SSet2`. diff --git a/tests/sav/base_error_class_kind2_alt18.res b/tests/sav/base_error_class_kind2_alt18.res new file mode 100644 index 0000000..8f6dae3 --- /dev/null +++ b/tests/sav/base_error_class_kind2_alt18.res @@ -0,0 +1 @@ +alt/base_error_class_kind2_alt18.nit:59,8--12: Error: class `SubC` cannot specialize subset `SSet2`. diff --git a/tests/sav/base_error_class_kind2_alt19.res b/tests/sav/base_error_class_kind2_alt19.res new file mode 100644 index 0000000..f44d8a7 --- /dev/null +++ b/tests/sav/base_error_class_kind2_alt19.res @@ -0,0 +1 @@ +alt/base_error_class_kind2_alt19.nit:68,8--12: Error: enum `SubEn` cannot specialize subset `SSet2`. diff --git a/tests/sav/base_error_class_kind2_alt2.res b/tests/sav/base_error_class_kind2_alt2.res index d67ccca..fe66e09 100644 --- a/tests/sav/base_error_class_kind2_alt2.res +++ b/tests/sav/base_error_class_kind2_alt2.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt2.nit:35,8--10: Error: interface `SubI` cannot specialize class `CC2`. +alt/base_error_class_kind2_alt2.nit:38,8--10: Error: interface `SubI` cannot specialize class `CC2`. diff --git a/tests/sav/base_error_class_kind2_alt20.res b/tests/sav/base_error_class_kind2_alt20.res new file mode 100644 index 0000000..0e11a0d --- /dev/null +++ b/tests/sav/base_error_class_kind2_alt20.res @@ -0,0 +1 @@ +alt/base_error_class_kind2_alt20.nit:77,8--12: Error: extern class `SubEx` cannot specialize subset `SSet2`. diff --git a/tests/sav/base_error_class_kind2_alt3.res b/tests/sav/base_error_class_kind2_alt3.res index 4c43652..974282d 100644 --- a/tests/sav/base_error_class_kind2_alt3.res +++ b/tests/sav/base_error_class_kind2_alt3.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt3.nit:36,8--11: Error: interface `SubI` cannot specialize enum `EnC2`. +alt/base_error_class_kind2_alt3.nit:39,8--11: Error: interface `SubI` cannot specialize enum `EnC2`. diff --git a/tests/sav/base_error_class_kind2_alt4.res b/tests/sav/base_error_class_kind2_alt4.res index 87a2251..0e070ea 100644 --- a/tests/sav/base_error_class_kind2_alt4.res +++ b/tests/sav/base_error_class_kind2_alt4.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt4.nit:37,8--11: Error: interface `SubI` cannot specialize extern class `ExC2`. +alt/base_error_class_kind2_alt4.nit:40,8--11: Error: interface `SubI` cannot specialize extern class `ExC2`. diff --git a/tests/sav/base_error_class_kind2_alt5.res b/tests/sav/base_error_class_kind2_alt5.res index 5a4fd27..c92fe03 100644 --- a/tests/sav/base_error_class_kind2_alt5.res +++ b/tests/sav/base_error_class_kind2_alt5.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt5.nit:44,8--11: Error: abstract class `SubA` cannot specialize enum `EnC2`. +alt/base_error_class_kind2_alt5.nit:48,8--11: Error: abstract class `SubA` cannot specialize enum `EnC2`. diff --git a/tests/sav/base_error_class_kind2_alt6.res b/tests/sav/base_error_class_kind2_alt6.res index 6439782..5e3e4b7 100644 --- a/tests/sav/base_error_class_kind2_alt6.res +++ b/tests/sav/base_error_class_kind2_alt6.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt6.nit:45,8--11: Error: abstract class `SubA` cannot specialize extern class `ExC2`. +alt/base_error_class_kind2_alt6.nit:49,8--11: Error: abstract class `SubA` cannot specialize extern class `ExC2`. diff --git a/tests/sav/base_error_class_kind2_alt7.res b/tests/sav/base_error_class_kind2_alt7.res index 965fd59..3dd7d98 100644 --- a/tests/sav/base_error_class_kind2_alt7.res +++ b/tests/sav/base_error_class_kind2_alt7.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt7.nit:52,8--11: Error: class `SubC` cannot specialize enum `EnC2`. +alt/base_error_class_kind2_alt7.nit:57,8--11: Error: class `SubC` cannot specialize enum `EnC2`. diff --git a/tests/sav/base_error_class_kind2_alt8.res b/tests/sav/base_error_class_kind2_alt8.res index 80f05ea..a63a547 100644 --- a/tests/sav/base_error_class_kind2_alt8.res +++ b/tests/sav/base_error_class_kind2_alt8.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt8.nit:53,8--11: Error: class `SubC` cannot specialize extern class `ExC2`. +alt/base_error_class_kind2_alt8.nit:58,8--11: Error: class `SubC` cannot specialize extern class `ExC2`. diff --git a/tests/sav/base_error_class_kind2_alt9.res b/tests/sav/base_error_class_kind2_alt9.res index 09a20d0..884af73 100644 --- a/tests/sav/base_error_class_kind2_alt9.res +++ b/tests/sav/base_error_class_kind2_alt9.res @@ -1 +1 @@ -alt/base_error_class_kind2_alt9.nit:58,8--10: Error: enum `SubEn` cannot specialize abstract class `AC2`. +alt/base_error_class_kind2_alt9.nit:64,8--10: Error: enum `SubEn` cannot specialize abstract class `AC2`. diff --git a/tests/sav/base_error_class_kind_alt1.res b/tests/sav/base_error_class_kind_alt1.res index 40c42a5..ff31e68 100644 --- a/tests/sav/base_error_class_kind_alt1.res +++ b/tests/sav/base_error_class_kind_alt1.res @@ -1 +1 @@ -alt/base_error_class_kind_alt1.nit:44,8--9: Error: interface `SubI` cannot specialize abstract class `AC`. +alt/base_error_class_kind_alt1.nit:47,8--9: Error: interface `SubI` cannot specialize abstract class `AC`. diff --git a/tests/sav/base_error_class_kind_alt10.res b/tests/sav/base_error_class_kind_alt10.res index 5792697..b6d2038 100644 --- a/tests/sav/base_error_class_kind_alt10.res +++ b/tests/sav/base_error_class_kind_alt10.res @@ -1 +1 @@ -alt/base_error_class_kind_alt10.nit:69,8--9: Error: enum `SubEn` cannot specialize class `CC`. +alt/base_error_class_kind_alt10.nit:75,8--9: Error: enum `SubEn` cannot specialize class `CC`. diff --git a/tests/sav/base_error_class_kind_alt11.res b/tests/sav/base_error_class_kind_alt11.res index 3600dd7..dfd9a08 100644 --- a/tests/sav/base_error_class_kind_alt11.res +++ b/tests/sav/base_error_class_kind_alt11.res @@ -1 +1 @@ -alt/base_error_class_kind_alt11.nit:70,8--10: Error: enum `SubEn` cannot specialize enum `EnC`. +alt/base_error_class_kind_alt11.nit:76,8--10: Error: enum `SubEn` cannot specialize enum `EnC`. diff --git a/tests/sav/base_error_class_kind_alt12.res b/tests/sav/base_error_class_kind_alt12.res index 95bb596..efde827 100644 --- a/tests/sav/base_error_class_kind_alt12.res +++ b/tests/sav/base_error_class_kind_alt12.res @@ -1 +1 @@ -alt/base_error_class_kind_alt12.nit:71,8--10: Error: enum `SubEn` cannot specialize extern class `ExC`. +alt/base_error_class_kind_alt12.nit:77,8--10: Error: enum `SubEn` cannot specialize extern class `ExC`. diff --git a/tests/sav/base_error_class_kind_alt13.res b/tests/sav/base_error_class_kind_alt13.res index d899ee6..70bc61b 100644 --- a/tests/sav/base_error_class_kind_alt13.res +++ b/tests/sav/base_error_class_kind_alt13.res @@ -1 +1 @@ -alt/base_error_class_kind_alt13.nit:76,8--9: Error: extern class `SubEx` cannot specialize abstract class `AC`. +alt/base_error_class_kind_alt13.nit:83,8--9: Error: extern class `SubEx` cannot specialize abstract class `AC`. diff --git a/tests/sav/base_error_class_kind_alt14.res b/tests/sav/base_error_class_kind_alt14.res index 36c9e16..ee9f43c 100644 --- a/tests/sav/base_error_class_kind_alt14.res +++ b/tests/sav/base_error_class_kind_alt14.res @@ -1 +1 @@ -alt/base_error_class_kind_alt14.nit:77,8--9: Error: extern class `SubEx` cannot specialize class `CC`. +alt/base_error_class_kind_alt14.nit:84,8--9: Error: extern class `SubEx` cannot specialize class `CC`. diff --git a/tests/sav/base_error_class_kind_alt15.res b/tests/sav/base_error_class_kind_alt15.res index b3adabf..a9a01f8 100644 --- a/tests/sav/base_error_class_kind_alt15.res +++ b/tests/sav/base_error_class_kind_alt15.res @@ -1 +1 @@ -alt/base_error_class_kind_alt15.nit:78,8--10: Error: extern class `SubEx` cannot specialize enum `EnC`. +alt/base_error_class_kind_alt15.nit:85,8--10: Error: extern class `SubEx` cannot specialize enum `EnC`. diff --git a/tests/sav/base_error_class_kind_alt16.res b/tests/sav/base_error_class_kind_alt16.res new file mode 100644 index 0000000..821a8d0 --- /dev/null +++ b/tests/sav/base_error_class_kind_alt16.res @@ -0,0 +1 @@ +alt/base_error_class_kind_alt16.nit:51,8--11: Error: interface `SubI` cannot specialize subset `SSet`. diff --git a/tests/sav/base_error_class_kind_alt17.res b/tests/sav/base_error_class_kind_alt17.res new file mode 100644 index 0000000..d59dc6e --- /dev/null +++ b/tests/sav/base_error_class_kind_alt17.res @@ -0,0 +1 @@ +alt/base_error_class_kind_alt17.nit:60,8--11: Error: abstract class `SubA` cannot specialize subset `SSet`. diff --git a/tests/sav/base_error_class_kind_alt18.res b/tests/sav/base_error_class_kind_alt18.res new file mode 100644 index 0000000..44de642 --- /dev/null +++ b/tests/sav/base_error_class_kind_alt18.res @@ -0,0 +1 @@ +alt/base_error_class_kind_alt18.nit:69,8--11: Error: class `SubC` cannot specialize subset `SSet`. diff --git a/tests/sav/base_error_class_kind_alt19.res b/tests/sav/base_error_class_kind_alt19.res new file mode 100644 index 0000000..ea50d9c --- /dev/null +++ b/tests/sav/base_error_class_kind_alt19.res @@ -0,0 +1 @@ +alt/base_error_class_kind_alt19.nit:78,8--11: Error: enum `SubEn` cannot specialize subset `SSet`. diff --git a/tests/sav/base_error_class_kind_alt2.res b/tests/sav/base_error_class_kind_alt2.res index ec5c855..2589edb 100644 --- a/tests/sav/base_error_class_kind_alt2.res +++ b/tests/sav/base_error_class_kind_alt2.res @@ -1 +1 @@ -alt/base_error_class_kind_alt2.nit:45,8--9: Error: interface `SubI` cannot specialize class `CC`. +alt/base_error_class_kind_alt2.nit:48,8--9: Error: interface `SubI` cannot specialize class `CC`. diff --git a/tests/sav/base_error_class_kind_alt20.res b/tests/sav/base_error_class_kind_alt20.res new file mode 100644 index 0000000..1ced2c1 --- /dev/null +++ b/tests/sav/base_error_class_kind_alt20.res @@ -0,0 +1 @@ +alt/base_error_class_kind_alt20.nit:87,8--11: Error: extern class `SubEx` cannot specialize subset `SSet`. diff --git a/tests/sav/base_error_class_kind_alt26.res b/tests/sav/base_error_class_kind_alt26.res new file mode 100644 index 0000000..5df0882 --- /dev/null +++ b/tests/sav/base_error_class_kind_alt26.res @@ -0,0 +1 @@ +alt/base_error_class_kind_alt26.nit:118,7--10: Error: subset `SubSSet` cannot specialize subset `SSet`. diff --git a/tests/sav/base_error_class_kind_alt3.res b/tests/sav/base_error_class_kind_alt3.res index 3b1ce91..27b1677 100644 --- a/tests/sav/base_error_class_kind_alt3.res +++ b/tests/sav/base_error_class_kind_alt3.res @@ -1 +1 @@ -alt/base_error_class_kind_alt3.nit:46,8--10: Error: interface `SubI` cannot specialize enum `EnC`. +alt/base_error_class_kind_alt3.nit:49,8--10: Error: interface `SubI` cannot specialize enum `EnC`. diff --git a/tests/sav/base_error_class_kind_alt4.res b/tests/sav/base_error_class_kind_alt4.res index 174b125..871f7d7 100644 --- a/tests/sav/base_error_class_kind_alt4.res +++ b/tests/sav/base_error_class_kind_alt4.res @@ -1 +1 @@ -alt/base_error_class_kind_alt4.nit:47,8--10: Error: interface `SubI` cannot specialize extern class `ExC`. +alt/base_error_class_kind_alt4.nit:50,8--10: Error: interface `SubI` cannot specialize extern class `ExC`. diff --git a/tests/sav/base_error_class_kind_alt5.res b/tests/sav/base_error_class_kind_alt5.res index 4acce40..1dadb9d 100644 --- a/tests/sav/base_error_class_kind_alt5.res +++ b/tests/sav/base_error_class_kind_alt5.res @@ -1 +1 @@ -alt/base_error_class_kind_alt5.nit:54,8--10: Error: abstract class `SubA` cannot specialize enum `EnC`. +alt/base_error_class_kind_alt5.nit:58,8--10: Error: abstract class `SubA` cannot specialize enum `EnC`. diff --git a/tests/sav/base_error_class_kind_alt6.res b/tests/sav/base_error_class_kind_alt6.res index bc9d642..6a7f115 100644 --- a/tests/sav/base_error_class_kind_alt6.res +++ b/tests/sav/base_error_class_kind_alt6.res @@ -1 +1 @@ -alt/base_error_class_kind_alt6.nit:55,8--10: Error: abstract class `SubA` cannot specialize extern class `ExC`. +alt/base_error_class_kind_alt6.nit:59,8--10: Error: abstract class `SubA` cannot specialize extern class `ExC`. diff --git a/tests/sav/base_error_class_kind_alt7.res b/tests/sav/base_error_class_kind_alt7.res index 1c16267..748e6ba 100644 --- a/tests/sav/base_error_class_kind_alt7.res +++ b/tests/sav/base_error_class_kind_alt7.res @@ -1 +1 @@ -alt/base_error_class_kind_alt7.nit:62,8--10: Error: class `SubC` cannot specialize enum `EnC`. +alt/base_error_class_kind_alt7.nit:67,8--10: Error: class `SubC` cannot specialize enum `EnC`. diff --git a/tests/sav/base_error_class_kind_alt8.res b/tests/sav/base_error_class_kind_alt8.res index e78399b..ae4bfcc 100644 --- a/tests/sav/base_error_class_kind_alt8.res +++ b/tests/sav/base_error_class_kind_alt8.res @@ -1 +1 @@ -alt/base_error_class_kind_alt8.nit:63,8--10: Error: class `SubC` cannot specialize extern class `ExC`. +alt/base_error_class_kind_alt8.nit:68,8--10: Error: class `SubC` cannot specialize extern class `ExC`. diff --git a/tests/sav/base_error_class_kind_alt9.res b/tests/sav/base_error_class_kind_alt9.res index 95e969c..05eb651 100644 --- a/tests/sav/base_error_class_kind_alt9.res +++ b/tests/sav/base_error_class_kind_alt9.res @@ -1 +1 @@ -alt/base_error_class_kind_alt9.nit:68,8--9: Error: enum `SubEn` cannot specialize abstract class `AC`. +alt/base_error_class_kind_alt9.nit:74,8--9: Error: enum `SubEn` cannot specialize abstract class `AC`. diff --git a/tests/sav/error_subset_no_new.res b/tests/sav/error_subset_no_new.res new file mode 100644 index 0000000..6f92bb4 --- /dev/null +++ b/tests/sav/error_subset_no_new.res @@ -0,0 +1 @@ +error_subset_no_new.nit:27,9--16: Type Error: cannot instantiate subset `S`. diff --git a/tests/sav/test_object_class_kind_alt5.res b/tests/sav/test_object_class_kind_alt5.res new file mode 100644 index 0000000..fc18612 --- /dev/null +++ b/tests/sav/test_object_class_kind_alt5.res @@ -0,0 +1 @@ +alt/test_object_class_kind_alt5.nit:22,8--13: Error: `Object` must be an interface. diff --git a/tests/sav/test_subset_out_of_order_alt1.res b/tests/sav/test_subset_out_of_order_alt1.res new file mode 100644 index 0000000..c6fcccb --- /dev/null +++ b/tests/sav/test_subset_out_of_order_alt1.res @@ -0,0 +1 @@ +alt/test_subset_out_of_order_alt1.nit:18,8: Error: subset `B` cannot specialize subset `A`. diff --git a/tests/test_object_class_kind.nit b/tests/test_object_class_kind.nit index 415694f..8050b94 100644 --- a/tests/test_object_class_kind.nit +++ b/tests/test_object_class_kind.nit @@ -14,9 +14,10 @@ import end -interface Object #alt1-4# +interface Object #alt1-5# #alt1# abstract class Object #alt2# class Object #alt3# enum Object #alt4# extern class Object +#alt5# subset Object end diff --git a/tests/test_subset_out_of_order.nit b/tests/test_subset_out_of_order.nit new file mode 100644 index 0000000..f700bc2 --- /dev/null +++ b/tests/test_subset_out_of_order.nit @@ -0,0 +1,22 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import core::kernel + +subset B + super A +end + +class A #alt1# subset A +end -- 1.7.9.5