@@ -4,7 +4,7 @@ use crate::parser::lalrpop_helpers::*;
44use lalrpop_util::ParseError;
55
66
7- grammar;
7+ grammar(fid: usize) ;
88
99extern {
1010 type Location = usize;
@@ -66,54 +66,54 @@ pub Expr: SimplExpr = {
6666 },
6767
6868 <Literal>,
69- <l:@L> <ident:"identifier"> <r:@R> => VarRef(Span(l, r), ident.to_string()),
69+ <l:@L> <ident:"identifier"> <r:@R> => VarRef(Span(l, r, fid ), ident.to_string()),
7070 "(" <ExprReset> ")",
7171
7272 #[precedence(level="1")] #[assoc(side="right")]
73- <l:@L> <ident:"identifier"> "(" <args: Comma<ExprReset>> ")" <r:@R> => FunctionCall(Span(l, r), ident, args),
74- <l:@L> <value:Expr> "[" <index: ExprReset> "]" <r:@R> => JsonAccess(Span(l, r), b(value), b(index)),
73+ <l:@L> <ident:"identifier"> "(" <args: Comma<ExprReset>> ")" <r:@R> => FunctionCall(Span(l, r, fid ), ident, args),
74+ <l:@L> <value:Expr> "[" <index: ExprReset> "]" <r:@R> => JsonAccess(Span(l, r, fid ), b(value), b(index)),
7575
7676 <l:@L> <value:Expr> "." <lit_l:@L> <index:"identifier"> <r:@R> => {
77- JsonAccess(Span(l, r), b(value), b(Literal(Span(lit_l, r), index.into())))
77+ JsonAccess(Span(l, r, fid ), b(value), b(Literal(Span(lit_l, r, fid ), index.into())))
7878 },
7979
8080 #[precedence(level="2")] #[assoc(side="right")]
81- <l:@L> "!" <e:Expr> <r:@R> => UnaryOp(Span(l, r), Not, b(e)),
81+ <l:@L> "!" <e:Expr> <r:@R> => UnaryOp(Span(l, r, fid ), Not, b(e)),
8282
8383 #[precedence(level="3")] #[assoc(side="left")]
84- <l:@L> <le:Expr> "*" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Times, b(re)),
85- <l:@L> <le:Expr> "/" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Div, b(re)),
86- <l:@L> <le:Expr> "%" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Mod, b(re)),
84+ <l:@L> <le:Expr> "*" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Times, b(re)),
85+ <l:@L> <le:Expr> "/" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Div, b(re)),
86+ <l:@L> <le:Expr> "%" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Mod, b(re)),
8787
8888 #[precedence(level="4")] #[assoc(side="left")]
89- <l:@L> <le:Expr> "+" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Plus, b(re)),
90- <l:@L> <le:Expr> "-" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Minus, b(re)),
89+ <l:@L> <le:Expr> "+" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Plus, b(re)),
90+ <l:@L> <le:Expr> "-" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Minus, b(re)),
9191
9292 #[precedence(level="5")] #[assoc(side="left")]
93- <l:@L> <le:Expr> "==" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Equals, b(re)),
94- <l:@L> <le:Expr> "!=" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), NotEquals, b(re)),
95- <l:@L> <le:Expr> "<" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), GT, b(re)),
96- <l:@L> <le:Expr> ">" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), LT, b(re)),
97- <l:@L> <le:Expr> "=~" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), RegexMatch, b(re)),
93+ <l:@L> <le:Expr> "==" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Equals, b(re)),
94+ <l:@L> <le:Expr> "!=" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), NotEquals, b(re)),
95+ <l:@L> <le:Expr> "<" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), GT, b(re)),
96+ <l:@L> <le:Expr> ">" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), LT, b(re)),
97+ <l:@L> <le:Expr> "=~" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), RegexMatch, b(re)),
9898
9999 #[precedence(level="6")] #[assoc(side="left")]
100- <l:@L> <le:Expr> "&&" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), And, b(re)),
101- <l:@L> <le:Expr> "||" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Or, b(re)),
102- <l:@L> <le:Expr> "?:" <re:Expr> <r:@R> => BinOp(Span(l, r), b(le), Elvis, b(re)),
100+ <l:@L> <le:Expr> "&&" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), And, b(re)),
101+ <l:@L> <le:Expr> "||" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Or, b(re)),
102+ <l:@L> <le:Expr> "?:" <re:Expr> <r:@R> => BinOp(Span(l, r, fid ), b(le), Elvis, b(re)),
103103
104104 #[precedence(level="7")] #[assoc(side="right")]
105105 <l:@L> <cond:Expr> "?" <then:ExprReset> ":" <els:Expr> <r:@R> => {
106- IfElse(Span(l, r), b(cond), b(then), b(els))
106+ IfElse(Span(l, r, fid ), b(cond), b(then), b(els))
107107 },
108108};
109109
110110ExprReset = <Expr>;
111111
112112Literal: SimplExpr = {
113- <l:@L> <x:StrLit> <r:@R> => SimplExpr::literal(Span(l, r), x),
114- <l:@L> <x:"number"> <r:@R> => SimplExpr::literal(Span(l, r), x),
115- <l:@L> "true" <r:@R> => SimplExpr::literal(Span(l, r), "true".into()),
116- <l:@L> "false" <r:@R> => SimplExpr::literal(Span(l, r), "false".into()),
113+ <l:@L> <x:StrLit> <r:@R> => SimplExpr::literal(Span(l, r, fid ), x),
114+ <l:@L> <x:"number"> <r:@R> => SimplExpr::literal(Span(l, r, fid ), x),
115+ <l:@L> "true" <r:@R> => SimplExpr::literal(Span(l, r, fid ), "true".into()),
116+ <l:@L> "false" <r:@R> => SimplExpr::literal(Span(l, r, fid ), "false".into()),
117117}
118118
119119StrLit: String = {
0 commit comments