;;;; A dyn in any value position of an operand or an arm — the last form ;;;; of a let, either arm of an if, an arm of a match, the operand an and ;;;; or an or answers with — meets its typed partner as a dyn, so what the ;;;; runtime compares or adds is the dyn value and nothing traps. (defn as-dyn [d dyn] dyn d) (defn a1-t [c bool i i64 d dyn] dyn (+ i (let [z 1] d))) (defn a2-t [c bool i i64 d dyn] dyn (+ i (if c d d))) (defn a3-t [c bool i i64 d dyn] dyn (+ i (if c d 2))) (defn a4-t [c bool i i64 d dyn] dyn (= i (if c d 2))) (defn a5-t [c bool i i64 d dyn] dyn (* i (match (Some 1) (Some q) d None d))) (defn a6-t [c bool i i64 d dyn] dyn (let [v (if c i (let [z 1] d))] v)) (defn a7-t [c bool i i64 d dyn] dyn (let [v (match (Some 1) (Some q) i None (let [z 1] d))] v)) (defn a8-t [c bool i i64 d dyn] dyn (let [v (match (Some 1) None i (Some q) (if c d d))] v)) (defn a9-t [c bool i i64 d dyn] dyn (- i (do (println 0) d))) (defn o1-t [c bool b bool i i64 d dyn] dyn (= b (and d))) (defn o2-t [c bool b bool i i64 d dyn] dyn (= b (or d))) (defn o3-t [c bool b bool i i64 d dyn] dyn (= b (and c d))) (defn o4-t [c bool b bool i i64 d dyn] dyn (= b (not d))) (defn o6-t [c bool b bool i i64 d dyn] dyn (let [v (if c b (and d))] v)) (defn w1-t [c bool b bool d dyn] bool (= b (do (println 0) d))) (defn w2-t [c bool b bool d dyn] bool (= b (let [z 1] d))) (defn w3-t [c bool b bool d dyn] bool (= b (if c d d))) (defn w4-t [c bool b bool d dyn] bool (= b (if c d false))) (defn w5-t [c bool b bool d dyn] bool (= b (if c false d))) (defn w6-t [c bool b bool d dyn] bool (= b (match (Some 1) (Some q) d None d))) (defn w7-t [c bool b bool d dyn] bool (= (do d) b)) (defn w9-t [c bool b bool d dyn] bool (= b (cond c d :else d))) (defn w10-t [c bool b bool d dyn] bool (= b (as-dyn d))) (defn w11-t [c bool b bool d dyn] bool (let [v (if c b (let [z 1] d))] (= v v))) (defn w12-t [c bool b bool d dyn] bool (= b (if c (do d) (do d)))) (defn w13-t [c bool b bool d dyn] bool (!= b (let [z 1] (println z) d))) (defn main [] i32 (println (a1-t true 1 (as-dyn 1.5))) (println (a1-t false 1 (as-dyn 1.5))) (println (a2-t true 1 (as-dyn 1.5))) (println (a2-t false 1 (as-dyn 1.5))) (println (a3-t true 1 (as-dyn 1.5))) (println (a3-t false 1 (as-dyn 1.5))) (println (a4-t true 1 (as-dyn 1.5))) (println (a4-t false 1 (as-dyn 1.5))) (println (a5-t true 1 (as-dyn 1.5))) (println (a5-t false 1 (as-dyn 1.5))) (println (a6-t true 1 (as-dyn 1.5))) (println (a6-t false 1 (as-dyn 1.5))) (println (a7-t true 1 (as-dyn 1.5))) (println (a7-t false 1 (as-dyn 1.5))) (println (a8-t true 1 (as-dyn 1.5))) (println (a8-t false 1 (as-dyn 1.5))) (println (a9-t true 1 (as-dyn 1.5))) (println (a9-t false 1 (as-dyn 1.5))) (println (o1-t true true 1 (as-dyn 1))) (println (o1-t true true 1 (as-dyn true))) (println (o2-t true true 1 (as-dyn 1))) (println (o2-t true true 1 (as-dyn true))) (println (o3-t true true 1 (as-dyn 1))) (println (o3-t true true 1 (as-dyn true))) (println (o4-t true true 1 (as-dyn 1))) (println (o4-t true true 1 (as-dyn true))) (println (o6-t true true 1 (as-dyn 1))) (println (o6-t true true 1 (as-dyn true))) (println (w1-t true true (as-dyn 5))) (println (w1-t false true (as-dyn 5))) (println (w2-t true true (as-dyn 5))) (println (w2-t false true (as-dyn 5))) (println (w3-t true true (as-dyn 5))) (println (w3-t false true (as-dyn 5))) (println (w4-t true true (as-dyn 5))) (println (w4-t false true (as-dyn 5))) (println (w5-t true true (as-dyn 5))) (println (w5-t false true (as-dyn 5))) (println (w6-t true true (as-dyn 5))) (println (w6-t false true (as-dyn 5))) (println (w7-t true true (as-dyn 5))) (println (w7-t false true (as-dyn 5))) (println (w9-t true true (as-dyn 5))) (println (w9-t false true (as-dyn 5))) (println (w10-t true true (as-dyn 5))) (println (w10-t false true (as-dyn 5))) (println (w11-t true true (as-dyn 5))) (println (w11-t false true (as-dyn 5))) (println (w12-t true true (as-dyn 5))) (println (w12-t false true (as-dyn 5))) (println (w13-t true true (as-dyn 5))) (println (w13-t false true (as-dyn 5))) 0)