flan/test/syntax/flat/shadows.flan

90 lines
1.7 KiB
Plaintext

(defstruct P [x i32 y i32])
(defn app [g (Fn [i32] i32) v i32] i32 (g v))
(defn shadow-chain [] ()
(let [x 1]
(let [x (+ x 10)]
(println x))
(println x)
(let [x (+ x 100)]
(println x)
(let [x (* x 2)] (println x))
(println x))
(println x)))
(defn closes [] i32
(let [x 1]
(let [x 5]
(println x))
(let [f 0]
(app (fn [y] (+ x y)) (+ f 2)))))
(defn loopy [] ()
(let [i 0]
(while (< i 5)
(let [i (* i 100)]
(println i))
(set i (+ i 1))
(when (= i 3) (continue))
(println i))))
(defn loopr [] i32
(let [n 0 acc 0]
(while true
(let [n (* n 2)]
(println n))
(if (< n 4)
(do (set acc (+ acc n)) (set n (+ n 1)))
(break)))
acc))
(defn ret [a i32] i32
(let [a (+ a 1)]
(println a))
(when (> a 3)
(let [a 0] (println a))
(return a))
(let [a (- a 1)] (println a))
a)
(defn deferring [] ()
(let [x 1]
(let [x 2]
(defer (println x)))
(defer (println x))
(println "body")))
(defn destr [] ()
(let [p (P {.x 3 .y 4}) x 100]
(let [{.x .y} p]
(println (+ x y)))
(println x)
(let [{:keys [x]} p]
(println x))
(println x)
(let [[a b] [x 7]]
(println a))
(println x)))
(defn dos [c bool] i32
(let [v 0]
(if c
(do (let [v 5] (println v)) (println v))
(do (let [v 6] (println v)) (println v)))
(unless c (let [v 9] (println v)) (println v))
(when c (let [v 8] (println v)) (println v))
v))
(defn main [] i32
(shadow-chain)
(println (closes))
(loopy)
(println (loopr))
(println (ret 5))
(println (ret 1))
(deferring)
(destr)
(println (dos true))
(println (dos false))
0)