Right now the way this is written it is going to be very hard to figure out which expression evaluation failed and whether it was because of interpreted evaluation or code generated evaluation.  You will basically have to follow the stack trace back to here, and then reference the variables above to see which cause the failure.

Instead I'd do something like this:

Create an abstract trait called `trait ExpressionTest { def evaluate(e: Expression, input: Row = EmptyRow): Any }`.  Change the existing expression tests into abstract classes that call this evaluate function.  You can then create 2 concrete classes for each each test suite that mix in different concrete ExpressionTest traits.  This way the output will clearly label which version of the evaluator is being used, and you will be able to run the suites independently.