Skip to content

Commit e944125

Browse files
committed
Using safer and more efficient APIs
1 parent 86413f3 commit e944125

16 files changed

+334
-87
lines changed

jscomp/ext/ext_filename.ml

+25
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,17 @@ let chop_extension_maybe name =
5656
else search_dot (i - 1) in
5757
search_dot (String.length name - 1)
5858

59+
let chop_all_extensions_maybe name =
60+
let rec search_dot i last =
61+
if i < 0 || is_dir_sep (String.unsafe_get name i) then
62+
(match last with
63+
| None -> name
64+
| Some i -> String.sub name 0 i)
65+
else if String.unsafe_get name i = '.' then
66+
search_dot (i - 1) (Some i)
67+
else search_dot (i - 1) last in
68+
search_dot (String.length name - 1) None
69+
5970

6071
let new_extension name (ext : string) =
6172
let rec search_dot name i ext =
@@ -70,3 +81,17 @@ let new_extension name (ext : string) =
7081
else search_dot name (i - 1) ext in
7182
search_dot name (String.length name - 1) ext
7283

84+
85+
let generic_basename name =
86+
let rec find_end n =
87+
if n < 0 then String.sub name 0 1
88+
else if is_dir_sep name.[n] then find_end (n - 1)
89+
else find_beg n (n + 1)
90+
and find_beg n p =
91+
if n < 0 then String.sub name 0 p
92+
else if is_dir_sep name.[n] then String.sub name (n + 1) (p - n - 1)
93+
else find_beg (n - 1) p
94+
in
95+
if name = ""
96+
then "."
97+
else find_end (String.length name - 1)

jscomp/ext/ext_filename.mli

+5-1
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,8 @@ val chop_extension_maybe:
5151
val new_extension:
5252
string ->
5353
string ->
54-
string
54+
string
55+
56+
val chop_all_extensions_maybe:
57+
string ->
58+
string

jscomp/ext/ext_path.ml

+1-4
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,7 @@ let combine path1 path2 =
132132

133133

134134

135-
let rec chop_all_extensions_if_any fname =
136-
match Filename.chop_extension fname with
137-
| x -> chop_all_extensions_if_any x
138-
| exception _ -> fname
135+
139136

140137
let get_extension x =
141138
let pos = Ext_string.rindex_neg x '.' in

jscomp/ext/ext_path.mli

-7
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,6 @@ val combine :
4848

4949

5050

51-
52-
53-
54-
55-
val chop_all_extensions_if_any :
56-
string -> string
57-
5851
(**
5952
{[
6053
get_extension "a.txt" = ".txt"

jscomp/jsgen_main.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ let get_files dir =
2929
|> Ext_array.filter_map
3030
(fun x ->
3131
if Ext_path.check_suffix_case x ".js" then
32-
let y = Ext_path.chop_all_extensions_if_any x in
32+
let y = Ext_filename.chop_all_extensions_maybe x in
3333
if y <> "unix" &&
3434
y <> "bigarray" &&
3535
y <> "std_exit" &&

jscomp/ounit_tests/ounit_string_tests.ml

+8-4
Original file line numberDiff line numberDiff line change
@@ -405,10 +405,10 @@ let suites =
405405
end;
406406
__LOC__ >:: begin fun _ ->
407407
let (=~) = OUnit.assert_equal ~printer:printer_string in
408-
Ext_path.chop_all_extensions_if_any "a.bs.js" =~ "a" ;
409-
Ext_path.chop_all_extensions_if_any "a.js" =~ "a";
410-
Ext_path.chop_all_extensions_if_any "a" =~ "a";
411-
Ext_path.chop_all_extensions_if_any "a.x.bs.js" =~ "a"
408+
Ext_filename.chop_all_extensions_maybe "a.bs.js" =~ "a" ;
409+
Ext_filename.chop_all_extensions_maybe "a.js" =~ "a";
410+
Ext_filename.chop_all_extensions_maybe "a" =~ "a";
411+
Ext_filename.chop_all_extensions_maybe "a.x.bs.js" =~ "a"
412412
end;
413413
(* let (=~) = OUnit.assert_equal ~printer:(fun x -> x) in *)
414414
__LOC__ >:: begin fun _ ->
@@ -462,6 +462,10 @@ let suites =
462462
string_eq (Ext_filename.new_extension ".c" ".xx") ".xx";
463463
string_eq (Ext_filename.new_extension "a/b" ".xx") "a/b.xx";
464464
string_eq (Ext_filename.new_extension "a/b." ".xx") "a/b.xx";
465+
string_eq (Ext_filename.chop_all_extensions_maybe "a.b.x") "a";
466+
string_eq (Ext_filename.chop_all_extensions_maybe "a.b") "a";
467+
string_eq (Ext_filename.chop_all_extensions_maybe ".a.b.x") "";
468+
string_eq (Ext_filename.chop_all_extensions_maybe "abx") "abx";
465469
end;
466470
]
467471

lib/4.02.3/bsb.ml

+29-11
Original file line numberDiff line numberDiff line change
@@ -6060,13 +6060,6 @@ val combine :
60606060

60616061

60626062

6063-
6064-
6065-
6066-
6067-
val chop_all_extensions_if_any :
6068-
string -> string
6069-
60706063
(**
60716064
{[
60726065
get_extension "a.txt" = ".txt"
@@ -6254,10 +6247,7 @@ let combine path1 path2 =
62546247

62556248

62566249

6257-
let rec chop_all_extensions_if_any fname =
6258-
match Filename.chop_extension fname with
6259-
| x -> chop_all_extensions_if_any x
6260-
| exception _ -> fname
6250+
62616251

62626252
let get_extension x =
62636253
let pos = Ext_string.rindex_neg x '.' in
@@ -7325,6 +7315,10 @@ val new_extension:
73257315
string ->
73267316
string ->
73277317
string
7318+
7319+
val chop_all_extensions_maybe:
7320+
string ->
7321+
string
73287322
end = struct
73297323
#1 "ext_filename.ml"
73307324
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -7385,6 +7379,17 @@ let chop_extension_maybe name =
73857379
else search_dot (i - 1) in
73867380
search_dot (String.length name - 1)
73877381

7382+
let chop_all_extensions_maybe name =
7383+
let rec search_dot i last =
7384+
if i < 0 || is_dir_sep (String.unsafe_get name i) then
7385+
(match last with
7386+
| None -> name
7387+
| Some i -> String.sub name 0 i)
7388+
else if String.unsafe_get name i = '.' then
7389+
search_dot (i - 1) (Some i)
7390+
else search_dot (i - 1) last in
7391+
search_dot (String.length name - 1) None
7392+
73887393

73897394
let new_extension name (ext : string) =
73907395
let rec search_dot name i ext =
@@ -7400,6 +7405,19 @@ let new_extension name (ext : string) =
74007405
search_dot name (String.length name - 1) ext
74017406

74027407

7408+
let generic_basename name =
7409+
let rec find_end n =
7410+
if n < 0 then String.sub name 0 1
7411+
else if is_dir_sep name.[n] then find_end (n - 1)
7412+
else find_beg n (n + 1)
7413+
and find_beg n p =
7414+
if n < 0 then String.sub name 0 p
7415+
else if is_dir_sep name.[n] then String.sub name (n + 1) (p - n - 1)
7416+
else find_beg (n - 1) p
7417+
in
7418+
if name = ""
7419+
then "."
7420+
else find_end (String.length name - 1)
74037421
end
74047422
module Ext_modulename : sig
74057423
#1 "ext_modulename.mli"

lib/4.02.3/bsb_helper.ml

+28
Original file line numberDiff line numberDiff line change
@@ -4294,6 +4294,10 @@ val new_extension:
42944294
string ->
42954295
string ->
42964296
string
4297+
4298+
val chop_all_extensions_maybe:
4299+
string ->
4300+
string
42974301
end = struct
42984302
#1 "ext_filename.ml"
42994303
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -4354,6 +4358,17 @@ let chop_extension_maybe name =
43544358
else search_dot (i - 1) in
43554359
search_dot (String.length name - 1)
43564360

4361+
let chop_all_extensions_maybe name =
4362+
let rec search_dot i last =
4363+
if i < 0 || is_dir_sep (String.unsafe_get name i) then
4364+
(match last with
4365+
| None -> name
4366+
| Some i -> String.sub name 0 i)
4367+
else if String.unsafe_get name i = '.' then
4368+
search_dot (i - 1) (Some i)
4369+
else search_dot (i - 1) last in
4370+
search_dot (String.length name - 1) None
4371+
43574372

43584373
let new_extension name (ext : string) =
43594374
let rec search_dot name i ext =
@@ -4369,6 +4384,19 @@ let new_extension name (ext : string) =
43694384
search_dot name (String.length name - 1) ext
43704385

43714386

4387+
let generic_basename name =
4388+
let rec find_end n =
4389+
if n < 0 then String.sub name 0 1
4390+
else if is_dir_sep name.[n] then find_end (n - 1)
4391+
else find_beg n (n + 1)
4392+
and find_beg n p =
4393+
if n < 0 then String.sub name 0 p
4394+
else if is_dir_sep name.[n] then String.sub name (n + 1) (p - n - 1)
4395+
else find_beg (n - 1) p
4396+
in
4397+
if name = ""
4398+
then "."
4399+
else find_end (String.length name - 1)
43724400
end
43734401
module Ext_namespace : sig
43744402
#1 "ext_namespace.mli"

lib/4.02.3/bsdep.ml

+28
Original file line numberDiff line numberDiff line change
@@ -33794,6 +33794,10 @@ val new_extension:
3379433794
string ->
3379533795
string ->
3379633796
string
33797+
33798+
val chop_all_extensions_maybe:
33799+
string ->
33800+
string
3379733801
end = struct
3379833802
#1 "ext_filename.ml"
3379933803
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -33854,6 +33858,17 @@ let chop_extension_maybe name =
3385433858
else search_dot (i - 1) in
3385533859
search_dot (String.length name - 1)
3385633860

33861+
let chop_all_extensions_maybe name =
33862+
let rec search_dot i last =
33863+
if i < 0 || is_dir_sep (String.unsafe_get name i) then
33864+
(match last with
33865+
| None -> name
33866+
| Some i -> String.sub name 0 i)
33867+
else if String.unsafe_get name i = '.' then
33868+
search_dot (i - 1) (Some i)
33869+
else search_dot (i - 1) last in
33870+
search_dot (String.length name - 1) None
33871+
3385733872

3385833873
let new_extension name (ext : string) =
3385933874
let rec search_dot name i ext =
@@ -33869,6 +33884,19 @@ let new_extension name (ext : string) =
3386933884
search_dot name (String.length name - 1) ext
3387033885

3387133886

33887+
let generic_basename name =
33888+
let rec find_end n =
33889+
if n < 0 then String.sub name 0 1
33890+
else if is_dir_sep name.[n] then find_end (n - 1)
33891+
else find_beg n (n + 1)
33892+
and find_beg n p =
33893+
if n < 0 then String.sub name 0 p
33894+
else if is_dir_sep name.[n] then String.sub name (n + 1) (p - n - 1)
33895+
else find_beg (n - 1) p
33896+
in
33897+
if name = ""
33898+
then "."
33899+
else find_end (String.length name - 1)
3387233900
end
3387333901
module Ext_option : sig
3387433902
#1 "ext_option.mli"

lib/4.02.3/bsppx.ml

+28
Original file line numberDiff line numberDiff line change
@@ -15847,6 +15847,10 @@ val new_extension:
1584715847
string ->
1584815848
string ->
1584915849
string
15850+
15851+
val chop_all_extensions_maybe:
15852+
string ->
15853+
string
1585015854
end = struct
1585115855
#1 "ext_filename.ml"
1585215856
(* Copyright (C) 2015-2016 Bloomberg Finance L.P.
@@ -15907,6 +15911,17 @@ let chop_extension_maybe name =
1590715911
else search_dot (i - 1) in
1590815912
search_dot (String.length name - 1)
1590915913

15914+
let chop_all_extensions_maybe name =
15915+
let rec search_dot i last =
15916+
if i < 0 || is_dir_sep (String.unsafe_get name i) then
15917+
(match last with
15918+
| None -> name
15919+
| Some i -> String.sub name 0 i)
15920+
else if String.unsafe_get name i = '.' then
15921+
search_dot (i - 1) (Some i)
15922+
else search_dot (i - 1) last in
15923+
search_dot (String.length name - 1) None
15924+
1591015925

1591115926
let new_extension name (ext : string) =
1591215927
let rec search_dot name i ext =
@@ -15922,6 +15937,19 @@ let new_extension name (ext : string) =
1592215937
search_dot name (String.length name - 1) ext
1592315938

1592415939

15940+
let generic_basename name =
15941+
let rec find_end n =
15942+
if n < 0 then String.sub name 0 1
15943+
else if is_dir_sep name.[n] then find_end (n - 1)
15944+
else find_beg n (n + 1)
15945+
and find_beg n p =
15946+
if n < 0 then String.sub name 0 p
15947+
else if is_dir_sep name.[n] then String.sub name (n + 1) (p - n - 1)
15948+
else find_beg (n - 1) p
15949+
in
15950+
if name = ""
15951+
then "."
15952+
else find_end (String.length name - 1)
1592515953
end
1592615954
module Bs_version : sig
1592715955
#1 "bs_version.mli"

0 commit comments

Comments
 (0)