 
 ;;;                                             Fake Maps
 
+
+(defn- arg-matchers [arg-matchers]
+  (if (= (str (first arg-matchers)) "&")
+    `(map from-fake-maps/mkfn:arg-matcher ~(vec arg-matchers))
+    `(map from-fake-maps/mkfn:arg-matcher ~(vec arg-matchers))))
+
+
 ;; A fake map describes all or part of a temporary rebinding of a var with a function that
 ;; captures invocations and also returns canned values.
 

  (let [source-details `{:call-form '~call-form
                         :arrow '~arrow
                         :rhs '~(cons result overrides)}
        override-map `(hash-map-duplicates-ok ~@overrides)
        line (:line (meta call-form))
        result `(merge

                  :var ~(fnref/as-var-form fnref)
                  :value-at-time-of-faking (if (bound? ~(fnref/as-var-form fnref))
                                             ~(fnref/as-form-to-fetch-var-value fnref))
                  :arg-matchers ~arg-mappers
                  :result-supplier (from-fake-maps/mkfn:result-supplier ~arrow ~result)
                  :times :default  ; Default allows for a more attractive error in the most common case.
                  
