static S evalJava_prep(S code) { ret evalJava_prep(code, "calc"); } static S evalJava_prep(S code, S mainName) { ret evalJava_prep(code, mainName, ""); } static new ThreadLocal evalJava_prep_args; static new ThreadLocal evalJava_prep_voidMagic; // set to false to avoid looking up standard function return types static S evalJava_prep(S code, S mainName, S preCode) { L tok = javaTok(trim(code)); if (!isFalse(evalJava_prep_voidMagic!) && tok_shouldAddReturn(tok) && eqGet(tok, 3, "(") && isIdentifier(get(tok, 1)) && isKnownVoidFunction(get(tok, 1))) tokAppend_reTok(tok, l(tok)-2, ";"); code = tok_addReturn(tok); S returnType = containsReturnWithArgument(code) ? "O" : "void"; S main = "static " + returnType + " " + mainName + "(" + unnull(evalJava_prep_args!) + ") throws Exception {\n" + preCode + code + "\n" + "}"; ret main; }