From: Jean Privat Date: Wed, 13 Jan 2010 22:14:25 +0000 (-0500) Subject: syntax: unreachable statements are errors X-Git-Tag: v0.4~59 X-Git-Url: http://nitlanguage.org syntax: unreachable statements are errors Signed-off-by: Jean Privat --- diff --git a/src/syntax/typing.nit b/src/syntax/typing.nit index 84a8483..7023949 100644 --- a/src/syntax/typing.nit +++ b/src/syntax/typing.nit @@ -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) diff --git a/tests/base_control_flow2.nit b/tests/base_control_flow2.nit index 54ee76f..aab4428 100644 --- a/tests/base_control_flow2.nit +++ b/tests/base_control_flow2.nit @@ -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 index 0000000..070b940 --- /dev/null +++ b/tests/sav/base_control_flow2_alt1.sav @@ -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 index 0000000..6a642ac --- /dev/null +++ b/tests/sav/base_control_flow2_alt2.sav @@ -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 index 0000000..c74ea0f --- /dev/null +++ b/tests/sav/base_control_flow2_alt3.sav @@ -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 index 0000000..178e0e9 --- /dev/null +++ b/tests/sav/base_control_flow2_alt4.sav @@ -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 index 0000000..f57e89f --- /dev/null +++ b/tests/sav/base_control_flow2_alt5.sav @@ -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 index 0000000..fe9e5ca --- /dev/null +++ b/tests/sav/base_control_flow2_alt6.sav @@ -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 index 0000000..9e5891b --- /dev/null +++ b/tests/sav/base_control_flow_alt2.sav @@ -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 index 0000000..8c005cd --- /dev/null +++ b/tests/sav/base_control_flow_alt3.sav @@ -0,0 +1 @@ +alt/base_control_flow_alt3.nit:54,2: Error: unreachable statement.