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
or (if 1 1 2)
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?
maybe (+ 1 2)
(identity 1)
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