nitcc: error on duplicated expr/prod name
authorJean Privat <jean@pryen.org>
Tue, 22 Oct 2013 00:31:27 +0000 (20:31 -0400)
committerJean Privat <jean@pryen.org>
Tue, 22 Oct 2013 00:31:27 +0000 (20:31 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

contrib/nitcc/src/nitcc_semantic.nit
contrib/nitcc/tests/names.input [new file with mode: 0644]
contrib/nitcc/tests/names.sablecc [new file with mode: 0644]
contrib/nitcc/tests/sav/names.alt1.res [new file with mode: 0644]
contrib/nitcc/tests/sav/names.alt2.res [new file with mode: 0644]
contrib/nitcc/tests/sav/names.input.res [new file with mode: 0644]
contrib/nitcc/tests/sav/names.res [new file with mode: 0644]

index 955a93d..8e43175 100644 (file)
@@ -170,6 +170,10 @@ redef class Nexpr
        redef fun accept_collect_prod(v) do
                var id = children.first.as(Nid)
                var name = id.text
+               if v.names.has_key(name) then
+                       print "{id.position} Error {name} already defined."
+                       exit(1)
+               end
                v.names[name] = self
                self.name = name
        end
@@ -297,6 +301,10 @@ redef class Nprod
        redef fun accept_collect_prod(v) do
                var id = children.first.as(Nid)
                var name = id.text
+               if v.names.has_key(name) then
+                       print "{id.position} Error {name} already defined."
+                       exit(1)
+               end
                v.names[name] = self
                v.nprods.add(self)
                prod = new Production(name)
diff --git a/contrib/nitcc/tests/names.input b/contrib/nitcc/tests/names.input
new file mode 100644 (file)
index 0000000..6103b06
--- /dev/null
@@ -0,0 +1 @@
+1a
\ No newline at end of file
diff --git a/contrib/nitcc/tests/names.sablecc b/contrib/nitcc/tests/names.sablecc
new file mode 100644 (file)
index 0000000..76768bf
--- /dev/null
@@ -0,0 +1,9 @@
+Grammar names;
+Lexer
+a = 'a';
+//alt1 a = 'b';
+Parser
+//alt2 a = 'b';
+b =
+       {a:} '1' [a:]a
+       ;
diff --git a/contrib/nitcc/tests/sav/names.alt1.res b/contrib/nitcc/tests/sav/names.alt1.res
new file mode 100644 (file)
index 0000000..d58c21e
--- /dev/null
@@ -0,0 +1 @@
+4:1-4:2 Error a already defined.
diff --git a/contrib/nitcc/tests/sav/names.alt2.res b/contrib/nitcc/tests/sav/names.alt2.res
new file mode 100644 (file)
index 0000000..fbc22a9
--- /dev/null
@@ -0,0 +1 @@
+6:1-6:2 Error a already defined.
diff --git a/contrib/nitcc/tests/sav/names.input.res b/contrib/nitcc/tests/sav/names.input.res
new file mode 100644 (file)
index 0000000..2ee2b71
--- /dev/null
@@ -0,0 +1,5 @@
+Start
+  b_a
+    '1'@(1:1-1:2)
+    a@(1:2-1:3)='a'
+  Eof@(1:3-1:3)=''
diff --git a/contrib/nitcc/tests/sav/names.res b/contrib/nitcc/tests/sav/names.res
new file mode 100644 (file)
index 0000000..e69de29