From 503e0304d4d67706688c90c50133f0c3f8677523 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Fri, 14 Aug 2009 15:33:34 -0400 Subject: [PATCH] syntax: fatal error on unavailable primitive method Warning: signature of primitive methods is not checked. Signed-off-by: Jean Privat --- src/syntax/syntax_base.nit | 3 +- tests/error_needed_method.nit | 56 ++++++++++++++++++++++++++++++++ tests/sav/error_needed_method_alt1.sav | 1 + tests/sav/error_needed_method_alt2.sav | 1 + tests/sav/error_needed_method_alt3.sav | 1 + tests/sav/error_needed_method_alt4.sav | 1 + tests/sav/error_needed_method_alt6.sav | 1 + tests/sav/error_needed_method_alt7.sav | 1 + 8 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 tests/error_needed_method.nit create mode 100644 tests/sav/error_needed_method.sav create mode 100644 tests/sav/error_needed_method_alt1.sav create mode 100644 tests/sav/error_needed_method_alt2.sav create mode 100644 tests/sav/error_needed_method_alt3.sav create mode 100644 tests/sav/error_needed_method_alt4.sav create mode 100644 tests/sav/error_needed_method_alt5.sav create mode 100644 tests/sav/error_needed_method_alt6.sav create mode 100644 tests/sav/error_needed_method_alt7.sav diff --git a/src/syntax/syntax_base.nit b/src/syntax/syntax_base.nit index 09b7573..512ccf4 100644 --- a/src/syntax/syntax_base.nit +++ b/src/syntax/syntax_base.nit @@ -374,8 +374,7 @@ special Visitor fun get_method(recv: MMType, name: Symbol): MMMethod do if not recv.local_class.has_global_property_by_name(name) then - error(current_node, "Fatal Error: {recv} must have a property named {name}.") - exit(1) + fatal_error(current_node, "Fatal Error: {recv} must have a property named {name}.") end return recv.local_class.select_method(name) end diff --git a/tests/error_needed_method.nit b/tests/error_needed_method.nit new file mode 100644 index 0000000..30460d1 --- /dev/null +++ b/tests/error_needed_method.nit @@ -0,0 +1,56 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# Copyright 2009 Jean Privat +# +# 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 end +interface Object + fun output is abstract +end + +interface Discrete +end + +universal Int +special Discrete +end + +interface Collection[E] +end + +class String +end + +universal NativeString +end + +class Array[E] +special Collection[E] +end + +class Range[E] +special Collection[E] +end + +#alt1#var a = [1, 2] +#alt2#for i in new Collection[Int] do i.output +#alt3#var s = "str" +#alt4#var s2 = "str{5}str" +#alt5#var r = [1..10] +#alt6#var r = [1..10[ +#alt7#fun foo(x: Int...) do end +#alt7#foo(1, 2, 3) + +do +end diff --git a/tests/sav/error_needed_method.sav b/tests/sav/error_needed_method.sav new file mode 100644 index 0000000..e69de29 diff --git a/tests/sav/error_needed_method_alt1.sav b/tests/sav/error_needed_method_alt1.sav new file mode 100644 index 0000000..63b50f6 --- /dev/null +++ b/tests/sav/error_needed_method_alt1.sav @@ -0,0 +1 @@ +alt/error_needed_method_alt1.nit:46,1--55,2: Fatal Error: Array[Int] must have a property named with_capacity. diff --git a/tests/sav/error_needed_method_alt2.sav b/tests/sav/error_needed_method_alt2.sav new file mode 100644 index 0000000..ccbf752 --- /dev/null +++ b/tests/sav/error_needed_method_alt2.sav @@ -0,0 +1 @@ +alt/error_needed_method_alt2.nit:47,10--27: Error: Method 'init' doesn't exists in Collection[Int]. diff --git a/tests/sav/error_needed_method_alt3.sav b/tests/sav/error_needed_method_alt3.sav new file mode 100644 index 0000000..7910676 --- /dev/null +++ b/tests/sav/error_needed_method_alt3.sav @@ -0,0 +1 @@ +alt/error_needed_method_alt3.nit:48,1--55,2: Fatal Error: String must have a property named with_native. diff --git a/tests/sav/error_needed_method_alt4.sav b/tests/sav/error_needed_method_alt4.sav new file mode 100644 index 0000000..9e7c360 --- /dev/null +++ b/tests/sav/error_needed_method_alt4.sav @@ -0,0 +1 @@ +alt/error_needed_method_alt4.nit:49,1--55,2: Fatal Error: Array[String] must have a property named with_capacity. diff --git a/tests/sav/error_needed_method_alt5.sav b/tests/sav/error_needed_method_alt5.sav new file mode 100644 index 0000000..e69de29 diff --git a/tests/sav/error_needed_method_alt6.sav b/tests/sav/error_needed_method_alt6.sav new file mode 100644 index 0000000..8f02c51 --- /dev/null +++ b/tests/sav/error_needed_method_alt6.sav @@ -0,0 +1 @@ +alt/error_needed_method_alt6.nit:51,1--55,2: Fatal Error: Range[Int] must have a property named without_last. diff --git a/tests/sav/error_needed_method_alt7.sav b/tests/sav/error_needed_method_alt7.sav new file mode 100644 index 0000000..4b98a60 --- /dev/null +++ b/tests/sav/error_needed_method_alt7.sav @@ -0,0 +1 @@ +alt/error_needed_method_alt7.nit:53,1--55,2: Fatal Error: Array[Int] must have a property named with_capacity. -- 1.7.9.5