[airplane optimizations?] avoid creating functions objects when they cannot possibly be used
correctly handle binops in if-exprs