[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