syntax: refuse return in default closure definition
authorJean Privat <jean@pryen.org>
Tue, 26 Jan 2010 18:53:09 +0000 (13:53 -0500)
committerJean Privat <jean@pryen.org>
Tue, 26 Jan 2010 18:53:09 +0000 (13:53 -0500)
Such a return can be seen ambiguous.
Users have to use break or continue.

Signed-off-by: Jean Privat <jean@pryen.org>

13 files changed:
src/syntax/typing.nit
tests/sav/base_closure_break_default2_alt1.sav
tests/sav/base_closure_break_default2_alt2.sav
tests/sav/base_closure_break_default_alt1.sav
tests/sav/base_closure_break_default_alt2.sav
tests/sav/base_closure_default1_alt1.sav
tests/sav/base_closure_default1_alt2.sav
tests/sav/base_closure_default2_alt1.sav
tests/sav/base_closure_default2_alt2.sav
tests/sav/base_closure_default3_alt1.sav
tests/sav/base_closure_default3_alt2.sav
tests/sav/base_closure_default4_alt1.sav
tests/sav/base_closure_default4_alt2.sav

index b060990..ab92882 100644 (file)
@@ -81,6 +81,9 @@ special AbsSyntaxVisitor
                if ctx != null then variable_ctx = ctx
        end
 
+       # Are we inside a default closure definition ?
+       readable writable var _is_default_closure_definition: Bool = false
+
        # Number of nested once
        readable writable var _once_count: Int = 0
 
@@ -278,8 +281,12 @@ redef class AClosureDecl
                _escapable = escapable
                v.escapable_ctx.push(escapable, null)
 
+               v.is_default_closure_definition = true
+
                super
 
+               v.is_default_closure_definition = false
+
                if n_expr != null then
                        if v.variable_ctx.unreash == false then
                                if variable.closure.signature.return_type != null then
@@ -398,6 +405,12 @@ redef class AReturnExpr
        do
                v.variable_ctx.unreash = true
                var t = v.local_property.signature.return_type
+
+               if v.is_default_closure_definition then
+                       v.error(self, "Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.")
+                       return
+               end
+
                var e = n_expr
                if e == null and t != null then
                        v.error(self, "Error: Return without value in a function.")
index 3e79ff0..c863047 100644 (file)
@@ -1 +1 @@
-alt/base_closure_break_default2_alt1.nit:23,5--10: Error: Return without value in a function.
+alt/base_closure_break_default2_alt1.nit:23,5--10: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index 9542707..ddeb309 100644 (file)
@@ -1,7 +1 @@
-0
-1
-2
-0
-1
-1
-0
+alt/base_closure_break_default2_alt2.nit:24,5--12: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index 4657fc0..eb1a24d 100644 (file)
@@ -1,6 +1 @@
-0
-1
-2
-0
-1
-0
+alt/base_closure_break_default_alt1.nit:23,5--10: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index 8ec348b..4ea05c7 100644 (file)
@@ -1 +1 @@
-alt/base_closure_break_default_alt2.nit:24,5--12: Error: Return with value in a procedure.
+alt/base_closure_break_default_alt2.nit:24,5--12: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index e8350ed..3d823e7 100644 (file)
@@ -1,7 +1 @@
-0
-1
-2
-3
-0
-1
-0
+alt/base_closure_default1_alt1.nit:23,5--10: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index b2d233e..98fb39d 100644 (file)
@@ -1 +1 @@
-alt/base_closure_default1_alt2.nit:24,5--12: Error: Return with value in a procedure.
+alt/base_closure_default1_alt2.nit:24,5--12: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index e8350ed..77c66e2 100644 (file)
@@ -1,7 +1 @@
-0
-1
-2
-3
-0
-1
-0
+alt/base_closure_default2_alt1.nit:23,5--10: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index 8b8bbca..f50c897 100644 (file)
@@ -1 +1 @@
-alt/base_closure_default2_alt2.nit:24,5--12: Error: Return with value in a procedure.
+alt/base_closure_default2_alt2.nit:24,5--12: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index e8350ed..d4e40d0 100644 (file)
@@ -1,7 +1 @@
-0
-1
-2
-3
-0
-1
-0
+alt/base_closure_default3_alt1.nit:23,5--10: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index 4dd646f..5d00c9d 100644 (file)
@@ -1 +1 @@
-alt/base_closure_default3_alt2.nit:24,5--12: Error: Return with value in a procedure.
+alt/base_closure_default3_alt2.nit:24,5--12: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index e8350ed..c070f1f 100644 (file)
@@ -1,7 +1 @@
-0
-1
-2
-3
-0
-1
-0
+alt/base_closure_default4_alt1.nit:23,5--10: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.
index 16c6226..169b1ea 100644 (file)
@@ -1 +1 @@
-alt/base_closure_default4_alt2.nit:24,5--13: Error: Return with value in a procedure.
+alt/base_closure_default4_alt2.nit:24,5--13: Error: 'return' invalid in default closure definitions. Use 'continue' or 'break'.