[svn] r5996: nemerle/trunk/ncc/typing/Typer.n
malekith
svnadmin at nemerle.org
Tue Dec 6 12:13:12 CET 2005
Log:
Always push/pop solver stack in try-finally block.
Author: malekith
Date: Tue Dec 6 12:13:11 2005
New Revision: 5996
Modified:
nemerle/trunk/ncc/typing/Typer.n
Modified: nemerle/trunk/ncc/typing/Typer.n
==============================================================================
--- nemerle/trunk/ncc/typing/Typer.n (original)
+++ nemerle/trunk/ncc/typing/Typer.n Tue Dec 6 12:13:11 2005
@@ -2126,20 +2126,31 @@
foreach (symbol in symbols) {
if (dump_errors) {
foreach (op in InterpretGlobal (pt_from, symbol)) {
+ try {
solver.PushState ();
messenger.NeedMessage = true;
_ = Expect (op.Type, expected, op.ToString ());
+ } finally {
solver.PopState ();
}
+ }
} else {
+ def not_ok =
+ try {
solver.PushState ();
- def not_ok = InterpretGlobal (pt_from, symbol).IsEmpty;
+ InterpretGlobal (pt_from, symbol).IsEmpty;
+ } finally {
solver.PopState ();
+ }
unless (not_ok)
foreach (op in InterpretGlobal (pt_from, symbol)) {
+ def ok =
+ try {
solver.PushState ();
- def ok = op.Type.Unify (expected);
+ op.Type.Unify (expected);
+ } finally {
solver.PopState ();
+ }
when (ok)
res = op :: res;
}
@@ -2360,9 +2371,13 @@
else This ()
}
+ def res =
+ try {
solver.PushState ();
- def res = Option.UnSome (TypeMember (th (), name.Id, expected));
+ Option.UnSome (TypeMember (th (), name.Id, expected));
+ } finally {
solver.PopState ();
+ }
if (res.IsEmpty) []
else Option.UnSome (TypeMember (th (), name.Id, expected))
| _ => []
More information about the svn
mailing list