src/Pure/name.ML
changeset 28725 4a71cc58b203
parent 28108 1b08ed83b79e
child 28737 8cbb7cfcfb5b
equal deleted inserted replaced
28724:4656aacba2bc 28725:4a71cc58b203
    30   val variant: string list -> string -> string
    30   val variant: string list -> string -> string
    31   type binding
    31   type binding
    32   val binding_pos: string * Position.T -> binding
    32   val binding_pos: string * Position.T -> binding
    33   val binding: string -> binding
    33   val binding: string -> binding
    34   val no_binding: binding
    34   val no_binding: binding
       
    35   val prefix_of: binding -> (string * bool) list
    35   val name_of: binding -> string
    36   val name_of: binding -> string
    36   val pos_of: binding -> Position.T
    37   val pos_of: binding -> Position.T
       
    38   val add_prefix: bool -> string -> binding -> binding
    37   val map_name: (string -> string) -> binding -> binding
    39   val map_name: (string -> string) -> binding -> binding
    38   val qualified: string -> binding -> binding
    40   val qualified: string -> binding -> binding
    39 end;
    41 end;
    40 
    42 
    41 structure Name: NAME =
    43 structure Name: NAME =
   149 
   151 
   150 
   152 
   151 
   153 
   152 (** generic name bindings **)
   154 (** generic name bindings **)
   153 
   155 
   154 datatype binding = Binding of string * Position.T;
   156 datatype binding = Binding of ((string * bool) list * string) * Position.T;
   155 
   157 
   156 val binding_pos = Binding;
   158 fun prefix_of (Binding ((prefix, _), _)) = prefix;
       
   159 fun name_of (Binding ((_, name), _)) = name;
       
   160 fun pos_of (Binding (_, pos)) = pos;
       
   161 
       
   162 fun binding_pos (name, pos) = Binding (([], name), pos);
   157 fun binding name = binding_pos (name, Position.none);
   163 fun binding name = binding_pos (name, Position.none);
   158 val no_binding = binding "";
   164 val no_binding = binding "";
   159 
   165 
   160 fun name_of (Binding (name, _)) = name;
   166 fun map_binding f (Binding bnd) = Binding (f bnd);
   161 fun pos_of (Binding (_, pos)) = pos;
       
   162 
   167 
   163 fun map_name f (Binding (name, pos)) = Binding (f name, pos);
   168 fun add_prefix sticky prfx = (map_binding o apfst o apfst)
       
   169   (cons (prfx, sticky));
       
   170 
       
   171 val map_name = map_binding o apfst o apsnd;
   164 val qualified = map_name o NameSpace.qualified;
   172 val qualified = map_name o NameSpace.qualified;
   165 
   173 
   166 end;
   174 end;