mirror of
https://github.com/kanaka/mal.git
synced 2024-11-10 12:47:45 +03:00
70f29a2b3c
- Move apply logic in swap! to APPLY function in types and use that for macroexpand - Abort def! if error before updating the environment - let* wasn't properly saving A2% for the final eval. Also, the environment release check should be against the top-level EVAL env, not the root repl env. - (concat (list) ...) was broken so fix it to ignore empty lists that aren't in the trailing position. - nil, false and true in the reader were always being returned as references (with an ref cnt) but we have the assumption that references (14) are not ref cnt'd and are always part of a compound type so fix the reader to just return the interned addresses.
84 lines
1021 B
Plaintext
84 lines
1021 B
Plaintext
;; Testing REPL_ENV
|
|
(+ 1 2)
|
|
;=>3
|
|
(/ (- (+ 5 (* 2 3)) 3) 4)
|
|
;=>2
|
|
|
|
|
|
;; Testing def!
|
|
(def! x 3)
|
|
;=>3
|
|
x
|
|
;=>3
|
|
(def! x 4)
|
|
;=>4
|
|
x
|
|
;=>4
|
|
(def! y (+ 1 7))
|
|
;=>8
|
|
y
|
|
;=>8
|
|
|
|
;; Verifying symbols are case-sensitive
|
|
(def! mynum 111)
|
|
;=>111
|
|
(def! MYNUM 222)
|
|
;=>222
|
|
mynum
|
|
;=>111
|
|
MYNUM
|
|
;=>222
|
|
|
|
;; Check env lookup non-fatal error
|
|
(abc 1 2 3)
|
|
; .*\'abc\' not found.*
|
|
;; Check that error aborts def!
|
|
(def! w 123)
|
|
(def! w (abc))
|
|
w
|
|
;=>123
|
|
|
|
;; Testing let*
|
|
(let* (z 9) z)
|
|
;=>9
|
|
(let* (x 9) x)
|
|
;=>9
|
|
x
|
|
;=>4
|
|
(let* (z (+ 2 3)) (+ 1 z))
|
|
;=>6
|
|
(let* (p (+ 2 3) q (+ 2 p)) (+ p q))
|
|
;=>12
|
|
(def! y (let* (z 7) z))
|
|
y
|
|
;=>7
|
|
|
|
;; Testing outer environment
|
|
(def! a 4)
|
|
;=>4
|
|
(let* (q 9) q)
|
|
;=>9
|
|
(let* (q 9) a)
|
|
;=>4
|
|
(let* (z 2) (let* (q 9) a))
|
|
;=>4
|
|
(let* (x 4) (def! a 5))
|
|
;=>5
|
|
a
|
|
;=>4
|
|
|
|
;>>> deferrable=True
|
|
;>>> optional=True
|
|
;;
|
|
;; -------- Deferrable/Optional Functionality --------
|
|
|
|
;; Testing let* with vector bindings
|
|
(let* [z 9] z)
|
|
;=>9
|
|
(let* [p (+ 2 3) q (+ 2 p)] (+ p q))
|
|
;=>12
|
|
|
|
;; Testing vector evaluation
|
|
(let* (a 5 b 6) [3 4 a [b 7] 8])
|
|
;=>[3 4 5 [6 7] 8]
|