forked from FStarLang/karamel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Loc.ml
77 lines (69 loc) · 1.77 KB
/
Loc.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(* Copyright (c) INRIA and Microsoft Corporation. All rights reserved. *)
(* Licensed under the Apache 2.0 License. *)
(** Helpers ----------------------------------------------------------------- *)
open Ast
open PPrint
open PrintCommon
type loc =
| File of string
| In of string
| InTop of lident
| Then
| Else
| After of string
| For
| ForCond
| ForIter
| While
| Branch of switch_case
| Sequence of int
| SequenceLast
| Scrutinee
| Call of string
let print_case = function
| SConstant s ->
print_constant s
| SEnum lid ->
string (Idents.string_of_lident lid)
| SWild ->
underscore
let print_loc = function
| InTop l ->
string "in top-level declaration " ^^ print_lident l
| File f ->
string "in file " ^^ string f
| In l ->
string "in the definition of " ^^ string l
| Then ->
string "in the then branch"
| Else ->
string "in the else branch"
| For ->
string "in the for loop"
| ForCond ->
string "in the for loop's condition"
| ForIter ->
string "in the for loop's iteration"
| While ->
string "in the while loop"
| After s ->
string "after the definition of " ^^ string s
| Branch l ->
string "in branch " ^^ print_case l
| SequenceLast ->
string "in the last element of the sequence"
| Sequence i ->
string "in the sequence statement at index " ^^ int i
| Scrutinee ->
string "in the scrutinee"
| Call s ->
string "in the arguments to " ^^ string s
let print_location locs =
separate_map (string ", ") print_loc locs
let ploc = printf_of_pprint print_location
let update_location old_locs new_loc =
match new_loc, old_locs with
| After _, After _ :: locs ->
new_loc :: locs
| _ ->
new_loc :: old_locs