syntax: unreachable statements are errors
authorJean Privat <jean@pryen.org>
Wed, 13 Jan 2010 22:14:25 +0000 (17:14 -0500)
committerJean Privat <jean@pryen.org>
Thu, 14 Jan 2010 16:46:30 +0000 (11:46 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

src/syntax/typing.nit
tests/base_control_flow2.nit
tests/sav/base_control_flow2_alt1.sav [new file with mode: 0644]
tests/sav/base_control_flow2_alt2.sav [new file with mode: 0644]
tests/sav/base_control_flow2_alt3.sav [new file with mode: 0644]
tests/sav/base_control_flow2_alt4.sav [new file with mode: 0644]
tests/sav/base_control_flow2_alt5.sav [new file with mode: 0644]
tests/sav/base_control_flow2_alt6.sav [new file with mode: 0644]
tests/sav/base_control_flow_alt2.sav [new file with mode: 0644]
tests/sav/base_control_flow_alt3.sav [new file with mode: 0644]

index 84a8483..7023949 100644 (file)
@@ -385,11 +385,12 @@ redef class ABlockExpr
                v.variable_ctx = v.variable_ctx.sub(self)
 
                for e in n_expr do
-                       if v.variable_ctx.unreash and not v.variable_ctx.already_unreash then
+                       if not v.variable_ctx.unreash then
+                               v.enter_visit(e)
+                       else if not v.variable_ctx.already_unreash then
                                v.variable_ctx.already_unreash = true
-                               v.warning(e, "Warning: unreachable statement.")
+                               v.error(e, "Error: unreachable statement.")
                        end
-                       v.enter_visit(e)
                end
 
                old_var_ctx.merge(v.variable_ctx)
index 54ee76f..aab4428 100644 (file)
@@ -53,3 +53,16 @@ while true do
        break
        #alt5#a
 end
+
+loop
+       a
+       break
+       #alt6#a
+end
+
+if false then
+       loop
+               a
+       end
+       #alt7#a
+end
diff --git a/tests/sav/base_control_flow2_alt1.sav b/tests/sav/base_control_flow2_alt1.sav
new file mode 100644 (file)
index 0000000..070b940
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow2_alt1.nit:24,2: Error: unreachable statement.
diff --git a/tests/sav/base_control_flow2_alt2.sav b/tests/sav/base_control_flow2_alt2.sav
new file mode 100644 (file)
index 0000000..6a642ac
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow2_alt2.nit:30,2: Error: unreachable statement.
diff --git a/tests/sav/base_control_flow2_alt3.sav b/tests/sav/base_control_flow2_alt3.sav
new file mode 100644 (file)
index 0000000..c74ea0f
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow2_alt3.nit:42,2: Error: unreachable statement.
diff --git a/tests/sav/base_control_flow2_alt4.sav b/tests/sav/base_control_flow2_alt4.sav
new file mode 100644 (file)
index 0000000..178e0e9
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow2_alt4.nit:50,3: Error: unreachable statement.
diff --git a/tests/sav/base_control_flow2_alt5.sav b/tests/sav/base_control_flow2_alt5.sav
new file mode 100644 (file)
index 0000000..f57e89f
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow2_alt5.nit:54,2: Error: unreachable statement.
diff --git a/tests/sav/base_control_flow2_alt6.sav b/tests/sav/base_control_flow2_alt6.sav
new file mode 100644 (file)
index 0000000..fe9e5ca
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow2_alt6.nit:60,2: Error: unreachable statement.
diff --git a/tests/sav/base_control_flow_alt2.sav b/tests/sav/base_control_flow_alt2.sav
new file mode 100644 (file)
index 0000000..9e5891b
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow_alt2.nit:23,2: Error: unreachable statement.
diff --git a/tests/sav/base_control_flow_alt3.sav b/tests/sav/base_control_flow_alt3.sav
new file mode 100644 (file)
index 0000000..8c005cd
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow_alt3.nit:54,2: Error: unreachable statement.