anchor.diff:      fprintfn out "; File generated with Shader Minifier %s" Options.version
       fprintfn out "; http://www.ctrl-alt-test.fr"
   
  -    for ty, name, newName in List.sort exportedValues do
  -        if ty = "" then
  -            fprintfn out "_var_%s: db '%s', 0" (name.ToUpper()) newName
  +    for value in List.sort exportedNames do
  +        if value.ty = "" then
  +            fprintfn out "_var_%s: db '%s', 0" (value.name.ToUpper()) value.newName
           else
  -            fprintfn out "_%c_%s: db '%s', 0" (System.Char.ToUpper ty.[0]) (name.ToUpper()) newName
  +            fprintfn out "_%s_%s: db '%s', 0" value.ty (value.name.ToUpper()) value.newName
   
       fprintfn out ""
       for shader in shaders do
  
positive.code:     fprintfn out " * http://www.ctrl-alt-test.fr"
      fprintfn out " */"
  
      for ty, name, newName in List.sort exportedValues do
          if ty = "" then
              fprintfn out "var var_%s = \"%s\"" (name.ToUpper()) newName
          else
              fprintfn out "var %c_%s = \"%s\"" (System.Char.ToUpper ty.[0]) (name.ToUpper()) newName
  
      fprintfn out ""
      for shader in shaders do
  
negative.code: open System.IO
  open Options.Globals
  
  // An ExportedName is a name that is used outside of the shader code (e.g. uniform and attribute
  // values). We need to provide accessors for the developer (e.g. create macros for C/C++).
  type ExportedName = {
      ty: string  // "F" for hlsl functions, empty for vars
      name: string
      newName: string
  }
  
  // TODO: make exportedNames not global.
  let mutable private exportedNames = ([] : ExportedName list)
  
  let reset () = exportedNames <- []
  
  // TODO: move to Renamer.
  let export ty name (newName:string) =
      if System.Char.IsDigit newName.[0] then
          exportedNames <- {ty = ty; name = name; newName = newName} :: exportedNames
      else
          exportedNames <-
              [for value in exportedNames ->
                  if ty = value.ty && name = value.newName then
                      {value with ty = ty; name = value.name; newName = newName}
                  else value]
  
  let private printHeader out (shaders: Ast.Shader[]) asAList =
      let fileName =
  