[svn] r6015: nemerle/trunk/ncc: generation/Typer3.n
testsuite/negative/yield3.n testsuite/positive/yield.n
malekith
svnadmin at nemerle.org
Sun Dec 18 14:12:54 CET 2005
Log:
Prevent yield usage in exception blocks.
Author: malekith
Date: Sun Dec 18 14:12:53 2005
New Revision: 6015
Added:
nemerle/trunk/ncc/testsuite/negative/yield3.n
Modified:
nemerle/trunk/ncc/generation/Typer3.n
nemerle/trunk/ncc/testsuite/positive/yield.n
Modified: nemerle/trunk/ncc/generation/Typer3.n
==============================================================================
--- nemerle/trunk/ncc/generation/Typer3.n (original)
+++ nemerle/trunk/ncc/generation/Typer3.n Sun Dec 18 14:12:53 2005
@@ -758,6 +758,13 @@
def thisref = TExpr.This (clo_type.GetMemType ());
+ def look_for_invalid_yield (expr : TExpr) {
+ | Assign (LocalRef (decl), _) when decl.Name == "_N_current" =>
+ Message.Error ("using `yield' is not allowed here");
+ null
+ | _ => null
+ }
+
def rewrite (expr : TExpr) {
| TryFinally (body, handler) =>
def fld = clo_type.DefineAndReturn (<[ decl:
@@ -771,11 +778,16 @@
dispose_expr = TExpr.Sequence (dispose_expr.Type, for_dispose, dispose_expr);
BuildRevSequence (
- [handler,
+ [handler.Walk (look_for_invalid_yield),
TExpr.Assign (InternalType.Void, fldref, TExpr.FalseLiteral),
body.Walk (rewrite),
TExpr.Assign (InternalType.Void, fldref, TExpr.TrueLiteral)])
+ | TryWith (body, _, handler) =>
+ _ = body.Walk (look_for_invalid_yield);
+ _ = handler.Walk (look_for_invalid_yield);
+ expr
+
| _ => null
}
Added: nemerle/trunk/ncc/testsuite/negative/yield3.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/ncc/testsuite/negative/yield3.n Sun Dec 18 14:12:53 2005
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+
+class D
+{
+ public GetEnumerator1 () : IEnumerator [int]
+ {
+ try {
+ yield 7; // E: using `yield' is not allowed here
+ } catch {
+ | _ => {}
+ }
+ }
+
+ public GetEnumerator2 () : IEnumerator [int]
+ {
+ try {
+ {}
+ } catch {
+ | _ =>
+ yield 7; // E: using `yield' is not allowed here
+ }
+ }
+}
Modified: nemerle/trunk/ncc/testsuite/positive/yield.n
==============================================================================
--- nemerle/trunk/ncc/testsuite/positive/yield.n (original)
+++ nemerle/trunk/ncc/testsuite/positive/yield.n Sun Dec 18 14:12:53 2005
@@ -29,12 +29,7 @@
yield qux.ToString ();
yield ene;
yield this.due;
- try {
yield rabe;
- } catch {
- | _ =>
- yield rabe;
- }
}
}
More information about the svn
mailing list