1 (* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
2 * Jagannathan, and Stephen Weeks.
3 * Copyright (C) 1997-2000 NEC Research Institute.
5 * MLton is released under a BSD-style license.
6 * See the file MLton-LICENSE for details.
9 functor AstId (S: AST_ID_STRUCTS): AST_ID =
14 datatype t = T of {name: Symbol.t,
21 fun make f (T r) = f r
24 val region = make #region
28 (* quell unused warning *)
32 fun makeRegion (s, r) = T {name = s,
35 val fromSymbol = makeRegion
37 fun makeRegion' (s, x, y) =
38 makeRegion (s, Region.make {left = x, right = y})
39 (* quell unused warning *)
42 fun dest (T {name, region, ...}) = (name, region)
43 (* quell unused warning *)
46 val bogus = makeRegion (Symbol.bogus, Region.bogus)
48 fun isAlphaNumeric id =
50 val c = String.sub (Symbol.toString (name id), 0)
52 Char.isAlphaNum c orelse c = #"'"
55 val isSymbolic = not o isAlphaNumeric
57 val toString = Symbol.toString o name
59 val layout = String.layout o toString
61 (* val left = Region.left o region *)
62 (* val right = Region.left o region *)
65 fun binary (f: string * string -> 'a) (x :t, y: t): 'a =
66 f (toString x, toString y)
68 val compare = binary String.compare
71 fun equals (x, x') = Symbol.equals (name x, name x')
73 val equals = Trace.trace2 ("AstId.equals", layout, layout, Bool.layout) equals