!759 static S vmArgs = "-server"; static O trans; static O onClear; static Lock lock = lock(); p { //makeBot("The 759 Bot."); Android3 a = new Android3("The 759 Bot."); a.useMultiPort = false; a.startPort = 4898; makeAndroid(a); // run(#1007916); // Compiler Bot } answer { print("# " + s); lock lock; print("go"); if "please translate *" ret transpile(m.unq(0), null); if "please translate snippet *" time { ret transpile(loadSnippet(m.unq(0)), fsI(m.unq(0))); } if "clear 759" { cleanUp(trans); trans = null; setOpt(getJavaX(), "preferCached", false); loadTranslator(); pcallF(onClear); ret "OK, cleared & reloaded."; } if (startsWith(s, "ecj ", m)) try { ret "OK " + quote(invokeEcj($1)); } catch e { ret str(getInnerException(e)); } if "reboot" { restartVM(); ret "OK"; } } static S transpile(S mainJava, S snippetID) { mainJava = mainJava.replace("\r\n", "\n").replace("\r", ""); assertTrue("default translator", mainJava.contains("!752") || mainJava.contains("!759") || containsRegexp(mainJava, "!7\\s")); mainJava = ("\n" + mainJava).replace("\n!752", "\n").replace("\n!759", "\n").replaceAll("\n!7\\s", "\n\n").substring(1); S transpiled = transpileRaw(mainJava, snippetID); // remaining translator invocations are libraries. move to top new L libs; transpiled = findTranslators2(transpiled, libs); if (nempty(libs)) transpiled = "LIBS: " + join(" ", libs) + "\n" + transpiled; ret "OK " + bytesToHex(toUtf8(transpiled)); } // assumes translator invocation has been removed static S transpileRaw(S mainJava, S snippetID) { if (trans == null) loadTranslator(); set(trans, "mainJava", mainJava); setOpt(trans, transpilingSnippetID := snippetID); callMain(trans); ret (S) get(trans, "mainJava"); } static void loadTranslator() { trans = hotwire("#759"); }