core: variadic bit ops, set? covers sorted sets, if rejects extra forms
Three canonical-conformance fixes from the post-shrink batch: - bit-and/bit-or/bit-xor/bit-and-not get Clojure's variadic arities as 20-coll shells folding the binary host ops (now __bit-* seams). 2-arg call sites still compile to the native janet op via the backend's native-ops table. The passes.clj constant-fold table now names the seams — the public fns are overlay and don't exist when the compiler loads (this briefly broke every compile-mode init). - core-set? recognizes the :jolt/sorted-set representation (jolt-dpn): (set? (sorted-set 1)) was false, and ifn? on sorted sets inherited the bug. - (if) / (if test) / (if test then else extra) throw in both the analyzer and the interpreter — spec 03-special-forms X1, now marked verified. Suite 4704 -> 4706; bench and the greeter example benchmark are flat.
This commit is contained in:
parent
621dc8e310
commit
c6f6b7deb7
9 changed files with 84 additions and 16 deletions
|
|
@ -204,3 +204,17 @@
|
|||
["== int and double" "true" "(== 1 1.0)"]
|
||||
["== throws on non-number" :throws "(== 1 :a)"]
|
||||
["== throws on two keywords" :throws "(== :a :a)"])
|
||||
|
||||
# Variadic bit ops (canonical Clojure arities: binary host op folded over the
|
||||
# rest). Shift/clear/set/flip/test stay 2-arg, as in Clojure.
|
||||
(defspec "numbers / variadic bit ops"
|
||||
["bit-and 2" "4" "(bit-and 12 6)"]
|
||||
["bit-and 3" "4" "(bit-and 12 6 7)"]
|
||||
["bit-and 4" "0" "(bit-and 12 6 7 3)"]
|
||||
["bit-or 3" "7" "(bit-or 1 2 4)"]
|
||||
["bit-xor 3" "7" "(bit-xor 1 2 4)"]
|
||||
["bit-xor folds left" "1" "(bit-xor 5 6 2)"]
|
||||
["bit-and-not 2" "8" "(bit-and-not 12 6)"]
|
||||
["bit-and-not 3" "8" "(bit-and-not 12 6 3)"]
|
||||
["bit-and single arg throws" :throws "(bit-and 5)"]
|
||||
["bit-or keeps binary fast path" "3" "(bit-or 1 2)"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue