Warning: session_start(): open(/var/lib/php/sessions/sess_kfsa8kvq6v6ciuvkltjh3hddv5, 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 {
bool verbose;
bool forceCompilation;
S src;
S dehlibs;
S javaTarget;
S progID;
new CompileJavaToJar cj;
bool didCompile;
// 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() {
if (verbose)
print("Compiling " + l(src) + " chars");
// 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 (forceCompilation || jar.length() <= 22) {
// have to compile
//print("Have to compile: " + progID + " / " + md5);
LS tok = javaTok(src);
LS mainClass = findMainClass(tok);
bool canRename = mainClass != null && useDummyMainClasses() && isSnippetID(progID) && !tok_classHasModifier(mainClass, "public");
if (verbose)
print("useRenaming: " + useDummyMainClasses() + ", canRename: " + canRename + ", progID: " + progID);
S mainClassName = joinNemptiesWithDot(tok_packageName(tok), or(getClassDeclarationName(mainClass), "main"));
temp tempSetTL(javaCompileToJar_addMoreFiles,
dir -> {
if (!eq(mainClassName, "main"))
saveTextFile(newFile(dir, "main-class"), mainClassName);
saveTextFile(newFile(dir, manifestPathInJar()), manifestTextForMainClass(mainClassName);
});
cj.src = src;
cj.dehlibs = dehlibs;
cj.destJar = jar;
cj.progIDForRename = canRename ? progID : null;
cj.progID = progID;
cj.run();
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();
}
}