Address the possibility of vectors being empty in vector/_first
The original version just used the built-in `first`, which returns `nil` if you give it an empty collection, which is almost certainly not a useful behavior. This changes it to return `:ignore-instruction` if the vector is empty, thereby leaving all the stacks unchanged.
This commit is contained in:
parent
f2eecc774f
commit
66ec0a1ebd
@ -52,12 +52,16 @@
|
|||||||
(make-instruction state empty? [stack] :boolean)))
|
(make-instruction state empty? [stack] :boolean)))
|
||||||
|
|
||||||
;; Pushes the first item of the top element of the vector stack onto the
|
;; Pushes the first item of the top element of the vector stack onto the
|
||||||
;; approrpiately-typed literal stack
|
;; approrpiately-typed literal stack. If the vector is empty, return
|
||||||
|
;; :ignore-instruction so that nothing is changed on the stacks.
|
||||||
(def _first
|
(def _first
|
||||||
^{:stacks #{:elem}}
|
^{:stacks #{:elem}}
|
||||||
(fn [stack state]
|
(fn [stack state]
|
||||||
(let [lit-stack (get-vector-literal-type stack)]
|
(let [lit-stack (get-vector-literal-type stack)]
|
||||||
(make-instruction state first [stack] lit-stack))))
|
(make-instruction state
|
||||||
|
#(if (empty? %) :ignore-instruction (first %))
|
||||||
|
[stack]
|
||||||
|
lit-stack))))
|
||||||
|
|
||||||
;; Pushes onto the INTEGER stack the index of the top element of the
|
;; Pushes onto the INTEGER stack the index of the top element of the
|
||||||
;; appropriately-typed literal stack within the top element of the vector stack
|
;; appropriately-typed literal stack within the top element of the vector stack
|
||||||
|
Loading…
x
Reference in New Issue
Block a user