docs: public void exec(String source, int lineNo, int columnNo, Object script) throws BSFException {
          try {
              //          shell.run(script.toString(), source, EMPTY_ARGS);
  
              Class scriptClass = execScripts.get(script);
              if (scriptClass == null) {
                  scriptClass = loader.parseClass(script.toString(), source);
                  execScripts.put(script, scriptClass);
              } else {
                  LOG.fine("exec() - Using cached version of class...");
              }
              InvokerHelper.invokeMethod(scriptClass, "main", EMPTY_ARGS);
          } catch (Exception e) {
              LOG.log(Level.WARNING, "BSF trace", e);
              throw new BSFException(BSFException.REASON_EXECUTION_ERROR, "exception from Groovy: " + e, e);
          }
      }