From 0cd11e1e7ce1e01dd4a27280fc0ec9152a3be2da Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 3 Jul 2009 22:42:31 -0400 Subject: [PATCH] syntax: better error message for generic class arity error Signed-off-by: Jean Privat --- src/syntax/syntax_base.nit | 10 ++++++++-- tests/sav/base_gen2_alt1.sav | 1 + tests/sav/base_gen2_alt2.sav | 1 + tests/sav/base_gen2_alt3.sav | 1 + tests/sav/base_gen2_alt4.sav | 1 + tests/sav/base_gen2_alt5.sav | 1 + tests/sav/error_type_not_ok5_alt1.sav | 6 ++++++ 7 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 tests/sav/base_gen2_alt1.sav create mode 100644 tests/sav/base_gen2_alt2.sav create mode 100644 tests/sav/base_gen2_alt3.sav create mode 100644 tests/sav/base_gen2_alt4.sav create mode 100644 tests/sav/base_gen2_alt5.sav create mode 100644 tests/sav/error_type_not_ok5_alt1.sav diff --git a/src/syntax/syntax_base.nit b/src/syntax/syntax_base.nit index cb3b15e..78cf92a 100644 --- a/src/syntax/syntax_base.nit +++ b/src/syntax/syntax_base.nit @@ -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 index 0000000..48b7374 --- /dev/null +++ b/tests/sav/base_gen2_alt1.sav @@ -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 index 0000000..2841441 --- /dev/null +++ b/tests/sav/base_gen2_alt2.sav @@ -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 index 0000000..3541afb --- /dev/null +++ b/tests/sav/base_gen2_alt3.sav @@ -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 index 0000000..57b3bc0 --- /dev/null +++ b/tests/sav/base_gen2_alt4.sav @@ -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 index 0000000..2ad0a23 --- /dev/null +++ b/tests/sav/base_gen2_alt5.sav @@ -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 index 0000000..798968a --- /dev/null +++ b/tests/sav/error_type_not_ok5_alt1.sav @@ -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. -- 1.7.9.5