@@ -4,7 +4,7 @@ use crate::parser::lalrpop_helpers::*;
4
4
use lalrpop_util::ParseError;
5
5
6
6
7
- grammar;
7
+ grammar(fid: usize) ;
8
8
9
9
extern {
10
10
type Location = usize;
@@ -66,54 +66,54 @@ pub Expr: SimplExpr = {
66
66
},
67
67
68
68
<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()),
70
70
"(" <ExprReset> ")",
71
71
72
72
#[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)),
75
75
76
76
<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())))
78
78
},
79
79
80
80
#[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)),
82
82
83
83
#[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)),
87
87
88
88
#[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)),
91
91
92
92
#[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)),
98
98
99
99
#[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)),
103
103
104
104
#[precedence(level="7")] #[assoc(side="right")]
105
105
<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))
107
107
},
108
108
};
109
109
110
110
ExprReset = <Expr>;
111
111
112
112
Literal: 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()),
117
117
}
118
118
119
119
StrLit: String = {
0 commit comments