            (.replace \/ \$))
        "$"))
 
-(defmethod comp/emit* :invoke
-  [{f :fn :keys [invoke-type args env] :as expr}]
-  (comp/emit-wrap env
-    (case invoke-type
-      :opt-not
-      (comp/emits "(!(" (first args) "))")
-
-      :opt-count
-      (comp/emits "((" (first args) ").length)")
-
-      :protocol
-      (let [protocol-name (:protocol-name expr)
-            protocol-fn (:protocol-fn expr)
-            pimpl (str (munge (protocol-prefix protocol-name))
-                       (munge (name protocol-fn))
-                       "$arity$" (count args))]
-        (comp/emits (first args) "." pimpl "(" (comma-sep (cons "null" (rest args))) ")"))
-
-      :variadic-invoke
-      (let [mfa (:max-fixed-arity expr)]
-        (comp/emits f ".cljs$core$IFn$_invoke$arity$variadic(" (comma-sep (take mfa args))
-          (when-not (zero? mfa) ",")
-          "cljs.core.prim_seq.cljs$core$IFn$_invoke$arity$2(["
-          (comma-sep (drop mfa args)) "], 0))"))
-
-      :ifn
-      (comp/emits f ".cljs$core$IFn$_invoke$arity$" (count args) "(" (comma-sep args) ")")
-
-      :fn
-      (comp/emits f "(" (comma-sep args) ")")
-
-      :maybe-ifn
-      (let [fprop (str ".cljs$core$IFn$_invoke$arity$" (count args))]
-        (if ana/*fn-invoke-direct*
-          (comp/emits "(" f fprop " ? " f fprop "(" (comma-sep args) ") : "
-            f "(" (comma-sep args) "))")
-          (comp/emits "(" f fprop " ? " f fprop "(" (comma-sep args) ") : "
-            f ".call(" (comma-sep (cons "null" args)) "))")))
-
-      :dot-call
-      (comp/emits f ".call(" (comma-sep (cons "null" args)) ")"))))
-
 ;; fixes an issue where the cljs.core variant assumes that `resolve-var` will only return
 ;; a js/foo symbol if x is also js/something which isn't true in many cases for shadow-cljs
 ;; where npm deps especially resolve some/foo to js/module$something.foo

        (when-not (= :statement (:context env))
          (comp/emit-wrap env
            (comp/emits (comp/munge info))))))))

(defmethod comp/emit* :var [expr] (shadow-emit-var expr))
(defmethod comp/emit* :binding [expr] (shadow-emit-var expr))
(defmethod comp/emit* :js-var [expr] (shadow-emit-var expr))
(defmethod comp/emit* :local [expr] (shadow-emit-var expr))

;; noop
(defn shadow-load-core [])


    ast))


;; its private in cljs.compiler ...
(def es5>=
