clojure-dev 2023-09-21

out of curiosity, what path in the Clojure compiler ends up calling something like IfExpr.eval()? I see the eval path being used for things like def, but I don't see what evaluation leads to IfExpr.eval() for example

for exceedingly simple expressions eval will use the eval path

so something like (+ 1 2) in isolation in eval might hit the eval path

but anything binding names or doing control flow doesn't eval

yeah I know, but I'm asking because even if I eval (if 1 :then :else) it doesn't take that path

that doesn't count as an exceedingly simple expression

because of the control flow

so, what should I type into the repl to fire that piece of code?

for IfExpr?

(I forget if any of the special optimizations around + would kick in before the eval path)

but how (+ 1 2) is going to be calling IfExpr.eval() ?

oh, it isn't, I don't think it is possible

yeah, that is why I was asking

I believe all exprs having .eval is vestigial

👍 1