final Object exec()

in generic/src/main/java/org/netbeans/html/presenters/spi/Generic.java [918:969]


    final Object exec(int id, String fn) {
        assert Thread.holdsLock(lock());
        boolean first;
        {
            Frame c = topMostCall();
            if (c instanceof CallJavaMethod && ((CallJavaMethod)c).method != null) {
                c.inJava();
                lock().notifyAll();
            }
        }

        EvalJavaScript myCall;
        boolean load;
        Frame top = topMostCall();
        if (top instanceof DeferJavaScript) {
            ((DeferJavaScript) top).sb.append(fn);
            fn = ((DeferJavaScript) top).sb.toString();
            top = top.prev;
        }
        if (top != null) {
            myCall = registerCall(new EvalJavaScript(id, top, fn));
            load = synchronous;
            first = false;
        } else {
            myCall = registerCall(new EvalJavaScript(id, null, fn));
            load = true;
            first = true;
        }
        if (load) {
            loadJS(fn);
        }
        for (;;) {
            if (myCall.typeof != null) {
                break;
            }
            try {
                lock().wait();
            } catch (InterruptedException ex) {
                log(Level.SEVERE, null, ex);
            }
            Frame c = topMostCall();
            if (c != null) {
                c.inJava();
            }
            lock().notifyAll();
        }
        Object ret = valueOf(myCall.typeof, (String) myCall.result);
        if (first) {
            arguments.clear();
        }
        return ret;
    }