Skip to content

Commit 5cfbb3d

Browse files
committed
Add attr res.syntaxSugar to Array.{get, set}
1 parent 5f5917e commit 5cfbb3d

File tree

9 files changed

+40
-23
lines changed

9 files changed

+40
-23
lines changed

compiler/syntax/src/res_core.ml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2041,6 +2041,9 @@ and parse_bracket_access p expr start_pos =
20412041
Parser.eat_breadcrumb p;
20422042
let rbracket = p.prev_end_pos in
20432043
let array_loc = mk_loc lbracket rbracket in
2044+
let attr =
2045+
(Location.mkloc "res.syntaxSugar" array_loc, Parsetree.PStr [])
2046+
in
20442047
match p.token with
20452048
| Equal ->
20462049
Parser.leave_breadcrumb p ExprArrayMutation;
@@ -2059,7 +2062,7 @@ and parse_bracket_access p expr start_pos =
20592062
let end_pos = p.prev_end_pos in
20602063
let array_set =
20612064
Ast_helper.Exp.apply ~loc:(mk_loc start_pos end_pos)
2062-
(Ast_helper.Exp.ident ~loc:array_loc array_set)
2065+
(Ast_helper.Exp.ident ~loc:array_loc array_set ~attrs:[attr])
20632066
[(Nolabel, expr); (Nolabel, access_expr); (Nolabel, rhs_expr)]
20642067
in
20652068
Parser.eat_breadcrumb p;
@@ -2068,7 +2071,7 @@ and parse_bracket_access p expr start_pos =
20682071
let end_pos = p.prev_end_pos in
20692072
let e =
20702073
Ast_helper.Exp.apply ~loc:(mk_loc start_pos end_pos)
2071-
(Ast_helper.Exp.ident ~loc:array_loc
2074+
(Ast_helper.Exp.ident ~loc:array_loc ~attrs:[attr]
20722075
(Location.mkloc (Longident.Ldot (Lident "Array", "get")) array_loc))
20732076
[(Nolabel, expr); (Nolabel, access_expr)]
20742077
in

tests/syntax_tests/data/parsing/errors/expressions/expected/array.res.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@
99
Did you forget a `]` here?
1010

1111
let xs =
12-
x.map ((Function$ (fun key -> [|key;(predicates.(key))|]))[@res.arity 1])
12+
x.map
13+
((Function$
14+
(fun key -> [|key;(((Array.get)[@res.syntaxSugar ]) predicates key)|]))
15+
[@res.arity 1])

tests/syntax_tests/data/parsing/grammar/expressions/expected/async.res.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ let async =
2020
() |.u async;
2121
async ();
2222
async.async;
23-
{ async = (async.(async)) };
23+
{ async = (((Array.get)[@res.syntaxSugar ]) async async) };
2424
(result |.u async) |.u
2525
(mapAsync ((Function$ (fun a -> doStuff a))[@res.arity 1])))
2626
[@res.braces ])

tests/syntax_tests/data/parsing/grammar/expressions/expected/await.res.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ let () =
99
((let response = ((fetch {js|/users.json|js})[@res.await ]) in
1010
let users = ((response.json ())[@res.await ]) in
1111
let comments =
12-
((((fetch {js|comment.json|js})[@res.await ]).json ())
13-
[@res.await ]).(0) in
12+
((Array.get)[@res.syntaxSugar ])
13+
((((fetch {js|comment.json|js})[@res.await ]).json ())[@res.await ])
14+
0 in
1415
Js.log2 users comments)
1516
[@res.braces ])
1617
let () = ((delay 10)[@res.braces ][@res.await ])

tests/syntax_tests/data/parsing/grammar/expressions/expected/binaryNoEs6Arrow.res.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,5 @@
3434
[@res.braces ])))
3535
[@res.namedArgLoc ][@res.braces ][@res.arity 1]) ~children:[] ())
3636
[@JSX ])
37-
;;if inclusions.(index) <- (uid, url) then onChange inclusions
37+
;;if ((Array.set)[@res.syntaxSugar ]) inclusions index (uid, url)
38+
then onChange inclusions

tests/syntax_tests/data/parsing/grammar/expressions/expected/bracedOrRecord.res.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ let e = ((a + b)[@res.braces ])
1212
let e = ((if a then true else false)[@res.braces ][@res.ternary ])
1313
let e = ((if computation a then true else false)
1414
[@res.braces ][@res.ternary ])
15-
let e = ((a.(0))[@res.braces ])
15+
let e = ((((Array.get)[@res.syntaxSugar ]) a 0)[@res.braces ])
1616
let e = ((f b)[@res.braces ])
1717
let e = (((a.b).c)[@res.braces ])
18-
let e = ((arr.(x) <- 20)[@res.braces ])
18+
let e = ((((Array.set)[@res.syntaxSugar ]) arr x 20)[@res.braces ])
1919
let e = ((Function$ (fun x -> doStuff config (x + 1)))
2020
[@res.braces ][@res.arity 1])
2121
let e = ((doStuff config ((Function$ (fun x -> x + 1))[@res.arity 1]))

tests/syntax_tests/data/parsing/grammar/expressions/expected/bsObject.res.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ let y = [%obj { age = 30; name = {js|steve|js} }]
66
let z =
77
[%obj { \xff = 1; \u2212 = {js|two|js}; \0 = zero; \o123 = {js|o123|js} }]
88
let x = (({js|age|js})[@res.braces ])
9-
let x = (({js|age|js}.(0))[@res.braces ])
9+
let x = ((((Array.get)[@res.syntaxSugar ]) {js|age|js} 0)[@res.braces ])
1010
let x = (({js|age|js} |.u Js.log)[@res.braces ])
1111
let x = ((if {js|age|js} then true else false)[@res.braces ][@res.ternary ])
1212
let x = (({js|age|js} |.u Js.log; (let foo = 1 in let bar = 2 in foo + bar))
@@ -16,5 +16,7 @@ let x =
1616
[@res.ternary ]);
1717
(let foo = 1 in let bar = 2 in foo + bar))
1818
[@res.braces ])
19-
let x = (({js|age|js}.(0); (let foo = 1 in let bar = 2 in foo + bar))
19+
let x =
20+
((((Array.get)[@res.syntaxSugar ]) {js|age|js} 0;
21+
(let foo = 1 in let bar = 2 in foo + bar))
2022
[@res.braces ])

tests/syntax_tests/data/parsing/grammar/expressions/expected/firstClassModule.res.txt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,37 +66,41 @@ let build_dispatch_table =
6666
[@res.arity 1])
6767
;;(module Three)
6868
;;((module Three) : (module X_int))
69-
;;(module Teenager).(0)
69+
;;((Array.get)[@res.syntaxSugar ]) (module Teenager) 0
7070
;;((module Teenager) |.u age) |.u Js.log
71-
;;((module Teenager).(0)) |.u Js.log
71+
;;(((Array.get)[@res.syntaxSugar ]) (module Teenager) 0) |.u Js.log
7272
;;((if ((module Teenager) |.u age) |.u isAdult
7373
then Js.log {js|has responsibilities|js}
7474
else Js.log {js|can play in the playground|js})[@res.ternary ])
75-
;;((if ((module Streets).(0)) |.u isExpensive
75+
;;((if (((Array.get)[@res.syntaxSugar ]) (module Streets) 0) |.u isExpensive
7676
then Js.log {js|big money|js}
7777
else Js.log {js|affordable|js})[@res.ternary ])
7878
let () = ((((module Teenager) |.u age) |.u Js.log)[@res.braces ])
79-
let () = (((module Teenager).(0))[@res.braces ])
79+
let () = ((((Array.get)[@res.syntaxSugar ]) (module Teenager) 0)
80+
[@res.braces ])
8081
let () =
8182
((if ((module Teenager) |.u age) |.u isAdult
8283
then Js.log {js|has responsibilities|js}
8384
else Js.log {js|can play in the playground|js})
8485
[@res.braces ][@res.ternary ])
8586
let () =
86-
((if ((module Streets).(0)) |.u isExpensive
87+
((if (((Array.get)[@res.syntaxSugar ]) (module Streets) 0) |.u isExpensive
8788
then Js.log {js|big money|js}
8889
else Js.log {js|affordable|js})
8990
[@res.braces ][@res.ternary ])
9091
let () =
9192
((let a = 1 in
9293
let b = 2 in
93-
(module Teenager).(0); ((module Teenager) |.u age) |.u Js.log)
94+
((Array.get)[@res.syntaxSugar ]) (module Teenager) 0;
95+
((module Teenager) |.u age) |.u Js.log)
9496
[@res.braces ])
9597
let () =
9698
((let a = 1 in
9799
let b = 2 in
98100
((module Teenager) |.u age) |.u Js.log;
99-
((if (((module Teenager).(0)) |.u age) |.u isAdult
101+
((if
102+
((((Array.get)[@res.syntaxSugar ]) (module Teenager) 0) |.u age) |.u
103+
isAdult
100104
then Js.log {js|has responsibilities|js}
101105
else Js.log {js|can play in the playground|js})
102106
[@res.ternary ]))

tests/syntax_tests/data/parsing/grammar/expressions/expected/primary.res.txt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ let x = p.Parser.token
55
let x = (p.Lang.Parser.token).pos
66
;;lexbuf.lnum <- (lexbuf.lnum + 1)
77
;;(parser.lexbuf).lnum <- ((parser.lexbuf).lnum + 1)
8-
let x = arr.(0)
9-
let x = arr.((x : int))
10-
let x = (arr.(0)).(1)
11-
let x = (arr.((x : int))).((y : int))
12-
;;arr.(0) <- (a + b)
8+
let x = ((Array.get)[@res.syntaxSugar ]) arr 0
9+
let x = ((Array.get)[@res.syntaxSugar ]) arr (x : int)
10+
let x =
11+
((Array.get)[@res.syntaxSugar ]) (((Array.get)[@res.syntaxSugar ]) arr 0) 1
12+
let x =
13+
((Array.get)[@res.syntaxSugar ])
14+
(((Array.get)[@res.syntaxSugar ]) arr (x : int)) (y : int)
15+
;;((Array.set)[@res.syntaxSugar ]) arr 0 (a + b)
1316
;;f ()
1417
;;(f ()) ()
1518
;;f a

0 commit comments

Comments
 (0)