From 41028d0d9b4063516c01e7917ea46fffff0cda1b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:09:19 +0000 Subject: [PATCH 1/9] Plan: add root-unit .codc container support for .codb artifacts Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/887c4475-c345-4ede-8796-7384be58be15 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 388257 -> 388257 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source_.jar b/source_.jar index bd1480878754a2bde3f1a3b89241fadd6958c06e..c80f4e27f93bdcbce1b62c6d10126c4a5dc27739 100644 GIT binary patch delta 14937 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 delta 14935 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 cSCV&; Date: Mon, 13 Apr 2026 01:10:02 +0000 Subject: [PATCH 2/9] Implement root-unit .codc container for .codb artifacts Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/887c4475-c345-4ede-8796-7384be58be15 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- src/main/java/cod/ir/IRManager.java | 197 ++++++++++++++++-- src/main/java/cod/runner/CommandRunner.java | 8 +- src/main/java/cod/runner/TestRunner.java | 4 +- .../java/cod/semantic/ImportResolver.java | 8 +- 4 files changed, 191 insertions(+), 26 deletions(-) diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index 943988ed..a930df33 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -5,14 +5,30 @@ import cod.ptac.Compiler; import cod.ptac.Unit; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; public class IRManager { private static final String BIN_DIR = "bin"; private static final String IR_EXT = ".codb"; + private static final String CONTAINER_EXT = ".codc"; private final String projectRoot; private final IRWriter writer; @@ -43,13 +59,15 @@ public Type load(String unit, String className) { } } - File file = getIRFile(unit, className); - if (!file.exists()) { - return null; - } - try { - Artifact artifact = reader.readArtifact(file); + Artifact artifact = readArtifactFromContainer(unit, className); + if (artifact == null) { + File file = getIRFile(unit, className); + if (!file.exists()) { + return null; + } + artifact = reader.readArtifact(file); + } if (artifact != null) { putArtifactCache(unit, className, artifact); Type type = artifact.typeSnapshot; @@ -68,10 +86,9 @@ public void save(String unit, Type type) { if (type == null || unit == null || type.name == null) { return; } - File file = getIRFile(unit, type.name); try { Artifact artifact = compiler.compile(unit, type); - writer.writeArtifact(file, artifact); + writeArtifactToContainer(unit, artifact.className, artifact); putCache(unit, type.name, type); putArtifactCache(unit, type.name, artifact); } catch (IOException ignored) {} @@ -87,13 +104,15 @@ public Artifact loadArtifact(String unit, String className) { return unitCache.get(className); } - File file = getIRFile(unit, className); - if (!file.exists()) { - return null; - } - try { - Artifact artifact = reader.readArtifact(file); + Artifact artifact = readArtifactFromContainer(unit, className); + if (artifact == null) { + File file = getIRFile(unit, className); + if (!file.exists()) { + return null; + } + artifact = reader.readArtifact(file); + } if (artifact != null) { putArtifactCache(unit, className, artifact); if (artifact.typeSnapshot != null) { @@ -113,9 +132,8 @@ public Unit loadCodPTACUnit(String unit, String className) { public void saveArtifact(String unit, Artifact artifact) { if (artifact == null || unit == null || artifact.className == null) return; - File file = getIRFile(unit, artifact.className); try { - writer.writeArtifact(file, artifact); + writeArtifactToContainer(unit, artifact.className, artifact); putArtifactCache(unit, artifact.className, artifact); if (artifact.typeSnapshot != null) { putCache(unit, artifact.className, artifact.typeSnapshot); @@ -166,4 +184,151 @@ private File getIRFile(String unit, String className) { String path = projectRoot + "/src/" + BIN_DIR + "/" + unit + "/" + className + IR_EXT; return new File(path); } + + private File getContainerFile(String unit) { + String rootUnit = getRootUnit(unit); + String path = projectRoot + "/src/" + BIN_DIR + "/" + rootUnit + CONTAINER_EXT; + return new File(path); + } + + private String getRootUnit(String unit) { + if (unit == null || unit.isEmpty()) return "default"; + int dot = unit.indexOf('.'); + if (dot <= 0) return unit; + return unit.substring(0, dot); + } + + private String getContainerEntryName(String unit, String className) { + return unit + "/" + className + IR_EXT; + } + + private Artifact readArtifactFromContainer(String unit, String className) throws IOException { + File container = getContainerFile(unit); + if (!container.exists() || !container.isFile()) { + return null; + } + + String targetEntry = getContainerEntryName(unit, className); + ZipInputStream in = null; + try { + in = new ZipInputStream(new BufferedInputStream(new FileInputStream(container))); + ZipEntry entry; + while ((entry = in.getNextEntry()) != null) { + if (!entry.isDirectory() && targetEntry.equals(entry.getName())) { + byte[] data = readAllBytes(in); + return readArtifactFromBytes(data); + } + } + return null; + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException ignored) {} + } + } + } + + private void writeArtifactToContainer(String unit, String className, Artifact artifact) throws IOException { + if (unit == null || className == null || artifact == null) return; + + File container = getContainerFile(unit); + File parent = container.getParentFile(); + if (parent != null && !parent.exists() && !parent.mkdirs()) { + throw new IOException("Failed to create IR container directory: " + parent.getAbsolutePath()); + } + + Map entries = readContainerEntries(container); + entries.put(getContainerEntryName(unit, className), writeArtifactToBytes(artifact)); + + File temp = new File(container.getAbsolutePath() + ".tmp"); + ZipOutputStream out = null; + try { + out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(temp))); + out.setLevel(0); + for (Map.Entry e : entries.entrySet()) { + ZipEntry zipEntry = new ZipEntry(e.getKey()); + out.putNextEntry(zipEntry); + out.write(e.getValue()); + out.closeEntry(); + } + out.finish(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException ignored) {} + } + } + + Files.move(temp.toPath(), container.toPath(), StandardCopyOption.REPLACE_EXISTING); + } + + private Map readContainerEntries(File container) throws IOException { + Map entries = new LinkedHashMap(); + if (container == null || !container.exists() || !container.isFile()) { + return entries; + } + + ZipInputStream in = null; + try { + in = new ZipInputStream(new BufferedInputStream(new FileInputStream(container))); + ZipEntry entry; + while ((entry = in.getNextEntry()) != null) { + if (entry.isDirectory()) continue; + entries.put(entry.getName(), readAllBytes(in)); + } + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException ignored) {} + } + } + return entries; + } + + private byte[] writeArtifactToBytes(Artifact artifact) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream out = null; + try { + out = new DataOutputStream(baos); + IRArtifactCodec.writeArtifact(out, artifact); + out.flush(); + return baos.toByteArray(); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException ignored) {} + } + } + } + + private Artifact readArtifactFromBytes(byte[] data) throws IOException { + if (data == null) return null; + DataInputStream in = null; + try { + in = new DataInputStream(new ByteArrayInputStream(data)); + return IRArtifactCodec.readArtifact(in); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException ignored) {} + } + } + } + + private byte[] readAllBytes(InputStream in) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buffer = new byte[8192]; + int read; + while ((read = in.read(buffer)) >= 0) { + if (read > 0) { + out.write(buffer, 0, read); + } + } + return out.toByteArray(); + } } diff --git a/src/main/java/cod/runner/CommandRunner.java b/src/main/java/cod/runner/CommandRunner.java index d6e89ed3..f43ba78e 100644 --- a/src/main/java/cod/runner/CommandRunner.java +++ b/src/main/java/cod/runner/CommandRunner.java @@ -139,7 +139,7 @@ private void handleCompileCommand(String[] args) throws Exception { int compiled = 0; for (Type type : ast.unit.types) { bm.save(ast.unit.name, type); - System.out.println("Compiled (CodP-TAC artifact): " + type.name + " → " + type.name + ".codb"); + System.out.println("Compiled (CodP-TAC artifact): " + type.name + " → .codc/" + ast.unit.name + "/" + type.name + ".codb"); compiled++; } @@ -210,7 +210,7 @@ private void executeInterpretation(Program ast) { } /** - * Compile all classes in the program to .codb IR files + * Compile all classes in the program to .codc IR container entries */ private void compileToBytecode(Program ast) { if (ast == null || ast.unit == null || irManager == null) { @@ -227,7 +227,7 @@ private void compileToBytecode(Program ast) { try { irManager.save(unitName, type); compiled++; - DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → " + type.name + ".codb"); + DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → .codc/" + unitName + "/" + type.name + ".codb"); } catch (Exception e) { DebugSystem.warn(NAME + LOG_TAG, "Failed to compile " + type.name + ": " + e.getMessage()); } @@ -252,7 +252,7 @@ private void printHelp() { out(" -h, --help Show this help message"); out(); out("Commands:"); - out(" compile Compile source to bytecode (.codb)"); + out(" compile Compile source to bytecode container (.codc with .codb entries)"); out("Environment flags:"); out(" COD_PTAC_MODE=interpreter|compile-only|compile-execute"); out(" COD_PTAC_FALLBACK=true|false"); diff --git a/src/main/java/cod/runner/TestRunner.java b/src/main/java/cod/runner/TestRunner.java index f46a57ff..4a533401 100644 --- a/src/main/java/cod/runner/TestRunner.java +++ b/src/main/java/cod/runner/TestRunner.java @@ -295,7 +295,7 @@ private void executeWithManualInterpreter(Program ast) { } /** - * Compile all classes in the program to .codb IR files + * Compile all classes in the program to .codc IR container entries */ private void compileToBytecode(Program ast) { if (ast == null || ast.unit == null || irManager == null) { @@ -312,7 +312,7 @@ private void compileToBytecode(Program ast) { try { irManager.save(unitName, type); compiled++; - DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → " + type.name + ".codb"); + DebugSystem.debug(NAME + LOG_TAG, "Compiled CodP-TAC artifact: " + type.name + " → .codc/" + unitName + "/" + type.name + ".codb"); } catch (Exception e) { DebugSystem.warn(NAME + LOG_TAG, "Failed to compile " + type.name + ": " + e.getMessage()); } diff --git a/src/main/java/cod/semantic/ImportResolver.java b/src/main/java/cod/semantic/ImportResolver.java index b298bdca..10eb1d5c 100644 --- a/src/main/java/cod/semantic/ImportResolver.java +++ b/src/main/java/cod/semantic/ImportResolver.java @@ -736,7 +736,7 @@ public Type resolveImport(String importName) throws Exception { Artifact artifact = irManager.loadArtifact(unitName, className); if (artifact != null) { bytecodeCacheHits++; - DebugSystem.debug("IR", "Loaded " + className + " CodP-TAC artifact from .codb (cache hit)"); + DebugSystem.debug("IR", "Loaded " + className + " CodP-TAC artifact from .codc/.codb (cache hit)"); loadedArtifacts.put(importName, artifact); if (artifact.typeSnapshot != null) { loadedTypes.put(importName, artifact.typeSnapshot); @@ -744,7 +744,7 @@ public Type resolveImport(String importName) throws Exception { } } else { bytecodeCacheMisses++; - DebugSystem.debug("IR", ".codb not found for " + className + " (cache miss)"); + DebugSystem.debug("IR", ".codc/.codb artifact not found for " + className + " (cache miss)"); } } // ========== END CodP-TAC CHECK ========== @@ -771,7 +771,7 @@ public Type resolveImport(String importName) throws Exception { // Save IR for next time if (irManager != null) { irManager.save(unitName, type); - DebugSystem.debug("IR", "Saved " + className + " to .codb"); + DebugSystem.debug("IR", "Saved " + className + " to .codc/.codb"); } loadedTypes.put(importName, type); return type; @@ -908,7 +908,7 @@ private Type resolveImportByScan(String importName, String unitName, String clas // Save IR if (irManager != null) { irManager.save(unitName, type); - DebugSystem.debug("IR", "Saved " + className + " to .codb"); + DebugSystem.debug("IR", "Saved " + className + " to .codc/.codb"); } loadedTypes.put(importName, type); From 02fdf4078b7785258c131ea900d269b2bafa4727 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:11:06 +0000 Subject: [PATCH 3/9] Finalize codc container behavior and uncompressed stored entries Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/887c4475-c345-4ede-8796-7384be58be15 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 388257 -> 392956 bytes src/main/cod/demo/src/bin/sample.codc | Bin 0 -> 2301 bytes src/main/cod/demo/src/bin/test.codc | Bin 0 -> 2097 bytes src/main/java/cod/ir/IRManager.java | 10 +++++++++- 4 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 src/main/cod/demo/src/bin/sample.codc create mode 100644 src/main/cod/demo/src/bin/test.codc diff --git a/source_.jar b/source_.jar index c80f4e27f93bdcbce1b62c6d10126c4a5dc27739..931d7c29cba60b5c6ca48f6c16be46083769b3d8 100644 GIT binary patch delta 22545 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 delta 18133 zcmZX51yogA+cg|GbR$TrNJ*Eplr#d;APpid-E|NUq@>w&NlABiNOz-vbR!@o<-dV@ zy}sY?7>={%d~!Xjc5!)iKYivty21+tL^L=!6co5e5$KNak4oP)!ACK|_3)rM;$D7dDFgERaM*is@80s37~)M~T| zc)$BF`XBqmB;3wi31jt8Nyay^{1Qk;Vi6OmT`s31oekPt)pK+YKl=q%uEWXJuav9u z#e9#e$F%Q}DOQYB;qFR)UXB`IX_~x*9}%WUIkvpN`;PqR>LK>&?~VZk%~w!O-)HK! zF6|bJ<9R>RIfIYQm1gi2xQ&L4Xr#n<96Pl1U{f@7(uF^1dKpy%rQgsyuDh3&ih7t* zMtVvHJlx09;x!A(GP7nN8ew`CHlMM-`t_wF-9?{V(|2+CY2R5NN52UpMB$B$g@gEK zvfZLjOGTM?Gh+6MwLJ=e7wPhk<89s&eD0r&`>vR9pdb4|o7P9!cY+Vo(_(7nG+cG_ zumZ-Z6y?CMhFX+Lu?_i&5EYC#$#=;$ZA?CO6orA`hP<}32oNf-euyr3o`|ocLv7lr z_9>>*N=5~@ddiiV>x_9z@6*GG>U(H>x?E0qPO9oUHBW>VlWigCuE$vfQ{0Yf{hBSG zVg?>FXRPing*Hmp^bOO}e=8OGhK7+uzv2b6tl7lpn>%}H?%BWdUX!HMq0WYk^t!K| z9pi=E4D-jzpoMwa)P=BK!yG8voA%m;O|wjP{9K(V-E!G|QH~uOB0CiCYJ<-z?%hl) zk*MTHLYBtEZ*7B;KHE3z#8qGnPeef9q&w4$u&SYy#e3Pq;KRwPg11{d?0loPvXj2S zwqL7uJZE`(GRYe+qv?JY5|o!5(s(IFzwe`ld8PXMpa2)C8aa`ALmYR{IHmMKiF|L5 zJ#pEh^EWa3(@P`)d(txbshza-g_xvZ{ah?)c*gW>6+Zz*7+h2LgqKH1Mi$qvLqE=D z-4j%RjCv^$ivPx1uu?=tLV6pnRWhv(_Nh0lxQZ+`RO$J!!~4zseAfe4Rc5(Y`PMEe zs~)EnKDeZDHaiAmFcq{?uGm+T6>$4*J8sJU6MjzoacWbmZj(M_1chB9Ql8Reuh@fs zNHqME!fh3s->Q709;HiKYpO|H&xmLd3h2;O{L15`2(J_woKn=cmI+#Z@T(l&6IR)} z-J2iuvMURcKttmtC$es-Jb1OZWa!`5nbnOO*&wKG@A`$4nK1V|2X|$|w<`a$4c2MnT{o{j`$zgOlVCPS4vS7)Ym&#GI6~g-8r)Rd|^FJe3U_s7Q@pwfe`_=)5`Qu#? zsq3P$u?HJxQc5GtU0*)stGwTSprqUhYlKrp`bDA{{Y2-(PVHIoN_m7Z&cr&J(K5{L zuLiUCh97jv1P#5`k~wZ4(m3ysdo_X`62qx^^6*RU7WGH5hN3AKbv&Aq9mMacJ4QxK zp^k4p$!0T_7&(oZh6)nDyvq5C2213)*V~jVS@=7EX*L;p9UR}_-tpeKAk^xpo@Wtt zmAls@0+lY-Bvz91^GdB?&13efirP)Pwu#k{(*nEZ$BT`=Z?7VzJ!OBTCin3}Z0;{@ zsYa~0O);6{(&D~ly?^bgqsVlanF1@wc4-2Q*2g}mlAgu+mHbFRE6`3l7lrBhg{(c&Sh;VW zs(^jb=d2II0~WLd^*i^HpBzjDDSJ%2L-}!o2XIP7QB4Ad!q>ty^2{*j>*6>>0-jn@ zmu$n4MTqN!>i8+S!Lu5Ih&N-v86;&ml2LS2YHI16X6N5Oz$M8!;8I$1PHddCjP!x~s)qMT zu*=UYt{uxJK?Cgy)C)#eO4N&I3lnn=G+!<)y+n}PDn7lcMf+qxbAUJs`|a}i6YPEF zNL$@^4LvUDUr7~{V#WSt!77R`utSwB&^&tQ=LL^w zUC+0llfuD%{gbJz!{&otCoGMNRK! z_WT(WR{gx^Y&)1i@F>|@PN^>K&{@gzU3y#~Y}F>AS`?Fi*yD&YqzecRo4DlM$^8zi zp~ETpvXs-WRBo2K>-l6U$PzwP*XZ$r!^u85dnk&VWs+d;sVHhELL2N%5J{$3Kw zq)Y2Zdz1dpqB*SQm^Glxj$9+3T(h*ipg*O=C3}rh! zyr=~ZI*x*EVWnr$WKy071@UqH`cC3zykDJSNFG7oW8Uja`XHeWJF=?{GG2AXJrVch zm^;LF_4pQlStx?7i}Z6QMy>6jLzhj9`y}X<^0Y4NHizPGjIzfjZ3srQikJ`;7NioM zCqVw3m`r<02Q{x{`}fg7#Hv>z!uI1nUWJEa2}MRmcB?Plm$BXx2O5OB8%UbZ?p0J2 ziRw5R&+d=62rZ-7!$pw^V%FHb7!{`skrexfXUg{^}_wIE)klfgrliD#AGZ#Pb z%PYn@$n&NnpK-3=b|hscXA5Ji=p-L}H!$#i`@`0DMw>GYf!|KGOP8@v8vgU>=TE)p zO}6#5miebLdKh_JKAx!U`F`^ET6?~iby{kzJ@5!7zQmy}wBFkyFs$asnH6!VO$=LN z&1cS4l}P8SKW8xg{J5vo^x+R5rzleUEK0z z7KwD+L=l@no`Iw>YsMJ6YF7!aN@;mzzCVYps+==>&ZBTw0V3Y=XXwf+^g&G5d%2H! zL)9X!&&*qQh(p?lV-zPUdK-30L?#L@GV&wMhGCuR7;E(781rvbI0x9RFM1`iG1=rw zl_f0Q@Oc_x^$E8psafV&!_K{3)k@r0n2dcYK z->gyTMUHkc;_Da>MicDCv5(2yO3q6opY&zs+-41?3d%lMiCAVegiSy7*^l zWXsJ-W6VM~DV&Zydq^Dhbx)O}tU^`R$DK#VFhh0}@tvu9%#E$N*x#P+5za~1h2ZWz zQ)RPvNPyYiSDQL1TTbg|^Uu{L(w<^{5m>Rc&1Bur{ZbQu)8l<(O)faNq6(vNhN$GM z#z?J?`I>^|oMj5q3Ti#4C+DBOj}|-ViK2ZULc=f6aCxxv$mdguq(EyQAzz_cnNpPi zQR8M2B_rHa~x-)}k@Ba!^nFVHvE3;fDcRp~3t5yzi7n`Nu2qAv+Gm zpNVq(($;W^ap_?S@m|lGal+s1)7ulaV)3Ht$2_967gYxC$p!5sMGGNJ7#-1+DmyE^ z|K%xV^^jAGt5HnW&tPLRlX{M3H}K;1*FKo(TgvttQM9}t!>$k9AF6wM#ay(KsXRE= zWJNB6)nSILjx_MMLYCvhc{ZkKs1^9?g(&kretd}~q<#5o>2P1g1mlbPdkGnez|gPKZ1~d&=aQWNQbdQ@y-g{zPEEG zz9_(9=0ijbckG1^UfZzW{!;cZQ{~lqS45ET0c^P+d-@yt+_DW0#v3BP2Xh`dBr#F_%n zRhmd@RQnMhnN}L!rUGMNE9czh3OB;o)M|r__q^rF^MI8zqInxl<#Y>Sob7+o%?4dG@rR4S$J@KMr`Hhq}AJ+-Gv!Y5|tVa*5i9GsN3wh}(tPlMWC zNDf!pkJ3SD(7&gBG0$fnIAf<$TMih!is$)2-3`TrSYXry2EUxjCP>vkdoMOPJFgW# z&5f@y?u57Us5~$v=+l^)-bPdo)^D~p=03Ytl#YHk1Y2Ko*Qq1$4l{THQ zsg|h>px<0iSARlPh&I3XfCX3?cp?G81iUaaICN5)5D(mEran$8CH zB#9+yAHIwf?hcWtOa^4R@JI7QD|jo&CU`;4lc;4&CKK$iv(1gyzqHtE59adR*0hnl z=NZ1hx1735LwCwPQ#DRpsmpIu!h0sdRs;!8s$~zx7!Y1YZ}q&lYlpHE_N8Q2yrL9U za`fMocnsI(4KF?`SdQW;&0^uh^Zo=?-LfbdH)$#aHwnd^(u45s zU^t4zgo?&O()5PYbvCxaO|8}L>`cmtsKiqhv`ewUv4B$6+MU6YFy2jltXQ#Yn6hWP z9|<-lC7&lJlYLoHHb=opZ#IeULwQGZbEl{L^3xZ|JbelFcCEUi?VC*Zs-C(LwHO|D zrUwm?NhQdR!YSuJLH;O|g+eZn z1}J}fWbcH+IH37*s!4r)y@h1K3SCljD~W)7%0O#PM%#bR9x3v8%zLO_{v0;ji&kXb z^=8y3Ce!+L5HBUScX*H=`R-RNW1~3MTv84~UF#NGGx=?c8P9N27mU*V504iOmL6%{ z>oy8c3=FbjD-9H&)j0O8(OqRH@f(`f4|z2B&dIk-#@Cjp-k`?PW;LO^#7QP-Gt+{8 zk?iWJSZ)%V?qnKYqs!O=%QsG#IZYCvilFuuQ!|9o(pj3;*!qKE(Guz4!gcA<%u$Ko z2c<{Fr-3O#%*yWMA9U!t%FjO)Qj2X;Z@*i&Y25Vbo84?T=8@c-?k9GZO|$0o@X=rl zZG88Wn?&tvNi>)9F98?j)&-1}IZKj7A1sDa^hhTy+J%0hlog2}wsSl)*q3>Vc#ALF zGUI#A>amSo-%q^O@H<@h7ZIrU0HLg0r(QkQ5{w*3!`UDR;D{dYj38K z13V_P9&oQS{UZJ8_AU0*lpD61^}};{faCK;QM+cMkxis4^F!OuftHO)rF{U)BXEscq^Tlqs_>uX3GPB>jpsI6z`#hngal2bXshld0GC*u+k66j!~)z|2nR!Ym$l9s~=Ng3~pFxzAhYE-g~f+mt@S9^r6| zt*g0mO)4{>XJN3?6n?R3H~rkmQ`l*CsfC&_dVMfKtQt8vW=vl?BIuhYN_n!d%<`M8 zr$GXAPDDcW9Fj?Vls!bX zKWxINdxg=+rI7o|#7<9>(_A;`TRJ~zl*uqTE>@+tO!!Jc4TlxJuc?bY>5^}wA!IsZ z+|ydkmF>@BVkp{iB$j_h&iXBns(|m6naDy5Uo7=-%+4vEUF3WYhfBCw_v;AZdqcv4 zv_f?EpM7&g?bxSBI%pOE_Ls&v$hLt^V{g>Q-5D> z30k#*sV(}me4}t$Rw6-QtF)zFg5Q;5+*av)KRY#=aZuJRf!hgrGl=xQJCqd4&fPrLLL801zGh8mIN zVNROEXk6X7zr=+2WpG(W%*XQcjE$HhLRH6o;QTCqo;iP*vEqBc>#j95NfnwR)?QBk*~Z};jX;pAZvmb973H7fnJ1#h{KYz5~n3M~jEyCPJmX&>c#KzWHfe)%_CzCGzS z-$mwpu{!h1%)XMQs&8s5tbTCSb5@DOtG$BOZ6ef(5h?!ZLDM-^S8E4pm<8QrM6Vv9 zY>pG^{>HO{h$nG6zV9S1lOkIBO-eB3r!fyNqMB<3@Lq27cZ@s#o|;BVdhk8pDckDB zteZPGjN71e|M!dM^`@6T%c{}I6dh}Ex|pgjb)o6fjw(koMJIJlN)fZ}uT1%tvB6dB0Bgkl4xqEImecgJR+ zSQKgsn|=E`az0DCHS$wNru#dQM>{nMQ-?}+34?ANABSkLiB*L!e)vyLls$Pz{2a-j zrF^{m&5_;mRuv8vgE9q*M=o@r=h&xPOQyG??z3VvZ{sKGL}mHx5Pa$PjCqNE+V{9a z$~B|WIg!wVgE9$tbL|F$lKQP*iARM}YH+MG7Q;Bc!5cn$&6Sv?>XklDIpe}RI~_MQ z^(KP&c@bQam-L2jrYdvyR}}@0qtj4K$WYRK=g*l&nkr_}-pIoDY7?||Jq7p#4@6Bl^O$os?0ymjet``V3BZ816X+A+|P$vdl1 zJHFSuD0UwABHo&GeWjAoUt+IgAAX@WijL+EN2N2HLcVa}t4ximeJ^R9$ivRZTtep9 zx%oE@FF)Tbdf>b*N~TS+FMnmJt4FmC272&kEBD&A(`+1;#q!6?8j3 zEqNC-U!U2j<$i664DIJijVxG8QX3ug8t?w?;v~t-Vz(7(7a)Pe%r)76ee^!_Qo<76 zVQ>#>mgN6}MlXCiP6&6c`LU|~c?~xgNJy;hS$&pJM{ zUPw%TGsI5c0lv35)m{3;h3~O!fc;VgI(%>ZnYc)YPD))E%hK?2kN}5`8QJtE`_nV; zdo-$Um^(sA4Ojagr6druN~k}CK2m_o>86HJ*WurRNWgf%4DJdp_{B zeo+6|vTDP{XIj6X)N)R>=`wN!CtB;tM-y>$dZS+y?i7kB6a09` zBpvBd6g|j5Fi*WffT^RC?9hr8NryA1%7&01jPv4NNx}y74~ex7}Ypr>(jkwhV9_YyQ16oj585? zWgiHaX(f0f;0~=(tNO#^MO9jpOkph1Q^ACc=QLjWC!w4ai==FDv$0ZpJ1e0oI7Y@& z8&ry|;?d{hfA?)spQJW=HC9Gg9ha);Em?V*;i|r39xIP3ZW>@h;O$egC|wc9#Xm?g zDxRF~uF~zPD=+ zqjeG32r#xxWY#lVF(|s3KNfpiw==-f@EMR&1O?`_T?Bhsn zO^L3s7a9$3cvwOsQ9)jV zaYP7r-jVL6W2L2=c!E0HUbwvYMj4sIX72ardvT0X7f%x}^FCrb=lNO1xOBi~F!~rW zLJO$xFAAd~UnA>YRUrS?WspKuaG|s|(06xlSur3fXzfW2V)6Xy1#j&j&%}E0ffB`c zrMj8gJn5RC3}?7Ry`cCNny|Nx##Hs5#Rr}R|H2XFL&0JA)YnO#*4Mfyc3;h9wnv$I z<|ZecstGEmbgVU>@1859WpP!(%%{+Z3$;5GnObVsp^N#Bk-^r@I$YqJgvTlpql(nP!6pWY2z%CmYLdx6pZbQ5)e59I6 z=$%sji=k}M^uwMJolM-QKp4N2k3F)*3wIp7pKjs>ikt1DK|^NfHQHO?@VVlh)Yu?n zv8vzK`LQowT`bETjHbm{O-(jC`0BEr$#77dNA*GPu0cU|ciKp)JcSHi@sp=-pSl$+ z7*>AWb@J=(vLgw7fPo(=nq1_3VdrIOR;G-vJp9>Uq4Re_uG4_qiO;rj{X*qwNPqI?OPpw*TqSiJcXS5Er+N{Y zd{E^OWo8?+5e-aoZQbKs(cru8% z%kWMse-lEguj3(lS=CJ{l^8&BwFf?PzuwwS2`|mItWGD{&xf&n<1&(j58~Gea-4O{ z6GPv>URV*ZxMx9k@o8XjO+&*OTc-7!o%k$l4s{vGxAg;OYPcY*Ukz>kI0^jWb+0KG1A+DJ9(RsMkfO{@-{`?}; zVw2|lg3e)$B|li6R8@|l2`wn<%HGGU6c=(SUVifB{DiR9%R(JM8kqA>6-m-Kp8%UEA9yD@FZ<8u>YbfUr$#>-GYh8^a%>tD}3+w9ZmyV&nF zBVk=ev^bqdt_kOljEm6ky%TQO`sZ9EPq;|0Ia7n$wbVLh^QdE8v8jm zKh)kZSJ0iUP6{Zzgc2f&SKrUnApk62LP=oR`jY>|YnI-YMyGm!Uctgkcf!dHxjdo4Q0Uk54hDs6ujj1O zb_t1JN{tZ11d2+(8mreEfJzvLb(q9WL+1auBjQryi4f)(1 zrYkx?VR+>=OERus+-gIoZc;KpI?=1Z{EGZOFB8V)yoL7ntR-QF_S2ZyBXTH*K4on5 z?(V}n8MZ2ZGmq$FR=y*dZ3$J+>usUynTM)*6Wg33K99<^@T%{>+sNzZNFpb51)3Db z-0ztx(HSG7j0jhX8a8DLe4RMw>Gd$vBw>@$OO`8WaMNcIbFvaD zvPD{<;a-bP50?AgCaI%txwo=WI-N+pV)53-8U+neP~X1@pgt>JmPBsI7Jc`%ji;-; zfzXC6aiqc96F_%-qr#ZC6I(8G^(~rQAiQlKW}}jm?YpL!JHPQx!_v{!t7E*9 zykQ|PL(E>($(#UEy1iXq$U$0%W$}@_etfsK7h_TSH9>k}tv*TuQT?J)a=e0PjC0YR z^fYJ4@((xf28EJCvz<%b*ZVx+kCH@;`utYu35hA@0H*ya<9)&fAkeq zIb=q?g-;!QBPV>+DFlwNlrl?a)4n|xONY940e20P`znbO)J7=_MdR>N0dg(P(l(6e z-d4_2SE#c&pLxxHKNn<6?(*97M{S%ms;ytF_G>T{)0-b{H__y@p=vNxnu8I17cdt!Ys&|;+mHK=T zR~J9~nnJvsD09Z(z|ugeVXv?X$6vojaWhEW>e~8OO6p;SbZTSR*XI5zuQorb+(0bB z807xkhBvjo10+d9IPdpV2B=lsP}3aX5yN8PKF9B<9N}u_HVzrilRnw{#;MWU!pBcg z@5(XGv1pZjI$GP!p%O~+Wr-_AiOMmyd7pP-i5j+n0`=9$ARaBE?CT2c3jGbaebm-+ z2|j95e-1usyScBeCRc_|lHT6-8u`jIkbxiNP0<1H)=(K()w8l64iRqbtfUbtbwMZ%%T*jcHqK96nn{pkha<9YPDRCDBMimF-f;lA^^)G0fOz%Z0D z;zPT3(Zk){167(srJ|7x3}xK%{ke!*vhoXa+?3_@fftHpF~_kv)P3bittKubUJG#e zytnTY`(Yfq0tts$@{y znO~9IUkM?UWx2Aj4r_^8y^M$r>35aEH$)Myp-V%ZMGvxQstyZyO{ z5KOO_Lh_!On7tA$Cb(*refTQnXI%WZXJ`-bZHj~su8%(sdnjVSyECVtvAceZ6EiPy zg&V9h8bOE;CbO*Rb@36T&w_}rh|hQ*@}lDC#g#ZHGWVeV5}t3OMrgFaDTApzrK9Sf z!gdx_COv~O!oO+zf~LtJ4+QIgzoal8`n*5=p(9;k3y*OkWwPYV6}1uQJCYm7Ja+8A za^cKQWNR^y!-%t(G+-7JZ3K07PVMl?gh1GIG)gSm@NiT{?rDuYCZqk)!%~&$xwchP zf=7h=4fcx(fn>XBSoUNz4$)USCHOKt1QC}Wb>$K2&?^zsycutAbq_y;Fs*`%3HHc0 z=J{3?dS60c`ZVYiKTA!zI{9UaP|BWzdm-InWs;oYm34g4=~Mr%1Djd!JOGhuii$ zZCDSJdZV87~P$=WtLcn5vtgtLb)^ zhY&M}9ezOjQkm!!_1QLhzGG_aiCHhJ$@O4{l5%Vp>xYXv9Vb$5@bjsyR+h$W-rqHP z6IP>Cng{_ooI4*`%w7e&WR$GJ@*~@{(qr#tIJ5o0d{0gPBhGJ@bEIVVZsVf}C}stH zKCC9k1o3!v$aX-JmGIzr6TxJ6p$G{cq1r9yAp_eXV-gcw;d_uvI!#_OX{IJ5yAfKB6ATOQ(etUwJ#y~8}`A? zu|?ydOB4IvKpizL^AO6oX11!Gtj$W)7sUtPUK;N@BlNjl7Y*ggWq&V@gXai+r}Y8Z zn8lSvtj!c{PCk7{k4Ms1W47X)f6M)%s>iLq#ZOz=1-irRK7aJqyi3MJ;%%0rj(I)I zNr+>kFn63qQr%db$cZNUJ;d-n8f2`IpWl(J$#DsD@0$La+4#Za{z&|>T2f;)MlakL zr9Wyp^}{_JK5p!1eIx?p!c=CJ`cM=lqRC3kx*oiTeTHAM;51aHgg7Niq-B1j%L=z4 zm~5CTy2t!1Uacs~c=O7HPWI>F*V6t&SlrIOURYjuE1`$)@m6qVw&rWXB4R9jk!6y$ zw>Tt6>Gml`hr@=uCL(QIRGy7eqIo%-XTKVpNzq;;V4`)JxJzx=;y){;AD@Y{N{DM} z+TQjli5*w>$VSH!O)ev);Z6?O8QiGkHn@;<`guV9)`?(SXy<7HTmwgWQ3^XD{J@q5ZTDk<4vB>`aht@AYba_UGzI%`{(^jrPa)xM}@yf5+Mn!#*~p zAZpdnN*t>>BAD@h-un2#EuGcHxp!M^LH?IvbochNz&DFz`P@%dsMFsYCeW~CY6Q`? z+1TwR;8!sznz^h_S=G0a^UUDZHYwSb4zSOb>5geQ37S0?ZWKb1bMm8cAN(~rMxv0U=9qWs3SRJEP8|TT`&RW zpFy6fqQujAAw3+OXgemuXz;sHPYx{fR|)DIa!Nc-YNLgQpN&sWS_d8#hZ)hgiV~dm zH_Fk?kr+j(G_#CJLIz((C$*~`qjS#uo^I}#$+{OutXAi0jf_@5aW#o0oeKLL#X+?8 zDL@ND1lUYi;$ZRBt9oPnYNn8FEv!<)$$9uhG7ovASvb$OsjOO^ebt4OFML{jPxAP4-SK>F7DWg2MxQ1e!H^M@dSa5R)2^5zeL3#8l- z=K26d43q&lz5(U8;57uv`p)d32Qp9;0}5pSBcd!lZ~(kmkZkg}3#=CleGVb;`~!#p z??kYBr?F55NSkjITP!)y6$&K-bO11;s~h4m5C(t_1pJ~DyC|blBai^+n+_iVP!fpW zza$Qjm@9f^A_yCIK`|54u(E0k8m+6i_)W6p8^1CxGtTgTX{-fwzfJe1IeoR3#1hm(YNK zZ+9q?pv=JWjX*T?2ADw9KZ3p<0|iM?Hb}~!HcC`WBI->hWB_wA=vOf;Dx!cg$}))z z@Jt4+i*7N{pA0pIz#{&YMOCHH0L^9pW)xluT53k!_>as$2M$v}!>n5f2&Y1&A%f9& zB7&&5>1aTIDkxt2hav`$K7(#>j=?I}#@uH3E)B{GslIDZq(ONhda+T92b2IuI+%IR zT{|!xssTZcyVZwgKv^KNcWsRfs4_$=0nC#Qn9KmfQO2D_ zfahn>Mxgdz4*2#NDg${{2gYRv)bc=C)?K?K56TOV2C#jGQbsPIMKO;O1FZQ_dib}0 zQ&D-NG{EI&aK79wSM4uRBeRqMVF5S>8Mp1I#xX3wr2usMx+f}Ph6;F82t@&gZ-~M_ zgb*aYA229{szH|fK_$j0KyuifmSbCR3(Sd%S^;5VARNa!~?@<>1UUxNS#y zY+>A_Ko4=Bztu~v00+GDwjH&weILN81Z7bx;9&FI)(`Nh1S_<8Lns12ZiMTrH-=FP zKd}MXDiCw6{evlh`Wp;e2X$EhST**m-m|}5 zzWgI50|Dwl@Pr~SXG3oTF)2ol?0^s`oQp<(m?#YEjO z6heP7TQ^LU*&UPW1djzsw}H8h{lhFc!P5go?O^=&HgJxf+We&m-wp=E^!tmUjesY+ z(~gV#pKObQ|I!+62bUdB#0^6ZFm>FN>>uzU1^yo3*#$;R=m4W(#N6qOb%0kVI;nTS zuHcVO(f`CKNxxBe4T;UZQ_L@iCj!vFfbN5u@0is7J5yZJKYy?a2gm&H#s&UXygTl? zQw9He75~N<2N(xGgo6nEyrVI@paPHwmv`V9D&#g>dI&BGU@!oVe`6Pv2_kU^V!Od( zF^J$+0JfokN;mXAP|^xTB>V3hIygAW{|Rq!|37_qDhLKp(hcUnNqXmgzZ)#LEcG3b z>;WeX8uNepwL%bdAnxpDsCvMZd06lCe)d46AX?9E04bo+3%ZN`2c-6bWhFDclMJ{* zuz_cT;F&?w2X3}c9Pa3}J}4?+`4ik`%=$p5X8+O8A;V68bTEOBAHeAM`$6}|ZhvSL zpeO`_dzVx|KWJ~^`$vWe^!0<+TB!kdj6ytw@FqSkU{VOd{_8ZEPrOlh1z!s24}jTC z4S;2RQgg$BmqUZ#zAx5v1MUHPLl7juXAsQ5<8Ov>_}{WD4}uvmfM?nt?XPnX9Dr^J zGrNI1^NVX#V)apa3FcU>-65F~mUP4a2+t zmyXalct&rJft%~m;s4Tt5c=c4m^mZ_f*X4rpmiKfSnBjI*#!#t;nuC}JvzeQRlEB2 zmsSZn!acxx0?gp_@{R_3!UrDRQpTj`4x0_rT&KjZ_~^WurVG7475gH0If-3cg$co0ve!u!|;0FF*^}p zKliu5A@5rN`zienI9LPyTt$K%n%e|vs_!7}%cp4 z)e;yEH~0>qErWx)_7Bim2KyNp3LGrobb1*o1V02s%!6&L6>xXh4!bi+NeA<>Spfrr zC+BUc>sCOI_K`P00}>T=r)IhelJ{cndfvDS-lZ_a-jwqtgdVsdDS+2&V8MmsZ^AtR zuJb^zw`*x)4NO`#;YLRVqMCT;&1fC;HlB0`YSzKs4J+ji;BP=h;kAK?o1C#r5pV(j z4KOvWv^(k02H3w3>34v?92DOcMsyR55u0&Gdu)Q;ru%eLTQ!Ju<{f!iiGT$-->h1( zEl~G;)*bD+1zt9WX5RsD+F;)dGd(0F=Z@jsh6=)003tV|ZBmDT4}9JRrHh~Mq=(yJ z6)^MfKug2Fqx5>*9-USsO6y23nc^AwYz4&g1 zHn$*v$K5U%OSk0C>U0-8szl1}z{@=_uypy|XkB%HmCoA(bw7cb-c0|Wd!Q?i%Da^% z`~x(Usl8iK7rh7=cT2GB2N?TT+nr9%IGFp%575Qq&btLWybtcu0{bAN^*4ht1=@$- z(9Yd|6rVxrdhUSmG5ENG`2ZB3{mm481#2I4bH?2+{M#EaEc*H7xMR*A8f(UYr2zVcZB9&v%i5T<-SVBzh-I0VR zpa#XGJFviphy`e$f~hB-fT;^m{X^gAl+xY-YhFac8y)cc=DuS}PN8CuV6i*!;0#=; zF(x;F4p4DLB)IdJdj|SbaK6*Q3PdEkqZu+0aWMbA2CR7ZDH0KQhYh6%^nO9P5J-1! z5d~2D3%vK(y1GRy0Qor>8%6=JU4rM#?Etb~K+ypE8@lWNqkGQ5^-}Wqf3;sgqA35D zK?8Cwz~jrA>V_r-pqHStl3O5jch&meN7!(1PyWsL_M$nL?al`LBAXYYCUOVB*Vxzq z&K2loK>m(VzXJW|s@(x=Qz#x#cL~KI`|m9`92~>{_a0Sa6 eehvENu(@NVuA%p_1mOkYb!@@Qd3Px2 diff --git a/src/main/cod/demo/src/bin/sample.codc b/src/main/cod/demo/src/bin/sample.codc new file mode 100644 index 0000000000000000000000000000000000000000..816f7308e4cc3082989ad78ee9074f0a55cf7d79 GIT binary patch literal 2301 zcmcImX;c$e6rK!8m-mF*~E=iz<`EL4uYtJfJQl_s8|81D4PYEU|9sh zzHfSvMGbarGTiMp8-g$Xc{41^v-i*5(u>Z-vNTAS8eq7SJ`$q3CB6t0v)~5(1Z<+ zzC3{UyE!^{JbNevNw2m57)ydUX`;lRd^1&B?2*1g?2s+qg?ZB-y5ITV^1P`j`m1?FkPY36EhHV?wj{ujo|o)& z@OHm#H&H8~+CXs4tvd05!q4w7z4aj*8qNKqS zoS6!*DgqRF+49TJr^r*PJFqns;_y1y*Et<*zdlp&D!QpuYB=w8=lGfgsi7j=Cqlj! zS(TneNe4o7$)QQs>WDFC@j*eFi2p85dyG5|Yy#IO)M6T!W*;o=tnAkX5OT7d&6YrS)#(f+bN{|sp4!tlqhx@K zG2+VDZUZ3&^r)nG+b1w&=qFn?AhGZkaA;)w_r>o|t==CgNK~>(maVU&gC1ZIN6IFO zW{1jiL4=U8Yunm7Yd%(wBBhB670w0fLb;KuFtpGXH+7sAk%kSKpOagi{<vj| z58AyP9s?+mdycD5;6UZdgL@oA9dH1WIIQe$M2WEJvESjbmKB)4p-Tcdf;zuuGi1?1@KYXt|5#XZyo{TWPN3qODJ-l!QXje5WgGH}01dKejTU>Tn zvUkmiZW)<-n;xi8>tUq_+xyqOcl!kMo3Omd zM&(4vA{y+A<8nqwQ2=&sR^t?0O7|s_6z4u5WP)<+666Ox>#Hv zhqOS#mCOUJn3Eb`JrB-I-1{~RiYZKe#B^Fy$KFtgCrA!DG^52FJeLl>~Br1F~ zckv1cN2DR81@+Rfs=uAo4w{PIC8KEm3|6(|^0cV;d&X&%m7yVn*wFx@QH7DyhoV-| p!7SauO{3yqY3Q$G%EugbO!@ouxkC$$N+4n?9Qa{xqWwfa#6MQz zx{+cERbAh9k(Z8OU3JF(qt-=Tv55YZ|nkLQ2rnckU59xFyo z#Y$>ag%4WP6oACf zY;!iCL>?J9zMr8;3OO=@hVJvD(zK_p+y*S+#eA*R(%Zt4r*F{^?o*Bb_`~uffQ#@3 zGQ)MA#xb7`)I`Wahih4xESD;Mz-*!QiAj%34DR&nlahL<)la20qqp{dKdk5kMeh*} zU16m?0xGzAN|Qa!uzXdIhRPibWiPD`x&v5LEVo3`-$wubu3K!W^Y&=SBRIFIa1Mv` zjWFXI_bj(V4(6X1bip(CQKI`^tTv!Xc1&BTvFslF0j7nNfKbrcA7$dm<}Gj_uY z|J>>SVJ-1N%CG&JE6CC#mBt%oj@neXmL@nBAlcD^nY&FN-{f9ZVFm!4QtM-wrHATJ z3*^ueSw#TCOlu4a=kakK2ZOo<{+urn(?#LiA>m5qsSYGbosSM9b|HSf3|VIQk4>o) zzpdd8{arnJmXkP0@z69zk|{aBrYN%lqwJU(7L3S`DZK0YfS-bcc%S0cr%2NP!*aaC zOy^M>Tr885RTRE-at4w7teZGCjJyIl@*vC?rl2LuOucF1h^#|g=N9pmcIxMofc|IM z1%U&coI#URkP+^KQzwQp3>HT=)D3;P%o_w6+B0wECKya?No$AQRm__kQ@X$opp$G6 z&09b$Mk-Igwtj4yURfCyGK!q95S@lX6QF-T*b&V?*O!lZIt`0MG$`;h0sn)7w*3hf C_wxe) literal 0 HcmV?d00001 diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index a930df33..6bfb12d1 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -24,6 +24,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; +import java.util.zip.CRC32; public class IRManager { private static final String BIN_DIR = "bin"; @@ -247,9 +248,16 @@ private void writeArtifactToContainer(String unit, String className, Artifact ar out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(temp))); out.setLevel(0); for (Map.Entry e : entries.entrySet()) { + byte[] value = e.getValue(); + CRC32 crc = new CRC32(); + crc.update(value); ZipEntry zipEntry = new ZipEntry(e.getKey()); + zipEntry.setMethod(ZipEntry.STORED); + zipEntry.setSize(value.length); + zipEntry.setCompressedSize(value.length); + zipEntry.setCrc(crc.getValue()); out.putNextEntry(zipEntry); - out.write(e.getValue()); + out.write(value); out.closeEntry(); } out.finish(); From ddb8983b7e26d01a9492166b61597bb0f5051eef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:11:22 +0000 Subject: [PATCH 4/9] Remove temporary codc smoke-test artifacts Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/887c4475-c345-4ede-8796-7384be58be15 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- src/main/cod/demo/src/bin/sample.codc | Bin 2301 -> 0 bytes src/main/cod/demo/src/bin/test.codc | Bin 2097 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/main/cod/demo/src/bin/sample.codc delete mode 100644 src/main/cod/demo/src/bin/test.codc diff --git a/src/main/cod/demo/src/bin/sample.codc b/src/main/cod/demo/src/bin/sample.codc deleted file mode 100644 index 816f7308e4cc3082989ad78ee9074f0a55cf7d79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2301 zcmcImX;c$e6rK!8m-mF*~E=iz<`EL4uYtJfJQl_s8|81D4PYEU|9sh zzHfSvMGbarGTiMp8-g$Xc{41^v-i*5(u>Z-vNTAS8eq7SJ`$q3CB6t0v)~5(1Z<+ zzC3{UyE!^{JbNevNw2m57)ydUX`;lRd^1&B?2*1g?2s+qg?ZB-y5ITV^1P`j`m1?FkPY36EhHV?wj{ujo|o)& z@OHm#H&H8~+CXs4tvd05!q4w7z4aj*8qNKqS zoS6!*DgqRF+49TJr^r*PJFqns;_y1y*Et<*zdlp&D!QpuYB=w8=lGfgsi7j=Cqlj! zS(TneNe4o7$)QQs>WDFC@j*eFi2p85dyG5|Yy#IO)M6T!W*;o=tnAkX5OT7d&6YrS)#(f+bN{|sp4!tlqhx@K zG2+VDZUZ3&^r)nG+b1w&=qFn?AhGZkaA;)w_r>o|t==CgNK~>(maVU&gC1ZIN6IFO zW{1jiL4=U8Yunm7Yd%(wBBhB670w0fLb;KuFtpGXH+7sAk%kSKpOagi{<vj| z58AyP9s?+mdycD5;6UZdgL@oA9dH1WIIQe$M2WEJvESjbmKB)4p-Tcdf;zuuGi1?1@KYXt|5#XZyo{TWPN3qODJ-l!QXje5WgGH}01dKejTU>Tn zvUkmiZW)<-n;xi8>tUq_+xyqOcl!kMo3Omd zM&(4vA{y+A<8nqwQ2=&sR^t?0O7|s_6z4u5WP)<+666Ox>#Hv zhqOS#mCOUJn3Eb`JrB-I-1{~RiYZKe#B^Fy$KFtgCrA!DG^52FJeLl>~Br1F~ zckv1cN2DR81@+Rfs=uAo4w{PIC8KEm3|6(|^0cV;d&X&%m7yVn*wFx@QH7DyhoV-| p!7SauO{3yqY3Q$G%EugbO!@ouxkC$$N+4n?9Qa{xqWwfa#6MQz zx{+cERbAh9k(Z8OU3JF(qt-=Tv55YZ|nkLQ2rnckU59xFyo z#Y$>ag%4WP6oACf zY;!iCL>?J9zMr8;3OO=@hVJvD(zK_p+y*S+#eA*R(%Zt4r*F{^?o*Bb_`~uffQ#@3 zGQ)MA#xb7`)I`Wahih4xESD;Mz-*!QiAj%34DR&nlahL<)la20qqp{dKdk5kMeh*} zU16m?0xGzAN|Qa!uzXdIhRPibWiPD`x&v5LEVo3`-$wubu3K!W^Y&=SBRIFIa1Mv` zjWFXI_bj(V4(6X1bip(CQKI`^tTv!Xc1&BTvFslF0j7nNfKbrcA7$dm<}Gj_uY z|J>>SVJ-1N%CG&JE6CC#mBt%oj@neXmL@nBAlcD^nY&FN-{f9ZVFm!4QtM-wrHATJ z3*^ueSw#TCOlu4a=kakK2ZOo<{+urn(?#LiA>m5qsSYGbosSM9b|HSf3|VIQk4>o) zzpdd8{arnJmXkP0@z69zk|{aBrYN%lqwJU(7L3S`DZK0YfS-bcc%S0cr%2NP!*aaC zOy^M>Tr885RTRE-at4w7teZGCjJyIl@*vC?rl2LuOucF1h^#|g=N9pmcIxMofc|IM z1%U&coI#URkP+^KQzwQp3>HT=)D3;P%o_w6+B0wECKya?No$AQRm__kQ@X$opp$G6 z&09b$Mk-Igwtj4yURfCyGK!q95S@lX6QF-T*b&V?*O!lZIt`0MG$`;h0sn)7w*3hf C_wxe) From 2ffb5ab18ebfb50df9d264906677bb89906f9285 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:13:01 +0000 Subject: [PATCH 5/9] Address IRManager review nits for root unit parsing and buffer constant Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/887c4475-c345-4ede-8796-7384be58be15 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 392956 -> 389525 bytes src/main/java/cod/ir/IRManager.java | 6 ++++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source_.jar b/source_.jar index 931d7c29cba60b5c6ca48f6c16be46083769b3d8..18229f904bad951d53abf2b1a4b4de9e88ac7d68 100644 GIT binary patch delta 7737 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 delta 11072 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 diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index 6bfb12d1..47c7a8f3 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -30,6 +30,7 @@ public class IRManager { private static final String BIN_DIR = "bin"; private static final String IR_EXT = ".codb"; private static final String CONTAINER_EXT = ".codc"; + private static final int BUFFER_SIZE = 8192; private final String projectRoot; private final IRWriter writer; @@ -195,7 +196,8 @@ private File getContainerFile(String unit) { private String getRootUnit(String unit) { if (unit == null || unit.isEmpty()) return "default"; int dot = unit.indexOf('.'); - if (dot <= 0) return unit; + if (dot < 0) return unit; + if (dot == 0) return "default"; return unit.substring(0, dot); } @@ -330,7 +332,7 @@ private Artifact readArtifactFromBytes(byte[] data) throws IOException { private byte[] readAllBytes(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); - byte[] buffer = new byte[8192]; + byte[] buffer = new byte[BUFFER_SIZE]; int read; while ((read = in.read(buffer)) >= 0) { if (read > 0) { From 5e66c9bb43342ce9fabdd4d21c73d03f2f997f8c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:14:33 +0000 Subject: [PATCH 6/9] Apply final IRManager style cleanups from validation Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/887c4475-c345-4ede-8796-7384be58be15 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- src/main/java/cod/ir/IRManager.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index 47c7a8f3..0ff38d8a 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -275,7 +275,7 @@ private void writeArtifactToContainer(String unit, String className, Artifact ar } private Map readContainerEntries(File container) throws IOException { - Map entries = new LinkedHashMap(); + Map entries = new LinkedHashMap<>(); if (container == null || !container.exists() || !container.isFile()) { return entries; } @@ -335,9 +335,7 @@ private byte[] readAllBytes(InputStream in) throws IOException { byte[] buffer = new byte[BUFFER_SIZE]; int read; while ((read = in.read(buffer)) >= 0) { - if (read > 0) { - out.write(buffer, 0, read); - } + out.write(buffer, 0, read); } return out.toByteArray(); } From e77c785985f65648dea2e0e9ddf23ee6c69b94d5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:15:55 +0000 Subject: [PATCH 7/9] Harden codc container writes with locking and temp-file cleanup Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/887c4475-c345-4ede-8796-7384be58be15 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 389525 -> 389796 bytes src/main/java/cod/ir/IRManager.java | 77 ++++++++++++++++++---------- 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/source_.jar b/source_.jar index 18229f904bad951d53abf2b1a4b4de9e88ac7d68..69b15c9fe45ac9ff0e67a5d0a2019e9deb1519b9 100644 GIT binary patch delta 5597 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 delta 5122 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 A&;S4c diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index 0ff38d8a..5fe9da25 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; @@ -31,6 +32,7 @@ public class IRManager { private static final String IR_EXT = ".codb"; private static final String CONTAINER_EXT = ".codc"; private static final int BUFFER_SIZE = 8192; + private static final Map CONTAINER_LOCKS = new ConcurrentHashMap(); private final String projectRoot; private final IRWriter writer; @@ -241,37 +243,56 @@ private void writeArtifactToContainer(String unit, String className, Artifact ar throw new IOException("Failed to create IR container directory: " + parent.getAbsolutePath()); } - Map entries = readContainerEntries(container); - entries.put(getContainerEntryName(unit, className), writeArtifactToBytes(artifact)); - - File temp = new File(container.getAbsolutePath() + ".tmp"); - ZipOutputStream out = null; - try { - out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(temp))); - out.setLevel(0); - for (Map.Entry e : entries.entrySet()) { - byte[] value = e.getValue(); - CRC32 crc = new CRC32(); - crc.update(value); - ZipEntry zipEntry = new ZipEntry(e.getKey()); - zipEntry.setMethod(ZipEntry.STORED); - zipEntry.setSize(value.length); - zipEntry.setCompressedSize(value.length); - zipEntry.setCrc(crc.getValue()); - out.putNextEntry(zipEntry); - out.write(value); - out.closeEntry(); - } - out.finish(); - } finally { - if (out != null) { - try { - out.close(); - } catch (IOException ignored) {} + Object containerLock = getContainerLock(container); + synchronized (containerLock) { + Map entries = readContainerEntries(container); + entries.put(getContainerEntryName(unit, className), writeArtifactToBytes(artifact)); + + File temp = new File(container.getAbsolutePath() + ".tmp"); + ZipOutputStream out = null; + boolean moved = false; + try { + out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(temp))); + out.setLevel(0); + for (Map.Entry e : entries.entrySet()) { + byte[] value = e.getValue(); + CRC32 crc = new CRC32(); + crc.update(value); + ZipEntry zipEntry = new ZipEntry(e.getKey()); + // .codc is intentionally an uncompressed zip container (level 0, STORED entries). + zipEntry.setMethod(ZipEntry.STORED); + zipEntry.setSize(value.length); + zipEntry.setCompressedSize(value.length); + zipEntry.setCrc(crc.getValue()); + out.putNextEntry(zipEntry); + out.write(value); + out.closeEntry(); + } + out.finish(); + Files.move(temp.toPath(), container.toPath(), StandardCopyOption.REPLACE_EXISTING); + moved = true; + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException ignored) {} + } + if (!moved && temp.exists()) { + try { + Files.delete(temp.toPath()); + } catch (IOException ignored) {} + } } } + } - Files.move(temp.toPath(), container.toPath(), StandardCopyOption.REPLACE_EXISTING); + private Object getContainerLock(File container) { + String key = container.getAbsolutePath(); + Object lock = CONTAINER_LOCKS.get(key); + if (lock != null) return lock; + Object created = new Object(); + Object existing = CONTAINER_LOCKS.putIfAbsent(key, created); + return existing != null ? existing : created; } private Map readContainerEntries(File container) throws IOException { From c617ab5b1d6de6fc64b83af61c270af8863c52bc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Apr 2026 01:49:24 +0000 Subject: [PATCH 8/9] Plan: clarify standalone codb is permanent supported format Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/8cd07c91-6a23-4516-80ee-ff894b92e063 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 389796 -> 389796 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source_.jar b/source_.jar index 69b15c9fe45ac9ff0e67a5d0a2019e9deb1519b9..4039b0c42ee23e0bc087ff203f7605852ea05986 100644 GIT binary patch delta 6045 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 delta 6045 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 Date: Mon, 13 Apr 2026 01:49:44 +0000 Subject: [PATCH 9/9] Clarify standalone codb artifacts are permanently supported Agent-Logs-Url: https://github.com/DanexCodr/Coderive/sessions/8cd07c91-6a23-4516-80ee-ff894b92e063 Co-authored-by: DanexCodr <216312766+DanexCodr@users.noreply.github.com> --- source_.jar | Bin 389796 -> 389871 bytes src/main/java/cod/ir/IRManager.java | 4 ++++ 2 files changed, 4 insertions(+) diff --git a/source_.jar b/source_.jar index 4039b0c42ee23e0bc087ff203f7605852ea05986..c025f25919ceb324fb3b1548a0c7ba4c2c23777d 100644 GIT binary patch delta 5379 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 U67lueMu-b27x_(J6n@zJANsX1_5c6? delta 5719 zcmZve2{@GP_s7jMp0UQ*m$JT;tdTWKQcAW&iI6tD%37ktJ0wIAC3lI)T2k4mM7GGT z$i7FGFd|E$|2-bBclup_*EMF&=X~#TpZlEiEYrh0$-_KMCI)y~Mj9G=dK%G4rb{?c zfB!&#T%JEN%gw^g5@t=OCi95mA5;Lscsws4(IY5`=Rr1+_-!tBDSy{2K|b#_FjBnr za^ZqQRk1tga{ALV4q^*asVZ?S`*gU^$9##5;7IvFnwHh}qoFs+e%N3=63!ZePA$mJ z<4@||RrjvdGfj0j7b>|N*>lXUzS6amTqt42-RC6b=~Vnw)o3s$#z88Ey!z1bimjd6 zvt`#}IfY*NCDH?}CRM2+m4~gNtql4I=|{ZF>HP9z<64z^SWHc|1Co19 zjf0=`FYiHkPU5BqiAQ~Q>s|8nU6nt@)mW4GTXtWeACO9ru2%8)VluuN^?58eBfm|M zu=&yOOhK+?Nz%Qq^>*gnS&F}UOJbsQv!9+fccbV3;c%Z+ot6M%`i4Py+4@I$VG zFZJKX(+YCb)I^f(%x{HziPnwmj{7}97${X3yTE#D>_=;T$G7or9m61E&b7NLeYVy# zHK*sx)%t%8lMazq>}hb;GsiDHjF=d1lpaVUbk$Cbc`*r_X0j%K)!~uj4^T7OA1!;- zMzp0!dMS(UobqpnIQJdD=w{-D&NlqbD4e(0NOxM_ZZ%A8YA#Al(K08k|EV;6VeZOB z{=~=MMZfI5CoCStyhGsl;XdIZ3w>nX9AGzVpJL9^}h~WG6FfESZ&R9{1FB*E{j?NXI4o(Z3TDjh!Z>yc-QU z9HiJqIMr~3hZ@^TRy%R&x*WLpm>DCR8^_`bpGz#x8H&*!{!Dxy=E}!&Yg6DoX?F6v zMypW?y<}~J01}gTTu>D^3%ko<9!Vi?i^-U zDd=A=Y=2;7{g~Y0TJrSzQw4_!!tF`jQWG&3eXld)ne76H!)x=xPvrX-Dn)2m7oDhg zxyepIGZPvwc9K*rh;#GH)7zO}k6KoiO2%E~Vffy9Z2xw>=o%!*&PG|u<1co>-OX7c$=G96@^*=BOtJXT#^tHMR1 zT_`xotMDX)$~Lv6JkH7}vj*nD6gAO~)-rGBPxE2(5xdadYi4zU1Qj90N1TfOmJPf= z^LQAIFMl}2ttArN^F2M|prWFnKwi35lTWz@-|>$=j>cL>^C7xtycUN3IvZYE&`e+Y zusJzJ_Av7nyeX+LRwSc;cr;nM_gho#izx^GiRu|ky~glE&z^0~iZA9TwdlHhYSc%{ zS?^oxl?)S7#_70f> z`I`;<;@_U~N!3(xZA(>N?sK-6=vHuGimd-b^GRF()nfjup+UfV@7dB{H3=-j1Wc^q@} zb1_@O>kp=};uJ_*Sh99T4B6*6UDt0OptWnaqo1^QzwO_gL#pHV@gh9_%dbIVV2@KU zua6B7;y*nv8+TUp28XVGP>Mj)BW8~TwmEX3i%N9P{{EnmmVUz?{YJ-47wGq@i(Y!q zsxmfj$6mp!=B_&b@B{7*{XvM&Pnm!``3ZHT%V zt;$k6W^A)=o04(|v|mbfixSrEzH!n*-u`z-Q&FTLt*_#Ms_IU;g4mVi z19wb~Tlusf4RJYf*abRBDEdsie_ElV-?({e562$&?ROV`(RtDcu~?)}UktO-F0fIq zlL@}lC-|IXyLzCHWX>(1>-O5)+d;lCYhl-Sh2YB78;ifhM2M21UZI1WW+~{qt8(Uc zo|!rNOs=ul1gcYHKk%Mk@NzU?wr5lfEh0{QV-J&+a5Fr`D9k`Bp^9g8NIRUa+`v}a z(w$A?*cff}z*Y4s>%EUL^0#8e=~BZx?H+WiDVK@=rOBIAlTXsq?nhGnqV{n!9Fxxp zxZ5>*B>Cz+pwP@pNhV38xC5yqo!4xef`QS;f3LVLVc?}*%x1I{TKh zwz(i9>1?e^Sw`2r=LiA5q0+Z}w+#Pnk8J809P$2V)!fo$%he8vB~sI#Xw49`|=R)pqdui&3A=+GXtl#7S=kT|1f+-)8qLh(^U@=@>k%907=EyCa9pmZPV`d zTPzE*f3r^Pt!PVgas68{-sbDiH&spMw64b%N|g6`+gE3iUCj#_ID~QnJ%VZux}Mll zXt8uHRn5o8f9P96J~}&Jdq`lgNJ#UpxJ+yQ401o_jgZDw_0eMaH~H=2L=ms5+?-ch zVsd8D712``y8{-kCdyTlR95m6loS;L%92`hU+5FAIUJ~GIna3W`D$!1uJocN-}d*o zI>CTqjWqZ4h{-cwYZtd|RisnTKHcaeLOZ|wF^qj8hjHS_*iC(=)k)VB?XIcD&e@)z z?pMQB4AF`Gxq7GT7ytQnV3}SpWzzhJeCbh31M*8f_Uq|xlExiZ8IpJe1jO2DgLmwk zJ;9g9=CAjter0iRrqVU|rw9T+c=(|$_$h*h+u}q)h(CH6CmQL`QNVQ#J-7=*wmfaO*^U9 znJ6MmK%x|?jw%14T2;bSSCkP!EDZ5F$_#{yQ5Hl*2Q*irTtGMxApnD7xao0f(yfDV zft6wyQ{Cl{n1jw#>!ylPHDu}v6>;-M=z(Dg3@7LPzgXB8zDFmNph`%z&;R2i0>*c6 z-5bCE^;y0{)e-rS|HUvI0hGK$l@YrzD&N;IgqxB%8&E4n`H2jF+E^6|o4Pgb06>!I@a=4>z=Z2btf+Z39t_?x}CKad#GC@t8x)C;PJ*8_zo`1Vf zL!?>RQ`k+(mJh5_0!^-y09aX3-Vzq80{6J_y-w&8| zcood*_kS7`>|TO3>aBvkf4#V|bPaQW{nb!S{)u6?WrPnqgTu-nXJA>u1Z%rYR--yd z`EM#>`~lTM-XcK$1FVWB9?uLw9xOy2il@GAtWiv`n+Hz^et$sakQ4%NuZ4%!uR)b@ zcY%KmdI~WiBL=#7 z7EJGH@W-J93^2hXh%rHo*&l*EW|*L)0bWQg=9t0V2n$wbjTvw^RixYoGb$S4aNj-$ zN{3Khz}o~i6b{{8Uqwmb(_K6_C~Skl?nP1I(0Du( zU~Y#4m340;A`7Vc3JZ3z9p0eSz=oOtiUCv?w!^}A9jF3s21ItCf&kYE^CZVodCe$<5Kk2grpO7F24Jl734e5uJ%MT+ z(goYF`7zbH_{T7Zwa#DYf;q$_uKPa1#tJ3j*}&T_c#xJPswEc5cs@$Si9oI!E)h+^ ze6SmI;9NIsn@B1~5>nw*)pf)5#%b%C9#k6#ubUq9Fm9UiB?wA;DD#v~6`!vcPNu;# zDgp;j7ctAAB5fIz>){j3VYV0MaP~RogNB6Q8Z%t7+#xlSa1R$55QTZE2P3YgRrBluQmt)L=8fXP zU&S%zHV%)6m&A;Zon?w*OWv7+fn%RT%1NF@t*%$yUC~y-bH2I zM^-^u!E-VcC>&Tvb7WKv|MbY3B@bTDz_Yl|p#1pj@Fid^-jf+r1Fv*u-6}YPvSTWK j7nHc^-&x7^FLhp59RH4*;gvntt(xzs5JBD_g~I;>MsST> diff --git a/src/main/java/cod/ir/IRManager.java b/src/main/java/cod/ir/IRManager.java index 5fe9da25..4b4c2524 100644 --- a/src/main/java/cod/ir/IRManager.java +++ b/src/main/java/cod/ir/IRManager.java @@ -66,6 +66,8 @@ public Type load(String unit, String className) { try { Artifact artifact = readArtifactFromContainer(unit, className); if (artifact == null) { + // Standalone .codb files are a permanent supported format. + // .codc containers are additive grouping, not a replacement. File file = getIRFile(unit, className); if (!file.exists()) { return null; @@ -111,6 +113,8 @@ public Artifact loadArtifact(String unit, String className) { try { Artifact artifact = readArtifactFromContainer(unit, className); if (artifact == null) { + // Standalone .codb files are a permanent supported format. + // .codc containers are additive grouping, not a replacement. File file = getIRFile(unit, className); if (!file.exists()) { return null;