code: public void eval(Node ctx, PrintWriter verbose) throws SemanticError {
          Object result;
          int i;
          Throwable t;
          Position pos;
  
          for (i = 0; i < args.length; i++) {
              args[i] = ctx.get(argsOfs[i]).attrs[argsAttr[i]];
          }
          try {
              result = function.invoke(args);
          } catch (InvocationTargetException e) {
              t = e.getTargetException();
              if (t instanceof RuntimeException) {
                  throw (RuntimeException) t;
              }
              if (t instanceof Error) {
                  throw (Error) t;
              }
              if (t instanceof Exception) {
                  if (verbose != null) {
                      log("[FAILURE]", verbose);
                  }
                  pos = new Position();
                  pos.set(ctx.position);
                  throw new SemanticError(pos, (Exception) t);
              }
              throw new RuntimeException("illegal exception type: " + t);
          }
          ctx.get(resultOfs).attrs[resultAttr] = result;
          if (verbose != null) {
              log(result, verbose);
          }
      }
docs: Caution: do not call this method concurrently!
  
  @param ctx  left-hand-side node