Skip to content

Commit 07f4ecd

Browse files
committed
devkit_ragel: specific exceptions instead of Invalid_argument
1 parent ce9ec56 commit 07f4ecd

File tree

2 files changed

+72
-64
lines changed

2 files changed

+72
-64
lines changed

devkit_ragel.ml

Lines changed: 64 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -74,23 +74,25 @@ exception Goto_eof_trans_ipv4
7474
# 7 "devkit_ragel.ml.rl"
7575

7676

77+
exception Parse_ipv4 of string
78+
7779
let parse_ipv4 data =
7880
let cs = ref 0 and p = ref 0 and pe = ref (String.length data) and eof = ref (String.length data) in
7981
let n = ref 0 in
8082
let ip = ref 0l in
8183
let set () =
82-
if !n > 255 then invalid_arg "parse_ipv4";
84+
if !n > 255 then raise (Parse_ipv4 data);
8385
ip := Int32.logor (Int32.shift_left !ip 8) (Int32.of_int !n)
8486
in
8587

86-
# 87 "devkit_ragel.ml"
88+
# 89 "devkit_ragel.ml"
8789
begin
8890
cs.contents <- ipv4_start;
8991
end;
9092

91-
# 18 "devkit_ragel.ml.rl"
93+
# 20 "devkit_ragel.ml.rl"
9294

93-
# 94 "devkit_ragel.ml"
95+
# 96 "devkit_ragel.ml"
9496
begin
9597
let state = { keys = 0; trans = 0; } in
9698
let rec do_start () =
@@ -143,7 +145,7 @@ and do_eof_trans () =
143145
# 4 "devkit_ragel.ml.rl"
144146
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
145147
()
146-
# 147 "devkit_ragel.ml"
148+
# 149 "devkit_ragel.ml"
147149
| _ -> ()
148150
with Goto_again_ipv4 -> () end;
149151

@@ -164,7 +166,7 @@ and do_test_eof () =
164166
# 5 "devkit_ragel.ml.rl"
165167
begin set () end;
166168
()
167-
# 168 "devkit_ragel.ml"
169+
# 170 "devkit_ragel.ml"
168170
| _ -> ()
169171
end
170172
with Goto_again_ipv4 -> do_again ()
@@ -174,23 +176,23 @@ and do_test_eof () =
174176
in do_start ()
175177
end;
176178

177-
# 19 "devkit_ragel.ml.rl"
178-
if !cs >= ipv4_first_final then !ip else invalid_arg "parse_ipv4"
179+
# 21 "devkit_ragel.ml.rl"
180+
if !cs >= ipv4_first_final then !ip else raise (Parse_ipv4 data)
179181

180182
let is_ipv4_slow data =
181183
let cs = ref 0 and p = ref 0 and pe = ref (String.length data) and eof = ref (String.length data) in
182184
let n = ref 0 in
183185
let set () = if !n > 255 then raise Not_found in
184186

185-
# 186 "devkit_ragel.ml"
187+
# 188 "devkit_ragel.ml"
186188
begin
187189
cs.contents <- ipv4_start;
188190
end;
189191

190-
# 26 "devkit_ragel.ml.rl"
192+
# 28 "devkit_ragel.ml.rl"
191193
try
192194

193-
# 194 "devkit_ragel.ml"
195+
# 196 "devkit_ragel.ml"
194196
begin
195197
let state = { keys = 0; trans = 0; } in
196198
let rec do_start () =
@@ -243,7 +245,7 @@ and do_eof_trans () =
243245
# 4 "devkit_ragel.ml.rl"
244246
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
245247
()
246-
# 247 "devkit_ragel.ml"
248+
# 249 "devkit_ragel.ml"
247249
| _ -> ()
248250
with Goto_again_ipv4 -> () end;
249251

@@ -264,7 +266,7 @@ and do_test_eof () =
264266
# 5 "devkit_ragel.ml.rl"
265267
begin set () end;
266268
()
267-
# 268 "devkit_ragel.ml"
269+
# 270 "devkit_ragel.ml"
268270
| _ -> ()
269271
end
270272
with Goto_again_ipv4 -> do_again ()
@@ -274,12 +276,12 @@ and do_test_eof () =
274276
in do_start ()
275277
end;
276278

277-
# 28 "devkit_ragel.ml.rl"
279+
# 30 "devkit_ragel.ml.rl"
278280
!cs >= ipv4_first_final
279281
with Not_found -> false
280282

281283

282-
# 283 "devkit_ragel.ml"
284+
# 285 "devkit_ragel.ml"
283285
let _is_ipv4_trans_keys : int array = Array.concat [ [|
284286
0; 0; 48; 57; 46; 57; 48; 57; 46; 57; 48; 57; 46; 57; 48; 57;
285287
46; 57; 46; 46; 46; 57; 46; 53; 46; 57; 46; 46; 46; 57; 46; 53;
@@ -351,20 +353,20 @@ exception Goto_match_is_ipv4
351353
exception Goto_again_is_ipv4
352354
exception Goto_eof_trans_is_ipv4
353355

354-
# 36 "devkit_ragel.ml.rl"
356+
# 38 "devkit_ragel.ml.rl"
355357

356358

357359
let is_ipv4 data =
358360
let cs = ref 0 and p = ref 0 and pe = ref (String.length data) in
359361

360-
# 361 "devkit_ragel.ml"
362+
# 363 "devkit_ragel.ml"
361363
begin
362364
cs.contents <- is_ipv4_start;
363365
end;
364366

365-
# 41 "devkit_ragel.ml.rl"
367+
# 43 "devkit_ragel.ml.rl"
366368

367-
# 368 "devkit_ragel.ml"
369+
# 370 "devkit_ragel.ml"
368370
begin
369371
let state = { keys = 0; trans = 0; } in
370372
let rec do_start () =
@@ -406,11 +408,11 @@ and do_test_eof () =
406408
in do_start ()
407409
end;
408410

409-
# 42 "devkit_ragel.ml.rl"
411+
# 44 "devkit_ragel.ml.rl"
410412
!cs >= is_ipv4_first_final
411413

412414

413-
# 414 "devkit_ragel.ml"
415+
# 416 "devkit_ragel.ml"
414416
let _compact_duration_trans_keys : int array = Array.concat [ [|
415417
0; 0; 115; 115; 48; 110; 115; 115; 46; 110; 48; 109; 48; 109; 48; 109;
416418
109; 109; 48; 57; 46; 115; 48; 115; 48; 115; 48; 115; 109; 115; 48; 57;
@@ -583,23 +585,25 @@ exception Goto_match_compact_duration
583585
exception Goto_again_compact_duration
584586
exception Goto_eof_trans_compact_duration
585587

586-
# 57 "devkit_ragel.ml.rl"
588+
# 59 "devkit_ragel.ml.rl"
587589

588590

591+
exception Parse_compact_duration of string
592+
589593
let parse_compact_duration data =
590-
if data = "" then invalid_arg "parse_compact_duration: empty";
594+
if data = "" then raise (Parse_compact_duration data);
591595
let cs = ref 0 and p = ref 0 and pe = ref (String.length data) and eof = ref (String.length data) in
592596
let n = ref 0 and f = ref 0. and fna = ref 0 and fn = ref 0 in
593597
let t = ref 0 in
594598

595-
# 596 "devkit_ragel.ml"
599+
# 600 "devkit_ragel.ml"
596600
begin
597601
cs.contents <- compact_duration_start;
598602
end;
599603

600-
# 65 "devkit_ragel.ml.rl"
604+
# 69 "devkit_ragel.ml.rl"
601605

602-
# 603 "devkit_ragel.ml"
606+
# 607 "devkit_ragel.ml"
603607
begin
604608
let state = { keys = 0; trans = 0; } in
605609
let rec do_start () =
@@ -631,70 +635,70 @@ and do_eof_trans () =
631635

632636
match _compact_duration_trans_actions.(state.trans) with
633637
| 1 ->
634-
# 49 "devkit_ragel.ml.rl"
638+
# 51 "devkit_ragel.ml.rl"
635639
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
636640
()
637641
| 3 ->
638-
# 50 "devkit_ragel.ml.rl"
642+
# 52 "devkit_ragel.ml.rl"
639643
begin fn := 0; fna := 0 end;
640644
()
641645
| 4 ->
642-
# 50 "devkit_ragel.ml.rl"
646+
# 52 "devkit_ragel.ml.rl"
643647
begin fn := 10 * !fn + (Char.code data.[p.contents] - Char.code '0') ; fna := !fna + 1; end;
644648
()
645649
| 5 ->
646-
# 49 "devkit_ragel.ml.rl"
650+
# 51 "devkit_ragel.ml.rl"
647651
begin n := 0; end;
648-
# 49 "devkit_ragel.ml.rl"
652+
# 51 "devkit_ragel.ml.rl"
649653
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
650654
()
651655
| 2 ->
652-
# 50 "devkit_ragel.ml.rl"
656+
# 52 "devkit_ragel.ml.rl"
653657
begin fn := 0; fna := 0 end;
654-
# 50 "devkit_ragel.ml.rl"
658+
# 52 "devkit_ragel.ml.rl"
655659
begin fn := 10 * !fn + (Char.code data.[p.contents] - Char.code '0') ; fna := !fna + 1; end;
656660
()
657661
| 11 ->
658-
# 46 "devkit_ragel.ml.rl"
662+
# 48 "devkit_ragel.ml.rl"
659663
begin f := !f +. (float(!fn) /. (10. ** float(!fna))); t := !t + !n; fn := 0; fna := 0; end;
660-
# 49 "devkit_ragel.ml.rl"
664+
# 51 "devkit_ragel.ml.rl"
661665
begin n := 0; end;
662-
# 49 "devkit_ragel.ml.rl"
666+
# 51 "devkit_ragel.ml.rl"
663667
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
664668
()
665669
| 9 ->
666-
# 47 "devkit_ragel.ml.rl"
667-
begin f := !f +. (float(!n) /. 1_000.) +. (float(!fn) /. (1000. *. 10. ** float(!fna))); fn := 0; fna := 0; end;
668670
# 49 "devkit_ragel.ml.rl"
671+
begin f := !f +. (float(!n) /. 1_000.) +. (float(!fn) /. (1000. *. 10. ** float(!fna))); fn := 0; fna := 0; end;
672+
# 51 "devkit_ragel.ml.rl"
669673
begin n := 0; end;
670-
# 49 "devkit_ragel.ml.rl"
674+
# 51 "devkit_ragel.ml.rl"
671675
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
672676
()
673677
| 13 ->
674-
# 52 "devkit_ragel.ml.rl"
678+
# 54 "devkit_ragel.ml.rl"
675679
begin t := !t + !n*24*60*60; end;
676-
# 49 "devkit_ragel.ml.rl"
680+
# 51 "devkit_ragel.ml.rl"
677681
begin n := 0; end;
678-
# 49 "devkit_ragel.ml.rl"
682+
# 51 "devkit_ragel.ml.rl"
679683
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
680684
()
681685
| 15 ->
682-
# 53 "devkit_ragel.ml.rl"
686+
# 55 "devkit_ragel.ml.rl"
683687
begin t := !t + !n*60*60; end;
684-
# 49 "devkit_ragel.ml.rl"
688+
# 51 "devkit_ragel.ml.rl"
685689
begin n := 0; end;
686-
# 49 "devkit_ragel.ml.rl"
690+
# 51 "devkit_ragel.ml.rl"
687691
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
688692
()
689693
| 17 ->
690-
# 54 "devkit_ragel.ml.rl"
694+
# 56 "devkit_ragel.ml.rl"
691695
begin t := !t + !n*60; end;
692-
# 49 "devkit_ragel.ml.rl"
696+
# 51 "devkit_ragel.ml.rl"
693697
begin n := 0; end;
694-
# 49 "devkit_ragel.ml.rl"
698+
# 51 "devkit_ragel.ml.rl"
695699
begin n := 10 * !n + (Char.code data.[p.contents] - Char.code '0') end;
696700
()
697-
# 698 "devkit_ragel.ml"
701+
# 702 "devkit_ragel.ml"
698702
| _ -> ()
699703
with Goto_again_compact_duration -> () end;
700704

@@ -712,36 +716,36 @@ and do_test_eof () =
712716
begin try
713717
begin match _compact_duration_eof_actions.(cs.contents) with
714718
| 6 ->
715-
# 46 "devkit_ragel.ml.rl"
719+
# 48 "devkit_ragel.ml.rl"
716720
begin f := !f +. (float(!fn) /. (10. ** float(!fna))); t := !t + !n; fn := 0; fna := 0; end;
717721
()
718722
| 8 ->
719-
# 47 "devkit_ragel.ml.rl"
723+
# 49 "devkit_ragel.ml.rl"
720724
begin f := !f +. (float(!n) /. 1_000.) +. (float(!fn) /. (1000. *. 10. ** float(!fna))); fn := 0; fna := 0; end;
721725
()
722726
| 10 ->
723-
# 48 "devkit_ragel.ml.rl"
727+
# 50 "devkit_ragel.ml.rl"
724728
begin f := !f +. float(!n) /. 1_000_000_000.; end;
725729
()
726730
| 12 ->
727-
# 52 "devkit_ragel.ml.rl"
731+
# 54 "devkit_ragel.ml.rl"
728732
begin t := !t + !n*24*60*60; end;
729733
()
730734
| 14 ->
731-
# 53 "devkit_ragel.ml.rl"
735+
# 55 "devkit_ragel.ml.rl"
732736
begin t := !t + !n*60*60; end;
733737
()
734738
| 16 ->
735-
# 54 "devkit_ragel.ml.rl"
739+
# 56 "devkit_ragel.ml.rl"
736740
begin t := !t + !n*60; end;
737741
()
738742
| 7 ->
739-
# 50 "devkit_ragel.ml.rl"
743+
# 52 "devkit_ragel.ml.rl"
740744
begin fn := 0; fna := 0 end;
741-
# 46 "devkit_ragel.ml.rl"
745+
# 48 "devkit_ragel.ml.rl"
742746
begin f := !f +. (float(!fn) /. (10. ** float(!fna))); t := !t + !n; fn := 0; fna := 0; end;
743747
()
744-
# 745 "devkit_ragel.ml"
748+
# 749 "devkit_ragel.ml"
745749
| _ -> ()
746750
end
747751
with Goto_again_compact_duration -> do_again ()
@@ -751,5 +755,5 @@ and do_test_eof () =
751755
in do_start ()
752756
end;
753757

754-
# 66 "devkit_ragel.ml.rl"
755-
if !cs >= compact_duration_first_final then float !t +. !f else invalid_arg "parse_compact_duration"
758+
# 70 "devkit_ragel.ml.rl"
759+
if !cs >= compact_duration_first_final then float !t +. !f else raise (Parse_compact_duration data);

devkit_ragel.ml.rl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@
66
write data;
77
}%%
88

9+
exception Parse_ipv4 of string
10+
911
let parse_ipv4 data =
1012
let cs = ref 0 and p = ref 0 and pe = ref (String.length data) and eof = ref (String.length data) in
1113
let n = ref 0 in
1214
let ip = ref 0l in
1315
let set () =
14-
if !n > 255 then invalid_arg "parse_ipv4";
16+
if !n > 255 then raise (Parse_ipv4 data);
1517
ip := Int32.logor (Int32.shift_left !ip 8) (Int32.of_int !n)
1618
in
1719
%%write init;
1820
%%write exec;
19-
if !cs >= ipv4_first_final then !ip else invalid_arg "parse_ipv4"
21+
if !cs >= ipv4_first_final then !ip else raise (Parse_ipv4 data)
2022

2123
let is_ipv4_slow data =
2224
let cs = ref 0 and p = ref 0 and pe = ref (String.length data) and eof = ref (String.length data) in
@@ -56,11 +58,13 @@ let is_ipv4 data =
5658
write data;
5759
}%%
5860

61+
exception Parse_compact_duration of string
62+
5963
let parse_compact_duration data =
60-
if data = "" then invalid_arg "parse_compact_duration: empty";
64+
if data = "" then raise (Parse_compact_duration data);
6165
let cs = ref 0 and p = ref 0 and pe = ref (String.length data) and eof = ref (String.length data) in
6266
let n = ref 0 and f = ref 0. and fna = ref 0 and fn = ref 0 in
6367
let t = ref 0 in
6468
%%write init;
6569
%%write exec;
66-
if !cs >= compact_duration_first_final then float !t +. !f else invalid_arg "parse_compact_duration"
70+
if !cs >= compact_duration_first_final then float !t +. !f else raise (Parse_compact_duration data);

0 commit comments

Comments
 (0)