docs: public Object eval(String source, int lineNo, int columnNo, Object script) throws BSFException {
          try {
              Class scriptClass = evalScripts.get(script);
              if (scriptClass == null) {
                  scriptClass = loader.parseClass(script.toString(), source);
                  evalScripts.put(script, scriptClass);
              } else {
                  LOG.fine("eval() - Using cached script...");
              }
              //can't cache the script because the context may be different.
              //but don't bother loading parsing the class again
              Script s = InvokerHelper.createScript(scriptClass, context);
              return s.run();
          } catch (Exception e) {
              throw new BSFException(BSFException.REASON_EXECUTION_ERROR, "exception from Groovy: " + e, e);
          }
      }