Warning: session_start(): open(/var/lib/php/sessions/sess_gimrlibrasm1vmmo9inakno2vt, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
// use only once per compilation
sclass CompilerBot2 extends CompileJavaToJar {
bool verbose = true;
bool forceCompilation, dontCompile;
bool useRenaming = true;
bool addCompilationDate = true;
bool didCompile;
settable S mainClassForManifest;
// returns jar path
File compileSnippet(S snippetID) {
src = getServerTranspiled2(snippetID);
if (src == null) fail("Snippet not found or not public: " + snippetID);
int i = src.indexOf('\n');
dehlibs = src.substring(0, Math.max(0, i));
if (verbose)
print("Compiling snippet: " + snippetID + ". Libs: " + dehlibs);
src = src.substring(i+1);
progID = snippetID;
ret compile();
}
File compile() {
// Note: This is different from the calculation in x30
// (might lead to programs being compiled twice)
S md5 = md5(dehlibs + "\n" + src + "\n" + fsIOpt(progID));
File jar = getJarFile(md5);
if (verbose)
print("Would compile " + l(src) + " chars (" + progID + "), md5=" + md5 + ", jar: " + jar);
if (!dontCompile && (forceCompilation || jar.length() <= 22)) {
// have to compile
print("Have to compile");
bool canRename = false;
if (useRenaming) {
LS tok = javaTok(src);
LS mainClass = findMainClass(tok);
canRename = mainClass != null && useDummyMainClasses() && isSnippetID(progID) && !tok_classHasModifier(mainClass, "public");
if (verbose)
print("useRenaming: " + useDummyMainClasses() + ", canRename: " + canRename + ", progID: " + progID);
}
//mainClassName = joinNemptiesWithDot(tok_packageName(tok), or(getClassDeclarationName(mainClass), "main"));
//print("CompilerBot2 mainClassName " + mainClassName);
destJar = jar;
progIDForRename = canRename ? progID : null;
progID = progID;
run(); // in superclass
set didCompile;
} else {
if (verbose)
print("Getting classes from cache (" + jar.getAbsolutePath() + ", " + jar.length() + " bytes)");
touchFile(jar); // so we can find the unused ones easier
}
ret jar;
}
// look in non-virtual JavaX-Caches first
File getJarFile(S md5) {
assertTrue(isMD5(md5));
S fileName = md5 + ".jar";
File f = newFile(destDir(), fileName);
ret fileExists(f) ? f : userDir(appendSlash(compilerBotDestDirSubName()) + fileName);
}
/*swappable*/ File destDir() {
ret compilerBotDestDir();
}
void addMoreFiles(File dir) {
print("CompilerBot2 addMoreFiles: " + mainClassName);
if (!eq(mainClassName, "main"))
saveTextFile(newFile(dir, "main-class"), mainClassName);
S mc = or2(mainClassForManifest, mainClassName);
print("Using main class for manifest: " + mc);
saveTextFile(newFile(dir, manifestPathInJar()), manifestTextForMainClass(c));
if (addCompilationDate)
saveTextFile(newFile(dir, "compilation-date.txt"), dateWithSecondsUTC());
}
}