Skip to content

Instantly share code, notes, and snippets.

@mfikes
Created April 3, 2015 16:53
Show Gist options
  • Save mfikes/8524482fc84c3c2ad4e0 to your computer and use it in GitHub Desktop.
Save mfikes/8524482fc84c3c2ad4e0 to your computer and use it in GitHub Desktop.
Emitted JavaScript for var expressions

For the following at the REPL:

(defn print-foo [fb]
  (apply (case fb
            :foo #'foo
            :bar #'bar) []))

This was emitted previously:

(function (){try{return cljs.core.pr_str.call(null,(function (){var ret__4021__auto__ = cljs.user.print_foo = (function cljs$user$print_foo(fb){
return cljs.core.apply.call(null,(function (){var G__5532 = (((fb instanceof cljs.core.Keyword))?fb.fqn:null);
switch (G__5532) {
case "bar":
return new cljs.core.Var(function(){return cljs.user.bar;},return new cljs.core.Symbol("cljs.user","bar","cljs.user/bar",669987796,null);
,return cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"bar","bar",254284943,null),"NO_SOURCE_FILE",10,"bar",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.bar)?cljs.user.bar.cljs$lang$test:null)]);
);

break;
case "foo":
return new cljs.core.Var(function(){return cljs.user.foo;},return new cljs.core.Symbol("cljs.user","foo","cljs.user/foo",-727488832,null);
,return cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"foo","foo",-1385541733,null),"NO_SOURCE_FILE",10,"foo",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.foo)?cljs.user.foo.cljs$lang$test:null)]);
);

break;
default:
throw (new Error([cljs.core.str("No matching clause: "),cljs.core.str(fb)].join('')));

}
})(),cljs.core.PersistentVector.EMPTY);
});
cljs.core._STAR_3 = cljs.core._STAR_2;

cljs.core._STAR_2 = cljs.core._STAR_1;

cljs.core._STAR_1 = ret__4021__auto__;

return ret__4021__auto__;
})());
}catch (e5530){var e__4022__auto__ = e5530;
cljs.core._STAR_e = e__4022__auto__;

throw e__4022__auto__;
}})()

and you now get this with master:

(function (){try{return cljs.core.pr_str.call(null,(function (){var ret__4029__auto__ = cljs.user.print_foo = (function cljs$user$print_foo(fb){
return cljs.core.apply.call(null,(function (){var G__5639 = (((fb instanceof cljs.core.Keyword))?fb.fqn:null);
switch (G__5639) {
case "bar":
return new cljs.core.Var(function(){return cljs.user.bar;},new cljs.core.Symbol("cljs.user","bar","cljs.user/bar",669987796,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"bar","bar",254284943,null),"NO_SOURCE_FILE",10,"bar",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.bar)?cljs.user.bar.cljs$lang$test:null)]));

break;
case "foo":
return new cljs.core.Var(function(){return cljs.user.foo;},new cljs.core.Symbol("cljs.user","foo","cljs.user/foo",-727488832,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"foo","foo",-1385541733,null),"NO_SOURCE_FILE",10,"foo",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.foo)?cljs.user.foo.cljs$lang$test:null)]));

break;
default:
throw (new Error([cljs.core.str("No matching clause: "),cljs.core.str(fb)].join('')));

}
})(),cljs.core.PersistentVector.EMPTY);
});
cljs.core._STAR_3 = cljs.core._STAR_2;

cljs.core._STAR_2 = cljs.core._STAR_1;

cljs.core._STAR_1 = ret__4029__auto__;

return ret__4029__auto__;
})());
}catch (e5637){var e__4030__auto__ = e5637;
cljs.core._STAR_e = e__4030__auto__;

throw e__4030__auto__;
}})()

For this

(defn print-foo [fb]
  (let [foo-map {:foo #'foo :bar #'bar}]
    (apply (get foo-map fb) [])))

Previously:

(function (){try{return cljs.core.pr_str.call(null,(function (){var ret__4021__auto__ = cljs.user.print_foo = (function cljs$user$print_foo(fb){
var foo_map = new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"foo","foo",1268894036),new cljs.core.Var(function(){return cljs.user.foo;},new cljs.core.Symbol("cljs.user","foo","cljs.user/foo",-727488832,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"foo","foo",-1385541733,null),"NO_SOURCE_FILE",10,"foo",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.foo)?cljs.user.foo.cljs$lang$test:null)])),new cljs.core.Keyword(null,"bar","bar",-1386246584),new cljs.core.Var(function(){return cljs.user.bar;},new cljs.core.Symbol("cljs.user","bar","cljs.user/bar",669987796,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"bar","bar",254284943,null),"NO_SOURCE_FILE",10,"bar",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.bar)?cljs.user.bar.cljs$lang$test:null)]))], null);
return cljs.core.apply.call(null,cljs.core.get.call(null,foo_map,fb),cljs.core.PersistentVector.EMPTY);
});
cljs.core._STAR_3 = cljs.core._STAR_2;

cljs.core._STAR_2 = cljs.core._STAR_1;

cljs.core._STAR_1 = ret__4021__auto__;

return ret__4021__auto__;
})());
}catch (e5534){var e__4022__auto__ = e5534;
cljs.core._STAR_e = e__4022__auto__;

throw e__4022__auto__;
}})()

Now:

(function (){try{return cljs.core.pr_str.call(null,(function (){var ret__4029__auto__ = cljs.user.print_foo = (function cljs$user$print_foo(fb){
var foo_map = new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"foo","foo",1268894036),new cljs.core.Var(function(){return cljs.user.foo;},new cljs.core.Symbol("cljs.user","foo","cljs.user/foo",-727488832,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"foo","foo",-1385541733,null),"NO_SOURCE_FILE",10,"foo",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.foo)?cljs.user.foo.cljs$lang$test:null)])),new cljs.core.Keyword(null,"bar","bar",-1386246584),new cljs.core.Var(function(){return cljs.user.bar;},new cljs.core.Symbol("cljs.user","bar","cljs.user/bar",669987796,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"bar","bar",254284943,null),"NO_SOURCE_FILE",10,"bar",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.bar)?cljs.user.bar.cljs$lang$test:null)]))], null);
return cljs.core.apply.call(null,cljs.core.get.call(null,foo_map,fb),cljs.core.PersistentVector.EMPTY);
});
cljs.core._STAR_3 = cljs.core._STAR_2;

cljs.core._STAR_2 = cljs.core._STAR_1;

cljs.core._STAR_1 = ret__4029__auto__;

return ret__4029__auto__;
})());
}catch (e5641){var e__4030__auto__ = e5641;
cljs.core._STAR_e = e__4030__auto__;

throw e__4030__auto__;
}})()

For this:

(defn print-foo [fb]
 (let [f (case fb
           :foo #'foo
           :bar #'bar)]
   (apply f [])))

Previously:

(function (){try{return cljs.core.pr_str.call(null,(function (){var ret__4021__auto__ = cljs.user.print_foo = (function cljs$user$print_foo(fb){
var f = (function (){var G__5532 = (((fb instanceof cljs.core.Keyword))?fb.fqn:null);
switch (G__5532) {
case "bar":
return new cljs.core.Var(function(){return cljs.user.bar;},return new cljs.core.Symbol("cljs.user","bar","cljs.user/bar",669987796,null);
,return cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"bar","bar",254284943,null),"NO_SOURCE_FILE",10,"bar",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.bar)?cljs.user.bar.cljs$lang$test:null)]);
);

break;
case "foo":
return new cljs.core.Var(function(){return cljs.user.foo;},return new cljs.core.Symbol("cljs.user","foo","cljs.user/foo",-727488832,null);
,return cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"foo","foo",-1385541733,null),"NO_SOURCE_FILE",10,"foo",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.foo)?cljs.user.foo.cljs$lang$test:null)]);
);

break;
default:
throw (new Error([cljs.core.str("No matching clause: "),cljs.core.str(fb)].join('')));

}
})();
return cljs.core.apply.call(null,f,cljs.core.PersistentVector.EMPTY);
});
cljs.core._STAR_3 = cljs.core._STAR_2;

cljs.core._STAR_2 = cljs.core._STAR_1;

cljs.core._STAR_1 = ret__4021__auto__;

return ret__4021__auto__;
})());
}catch (e5530){var e__4022__auto__ = e5530;
cljs.core._STAR_e = e__4022__auto__;

throw e__4022__auto__;
}})()

Now:

(function (){try{return cljs.core.pr_str.call(null,(function (){var ret__4029__auto__ = cljs.user.print_foo = (function cljs$user$print_foo(fb){
var f = (function (){var G__5647 = (((fb instanceof cljs.core.Keyword))?fb.fqn:null);
switch (G__5647) {
case "bar":
return new cljs.core.Var(function(){return cljs.user.bar;},new cljs.core.Symbol("cljs.user","bar","cljs.user/bar",669987796,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"bar","bar",254284943,null),"NO_SOURCE_FILE",10,"bar",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.bar)?cljs.user.bar.cljs$lang$test:null)]));

break;
case "foo":
return new cljs.core.Var(function(){return cljs.user.foo;},new cljs.core.Symbol("cljs.user","foo","cljs.user/foo",-727488832,null),cljs.core.PersistentHashMap.fromArrays([new cljs.core.Keyword(null,"ns","ns",441598760),new cljs.core.Keyword(null,"name","name",1843675177),new cljs.core.Keyword(null,"file","file",-1269645878),new cljs.core.Keyword(null,"end-column","end-column",1425389514),new cljs.core.Keyword(null,"source","source",-433931539),new cljs.core.Keyword(null,"column","column",2078222095),new cljs.core.Keyword(null,"line","line",212345235),new cljs.core.Keyword(null,"end-line","end-line",1837326455),new cljs.core.Keyword(null,"arglists","arglists",1661989754),new cljs.core.Keyword(null,"doc","doc",1913296891),new cljs.core.Keyword(null,"test","test",577538877)],[new cljs.core.Symbol(null,"cljs.user","cljs.user",877795071,null),new cljs.core.Symbol(null,"foo","foo",-1385541733,null),"NO_SOURCE_FILE",10,"foo",7,1,1,cljs.core.list(new cljs.core.Symbol(null,"quote","quote",1377916282,null),cljs.core.list(cljs.core.PersistentVector.EMPTY)),null,(cljs.core.truth_(cljs.user.foo)?cljs.user.foo.cljs$lang$test:null)]));

break;
default:
throw (new Error([cljs.core.str("No matching clause: "),cljs.core.str(fb)].join('')));

}
})();
return cljs.core.apply.call(null,f,cljs.core.PersistentVector.EMPTY);
});
cljs.core._STAR_3 = cljs.core._STAR_2;

cljs.core._STAR_2 = cljs.core._STAR_1;

cljs.core._STAR_1 = ret__4029__auto__;

return ret__4029__auto__;
})());
}catch (e5645){var e__4030__auto__ = e5645;
cljs.core._STAR_e = e__4030__auto__;

throw e__4030__auto__;
}})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment