[svn] r6866: nemerle/trunk/ncc/parsing/MainParser.n
VladD2
svnadmin at nemerle.org
Sat Nov 11 16:26:42 CET 2006
Log:
Fix location of operator call.
Author: VladD2
Date: Sat Nov 11 16:26:40 2006
New Revision: 6866
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 Sat Nov 11 16:26:40 2006
@@ -68,7 +68,7 @@
public LeftPriority : int;
public RightPriority : int;
- public static RoundInfo : OperatorInfo = OperatorInfo ("(", 290,291);
+ public static RoundInfo : OperatorInfo = OperatorInfo ("(", 290, 291);
public static SquareInfo : OperatorInfo = OperatorInfo ("[", 290, 291);
public static ProductInfo : OperatorInfo = OperatorInfo ("*", 261, 260);
public static UnMinus : OperatorInfo = UnaryOperatorInfo ("-", 281, 280);
@@ -88,10 +88,15 @@
}
class NaryOperatorInfo : OperatorInfo {
+ public this (copy : OperatorInfo, location : Location) {
+ base (copy.Name, copy.LeftPriority, copy.RightPriority);
+ Location = location;
+ }
public this (copy : OperatorInfo) {
base (copy.Name, copy.LeftPriority, copy.RightPriority);
}
+ public mutable Location : Location;
public mutable ExprsBegin : list [PExpr];
}
@@ -1568,13 +1573,14 @@
PExpr.Call (e.Location, PExpr.Ref (e.Location, mkname (name)), [e])
}
- make_operator_call (name : string, parms : list [PExpr]) : PExpr
+ make_operator_call (name : string, parms : list [PExpr], location : Location) : PExpr
{
- def head = List.Head (parms);
- def loc = head.Location + last_tok.Location;
+ def loc = if (location.FileIndex == 0) parms.Head.Location + parms.Last.Location
+ else location;
+
match (name) {
- | "(" => PExpr.Call (loc, head, List.Tail (parms))
- | "[" => PExpr.Indexer (loc, head, List.Tail (parms))
+ | "(" => PExpr.Call (loc, parms.Head, parms.Tail)
+ | "[" => PExpr.Indexer (loc, parms.Head, parms.Tail)
| _ => PExpr.Call (loc, PExpr.Ref (loc, mkname (name)), parms)
}
}
@@ -1608,7 +1614,7 @@
match (x) {
| nary is NaryOperatorInfo =>
def parms = roll_exprs (ref exprs, nary.ExprsBegin);
- make_operator_call (x.Name, parms)
+ make_operator_call (x.Name, parms, nary.Location)
| _ is BinaryOperatorInfo =>
match (exprs) {
@@ -1720,11 +1726,17 @@
| Token.SquareGroup (g) =>
group = g;
+ if (g == null)
NaryOperatorInfo (OperatorInfo.SquareInfo);
+ else
+ NaryOperatorInfo (OperatorInfo.SquareInfo, g.Location);
| Token.RoundGroup (g) =>
group = g;
+ if (g == null)
NaryOperatorInfo (OperatorInfo.RoundInfo);
+ else
+ NaryOperatorInfo (OperatorInfo.RoundInfo, g.Location);
| _ => null
}
More information about the svn
mailing list