private IInterpreter provide(IInterpreterContext context, String expression) {
    if (currentContext == null) {
      createNewInterpreter(context, expression);
    } else {
      if (!IInterpreterContextUtils.haveSameScopeDefinition(context, currentContext)) {
        if (currentInterpreter != null) {
          currentInterpreter.dispose();
        }
        createNewInterpreter(context, expression);
      }
    }

    return currentInterpreter;
  }
 void createNewInterpreter(IInterpreterContext context, String expression) {
   currentContext = context;
   currentInterpreter = CompoundInterpreter.createGenericInterpreter();
   IInterpreterContextUtils.configureInterpreter(currentInterpreter, context);
 }