Skip to content

Commit f5a25e5

Browse files
authored
Merge pull request #2798 from BuckleScript/no_paren_first
fix #2582
2 parents 4e5ff67 + 66c8dfb commit f5a25e5

File tree

7 files changed

+168
-107
lines changed

7 files changed

+168
-107
lines changed

jscomp/bin/all_ounit_tests.ml

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -14977,9 +14977,11 @@ module Ast_utf8_string_interp : sig
1497714977
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *)
1497814978

1497914979

14980-
type kind =
14980+
14981+
type kind =
1498114982
| String
14982-
| Var
14983+
| Var of int * int (* int records its border length *)
14984+
1498314985
type error = private
1498414986
| Invalid_code_point
1498514987
| Unterminated_backslash
@@ -15054,10 +15056,14 @@ type error =
1505415056
| Unterminated_variable
1505515057
| Unmatched_paren
1505615058
| Invalid_syntax_of_var of string
15059+
1505715060
type kind =
1505815061
| String
15059-
| Var
15060-
15062+
| Var of int * int
15063+
(* [Var (loffset, roffset)]
15064+
For parens it used to be (2,-1)
15065+
for non-parens it used to be (1,0)
15066+
*)
1506115067

1506215068
(** Note the position is about code point *)
1506315069
type pos = {
@@ -15176,7 +15182,7 @@ let pos_error cxt ~loc error =
1517615182
(cxt.segment_start,
1517715183
{ lnum = cxt.pos_lnum ; offset = loc - cxt.pos_bol ; byte_bol = cxt.byte_bol}, error))
1517815184

15179-
let add_var_segment cxt loc =
15185+
let add_var_segment cxt loc loffset roffset =
1518015186
let content = Buffer.contents cxt.buf in
1518115187
Buffer.clear cxt.buf ;
1518215188
let next_loc = {
@@ -15187,7 +15193,7 @@ let add_var_segment cxt loc =
1518715193
cxt.segments <-
1518815194
{ start = cxt.segment_start;
1518915195
finish = next_loc ;
15190-
kind = Var;
15196+
kind = Var (loffset, roffset);
1519115197
content} :: cxt.segments ;
1519215198
cxt.segment_start <- next_loc
1519315199
end
@@ -15280,7 +15286,7 @@ and expect_simple_var loc s offset ({buf; s_len} as cxt) =
1528015286
done;
1528115287
let added_length = !v - offset in
1528215288
let loc = added_length + loc in
15283-
add_var_segment cxt loc ;
15289+
add_var_segment cxt loc 1 0 ;
1528415290
check_and_transform loc s (added_length + offset) cxt
1528515291
end
1528615292
and expect_var_paren loc s offset ({buf; s_len} as cxt) =
@@ -15295,7 +15301,7 @@ and expect_var_paren loc s offset ({buf; s_len} as cxt) =
1529515301
let loc = added_length + 1 + loc in
1529615302
if !v < s_len && s.[!v] = ')' then
1529715303
begin
15298-
add_var_segment cxt loc ;
15304+
add_var_segment cxt loc 2 (-1) ;
1529915305
check_and_transform loc s (added_length + 1 + offset) cxt
1530015306
end
1530115307
else
@@ -15394,7 +15400,7 @@ open Ast_helper
1539415400

1539515401
(** Longident.parse "Pervasives.^" *)
1539615402
let concat_ident : Longident.t =
15397-
Ldot (Lident "Pervasives", "^")
15403+
Ldot (Lident "Pervasives", "^") (* FIXME: remove deps on `Pervasives` *)
1539815404
(* JS string concatMany *)
1539915405
(* Ldot (Ldot (Lident "Js", "String"), "concat") *)
1540015406

@@ -15420,14 +15426,19 @@ let border = String.length "{j|"
1542015426
let aux loc (segment : segment) =
1542115427
match segment with
1542215428
| {start ; finish; kind ; content}
15423-
->
15424-
let loc = update border start finish loc in
15429+
->
1542515430
begin match kind with
15426-
| String ->
15431+
| String ->
15432+
let loc = update border start finish loc in
1542715433
Exp.constant
1542815434
~loc
1542915435
(Const_string (content, escaped))
15430-
| Var ->
15436+
| Var (soffset, foffset) ->
15437+
let loc = {
15438+
loc with
15439+
loc_start = update_position (soffset + border) start loc.loc_start ;
15440+
loc_end = update_position (foffset + border) finish loc.loc_start
15441+
} in
1543115442
Exp.apply ~loc
1543215443
(Exp.ident ~loc {loc ; txt = to_string_ident })
1543315444
[
@@ -15505,6 +15516,9 @@ let (==*) a b =
1550515516
)
1550615517
in
1550715518
OUnit.assert_equal segments b
15519+
15520+
let varParen : Ast_utf8_string_interp.kind = Var (2,-1)
15521+
let var : Ast_utf8_string_interp.kind = Var (1,0)
1550815522
let suites =
1550915523
__FILE__
1551015524
>:::
@@ -15551,7 +15565,7 @@ let suites =
1555115565
"hie $x hi 你好" ==~
1555215566
[
1555315567
0,4, String, "hie ";
15554-
4,6, Var, "x";
15568+
4,6, var, "x";
1555515569
6,12,String, " hi 你好"
1555615570
]
1555715571
end;
@@ -15571,7 +15585,7 @@ let suites =
1557115585
__LOC__ >:: begin fun _ ->
1557215586
"你好$x" ==~
1557315587
[0,2,String, "你好";
15574-
2,4,Var, "x";
15588+
2,4,var, "x";
1557515589

1557615590
]
1557715591
end
@@ -15580,47 +15594,47 @@ let suites =
1558015594
"你好$this" ==~
1558115595
[
1558215596
0,2,String, "你好";
15583-
2,7,Var, "this";
15597+
2,7,var, "this";
1558415598
]
1558515599
end
1558615600
;
1558715601
__LOC__ >:: begin fun _ ->
1558815602
"你好$(this)" ==~
1558915603
[
1559015604
0,2,String, "你好";
15591-
2,9,Var, "this"
15605+
2,9,varParen, "this"
1559215606
];
1559315607

1559415608
"你好$this)" ==~
1559515609
[
1559615610
0,2,String, "你好";
15597-
2,7,Var, "this";
15611+
2,7,var, "this";
1559815612
7,8,String,")"
1559915613
];
1560015614
{|\xff\xff你好 $x |} ==~
1560115615
[
1560215616
0,11,String, {|\xff\xff你好 |};
15603-
11,13, Var, "x";
15617+
11,13, var, "x";
1560415618
13,14, String, " "
1560515619
];
1560615620
{|\xff\xff你好 $x 不吃亏了buckle $y $z = $sum|}
1560715621
==~
1560815622
[(0, 11, String,{|\xff\xff你好 |} );
15609-
(11, 13, Var, "x");
15623+
(11, 13, var, "x");
1561015624
(13, 25, String,{| 不吃亏了buckle |} );
15611-
(25, 27, Var, "y");
15625+
(25, 27, var, "y");
1561215626
(27, 28, String, " ");
15613-
(28, 30, Var, "z");
15627+
(28, 30, var, "z");
1561415628
(30, 33, String, " = ");
15615-
(33, 37, Var, "sum");
15629+
(33, 37, var, "sum");
1561615630
]
1561715631
end
1561815632
;
1561915633
__LOC__ >:: begin fun _ ->
1562015634
"你好 $(this_is_a_var) x" ==~
1562115635
[
1562215636
0,3,String, "你好 ";
15623-
3,19,Var, "this_is_a_var";
15637+
3,19,varParen, "this_is_a_var";
1562415638
19,22, String, " x"
1562515639
]
1562615640
end
@@ -15630,17 +15644,17 @@ let suites =
1563015644
"hi\n$x\n" ==*
1563115645
[
1563215646
0,0,1,0,String, "hi\\n";
15633-
1,0,1,2,Var, "x" ;
15647+
1,0,1,2,var, "x" ;
1563415648
1,2,2,0,String,"\\n"
1563515649
];
1563615650
"$x" ==*
15637-
[0,0,0,2,Var,"x"];
15651+
[0,0,0,2,var,"x"];
1563815652

1563915653

1564015654
"\n$x\n" ==*
1564115655
[
1564215656
0,0,1,0,String,"\\n";
15643-
1,0,1,2,Var,"x";
15657+
1,0,1,2,var,"x";
1564415658
1,2,2,0,String,"\\n"
1564515659
]
1564615660
end;
@@ -15649,27 +15663,27 @@ let suites =
1564915663
"\n$(x_this_is_cool) " ==*
1565015664
[
1565115665
0,0,1,0,String, "\\n";
15652-
1,0,1,17,Var, "x_this_is_cool";
15666+
1,0,1,17,varParen, "x_this_is_cool";
1565315667
1,17,1,18,String, " "
1565415668
]
1565515669
end;
1565615670
__LOC__ >:: begin fun _ ->
1565715671
" $x + $y = $sum " ==*
1565815672
[
1565915673
0,0,0,1,String , " ";
15660-
0,1,0,3,Var, "x";
15674+
0,1,0,3,var, "x";
1566115675
0,3,0,6,String, " + ";
15662-
0,6,0,8,Var, "y";
15676+
0,6,0,8,var, "y";
1566315677
0,8,0,11,String, " = ";
15664-
0,11,0,15,Var, "sum";
15678+
0,11,0,15,var, "sum";
1566515679
0,15,0,16,String, " "
1566615680
]
1566715681
end;
1566815682
__LOC__ >:: begin fun _ ->
1566915683
"中文 | $a " ==*
1567015684
[
1567115685
0,0,0,5,String, "中文 | ";
15672-
0,5,0,7,Var, "a";
15686+
0,5,0,7,var, "a";
1567315687
0,7,0,8,String, " "
1567415688
]
1567515689
end
@@ -15678,14 +15692,14 @@ let suites =
1567815692
{|Hello \\$world|} ==*
1567915693
[
1568015694
0,0,0,8,String,"Hello \\\\";
15681-
0,8,0,14,Var, "world"
15695+
0,8,0,14,var, "world"
1568215696
]
1568315697
end
1568415698
;
1568515699
__LOC__ >:: begin fun _ ->
1568615700
{|$x)|} ==*
1568715701
[
15688-
0,0,0,2,Var,"x";
15702+
0,0,0,2,var,"x";
1568915703
0,2,0,3,String,")"
1569015704
]
1569115705
end;

0 commit comments

Comments
 (0)