$ rlwrap ./script/repljs
"Type: " :cljs/quit " to quit"
#(assert (= "original" (let [x "original"
oce (fn [] x)
x "overwritten"]
(oce))))
#<
function () {
if (cljs.core._EQ_.call(null, "original", (function () {
var x = "original";
var oce = (function () {
return x;
});
var x__$1 = "overwritten";
return oce.call(null);
})())) {
return null;
} else {
throw (new Error([cljs.core.str("Assert failed: "), cljs.core.str(cljs.core.pr_str.call(null, cljs.core.with_meta(cljs.core.list("\ufdd1'=", "original", cljs.core.with_meta(cljs.core.list("\ufdd1'let", cljs.core.vec(["\ufdd1'x", "original", "\ufdd1'oce", cljs.core.with_meta(cljs.core.list("\ufdd1'fn", cljs.core.vec([]), "\ufdd1'x"), cljs.core.hash_map("\ufdd0'line", 14)), "\ufdd1'x", "overwritten"]), cljs.core.with_meta(cljs.core.list("\ufdd1'oce"), cljs.core.hash_map("\ufdd0'line", 16))), cljs.core.hash_map("\ufdd0'line", 13))), cljs.core.hash_map("\ufdd0'line", 13))))].join("")));
}
}
>
#(letfn [(x [] "original")
(y [] (x))]
(let [x (fn [] "overwritten")]
(assert (= "original" (y)))))
#<
function () {
var x = (function x() {
return "original";
});
var y = (function y() {
return x.call(null);
});
var x__$1 = (function () {
return "overwritten";
});
if (cljs.core._EQ_.call(null, "original", y.call(null))) {
return null;
} else {
throw (new Error([cljs.core.str("Assert failed: "), cljs.core.str(cljs.core.pr_str.call(null, cljs.core.with_meta(cljs.core.list("\ufdd1'=", "original", cljs.core.with_meta(cljs.core.list("\ufdd1'y"), cljs.core.hash_map("\ufdd0'line", 12))), cljs.core.hash_map("\ufdd0'line", 12))))].join("")));
}
}
>
What's the problem? This output seems fine to me:
As an aside. The less-mangled names in the output are much more pleasant to look at