syntax: stmts after loops without breaks are unreashables
authorJean Privat <jean@pryen.org>
Thu, 14 Jan 2010 16:43:05 +0000 (11:43 -0500)
committerJean Privat <jean@pryen.org>
Thu, 14 Jan 2010 16:46:31 +0000 (11:46 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

src/syntax/typing.nit
tests/base_label_loop.nit
tests/sav/base_control_flow2_alt7.sav [new file with mode: 0644]
tests/sav/base_label_loop_alt6.sav
tests/sav/base_label_loop_alt7.sav

index 7023949..d4d664c 100644 (file)
@@ -589,7 +589,9 @@ redef class ALoopExpr
                end
 
                # Compute outside context (assert all breaks)
-               if not escapable.break_variable_contexts.is_empty then
+               if escapable.break_variable_contexts.is_empty then
+                       old_var_ctx.unreash = true
+               else
                        old_var_ctx.combine_merge(escapable.break_variable_contexts, v.base_variable_ctx)
                end
 
index a45ae01..ec16d02 100644 (file)
@@ -38,6 +38,7 @@ loop
                end
                if maybe then break label l1
                4.output
+               if maybe then break
        end label l2#!alt6#
        #alt6#end label l1
        5.output
diff --git a/tests/sav/base_control_flow2_alt7.sav b/tests/sav/base_control_flow2_alt7.sav
new file mode 100644 (file)
index 0000000..12d94c7
--- /dev/null
@@ -0,0 +1 @@
+alt/base_control_flow2_alt7.nit:67,2: Error: unreachable statement.
index 161d5f7..fd3e0e0 100644 (file)
@@ -1 +1 @@
-alt/base_label_loop_alt6.nit:41,6--13: Syntax error: label l1 already defined at 43,5--12.
+alt/base_label_loop_alt6.nit:42,6--13: Syntax error: label l1 already defined at 44,5--12.
index 82d1537..0c6e27d 100644 (file)
@@ -1 +1 @@
-alt/base_label_loop_alt7.nit:49,5--12: Syntax error: label l1 already defined at 44,5--12.
+alt/base_label_loop_alt7.nit:50,5--12: Syntax error: label l1 already defined at 45,5--12.