As Chris suggests, the problem is that Contractor is using eval to evaluate an expression, but then you are immediately calling contractor within the same function.
To avoid the world-age problem you need to return to the “top level” before using a function created by eval. Maybe we should indeed be using RuntimeGeneratedFunctions instead of eval.