From 23652c97633c7050b817fe4ed607c199d575016d Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Thu, 14 Jan 2010 11:43:05 -0500 Subject: [PATCH] syntax: stmts after loops without breaks are unreashables Signed-off-by: Jean Privat --- src/syntax/typing.nit | 4 +++- tests/base_label_loop.nit | 1 + tests/sav/base_control_flow2_alt7.sav | 1 + tests/sav/base_label_loop_alt6.sav | 2 +- tests/sav/base_label_loop_alt7.sav | 2 +- 5 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 tests/sav/base_control_flow2_alt7.sav diff --git a/src/syntax/typing.nit b/src/syntax/typing.nit index 7023949..d4d664c 100644 --- a/src/syntax/typing.nit +++ b/src/syntax/typing.nit @@ -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 diff --git a/tests/base_label_loop.nit b/tests/base_label_loop.nit index a45ae01..ec16d02 100644 --- a/tests/base_label_loop.nit +++ b/tests/base_label_loop.nit @@ -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 index 0000000..12d94c7 --- /dev/null +++ b/tests/sav/base_control_flow2_alt7.sav @@ -0,0 +1 @@ +alt/base_control_flow2_alt7.nit:67,2: Error: unreachable statement. diff --git a/tests/sav/base_label_loop_alt6.sav b/tests/sav/base_label_loop_alt6.sav index 161d5f7..fd3e0e0 100644 --- a/tests/sav/base_label_loop_alt6.sav +++ b/tests/sav/base_label_loop_alt6.sav @@ -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. diff --git a/tests/sav/base_label_loop_alt7.sav b/tests/sav/base_label_loop_alt7.sav index 82d1537..0c6e27d 100644 --- a/tests/sav/base_label_loop_alt7.sav +++ b/tests/sav/base_label_loop_alt7.sav @@ -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. -- 1.7.9.5