Skip to content

Commit ad07bbd

Browse files
committed
CLJS-2977: Spec instrumentation regression with varargs / :static-fns type hints we no longer need
advanced safe variadic invoke for the instrument fn wrapper did not call conform before invoking the original variadic case. Add tests.
1 parent 8ceee7f commit ad07bbd

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/main/cljs/cljs/spec/test/alpha.cljs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,12 @@
128128
(when-some [variadic (.-cljs$core$IFn$_invoke$arity$variadic f)]
129129
(set! (.-cljs$core$IFn$_invoke$arity$variadic ret)
130130
(fn [& args]
131-
(apply variadic args)))))
131+
(if *instrument-enabled*
132+
(with-instrument-disabled
133+
(conform!* args)
134+
(binding [*instrument-enabled* true]
135+
(apply' variadic args)))
136+
(apply' variadic args))))))
132137
ret))
133138

134139
(defn- no-fspec

src/test/cljs/cljs/spec_test.cljs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,20 @@
441441
(is (= (s/describe #(odd? %)) ::s/unknown))
442442
(is (= (s/form #(odd? %)) ::s/unknown)))
443443

444+
(defn defk [key & [doc]]
445+
key)
446+
447+
(s/fdef defk
448+
:args (s/cat :key keyword?
449+
:doc (s/? string?)))
450+
451+
(st/instrument `defk)
452+
453+
(deftest cljs-2977-variadic-fn
454+
(is (thrown? js/Error (defk 1 1)))
455+
(is (thrown? js/Error (defk :foo 1)))
456+
(is (= :foo (defk :foo "bar"))))
457+
444458
(comment
445459

446460
(run-tests)

0 commit comments

Comments
 (0)