   (emit-fn-signature (rest params) ret-tag)
   (emits "{")
   (binding [*go-return-tag* (when (go-needs-coercion? (:tag expr) ret-tag)
-                              ret-tag)]
+                              ret-tag)
+            *go-protocol* protocol
+            *go-protocol-fn* (:name name)]
     (emit-fn-body type expr recurs))
   (emitln "}"))
 

      (emits "CljsCorePersistentHashSet_EMPTY")

      (distinct-constants? items)
      (emits "&CljsCorePersistentHashSet{nil, &CljsCorePersistentArrayMap{nil, " (count items) ", []interface{}{"
        (comma-sep (interleave items (repeat "nil"))) "}, nil}, nil}")

      :else (emits "CljsCorePersistentHashSet_FromArray.X_invoke_Arity2([]interface{}{" (comma-sep items) "}, true).(*CljsCorePersistentHashSet)"))))


      (emits "CljsCorePersistentVector_EMPTY")
      (let [cnt (count items)]
        (if (< cnt 32)
          (emits "(&CljsCorePersistentVector{nil, " cnt
            ", 5, CljsCorePersistentVector_EMPTY_NODE, []interface{}{"  (comma-sep items) "}, nil})")
          (emits "CljsCorePersistentVector_FromArray.X_invoke_Arity2([]interface{}{" (comma-sep items) "}, true).(*CljsCorePersistentVector)"))))))

(defn distinct-constants? [items]
