Skip to content

Commit

Permalink
fix(compiler): Fix binop operator reported location (grain-lang#1018)
Browse files Browse the repository at this point in the history
  • Loading branch information
ospencer authored Nov 5, 2021
1 parent 003cb1e commit 422dbcb
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 24 deletions.
44 changes: 22 additions & 22 deletions compiler/src/parsing/parser.dyp
Original file line number Diff line number Diff line change
Expand Up @@ -129,28 +129,28 @@ expr :
| binop_expr

binop_expr :
| binop_expr(<=p110) plus_op eols? binop_expr(<p110) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p110
| binop_expr(<=p110) dash_op eols? binop_expr(<p110) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p110
| binop_expr(<=p120) star_op eols? binop_expr(<p120) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p120
| binop_expr(<=p120) slash_op eols? binop_expr(<p120) { no_rational_literal $1 $4; Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p120
| binop_expr(<=p120) percent_op eols? binop_expr(<p120) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p120
| binop_expr(<=p80) is_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p80
| binop_expr(<=p80) isnt_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p80
| binop_expr(<=p80) eqeq_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p80
| binop_expr(<=p80) noteq_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p80
| binop_expr(<=p60) caret_op eols? binop_expr(<p60) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p60
| binop_expr(<=p90) lcaret_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p90
| binop_expr(<=p100) llcaret_op eols? binop_expr(<p100) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p100
| binop_expr(<=p90) rcaret_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p90
| binop_expr(<=p100) rrcaret_op eols? binop_expr(<p100) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p100
| binop_expr(<=p90) rrrcaret_op eols? binop_expr(<p100) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p100
| binop_expr(<=p90) lesseq_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p90
| binop_expr(<=p90) greatereq_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p90
| binop_expr(<=p70) amp_op eols? binop_expr(<p70) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p70
| binop_expr(<=p40) ampamp_op eols? binop_expr(<p40) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p40
| binop_expr(<=p50) pipe_op eols? binop_expr(<p50) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p50
| binop_expr(<=p30) pipepipe_op eols? binop_expr(<p30) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p30
| binop_expr(<=p110) plusplus_op eols? binop_expr(<p110) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr dyp [$2]) [$1; $4] } p110
| binop_expr(<=p110) plus_op eols? binop_expr(<p110) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p110
| binop_expr(<=p110) dash_op eols? binop_expr(<p110) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p110
| binop_expr(<=p120) star_op eols? binop_expr(<p120) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p120
| binop_expr(<=p120) slash_op eols? binop_expr(<p120) { no_rational_literal $1 $4; Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p120
| binop_expr(<=p120) percent_op eols? binop_expr(<p120) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p120
| binop_expr(<=p80) is_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p80
| binop_expr(<=p80) isnt_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p80
| binop_expr(<=p80) eqeq_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p80
| binop_expr(<=p80) noteq_op eols? binop_expr(<p80) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p80
| binop_expr(<=p60) caret_op eols? binop_expr(<p60) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p60
| binop_expr(<=p90) lcaret_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p90
| binop_expr(<=p100) llcaret_op eols? binop_expr(<p100) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p100
| binop_expr(<=p90) rcaret_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p90
| binop_expr(<=p100) rrcaret_op eols? binop_expr(<p100) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p100
| binop_expr(<=p90) rrrcaret_op eols? binop_expr(<p100) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p100
| binop_expr(<=p90) lesseq_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p90
| binop_expr(<=p90) greatereq_op eols? binop_expr(<p90) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p90
| binop_expr(<=p70) amp_op eols? binop_expr(<p70) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p70
| binop_expr(<=p40) ampamp_op eols? binop_expr(<p40) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p40
| binop_expr(<=p50) pipe_op eols? binop_expr(<p50) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p50
| binop_expr(<=p30) pipepipe_op eols? binop_expr(<p30) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p30
| binop_expr(<=p110) plusplus_op eols? binop_expr(<p110) { Exp.apply ~loc:(symbol_rloc dyp) (mkid_expr ~loc:(rhs_loc dyp 2) dyp [$2]) [$1; $4] } p110
| binop_expr colon typ { Exp.constraint_ ~loc:(symbol_rloc dyp) $1 $3 } p140
| lam_expr { $1 } p0
| non_assign_expr { $1 } p140
Expand Down
6 changes: 4 additions & 2 deletions compiler/src/parsing/parser_header.re
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,10 @@ let mkid = ns => {
mkloc @@ help(ns);
};

let mkid_expr = (dyp, ns) =>
Exp.ident(~loc=symbol_rloc(dyp), mkid(ns, symbol_rloc(dyp)));
let mkid_expr = (~loc=?, dyp, ns) => {
let loc = Option.value(~default=symbol_rloc(dyp), loc);
Exp.ident(~loc, mkid(ns, loc));
};

let mkstr = (dyp, s) => mkloc(s, symbol_rloc(dyp));

Expand Down

0 comments on commit 422dbcb

Please sign in to comment.