1 (* Copyright (C
) 2017 Matthew Fluet
.
2 * Copyright (C
) 1999-2006, 2008 Henry Cejtin
, Matthew Fluet
, Suresh
3 * Jagannathan
, and Stephen Weeks
.
4 * Copyright (C
) 1997-2000 NEC Research Institute
.
6 * MLton is released under a BSD
-style license
.
7 * See the file MLton
-LICENSE for details
.
10 structure Region
: REGION
=
15 | T
of {left
: SourcePos
.t
,
27 val right
= make #right
31 fn (Bogus
, _
) => Bogus
32 |
(T
{left
, ...}, right
) => T
{left
= left
, right
= right
}
35 fn Bogus
=> SourcePos
.toString (SourcePos
.bogus
)
37 if SourcePos
.isBogus left
38 orelse SourcePos
.isBogus right
39 orelse not (SourcePos
.fileEquals (left
, right
))
40 then SourcePos
.toString left
41 else concat
[SourcePos
.toString left
, "-",
42 SourcePos
.posToString right
]
44 val layout
= Layout
.str
o toString
51 |
(T
{left
, ...}, T
{right
, ...}) => T
{left
= left
, right
= right
}
54 case (left r
, left r
') of
57 |
(_
, NONE
) => GREATER
58 |
(SOME p
, SOME p
') => SourcePos
.compare (p
, p
')
61 Trace
.trace2 ("Region.compare", layout
, layout
, Relation
.layout
) compare
63 fun equals (r
, r
') = compare (r
, r
') = EQUAL
66 case compare (r
, r
') of
74 datatype 'a t
= T
of {node
: 'a
,
77 fun node (T
{node
, ...}) = node
78 fun region (T
{region
, ...}) = region
79 fun makeRegion (node
, region
) = T
{node
= node
, region
= region
}
80 fun makeRegion
' (node
, left
, right
) = T
{node
= node
,
81 region
= make
{left
= left
,
84 fun dest (T
{node
, region
}) = (node
, region
)