syntax: better error message for generic class arity error
authorJean Privat <jean@pryen.org>
Sat, 4 Jul 2009 02:42:31 +0000 (22:42 -0400)
committerJean Privat <jean@pryen.org>
Sat, 4 Jul 2009 02:42:31 +0000 (22:42 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/syntax/syntax_base.nit
tests/sav/base_gen2_alt1.sav [new file with mode: 0644]
tests/sav/base_gen2_alt2.sav [new file with mode: 0644]
tests/sav/base_gen2_alt3.sav [new file with mode: 0644]
tests/sav/base_gen2_alt4.sav [new file with mode: 0644]
tests/sav/base_gen2_alt5.sav [new file with mode: 0644]
tests/sav/error_type_not_ok5_alt1.sav [new file with mode: 0644]

index cb3b15e..78cf92a 100644 (file)
@@ -591,9 +591,15 @@ redef class AType
                var local_class = get_local_class(v)
                if local_class == null then return null
 
-               var arity = n_types.length 
+               var arity = n_types.length
                if local_class.arity != arity then
-                       v.error(self, "Type error: '{local_class}' has {local_class.arity} parameters which differs from the {arity} params.")
+                       if arity == 0 then
+                               v.error(self, "Type error: '{local_class}' is a generic class.")
+                       else if local_class.arity == 0 then
+                               v.error(self, "Type error: '{local_class}' is not a generic class.")
+                       else
+                               v.error(self, "Type error: '{local_class}' has {local_class.arity} parameters ({arity} are provided).")
+                       end
                        return null
                end
 
diff --git a/tests/sav/base_gen2_alt1.sav b/tests/sav/base_gen2_alt1.sav
new file mode 100644 (file)
index 0000000..48b7374
--- /dev/null
@@ -0,0 +1 @@
+alt/base_gen2_alt1.nit:61,13--17: Type error: 'A' is not a generic class.
diff --git a/tests/sav/base_gen2_alt2.sav b/tests/sav/base_gen2_alt2.sav
new file mode 100644 (file)
index 0000000..2841441
--- /dev/null
@@ -0,0 +1 @@
+alt/base_gen2_alt2.nit:62,13--13: Type error: 'B' is a generic class.
diff --git a/tests/sav/base_gen2_alt3.sav b/tests/sav/base_gen2_alt3.sav
new file mode 100644 (file)
index 0000000..3541afb
--- /dev/null
@@ -0,0 +1 @@
+alt/base_gen2_alt3.nit:63,13--22: Type error: 'B' has 1 parameters (2 are provided).
diff --git a/tests/sav/base_gen2_alt4.sav b/tests/sav/base_gen2_alt4.sav
new file mode 100644 (file)
index 0000000..57b3bc0
--- /dev/null
@@ -0,0 +1 @@
+alt/base_gen2_alt4.nit:64,13--13: Type error: 'C' is a generic class.
diff --git a/tests/sav/base_gen2_alt5.sav b/tests/sav/base_gen2_alt5.sav
new file mode 100644 (file)
index 0000000..2ad0a23
--- /dev/null
@@ -0,0 +1 @@
+alt/base_gen2_alt5.nit:65,13--17: Type error: 'C' has 2 parameters (1 are provided).
diff --git a/tests/sav/error_type_not_ok5_alt1.sav b/tests/sav/error_type_not_ok5_alt1.sav
new file mode 100644 (file)
index 0000000..798968a
--- /dev/null
@@ -0,0 +1,6 @@
+alt/error_type_not_ok5_alt1.nit:23,8--11: Type error: 'Fail' is a generic class.
+alt/error_type_not_ok5_alt1.nit:25,9--21: Type error: 'Fail' is a generic class.
+alt/error_type_not_ok5_alt1.nit:28,14--17: Type error: 'Fail' is a generic class.
+alt/error_type_not_ok5_alt1.nit:29,11--14: Type error: 'Fail' is a generic class.
+alt/error_type_not_ok5_alt1.nit:30,11--14: Type error: 'Fail' is a generic class.
+alt/error_type_not_ok5_alt1.nit:31,13--16: Type error: 'Fail' is a generic class.