[svn] r7627: nemerle/trunk/ncc/parsing/MainParser.n

kliss svnadmin at nemerle.org
Sun Apr 29 19:26:46 CEST 2007


Log:
Improve situation with locations of exception handlers (it's not ideal yet, though)

Author: kliss
Date: Sun Apr 29 19:26:44 2007
New Revision: 7627

Modified:
   nemerle/trunk/ncc/parsing/MainParser.n

Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n	(original)
+++ nemerle/trunk/ncc/parsing/MainParser.n	Sun Apr 29 19:26:44 2007
@@ -2177,54 +2177,58 @@
 
             // exception handlers
             when (flag_sibling_keyword ("catch")) {
-              def mktry (h : MatchCase, cases) {
-                match (h.patterns) {
+              def mktry (h : MatchCase, cases) 
+              {
+                // Getting combined location of patterns.
+                def pattersLocation = h.patterns.Map(_.Location).Fold(Location.Default, (loc, acc) => acc.Combine(loc));
+                match (h.patterns) 
+                {
                   | [PExpr.TypeEnforcement (PExpr.Wildcard, t)] =>
-                    Message.Warning (602, loc, "using ``:'' as a type tests is "
+                    Message.Warning (602, pattersLocation, "using ``:'' as a type tests is "
                                      "deprecated, please use ``is'' instead");
-                    TryCase.Catch (Splicable.Name (loc, mkname (Util.tmpname ("u"))), t, h.body) :: cases
+                    TryCase.Catch (Splicable.Name (pattersLocation, mkname (Util.tmpname ("u"))), t, h.body) :: cases
                   
                   | [PExpr.Is (PExpr.Wildcard, t)] =>
-                    TryCase.Catch (Splicable.Name (loc, mkname (Util.tmpname ("u"))), t, h.body) :: cases
+                    TryCase.Catch (Splicable.Name (pattersLocation, mkname (Util.tmpname ("u"))), t, h.body) :: cases
 
                   | [<[ _ is $t when $cond ]>] =>
-                    TryCase.Filter (Splicable.Name (loc, mkname (Util.tmpname ("u"))), t, cond, h.body) :: cases
+                    TryCase.Filter (Splicable.Name (pattersLocation, mkname (Util.tmpname ("u"))), t, cond, h.body) :: cases
 
                   | [PExpr.TypeEnforcement (PExpr.Ref (id), t)] =>
-                    Message.Warning (602, loc, "using ``:'' as a type tests is "
+                    Message.Warning (602, pattersLocation, "using ``:'' as a type tests is "
                                      "deprecated, please use ``is'' instead");
                     TryCase.Catch (Splicable.Name (id), t, h.body) :: cases
 
                   | [PExpr.Is (PExpr.Ref (id), t)] =>
-                    TryCase.Catch (Splicable.Name (loc, id), t, h.body) :: cases
+                    TryCase.Catch (Splicable.Name (pattersLocation, id), t, h.body) :: cases
 
                   | [<[ $(PExpr.Ref(id)) is $t when $cond ]>] =>
-                    TryCase.Filter (Splicable.Name (loc, id), t, cond, h.body) :: cases
+                    TryCase.Filter (Splicable.Name (pattersLocation, id), t, cond, h.body) :: cases
 
                   | [PExpr.Ref (id)] =>
-                    TryCase.Catch (Splicable.Name (loc, id), <[ System.Exception ]>, h.body) :: cases
+                    TryCase.Catch (Splicable.Name (pattersLocation, id), <[ System.Exception ]>, h.body) :: cases
 
                   | [<[ $(PExpr.Ref(id)) when $cond ]>] =>
-                    TryCase.Filter (Splicable.Name (loc, id), <[ System.Exception ]>, cond, h.body) :: cases
+                    TryCase.Filter (Splicable.Name (pattersLocation, id), <[ System.Exception ]>, cond, h.body) :: cases
 
                   | [PExpr.Wildcard] =>
-                    TryCase.Catch (Splicable.Name (loc, mkname (Util.tmpname ("u"))), 
+                    TryCase.Catch (Splicable.Name (pattersLocation, mkname (Util.tmpname ("u"))), 
                                    <[ System.Exception ]>, h.body) :: cases
 
                   | [<[ _ when $cond ]>] =>
-                    TryCase.Filter (Splicable.Name (loc, mkname (Util.tmpname ("u"))),
+                    TryCase.Filter (Splicable.Name (pattersLocation, mkname (Util.tmpname ("u"))),
                                     <[ System.Exception ]>, cond, h.body) :: cases
 
                   | [PExpr.TypeEnforcement (PExpr.Spliced (id), t)] =>
-                    Message.Warning (602, loc, "using ``:'' as a type tests is "
+                    Message.Warning (602, pattersLocation, "using ``:'' as a type tests is "
                                      "deprecated, please use ``is'' instead");
                     TryCase.Catch (Splicable.Expression (id), t, h.body) :: cases
 
                   | [PExpr.Is (PExpr.Spliced (id), t)] =>
-                    TryCase.Catch (Splicable.Expression (loc, id), t, h.body) :: cases
+                    TryCase.Catch (Splicable.Expression (pattersLocation, id), t, h.body) :: cases
 
                   | [<[ $(PExpr.Spliced(id)) is $t when $cond ]>] =>
-                    TryCase.Filter (Splicable.Expression (loc, id), t, cond, h.body) :: cases
+                    TryCase.Filter (Splicable.Expression (pattersLocation, id), t, cond, h.body) :: cases
 
                   | _ =>
                     Message.Error (h.body.Location, "exception catch pattern must"



More information about the svn mailing list