          (identical? (goog/typeOf js/Symbol) "function"))
   (def ITER_SYMBOL (.-iterator js/Symbol))
   (def ITER_SYMBOL "@@iterator"))
+
+(def ^{:jsdoc ["@enum {string"]}
+  CHAR_MAP
+  #js {"-"    "_"
+       ":"    "_COLON_"
+       "+"    "_PLUS_"
+       ">"    "_GT_"
+       "<"    "_LT_"
+       "="    "_EQ_"
+       "~"    "_TILDE_"
+       "!"    "_BANG_"
+       "@"    "_CIRCA_"
+       "#"    "_SHARP_"
+       "'"    "_SINGLEQUOTE_"
+       "\\\"" "_DOUBLEQUOTE_"
+       "%"    "_PERCENT_"
+       "^"    "_CARET_"
+       "&"    "_AMPERSAND_"
+       "*"    "_STAR_"
+       "|"    "_BAR_"
+       "{"    "_LBRACE_"
+       "}"    "_RBRACE_"
+       "["    "_LBRACK_"
+       "]"    "_RBRACK_"
+       "/"    "_SLASH_"
+       "\\\\" "_BSLASH_"
+       "?"    "_QMARK_"})
+
+(def ^{:jsdoc ["@enum {string}"]}
+  DEMUNGE_MAP
+  #js {"_"             "-"
+       "_COLON_"       ":"
+       "_PLUS_"        "+"
+       "_GT_"          ">"
+       "_LT_"          "<"
+       "_EQ_"          "="
+       "_TILDE_"       "~"
+       "_BANG_"        "!"
+       "_CIRCA_"       "@"
+       "_SHARP_"       "#"
+       "_SINGLEQUOTE_" "'"
+       "_DOUBLEQUOTE_" "\\\""
+       "_PERCENT_"     "%"
+       "_CARET_"       "^"
+       "_AMPERSAND_"   "&"
+       "_STAR_"        "*"
+       "_BAR_"         "|"
+       "_LBRACE_"      "{"
+       "_RBRACE_"      "}"
+       "_LBRACK_"      "["
+       "_RBRACK_"      "]"
+       "_SLASH_"       "/"
+       "_BSLASH_"      "\\\\"
+       "_QMARK_"       "?"})
+
+(def DEMUNGE_PATTERN nil)
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; arrays ;;;;;;;;;;;;;;;;
 

  [tag form]
  {:pre [(symbol? tag)]}
  (cljs.core.TaggedLiteral. tag form))

  :closure-defines option."
    :jsdoc ["@define {string}"]}
  *target* "default")

(def
  ^{:dynamic true
    :doc "Var bound to the current namespace. Only used for bootstrapping."}
  *ns* nil)

(defonce
  ^{:doc "Each runtime environment provides a different way to print output.
