From 277724210791d6b16896583fff2f33b77af8e777 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Wed, 21 Jan 2026 17:00:41 -0600 Subject: [PATCH 01/14] Update group and artifact for publishing org.jruby:chicory-prism --- java-wasm/pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index d8a360d57b..e8941738c1 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -2,11 +2,11 @@ 4.0.0 - com.prism - java-prism - 999-SNAPSHOT + org.jruby + chicory-prism + 0.0.1-SNAPSHOT Java Prism - Pure Java Prism interpreting WASM + Pure Java Prism using Chicory WASM runtime From 79d93300fcb2c3e05858e00978a7e28297814a11 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Wed, 21 Jan 2026 17:01:28 -0600 Subject: [PATCH 02/14] Add JRuby dependency for building parser API Nodes need access to RubySymbol and support APIs at least. --- java-wasm/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index e8941738c1..6bdb4981bf 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -59,6 +59,11 @@ annotations provided + + org.jruby + jruby-base + 10.0.2.0 + From 1d622f10d2d1b24d5f56ed150ad2052fa0685ddd Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Wed, 21 Jan 2026 19:24:17 -0600 Subject: [PATCH 03/14] Move java_wasm output to src/main/resources * It is a resource used as source code (in wasm) that is compiled for the project artifact. * Added to Rake CLOBBER --- .github/workflows/java-wasm-bindings.yml | 2 +- Makefile | 5 +++-- Rakefile | 1 + java-wasm/pom.xml | 4 ++-- .../src/main/java-templates/org/prism/WasmResource.java | 2 +- java-wasm/src/{test => main}/resources/.gitignore | 0 6 files changed, 8 insertions(+), 6 deletions(-) rename java-wasm/src/{test => main}/resources/.gitignore (100%) diff --git a/.github/workflows/java-wasm-bindings.yml b/.github/workflows/java-wasm-bindings.yml index 3a0a066334..5d130c07e1 100644 --- a/.github/workflows/java-wasm-bindings.yml +++ b/.github/workflows/java-wasm-bindings.yml @@ -48,4 +48,4 @@ jobs: - uses: actions/upload-artifact@v6 with: name: prism.wasm - path: java-wasm/src/test/resources/prism.wasm + path: java-wasm/src/main/resources/prism.wasm diff --git a/Makefile b/Makefile index da6b96a000..cefc199a52 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ all: shared static shared: build/libprism.$(SOEXT) static: build/libprism.a wasm: javascript/src/prism.wasm -java-wasm: java-wasm/src/test/resources/prism.wasm +java-wasm: java-wasm/src/main/resources/prism.wasm build/libprism.$(SOEXT): $(SHARED_OBJECTS) $(ECHO) "linking $@ with $(CC)" @@ -51,8 +51,9 @@ javascript/src/prism.wasm: Makefile $(SOURCES) $(HEADERS) -Oz -g0 -flto -fdata-sections -ffunction-sections \ -o $@ $(SOURCES) -java-wasm/src/test/resources/prism.wasm: Makefile $(SOURCES) $(HEADERS) +java-wasm/src/main/resources/prism.wasm: Makefile $(SOURCES) $(HEADERS) $(ECHO) "building $@" + $(Q) $(MAKEDIRS) $(@D) $(Q) $(WASI_SDK_PATH)/bin/clang $(DEBUG_FLAGS) -DPRISM_EXCLUDE_PRETTYPRINT -DPRISM_EXPORT_SYMBOLS -D_WASI_EMULATED_MMAN -lwasi-emulated-mman $(CPPFLAGS) $(JAVA_WASM_CFLAGS) -Wl,--export-all -Wl,--no-entry -mexec-model=reactor -lc++ -lc++abi -o $@ $(SOURCES) build/shared/%.o: src/%.c Makefile $(HEADERS) diff --git a/Rakefile b/Rakefile index b06877107e..6e79e08b7f 100644 --- a/Rakefile +++ b/Rakefile @@ -55,6 +55,7 @@ end CLOBBER.concat(Prism::Template::TEMPLATES) CLOBBER.concat(["build"]) CLOBBER << "lib/prism/prism.#{RbConfig::CONFIG["DLEXT"]}" +CLOBBER << "java-wasm/src/main/resources/prism.wasm" Prism::Template::TEMPLATES.each do |filepath| desc "Generate #{filepath}" diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index 6bdb4981bf..c5d7b3e030 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -130,8 +130,8 @@ compile - org.prism.PrismModule - src/test/resources/prism.wasm + org.prism.Prism + src/main/resources/prism.wasm diff --git a/java-wasm/src/main/java-templates/org/prism/WasmResource.java b/java-wasm/src/main/java-templates/org/prism/WasmResource.java index 48f2671714..ccf1d0bcdd 100644 --- a/java-wasm/src/main/java-templates/org/prism/WasmResource.java +++ b/java-wasm/src/main/java-templates/org/prism/WasmResource.java @@ -1,7 +1,7 @@ package org.prism; public final class WasmResource { - public static final String absoluteFile = "file://${project.basedir}/src/test/resources/prism.wasm"; + public static final String absoluteFile = "file://${project.basedir}/src/main/resources/prism.wasm"; private WasmResource() {} } diff --git a/java-wasm/src/test/resources/.gitignore b/java-wasm/src/main/resources/.gitignore similarity index 100% rename from java-wasm/src/test/resources/.gitignore rename to java-wasm/src/main/resources/.gitignore From 2ab0ba95420c5957bc7c46deea08b28c1a26c207 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Wed, 21 Jan 2026 19:26:47 -0600 Subject: [PATCH 04/14] Add basic bootstrapping instructions --- java-wasm/README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 java-wasm/README.md diff --git a/java-wasm/README.md b/java-wasm/README.md new file mode 100644 index 0000000000..2ff93a66d7 --- /dev/null +++ b/java-wasm/README.md @@ -0,0 +1,23 @@ +This dir contains the chicory-prism artifact, a version of prism compiled to WASM and then AOT compiled to JVM bytecode by the Chicory project. + +Generate the templated sources: + +``` +PRISM_EXCLUDE_PRETTYPRINT=1 PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS=1 PRISM_JAVA_BACKEND=jruby bundle exec rake templates +``` + +Compile to WASM using WASI SDK version 25: + +``` +make java-wasm WASI_SDK_PATH=.../wasi-sdk-25.0-arm64-macos +``` + +Build the AOT-compiled machine and wrapper library: + +``` +mvn -f java-wasm/pom.xml clean package +``` + +This should build the chicory-wasm jar file and pass some basic tests. + +The jar will be under `java-wasm/target/chicory-prism-#####-SNAPSHOT.jar` or can be installed by using `install` instead of `pacakge` in the `mvn` command line above. From 2747b676a53ea853d1e2b00b69059e7a31f5ff16 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Thu, 22 Jan 2026 01:17:12 -0600 Subject: [PATCH 05/14] Upgrade to chicory 1.6.1 --- java-wasm/pom.xml | 2 +- java-wasm/src/main/java/org/prism/Prism.java | 9 ++++++--- java-wasm/src/test/resources/prism.wasm | Bin 0 -> 668333 bytes 3 files changed, 7 insertions(+), 4 deletions(-) create mode 100755 java-wasm/src/test/resources/prism.wasm diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index c5d7b3e030..45f5eb71fc 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -130,7 +130,7 @@ compile - org.prism.Prism + org.prism.PrismParser src/main/resources/prism.wasm diff --git a/java-wasm/src/main/java/org/prism/Prism.java b/java-wasm/src/main/java/org/prism/Prism.java index 9578a441a1..ba13f18aed 100644 --- a/java-wasm/src/main/java/org/prism/Prism.java +++ b/java-wasm/src/main/java/org/prism/Prism.java @@ -1,11 +1,12 @@ package org.prism; -import com.dylibso.chicory.runtime.ByteArrayMemory; import com.dylibso.chicory.annotations.WasmModuleInterface; +import com.dylibso.chicory.runtime.ByteArrayMemory; import com.dylibso.chicory.runtime.ImportValues; import com.dylibso.chicory.runtime.Instance; import com.dylibso.chicory.wasi.WasiOptions; import com.dylibso.chicory.wasi.WasiPreview1; +import com.dylibso.chicory.wasm.WasmModule; import com.dylibso.chicory.wasm.types.MemoryLimits; import java.nio.charset.StandardCharsets; @@ -21,9 +22,11 @@ public Prism() { } public Prism(WasiOptions wasiOpts) { wasi = WasiPreview1.builder().withOptions(wasiOpts).build(); - instance = Instance.builder(PrismModule.load()) + WasmModule module = PrismParser.load(); + PrismParser parser = new PrismParser(); + instance = Instance.builder(module) .withMemoryFactory(limits -> new ByteArrayMemory(new MemoryLimits(10, MemoryLimits.MAX_PAGES))) - .withMachineFactory(PrismModule::create) + .withMachineFactory(parser.machineFactory()) .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) .build(); exports = new Prism_ModuleExports(instance); diff --git a/java-wasm/src/test/resources/prism.wasm b/java-wasm/src/test/resources/prism.wasm new file mode 100755 index 0000000000000000000000000000000000000000..6d712590fc3e6c7c539131271e344beb0aafda18 GIT binary patch literal 668333 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�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%0Dh+gqo?7SnR zBgT=4_}iS?h3BCZj)h1f=Er5do9#u{tJqO0{Fs@)l8Vir2{eMc9)l9}1(eyKwx_jS zP0xd7n;f3SXwTuB~I<+U^ky+YnyC*DK#d z={9^HM&HQ-@&4oh`R$ zS|FTnxEb&aYoPqh8WC>95w);>pto4d`>>eCH??(PE6RP#X^gc`RN^UP3&>Vk@EdFW zli9-3d!IEmz375ZIor#dPYX%h8XG(!@eQ}8KWg+ZyBvEtY-d<&UUU}IzWf?=RBpVeyWfy#z{>5sBsIJ^I zsz{c5l{X3`#f{w}Y5SKs7;Q7W$PMDUP&>sf!XH7omdxBhC4X^T9M!OB={so|@DU{o zty-Oh(3o3rm11Wtipk%=6IPm8W+lVhLct8iBwJTGRWw`7RBpb-<>oW))ie#TBU1?7)cLTa_=%Wk4qyNgD+Kk=)9j9MSM?Gq? zUMXRy$q33GO=L7x)>qrt8-Dd5)t=WGa$NGGfwO(d;ck4pVtYR1E6?lA;okNBg+tdL zG*J1Ejz)D&!!$m$72B`$79cjvjzAgqBn-=V)ZNnXEGA6d(qL}+pqJsI2JQfvs2e~y zaJ5#=D9*cRnP8~t&>$ac4jr}RnDtQ{$~WiYThkT6#4wWY-*J^gOEy$ylb2rBAbO+%PTH*`4jTll~YdS-AKElP> zQPYOEp?l)x62_O*9!6%oK*AuXhmMTs>|&7{tGn@`Tu#cMj>aOWGkPBT9bs=R{W1~Z z@E@DvI$gklMdCVy(h>GCN1+ZeOD*d+nEBjRrqW$rv6oo09RDFRvMLjO^HN2!MM5bK zx=%cOGI>k31%*7ueGlWV%}DQ;B&Z=g#!PwYxYFlJ`c>Ug6tWuiLZ;qhU2mTY7NLU~}yLjh*=J0hGqFl^5uzNx0| zWaVeO~WoGQ@l6D;IccmAA{5$Ox_MRHLn5JVWwF3LhvY7 z+rnN(@F-^CVXvle6z3}ON|2}n^T{qJm{QL~bv*=+MAZ5S{+UTDM?yFv%}AYkb0GKA z)M#R%QgnbBMsI9#Jlx+*BL=WYNCmd3Ma{ujXKzh!!+ttKfTR)OPt`<(o5HlGj^JpD zq%z8&92;(~Zx1zSiH6#~g`~A}(pbpb`cpJ%2zMJ8Zath|lC^bnxEotW;nqu7`wVwO zJ|yJSK5As{Y;4uYxU!d-19J8}uVXqpnj$_-CqNp*9Tb0fKkJMw4l3q)o8tO-M~w$} z`Zu=y|9ngE&%GtIX7TZj(TP(=+ZSid@G>#-p#~@4s$p1^TD?;M#H6` zn7?&7ZT(B;<&XTZuFRgfB%Iv-Tz7e&HJdH$&qH29n7y3;2L3rH2{r<($x#@tQ#k*| z8U7aJ-)S7&2)`uAX$1L_Ag6IvH)6l$Oohs7dzIA%vzgp{1JeSSzJX~0at)JNh545- z=}7MPM#t$}+JuwYf&7|1PX5*RpwQ}6WToss62_Rq=)`{Mw>lp%pEEtIcYP=QPMXc< z9I*R|1so^N9svTdNoyFIial5zIC1t{+$Id6*k(8mbBz2uPV4*tTBBqlVtBEK(B*0$ z=CQ!kj=fnf*W&Vxe{d9-xE63`UW-j8f4}DRu-=LZzdn9B|D4f1ez9fJ(u!Ugq7Zx^ zQ;V8SI8rQ0ry}VqB%O++uaMLMj1^@$2C`wyYcovYzW^ugrxj==zdWAxA&kQtGnC}x zISzFeB0fiieTPP;Bf_&e!cDKhy}=FPXPlKjo3qlNage$X*oflB3sasZ7Ael{&G2lj z;0$JF5{rEa2ZoFExsdl*NkEN-iuse{Z62M6!3q~bSg7@)fn()40ts%UnURe9j@WH zxjwk3+j|PED~B%hP9UcQ2pY2r`dW1qm*KZe zofThoHH(V_!J1h9TP`2|7jt0o9b%>d(wbl&9818kTshwmd`3WGEe*`{-H4H?-V4Y; ztv^yR-iKnovcn$ug>yM|kM0!B}C@+$O#oJI`F0O&_;_^`tiDW$aHV zK;+^ldfi=dYH&tw483Y?cBbt(pC)lmGb*aA(8Pbu z$uG*?DV(-rK!6sMk+0ZEV3>cJmZ83!!#WYB(Y@w;e9@f4TF8!p2CYgRRlqGQ!bjQ{ zk@l7cQ2^0zPE(>DA@GbGh2^ij$3dXD&?Ea&$^J8E&^v)HEOzA#MI&xAxVs`p1<)4^ z`-Grm%n?jeIO|Ex;T;Zm%*G@4@}N9z7{4tk!F6}isByx8k#=MFlFfu`(Rwvpe}oJD zua_>*usVxTma@mG!#pe5F<6?TB(0pY7)1X%k-C(3LRM-;R({2>83%b`>DHGW6BWo} zmnLYYF}Oh{c$z>Y`&LD@0$WpQbrn6zg?~VDXIvw|IG(F56Pcfr-@L-qsP`AwrCDy& z4vMIE*$ov9o%?gfbwqKUhT>M7w&1A6GEMaK@=8x_lQ189o#El|@LskTsG|>{aR=hN zhon6~Z2T+5Vx;O4Lva8%rR%MS@Gk8uX?Fz8e>dk-5IP5nmbT#VFm28g`tH$9F!Fj4 z_PGgZv?)(=AU?bSJ8~v;Wp19iv7W7sXL5OcWBWYxA?=h&4)W`AxHgN!->}fl>k9XJ`z@5{!LE`s+Xz=xanB#`lEHlf;|S8TI8B^hPA=rsa%q4W-Gdj`p5ek-*FXIq#8zxW6dQ{jIiSf)ZH(T? z1A3{yvVGN(ZI4ig>rW@CWZG*o%awETTk-7&#u`*|M(E6_!V{s_v$w_03&%YhjGLA4 z1>~wy_zed*P=y6;!dX?4p=g?x5QISl$9(u#M{$bYLijres7}c@x&Prwx8$A15o{Ia zwj9*uL_bHL%!?*x=Cyx}3D;JE(DCrNKzw>a6DOne)rq<0X#Zy?n3t2zz^faIacw4t z;xJ$xIhu;Q0opNoB4KOgHzaTVjt5&k^5|UisnNcaa9I08Wm8+} z)B8LmhiM*xKo%-JYP`wHo3xBQi zQQfg;EB4Bp`DTH6S>v}l`t_8~W`)1y^wm=~D{stGL!Z2@lCj@%`029lP_qAE6<$U$;c|by>-2jLzxC!75*BTS7Y8t=Xf!X8kg7XTlkGHK zA2D_RF3yXoL3;=%)Vpzt`XEkf(!E64jwpFkoL6h~-Uy}RK6r}o=v5J%59p1Ddx%dB zSpHKI%=o5fLwFZjQ{0!E!*hDogG_ytL;3wEJblyygug=oW#TbPB#k9kyzv@8uNH7J ze!tmi=`)J`;7*pNUsU*7_uD8JGtiFQtR5-ta^Hezd zf{g&vixOX92L?)zmHKbE7=a5Mu^&Zp0aCi)#Wx2R8%KacFP`EsZPm9F-&#fq^G@JQ zB(E6F)5+)g%tUxsLruxI%v%t8GNNNh`#5;prixpAPeIQMNIurc9q9c{8aCzCgzMh9oW^iQlL`*4#yjucv;F=f=rD z^7Ujp!CFMb8l!!n+YQ1C!X_{?qT%~wV&bSKt%bzDhd-KL!g+2TG|1J2L*clNQ}y(W zm!Yf{Mc!t5c^N|9p1q8Jj@P1XH?SpOS|PE1EcG~y;_bb7)eT)x`E8EPQVA~S&3#_2 zKy$45CX;3&UyPp{hZT!6XgX$734STIT?M^+Nek;8`!pY&`yy(h)cSCruwd?OWJFLk` zo0`oDd>plB8N#u|A3_?eJ6M3=C`rhP__mxf>BXU!w%v>M#~9UmDeKmwl_N5=S;?Y> zB(-M@#xe!zdzPVB?s{u3oHyYt4Gc+cZ+paz%RyK=>GC?2dmz61P|F52h5IZI2Q`HI znD6ooev9Qb&5!JI8Vs8@g?lc?74B(1Zn~L1`P0ZYt5(^%fzVWu{w>I#A1~og3I4HJ zxnm@v@hf$5SCa?ZYEq-GgAb_*cSZ0vP2sM~!)+iFbGQxX78rer*?dyH5eg~m&7lNN zR&zQ58kXVP!`PN(`hgO&Gh&7`acm(R(h%+}F+;qVouMoXcWyKkg$#$<9O8SCJJDtg zZ3=f8=Y=>p)1GnTrS6IhIA~oUm4dH!!>NaG9^KWM9 ze$O>n&?{eFtFjDl_g()N4r*1=r}AepQY&^^p=;*yF}L2GTD{9`a>i?UP)cip=8N7Y zAUE9TFrL|L82=_kw5JZvhSO`CYH2GcHc{@vwV8RHT5LQ0ZBF;7&mE_g=CGGa3Rjvp znw3@~;1vm2&j{ddz3&sSf$jS^+F*7@_j`-L8|BOqOnWTz5c$N%GMBOjSqSb%*)=|e z_XGFw)@*InefGoOOJsNN6Dy{v{2;H=ORoV>078LJdnEDzbQO$dC2#+4m6F;Ms^{_^a}e!-nc2;e|flZL%2U9vH{Dfw6wYn z;eKYAI}ojE@1)V9s+v}dHr}*b=2gbQ^c8!X&Ti{kn)cnOytF@U=>!-O(f-i$Z9AOf zP_^?o=|o>JzF45S+{v`{_pyRNa~f`MhI99uB@3o=G~BF43}hXjxujNC?hl$kmTO_3 zf24ykz^wPYIOjoNl*ckootmz@ImX4?Xvk*^@@}LJ#xcA&tg$$J1a4$Lh|If@`5-dy zHZmU!K9xut0RLt9n_ZKK5krR=-pP5ThtY}uB5Nd)K8$vCyM@I~nImZNYbIkjQ4k*ERWF3gy-OaC>&CrZVD7ftvk4gn!Ry}mOZ$yWkKR}4>8JpHr$Ofqn79sab zNIzqS(R$@-#wv!r9N6GuPFh)KlGP<@qc~AJe26Gk$*{@Ds-jk7-N9DUBb4nzu()EM z{2x0>!C;6llBPOZ)S5JI(wHN3xQ+s4hc|a9&8>39&ULjTc{7Z=jppgvCPu$H6EKh8 z;#OgMP6#xxu*V$^{C5s%JQ^$~R|bhwJj4GLJj8*V##kOJB^_9AQB%^EqBT$lIC^kN zr4|Ys!lSs3TIlI8LVZ5#^=xSab&ezO0L%6qPs4AIRWwh!{|F6$#lYNsaUk*x582oV|Sc~z~ zOd4cPFOf`U&y6~-*Jp2iUa5!q?Yei7(?BdIv{Mf;3zoiS60x}%N&cTLwNqy$OYQL_ zwKFGxR+zT!SQce#!gcJViX$8Sn>8Bmg^&LGy8nUZpEY^I$yFI*EcPD)?H6dA)+# z*G~guaqy`J!@>H<0pi$bxc=eb3liec#Uc7AamVIxU#4@EMEkJEaB_3{$&^*enqE@ngrxWf^F#4+BqgcBQ>j{ifXaKmpPNN&EW;4 zbF=UR#)rbt=Of0X%K!5jSt5ojxJW11x%v-xA-UVdsol{eb{Hz|&=3wQrIdTR>a~hs z(s_>tb!=w@x=w;P89Hvp%Jf1T-KQj37Oq15FN$;ihX_CIGvP``>p1?et zRmNTn>{(@A497VpJ%qGnB@;NGk#6{83-)q%0mqY zXohIW3Z@}jQn6zG(=@ z4h+|A3dfR!b(@Nt4lfSoo%H5#teVkvhwHz*4B_0WQ} zYcdVUhySOC%hSg-C)m%27p-zZq6#f)FlDl!AtEl7MALRU!YaM^i=jRs_T zF@FPo47_OP^U=>fNc6;N-&WF3YCA&jS+bP1f?lUSY~6fru>(@Ov1G9nzK&u8(@?_%Fd5!@xXJKy z&5(LR#U5kzL+UD2w>)fCfbH~#B4tP6tmJB{Q*5o>hFiZP^J;!hlJ=(S=Lj3y^>#Pn zP?+c#2$o$&{nwA342qJ`k!mo>j18P0!z(U1SqDo~+uP7VG&ShTrFsf3A9!6` z-y380IC&t5PL(r0V>g_sUN~t4pCynianpJF}!q zU?<4TES+!Xa4k;zED4X&JeXGp`mk)sZGcBnXS*PcR|Z;!92#id6do}m?4lP#4mO4U zO4G_ss#wDQgXLk(3bVK>f8k}#!vCN>1Ipys8E#UWEs&;^HqDqkrg_4Y$`wxY8s@Z~3j21QLb7GFqW|*rl>g-TS@F7|8GWzQ_dP}kO`dpOe6wf0~v*{rQ48+I+l#99s&%dOY^(*$C&AJ3Vx zIPAb>j?0P+T~t%1FpBJCyA4i?O{8{&od(wIqO)FJIkT{$#u^&D=&DdS9MrV8cK?h79H*NZ$X)`8I9ye{!F;k`; zHORDx)5j)|!)HvGI5t=lR;}GnZ>HfIM7bU`X5#3{;|FcB4d0cqH{fV%baFET6*SWK zW+qOYIcdPuX;Y3IH>P>em?@K{PMA1u+JI@zCbVL0Mx4G%Gb-_Qtu+s5z6rINAJc}# zjWsd~zNIl?<+}^(2khQVW6pQrl;Q@IR7QV&SX5ugz>{x((2}sa(6cwQ!4c}s+w;+@ z;lFJ2emeI^LBuNNzZcX@4r z-2itfi;5{1z-R?QFBXu=Y2H-aDAtw}m<)ygi~@`uFV8jQyU{{?r+N~+_D?s;Kcq8L zO}6de4{89^2hyefPr6Rx(-2{!96J#8d`(8*Qx9uuoAPU8g5ae;pi-MXA0r%)&XOWDrk?Z(Ebw{M^CO>r2L%Y^0XLD<<08zI{8q> zIQ)oJ<>tr4w?`biumi1&93BTY-qC_cn97xnJz2uSR0+$Lj6DgpcPvMkPhlZdQVS_L zS*uPb#9(z zZ-K&P#Ln`5B8Z-7mUYAe`|)W%VAe&Ej5%M0Z z1F;Bu%(^PntW{8+k9mc?7xN1HAf^fXTTJ^7EN8VN4q;wb+Pj3VS!=#Q$hVxF+UT!f zUTSUhEiNx7YrUF8ELnT)4RzmGBVoU=t_rE%6^b7TWNXt%sE69Hq)pgt>#EQOzX0W> zm{(Y7Oi^A^>KSclJRb&w8=|X0p7)MwoN6UjM^lMVS*XN!D6x&R;~U1f>v`Rbg4yY8A+#YT6x#OVE@(HyUMj#NyukoIl?}*uAoIm<6O%icn~nw z6Y?-%E0VCstc%Jm>@R>}6!M-Wk(a{0u`cp*9GZ>?3}d-!&%yS`IG`{euqN7%D|oR-_?dhbzwe@*}}gB>e853*fQ&?Q26_!ISaVX zcEV%?r6pSxc7d{c%v)}w8=%|)7y}A<$Ff$aCt`ijvkLL7*~a)4sDA=%-U{=)SzGT< z@jB2JHf$tJ1x{%xMEkV~f`b6-IudN6b-^iYYD_Cn*F*~JWLs#dI>LMr&T4xY)WaQb z5DD|VS!*5wb(G`HMZ!F9R_+r}pK`oGB&@H~H=Fy9LVeuv<|1L9H{1Na4)x8LS6Fr4 z8;J47s#dxg%Fk$g!k~RarnZWBLR%3#WOaB9;uBUb_7x^pn@{C=aUawN9B&W_^Ss%P z?{28~I^J9)%=2dL`ySNy9dCBX^bwR#95ojS^OCXywXdLl?RbMo*xBuDYW`=udt#FV ztX(QJ;7g(WHl_;u%(|$28xsF6*L}Y0SY?K@5Wm9u7l#z}% zh=d(mm3KOn88NRgKY+~2{cotd)mJMaqV}swZ2_g$QY(~!!=a3+N$u0e* zhqRK@18M_6ENCcfbL%3`{lI+4AY$?r-0hZ^g6LJSn^3Z{c6|tWnw@f%jgJ)P5U4|K zEW|17dF!GT*nlPI$#y}ytW8kJY|1)TP1#AvoFB&`>?#*aG1Av{d@SiaRVz0?c;xjNWrx^V`5i&iIP)Hpj@^Z5lTL|@hz?LFmZUdr1I+I%t zf!T84RD`i+g*pHwZ>f}IVcynRUM)Ab1gs9iwzaOZR#BsPN4I*JPs`5^SGA-s6 z=53vo`zX|2u2spVT-2~CmFrJ}Hvri%8+Hic`1W@d>QPYccapQEWm$rnk6y*~n&l;r zsZ!?A#+1t4!%+SZQ-$T+q7K_cU>nD-@{sSt`(YeXm=BrNs2(YutR!?0=H;gIwdEcd zgy$!KN^Dx+HKR5VR`YQEHv*EAwy)&u3T1aoMI&M39dA0$nNFi?95olc3Z^zza&ytA zU>myDA{YIG61$ttQ)n=nN4Eaqa@xdl+JmiLs;5@g-Af9hq@>Ec>bGS*{WIJ$vhf{P&M3!d`L|Sw=7SEBrA2KX$lmbQhM9|GoTw?QmJEC25nt{#)4;lOMvo*7=my z>70~RO>a#MHlGz&DI^M+$LGN5xXuLNB^F`QK_S!asO0_--mDH@Ze@L|SxKQ}4Wl$a zUhh4@IXP=IEgIX}b936DR*JWDC9oKc1-l}4mCIR(hu19K-YUh5pj+bh$~xJy zybMZd!(W)^&8E038m?otXLKb@rK7Ukeo!`wd4+l2tlWd3j&!`)(mWB08&Q$h!k)Lh z6;h)Up=Vesyuz+`yxCYUhVt{6SD5Ebw`H>ETI7VccU>k|H-WmD%`5C8Ot~k!WF_gq z!tRbY-M%WGiBJ~0lAK;o5p_1yIWBAv2|LTWD#UXMluKh?VM}6OVM}A0usdSf{a_Eq zG-2;MS}qdyiF0LBb~Th=IcjZmJD8VR8{Lb`%W0jl-|_@Cy*{E;x4|CmtWB`4unEpW zSslhgX>znAjd_K6%V*_22lbCJuP|R4vNh^EsBK(p=-cT^Z9#u{Hg+v# zJ`(0z|8)GXYS6=TIFPMto;p0H?g2I;b_qMox~LH#=23g(Lw3VQ`ssgNz{Vj=GDVR@ z#V%a`V}S41ByYk^aJ>0wBG|F93&cE0O?(=HR7l3NaQcwhG-y`2C4fexP?(ofh&7kC z=~16jKcK`*NS{h82a6Nm;vKtKefmHqAxC8f=SOwxJ|R1t>*J&1X}-A(Wpujni#}!fp+9TNgHngzaWs zWqpKr_lKf)HKY@J6ktchyuyx*X~Jg2v=hMQ#x!BqI$Ayww#2!z`EnSP!yUCnq_;)9 z)E3e4xV)V7`m}Uikf5gfc~KvM`Y2$nD{Osdp{x!KPTNEms?}u{;Fz_m&sA!u&y}bXy}!d<;EjyJ2rXk?CYvE(9Q^Ia^g5+`Cww?c|Vy~8XQGTnBF zs`-JmlvQe?{lL5q>DhvKwK{j1lN3b4er;W4{fBsOhVr|ZSJ)q7USW^KG-1!iw3or$ zD4TL4%xjm`{a&c|yO705D|uc{F?ul(GTk~zyEhZmti`5cg=y9%w9LXDv#tv1`~wuV zH8%H!ygELtnJ513Cz671~_N>iaQNH})*+9hBCNg!6TzCb|XJ z{;t+$bGR4OJ~ke#FKiR*s*v&_P=?05!uE=Jh3ym5gpG`8*>R}XE}O%<5^8rBvKaj= zA*UD}j?0J4=I~JoYSv;;LwyENuH_2Xb<3KOD$VhQ`pwDRc&m0Re`D%x652>meuNl1T~Db z%66CKE$bZ=j}FdV6;p+|wK7V}N4PpyTvt;_t-(DKhZH7$r8V2W>Y(3WV_soiZn}*h zIig_pW;)sy0eyvSYh7h>#j9r@KqL44_}?F}c`R&(qv-#bm?G?W>mpZ#&5mip)Oy(* z(}>5-naeEa<92OwSr090a*P?6G3F*tZV(CEI*tXzJnF9%assZS0Hq@r2`j}S{eERz zp9*nKfvU7x3xJr%%UyuWj~dfCq*(8OdM99G6;`qX4)b_PYV98dEU&O#olfaKPjY_< z?-NLRDwZqE%T3oF$yHC`sp&RQRIRogYIP##gn6rFQ?3!J#=h2S!aQ#_)_G7hX0<67 z=6Ory7{&bTA~BQ7jxdh3auPfWISfF0qO8kzs`E|9;(be2S50ZOyrf&$Xcsb_?nxtU z-RbP8CArFDPwnTZCHbDJTDg{`5|1#?o0fF3i^uUM(ke-!YW-Hyto4P-QnElg)_dV? z1*Lt=3t}EgdV00gH&;vjVzty3hpaB%u29>cMQH`vDP>kf2S9CyM<>9hFG<~LwPAk> zwI%GDJ!iv?UoG_*sMT$C`f90{L9L#m8&(_k{?$^Sfm+=f??P2sSi53+bBC@jMIE75 z*SRm$>XL^+t*+Gps|`B|YIQr$U9IE`p;ph|YgQ}yw$)009ICA0YgM}Diz-T&igtd- zNp|f**+^7WQP!;(wm8aKaveuax1OSk(oivMUl+Dl#jv6(tf!{idr?K%prYixoaCMr zC5tM`dKJUYfGSINb=0&aMHR)Znw5>5MucxL*mZFN%+l5WH&tE~UUg|`xp5Bg!t*#Dk0ks8jwyqfOPEf1Y z!2_UHZy6>)t*+I4sMXtz%c{nUn!y)V*F-O_c1^SR)a@PgMe;e$@=|_; zonu{z9goHMTxosb5%!67F+vyisdYgUR+lsVMIz?k;j7V|#>mV0ccB?u;xNxE{CeL~ zo*omw?iy{~Ig^vV?j5QVqc~7;JeG`fh~J0P9OgVY_E|@Tf3m?}zVZmN#Kf z`E22QgGktkE>}uzBA&d*qVk~iy+ySe@h#$I1pAx<<#eDnfP&;jwK^xX2&gf$f)c0r zy`0dRUF9Nv#bdAB8DT^Q#GNrOKu)$t_=);^)suQOPN_ zq{@|_0xCKBA8qhWBmE!l{Pq8}!8eIIBSHJal2R&9zk#|0DCLt}PkSF$;}+G*^$dVL zY}$;keEw*CjU}{lx2RS=F951@xk#AeSDd9fHwrCA1Eo0SQi(A>>^v;0mFqO16sLUU zbC&gWamrUd=KwZNVK-Y>Vh`gMeC`2cE&aQ-G;~Bg^T_83KvIH8*edHvylN;$wWvx@ zDWuxxcGj1W!un)*@c561l%^f6Cg>&XD(gy=qCN51JLVB4gQU}khwrNssqTVrH_MB3 zVVbR_LuTiUTRWaoImW|lnb1pCbe2ZCu=N2+Plt3pJv|9z^C&kox_~#4yYkTpOuj)R zY>;&&LgL})go(B_Yehf5E478{3lEu8kN_Wd+3fFKNBuDzX&Wi5r=H@dr9Q_~)#h(% zspv24yS$Z@UUihDu~7YvPkP5n)UBY}c-o)X5WR!zUBKE!*hkhyP78DUeWa!zwP90N zBeMGK3a{&P&`+38OKmD-dS}pUTheDGAzuPyqc+iA#MkK3*(TB{gtucCOy=!IychU%A~Xi8)#i+uZfn2dj&2ZL#bu^K3&o$QzY{;G`<3`_7^tR z*|=@AGjSZ?v}qfcZy(1!@ZJZ|X0|u|M?o(2L&isaazXi}wy@-L2d?#yS@KbO6;sIv z5$5qRX%yniK^RG9GoTzw*8rs_fReXV%7L&_NGH~;EQq%|)SfY~uu}O-rafEQv?n|w z4k_#k>k8Us>@)?+(J`+u-#dhntl{=iNsG#t&(mzm?uYjoD<^25iKT(C>D^mjj!ON6 zx2G;7(T==IYSJbj>p(2eC_vUtr(0C5!~C;Ujhq%*$%%GRI-P&?>f#l(dc2}mm%N1z z_3~8KS=8#1MU~|90o9JQ9ba6nWKpY27PY$Mxzkstv#8Z2i&|asdd;hoENXShqE?su z$Z92vdKOlE+*&fx<0<#A)d6ju%6TNJ!umG3)XysHqM57HS=8#1MOBK<0kZkK`7x`L zENXShqE?suoC|xjjkm0piK;o-*_KMF6Q=Qcw!IVYA}AL+-XIdT-0>F7T-Aq6*X75K zU0v!#)l)e~M6I5>NwZcbS=8#1MXfHm?QyFMD{A%9E2<=40A%y}cV%JIHC@!C&ROai zkbTQm8Xc;9jyT?i^(8-@3!+MAja`(xcKyQj#%1L~yxYUKqvfS<6Ly?+(RW+~c1cVV z=HpEFBtKkEE7#{_;uL+Y`tCG$($zoR$@HLUOV>@t(CpSx$(z zdQOP?ugD3>d5!r0Y;`EhiTh4S*Qa!y5Vd+e7FG4Qa-TeI&gvwKT3xcJ)g{->U7ci6 zt4kKOy5t+2=1yWwTW2>`Qvu8duLthfQlGYIU7O ztzI7YpKm4C6Swj+ouYDTI^H7)yNqymRSYYtRv-4TRC+LBS~*la`DiTI{MdCa*iF_2 zCy04ek|k#jt`h;3lOPi2coVBL;=TW5o0|5Px2#X~RCm_5N?1=#TS8%bBXw7xd>)mg zah=B8=sTD~S3zo0i4p5&P_>w96C=zmWYBo4$#)$v2^F@MlasDIlB1^JpjZxwdAu1! z`59ni5#}{YFNsLfm;^PwfFtT3pgs~y684mJu~-da9v|!8XuF@)xNHJ7e1XlH)8SVE z$VF}8(;~5TIYDN!F5ba-9025l&7%?gs|X9{&pe7ze6pR2nbMhygejC{7UFQ$g|~Tp z$RW5qZU=|ES(idW2&-|nDz%k(28RLCAYG=1WXgrwV%Y>Wii1d)Iwz~8xHXos zG!XN2;&*Mp@(A-h=?eAadA6&05)M@v{riH=W!AXfauoi|BTFij9#_E=1u#kVJL;vh zdTKYU;Hjlt7IpNZf;p$S5b4tATsW@*bRuD+JY@q&o=zwaV=foFk-+cvwkGM2DgsII zhV>EJi$?)#CtwQJEJ2*7XK@ zyk&KvND1?r)n_!5Nn7=?A=53J^iERK#okk8G{u@V=>jMv>gBl9o{6`kd5KyZ6}Zq) zm~VS?(JQ$A1ek*ao2(lN5A((y)Z_jV{O^DbE6m-AjSf9S3J73ndU0V`?Aifr2}!aV zv@No=0LYb##)J9W?sL&xT<$JdXpiE0+;XC;u$Qb0+TX#Nx_T+iVBXSMdyx3p(&^$U zTeeHspi{ILMPQ;U6xlrc6}&3}71o#d{|Hbzxw?oOXgLqWe?&|Z zCOs|9D`s7HQAC%!V%j-+DN!)HL~r0yaU}0^(G`@SC@xRJe0l0t)xNU5H>q&1q;M%D z!wL5)34aqmT^=L#)-u<~w6!i0DNHwJipVqBfn=K`t758wF=2d7G!7+Qjg4`XNA*XddckUm&cbA5>D(hKnY+W6EVvV!Zxwo& zc3?O9am(rBv#w;#?~$>0BXT55ylZEuFBAK#Rs-}A_PNuiXVjBWy=+Km;HgZ=I}Fo=uD* zvXZ($?FPWh09)7=))jP$bfxV`N8_4Du(>goBK1LYq!EU^gd>P9l1 zqV2%8w=QfVY)nimk42%jGSo`3oC4*27q(Zln9o|$qM&4cKtPMp+lMJv-AV0+uH1lrF}_(6U_ftZsfFymq9%N!!AGD#h-0DzkvET8GhuF#wO_*;AI!A-ZmrZQmKojO|(>ask=Sjtj zE=|0t4)%?8Rp`tnk)m4w*>NTR-?|iLEj0&<&$(=zk3)URhDE>fQr8u0tz&Z?sxU99 zQ-*g}sAB;duDYlhWG0}Zl#7JTvMw4MWkCm8e8bosWCPdycZ#+I8y36HAZM-x4C8Ge zci5~#qOiNH3yGs>QKtchaURG5z(y_XH0y$~JbnA4N|RHpOEd}0tJx*G81cV$QFMuZ zn}{%5J1-^V|rdukKgkA1^B$=ti@&ZrpJQ8|E6StfdvIqoG!cWi*sA zKr7j#z19`lb&KS2r1cEyy=S@hYaVhoqUHdydp;6&u60!yJ#R##x|wTcvuipRK)DD= zX)BNGtY>v?*F5Cihqesp*pe!2ck8Oqgeg>aL#>p*^P!wH1-I=j)-aHu_#odp;n6JN+`dyVM&XyyRC~@-T-^c z(O828^J^8^d{L;E3~!}aHevX(8IUSt^4QjTmde->c+4pGEKky!i~9+p4g_q$TO;8+ zz`m0WLTMDHU=ol`^;1y3s!Hw3z@(QOrew?N7$`?orJe!hEJw{p!mhP0TB^suo^Ui? zNCNW%)oe?pP!Aj4O8N3Rlr~IwO1)LX_HqwP`3>IwK-}X2S)qS)3)ph&!a^&+o{4GY zS+zElE`VPN7cS}QjI|Q}B>2+_x^PMJ^m2Iv=})$HJxq3;pbwPw;~q!YaL1d?yUU?` zdMuWjNwJtOgwr5P60(P{c1(C4DF%85#%2F@& zC-_KedI_nVn%=e&RWTl6!j`Azusf{2bDiY$48v1za@6#`WjQsiRi|ZzK%-Vx99_N& zyS1Vu@eY78DCQM*q~mQ737Z(xgn2pXqc@VH$5XQ!C8_D0dyKG5=FGc!MQmK`Q~TdI z{|>1A;MLy3Foarl;m8!SkQ$kQZYxuK?UVGv;DZ+khU1eW&k|5ooxvfif zR$Wotn}?_*%-_bzTmHEAu_1%>+l7+5C8}@d)X&O2i*Pcp$rO@d9@+EIdu*8-f{(S} zbzn=Kt1e|T@iH|tS2r3#cj0*4v6c?OB*hMM)I#)ou;tc8%7pol>Eh=V`n9uQx;}gA zH%@N4aF$ckIaN+g*LG2NL+Ws+V=fZrb<7&#XHXA`d4+kM(s?7f7m=1rYI~ zp>13qEGI(D;|+EWu7!Y&L)iV+#mVDak#l=2RoGvxtL#*=bXCiyCd$04-ACX+~Js0x|d)~UxL7`g5A%(TIE{beVuwKrU?r|hlXTZHJ z>mt3pdvF{Q@#gW`&Y%Dt16cipsYv0XaF+AxBzas%{|k{-E8-Ur|7PQ)hZg3gX4`~3 z@znqn<8<#+^RT^F=?(OdLg@k~s``i>ER}*GY=6g_kD9@J$Wr0M)7(xZdAVo+E;mlZ zwKp!c&6ajN*a@*qV`+J4VxhEi{ErWJVA6lnClGDEoKMta!S5S@D)EH8QLXz zyILa>NLV-PDwEfOY_WO?Q|8N+H?IPyPp~v$4c0~Y-eBqjET@lA+Pk95sZU{V114iW z0`bGK7Dlv0D0r!L83>Q2DEJbEFg3s8DVmoLWm4-Bb~a!{Uj*{Ym~<*J7HmcdUzeKLh*1x{xW% z7q*&c3-sLzu(lKC(^(VgYWibhny{tTg-nE)NA1zA%M0cz%7^fwWaJ_tE<(n`!rVZ* zR7rd|3He29nw_zL zn?(QW((}OjkVv3D>8w%H9Vi`u%?V-Rl-zVrA!|Q@oKFE$5A~7u-*X7a zIC8Z}0Tiw-64nJUq;VXFS>cYv&`s5GYyz;1R+W-6nFyM^lnX%GJ1OZklZuMXht^$DZC;3@*%UCy7- zo1HwE-)iqn*p|Z69#C7FZ=dTH$#FcQ)O6O!<5C>gS`S)VJgNyVt>hw`I1WWp(ogQg z0Ibf4L729el?N@N+raLKUC)EP7`wg!`$z0r)7ZBoL^5`{x3^L#RKk4hU8|8 z29U^w)wl5xi~u_vP`0&iKet;n8Hf8gI?Tde10*$wgz2NyG4o|Ot^ky*AQEDhi(0m0e;cr3uL8Tqx{xAlMNIoC1?~vIa+YV}SPT^>b7dl7Eu$JDtBs=< z=02xQ8@eD7Maw7|MS8(O^;pJv!C8Py;K06gu2xYqip{jjp}4T~oT|Acn3~L%; z55%-e$>@PplUpBycvU+@gA=NDNU7Q(nn&$g0N5ym-DX`hPUTTdz)~s{vSUs3X~I-B zQFmh8#3iaG+9hGCn&{F*{57fgvmNyF#POmnx|l;)=wi$kWa*-KrB8ZOL`FXg>Nz$n zg;1C;vFURy;*}(o0d=9tbfxb#66c3-eF9i}m0M_Uw9%P0$tkCui2ppREh!VW)Vj(h zgo@=n?6(J2lbodWa*;~43Y#d&LYIqF!c}xC#VvU~2ub0{MMC}p$ZYMS_rUffm?0%4 zwvQzmQh9PDQWe#dHz5xK#h?S@{z&LEmd1A+KvZjC%tzmVsNx!jkUHxKA|a~Ih9adt z^AsWf@Dw4Oxwp{@Sr>583T?17KHm(|XdU@zD99e(Aw!+-9YP+o4)g|5S7vl5Pw<7r zdL^p~*1U1yMs)Det}X*&`5F1G$rM)U>s+pVkY z6rak-DTF%B$zcc%Hq`N^OYK=NF$Uy0oIh#DQ62_@C%eI5dbsL&Z#2VFj^8uHbhmgh zVb?c54ge&jO{6dQ9uKIz4My4~RwCVN(sD_O$u4mxB!iksxs}P2P?p9aUv$mSJK$-UXAj>LLj^-;*>ua36G{ zs1c8OG|Kmys1O(_Gl@&_NlHz$W1YNB zbk&W6n*3V%+M;wz7SMz}VQJ)_FfC13&h;od+F45Lr44|~0b^bvj{{<kZFFRZ6#FoCDdOFjb4gaoND8*GQz;)w=xC=>KH8UD(UlSkQEC#kFf%#nmF(gF>#inG|zr^-Lvj<$Eyk z%mhSD7Zp*Jp-ok(5aO_+hyyaoD)Zq!qX{~ntz}l*^R-#tdsyu8u-tw?n zYIUvdcUt*eNZU%(>N)uRRE$w2f6K$Bb^d;8_1xd#!`0OkQI(>~HRb!MO3_Rp-8QHm zm4{8I==-UaYnkHf8OJvaYzOP2SrstYpu64;cOChX{#h5++?$FI9Wm+;Qh{P~TFl5ZXU zKHc1cf@==|s}oX~Pj?|Y2G^{ZCd{Y15M71qnwTccr@Ih6jLWCAV74@TN`vT#g#M*k zEG>PCOPX$$@GbEo+<%COK13x>Tgz5|VU5<6=wI;g9~ers?yMrka&l3BTs~x}rY1v{ z^h$=bpE>g(OFRn649At`fnd8jm%X*<=-4$6OuGXr_hGaI?5@})Or^-y2_43n3D~p> z(@@sZ4x;Z<-HgTI)GO6iU!PX%Qc91FQ$}>=*@9oMeIXi!%j;W+PRHdnEJQcs@){PR z2IBM@7EFou8WzlL4{tf03UN+Ii+pT<>q_dBkDfw1eURMJh|WCPaazl!iD{a!O#hY!~R-EkP>bPY2V{BJ0xq5gK1vmyc2ZV*sni* zmV;?84^C*pRykTeT9-7gZ_|m@PX$xT#TghI`0*uH$NvS#8Ad~}hVIy~oWf)ytIIcF z?ql&t5f;)JidKwtqEzQb&CbzQ>qf#k<7F2A3%D^<{CwhKE7hnApj`ymScQ3uhtUJL z9*Swgy#2!pAI0&x5t`3<_}mDilhM|Hel(2!me4(nwnoq00GmqP0wK+c>@r5bt$zGne8RlgCY0~wZ3R1%=45& z$`tQ=v3t&18m6l_>b6Si|qlbzgw8R8dq za7-HyHo>}}37Z_#?gx7?rh&xIATZe{&mQ$5;98jQ?wAQgd`eNe)NdC1`mk9ZAF^aG z$<6wC=%Iui6w`!d7o23*!vGs|QZkl3bMEMYZy2%KMbd=M-G(kJHk=!KXXDLrEvOG@42CSv~DX9lfTdQX);g4kh1Y zj3r;)%(McqG3rxday(T1sUg znU<2T(jq<661@CTAfvEB4JBM(Lj<%ZpGwzy!=x^G%B|B zK$xVdwJ05Ro`SFHk$7_Eg_xf>p3*svInYmZJV7L^gX1af5vw26jKRhw%*Rz~$xK^7mwU)CwPRb?x?Ius(9qq z)`^#cVa#(5I=OiOZLTnBsIpeFh33D<0=BFP+t2Zo%A?w)S&paFd!3BWsj;sxo#&JE z(#rsg@V(ISs2a&7vXyeV5JIE=~2w3&oBkIZqR1n*l~x?7(Z&-=*i>9 zO}}jbUriZQ2tL}X5PS^y=SuwMZdwRF$M3JeyW4Y4VaF0Z+=RElfc1c}fPWT&uP)q| z{{(&h4kh`0&?zb3$NM@wABqnhcTDJcGyK2Uybyd%8omV%->wk+nY8$)8?+xv{|7Ss zvvXN^?>~yW0OtU6f%|kXpnJ~P0zJ_q&wOxnLe4C9P`v*-nk%~J7I>ckRsnwk{Bt8b zD}fER<)Ho0LNF9rNqIx@9}esfj0UCvR{;JQG=y&)0KWF9eOiY+xSnlOGp?1Ase$6+q1%C3(01li?ms zgj=flt$S8g@m~wQwsZQmOz;oG?|z^ien~mi{FR;&!^u}b>GIF2gny4U@E-}!@xW|A zcJa?lY;!7bE)W6N0{iS)2!00K1l$FT+p7>v12)}Gb~Z|FjTnID)bU>EKPxyB@m>0Ex9>9ixf4=(> zemnC{25=bQpEqR7{iv_NZGeAzu*145ApiP=|8DrL0J@a%SM#6E{_4I56oOg6E(ez6 zKb7$BvIhPK!ZQPy3H&a>{}A{N*lG{pM&M@PCBQ%5N3Ry{PHg%d@Cs0yu;au5=l~oG zOr;$@m-_f~;4+|=GSm`i22{=;z_zcV%fZN~Lq#DOkAS72jc0I(yl6L28#Q=kbL56lFP0Zs!>2QCFJ1C|0e0QUj+ z11o`NfWH9m0>Pn$AP3X~9f1vizQA_CFkpY+0AM08377-S1ug(C1g-|I0d56u10Dk& z2mTDa0~AITf+Da1&==Sf(3k9+ff>LBz=gn4K;MIZ7SPw*zXbFp_WHxn3)m3o2W$@L zE9*M~I|2Ix`f~aafWDDF510>J3h2A%O921e2Xa5~4Pcf$`PcItunK5H-nC2Q-+TDI z4`@NOA>rTlNWM!2>;N1MOap!eTnju0tOD{!6@m~L0yF|sfun(IfL{SG0xtv8CSnU9 zKM8(d5HJ`R3HV3fn>`aa3wS5tKV>rZ2A%~jpHc{}0=DDZk+%bXbYGa141Iy~FSy?Y zK1}$BN0T4GMBo^}KfeP1Z=l_@LeLHH&+gzC05<{mC;UGG-)1`H5jY(1&m!!RG_N0DhbBzjkIJ_!MY=Od(hY@Xv1Gi+~$}yAuAd9a{)Cn#Fze!2W=LP6B@n zcn|m@;oti>$}n&ya1r32N5DHBPoD=21N<`){BqzIz;A$OfKP!hfM9l(&(nQ)g<0u% zf0W=)`mc}w0ASnI(7n7_@cbHB3fu;~27CwPPbdU!0RMPCPxt-`^Cv*OdnNdj{+r^z zEwJ-y=w9Bl@bsL+_z>6)@Xsvphk!SL4-@`9=2Az2Q-SjV|2zo(CGZ{4=0w^&U+koeQ*Ao66 z=M{oOf!V;BfPZcW59tqj0UHDU(RW`LQt$Mo)y=3=`Y!78fWBgS0(D5=9PLeg(HBDh z0O)I<*UX^Z0nVe|=sTO6Qa|)n%x3_7wQ>b@MBkA-ih7{0KDMT;>l=+X1Nz?Lfs{{u z7jO*aLSK`cOrA~w<^XenbAWS!#Xtls1#STD0rZWyG32kl=vGU<==*Ee1Ny$$4cJQG z3Of*c=*wQ;0{RZuFG;(;i?wSa-HXBR1s(_b>13IElK$QBUk^yqSHWM&e>Qv(a2>D` z@Q=Q!)dZ+N-VOi5PbOYKpIYjCDsvkAMuT?&KMU~B7H42z;C$dxz(4wo%)&GA2bP^x z^1l=OLEs_a_X+>6&%p*ja4z`(v;lSo{G+dSOat_djpYgd`irPHz*Jx%;Gg#+#tgrp zuLb_Fg#P6Q?0PHd0Dc1arwDy*UFcR1Wo+-eIz@-WP-q6+quETG^gQa+NH_1r!)IAt2kf&GMuTIdf z0lyQt3wSc&|1|i)4>2DE#sL1g8@%u^V^ZKRfPbERoIC|;pCJ9fcwhps99RL2eUf$u zI0ZQFrBb-o&rwEz`c;$@z&}65?-JlLU@73AR`7V<&%yJ5WIO@*NAC=rfqb2l?(jOc z2AbY1(REVzWk4r)_j!vs5%4o$BycR?pAn#U0?z_F7I_;5&~a1$=osm4?=#*2mIFHO z_@fV~!@zxjj^%CtA!Q4=4e*b))U$($p!_n#YYDh4+L}(7&MvYt9W`L*D5VjvHq}4et4>V@tlrcw*nr4+M zu0b+vfaVF4#!0W5jlMsMrm>?&kDWPT`nVQrkY+JYM5ocs<7(F+17Js?>El|indq^j zn@3NdHF-?k8dwI=O=G7wk8V~vTWzsM>2v|6k82*)G;#F!>8-c?p~0q27=J|b^fsHU zS-1%k$9WCgu3=O@h;&p*X}8r6i%Q{?`_tR6S@uv@Mvv{V1_cXy!|Rh%zh(yaA;wOa z_WxCO9pG*o$=MpdETrT}mE|(qzBta2=AVCA5o}Sa( zd+$~5z4zXG@4ffld(S_!yTC31@Ls;ppUt;BJ2N{wZD$v2hwOOWsp(^XBJvY&y-lYy zb(+98Hk&diSXqB++8BAgLAT*W8%&Ll*z?9WoFXW6e9qKB6E6t9Iklx^p?zx#`qFok zj?;wP63>A+yk-(cli!|#3*&)prJ}IA-&pqR5Q%cd9aryl%KcliByCph%JuY5(`dB6c=c%$+K5?DblkO+kGabKDsut#G0@Z*7MXkgn52XmrS!;`y5mdM&T*_b4~< z-0`0VSo2=O=~O;Ex&GZ+$1vi60LjjEMVx+ZgS}P2blz{hfl|jMLvO>{XP1&!8+Y>y&^0 zH+0To2r9tbQX&0;(d`YI&Q^V``wzdXj~3W7&YYzUKly1Ph+>aH{%9i|izK2m`7_di zbRpx8-%gyZ{8(e;k4qpjW`14@p?LX|?-f(gIr-CX=`am{`4WwZKl{GknU^(B_RkH8 zHobUYXysp!4X9S7Vt-jQCY#z{6?dz7{lXBh#H~;2uMG`q_Q#fNfuvbk!rv73D&&7_ z=$9C)4}nQtEMG>%#l|Ypy$)&o?=$8+pr_nn4PHw!xyIzL|LJ}T~3=;J(kllvq;Ue}yKakoOhB9Gpb{X}m3mb&JwEbdn5 zCv)gAS{KeX`SB>&q;B#*i@O#2|H`9ZV4(l+{CIt7|EIWHq5t1JdUI*Fot8(iNMnDy zl72;C`)PR!i;M~EP=H~vMq$U2ennxY0t$-_3Og5I(Diedl72;D*8&QrhVE8?VM}ce zyO;DU3VRe#*wUE8o&^||X%zM<=~oo?E}*c?ps>$0BRKhS=!}gmS?1`o`)rXCMQPd7E zp=N6L5ha*(4L@=OjG}f_2{lvGSCwGWwf*Q3FpAnSCDcrPpE3eQQ9HGSnrYpqO*3{WnN{kc?(|VWiryL1 zexN6LIwsw~&n&~G`;)Uq0V#rKmk~4r;W=fvbR$1^6p$i#UKv5t%+D{wrQ7)hqkt5_ z3(E+amVQwgF5T2G9tETbUQ$NTH1an8 zw>A@-KCv53H^6{V=%U!x)2QAw5=s%hdD;(iL=`Tb<}C%-CL=!xP|nLT+*?ONDVnzx z&{Vi|nzv6g3Nkd$<*3=AT$-lTca(!DYImASn_uZQ#;rzEp}$&lz4G38iShQcBaz8eT2Mrtd^v8wsUozFtbx+>N|ZicL>d-W&;~ zXuefS(@a+0F2$y2EANbiQZ(N!rD^6X@0DWH6PEW!LMfUbl+rX)mJds@={d_sBcT+{ zk4tHqS<5G-*z|qMrz4>h&Cg0{ntPScOR?#@l`lp@DVkrF(lmE0Uztu!+40y?U4_0L z1*9l$TQT+!IwsvAY*$%J&qL@yar+7#boA&XO*dogwZt zgrFJraLH%qAp~>`xJzZWLeRo}kSLtobqJ+w-Yr9!O!hq|2_1m%UReXfao@;KnBP5k zu=u;#@q-q(#(P#~0jxFX_MNTbu(wx*&p6ee4qrj?!`|LQ?O+>MRC>ui6{@d={RA+v z6L-7@KD^`u+J=iWWZXj7w?gNf3WAQ#`9Kyu`x!lH*&aRnS181&F=-Fo(ZWG501n_O zD*znId(?U$FRN;8N8vVJk3>Por~xjzL~cM}2UX}aOo27SE>fHp00feQD|9fddRKT+ zjH%JELn?H-pgOvUuuj~J{66jvdC8#_s#B`Yz8ldgv(|qY%TM*w@@~T{A8t^Ko48jI z^C9&Syj*GkchKqmkp>>oOlR6h8O(`xTDyP-tuhyhh|n4Igd6b*GuS_xbxlzt_Kq=H z=my8JtWbSgR?IK$O*iaIFMeB#GTfI_bciEe1#hfypvfR5?D;HKZrZ0upTHJJYTofI<+#Z=dFa= zdlR&(r!f!E1E_3tdWAMLas(uRMNE}8if|pk!<_--S-mrOWh5YpSOK0{*(}2ldCPII zkLjdJibH68dW`#cxN<-?aF#x4lI+=)Sv*_vA^os_jy?rBv#@_IkKz@K9U66BWxAqz zKIS822s{_SN6{b9b6hhb$;B74U9AXlqakg?L73MZzlaxAVhy8~7hPPT>kcVcEL@wo zvvf&iL-gTp=YY}bU6)oiN7wQoY(T?SxR6@|r--B_0t%N4la5Ea0YUHusLLu;02)G; z{V6V3TwbA#A7Afa7u)8ad1P0xe;DSv5w<4fO^qvAs2L)`!&R)ojG6C)TwRW4(8nD~ z?;7?LrEe4+%KHMV&Zy`Zu#Hhi!=qF1N4@(m$OJR>zBO<&jw{ zMJVbL*erg&^4YSt7q z9;wXArs5`#LPmnFP>hZjc`dpU)@wahS(khUYrNy*$`X2<{^M}^8KbIMdc7wq>+pRT zY|s1_+=Acsz39oxhWSQ98zoOwHYn)ARid${D>I3>)aYj_Gg79X<<(X^u=~aBqNMX2 z8x{)#n{Wqd7p`{_$8Llrg}Z!ScY0nF3BkRfqoda5Aj0L)y`CW#AzcGvHiv{62t{>W&h2}h9%R+S6N?RffZ~gUrT<=KrWZF|M06-v>wQiG6dWX|bcp8rL4{7n zR0~*%`#s2q6Q79=1Q#Q?dmnP#6KmHPwA&Qhn7~K8Iz|WU>Bkkib7Hi!Y{aP6CzZ8H z2FL}xs2>JM6T;r7Y&gacBqfudF(x586Co4&oO7(AZb9k`BqTyYtjK&@?n`zqMPrEI zSCzWB<+$+c%B)n)XyRo9jp#TT8O#$@8{UY(O`6Dg0^+M~Lr?2~s4 z_pGjG0L$jRs%yz+(p2`Bdsk_U>mDPn|{k@rLF+Msi8Aa&|+ z#TUmNjk_b5gSZd7(m6P?YO|9bJE}TMOo-EzcopjwCo*v7WR(qRoXj&6F6ezh1lb0>vRIEEbgHt zzJo}F4U67;VwJpBzE?nkXTF+yQgsb6PuYBOHBFGgSE3-40=L^TWP+3x*{x)#Aj3~&us>fcTr+2GRHI3a;ixv|8Q1yj`WJy zS71Y}Ywp=tYGxwKnkgoo!={m?x*}&5bk41kYff#O?M|EJd1g27%eC(FS-1ElC4E6I z;AY`-H0TRiakOScG*)4`0l2728?Q7KfE^+w=pk(!=IUZz@bbNdnA#;QXD%|7qq-DU z%OXp+C?u!L;N11C2;%AGJST>YuxsZHGThD;3@QE4phuiu3FjuXJdLCjTd%6pvCzr_ zO-fbfYUS65+!U^6OQpJ|Dgu~NNbr+f3*+D^sJPwoD4UZY*Ria!*oqvhfQRd=KL&Fn zpz!G!F$E*OfyHWo=I3-{m9}ZnPgH=gfT?hYSMnzIeuQi}vItFAZe~#!9Yfl3OO+}> zaX3I~m)e?+;#T%35`d~odgpC=C+9aB@!L~73Vav-L+)?ysIDtaPv*~^eq`49#nJT&mhvdJj66b8*?h0c98MV0A2Q-DNlKs9ka%h?Hb0CYoIQ=sQqx^lT>P)CaJyjoE~_Jtw8Jm|UD3=8&N zWc?Q#f8Y^&A|ocgq$0#H(90~!;a16BX2-9A!|f9?Mh$e;jqHl*!k5WEO53*hQuDdgIr)Be8;SR_DUDk&_PseAJ?a zI8DZxQ+x}aK+YsL0KyNWx2sD909A2SAT2_lmgumgyc>R}I)B(Nj^^s!sSglSeUJ65 z04aYKE4AT$wN|q1!5=iSfpZ1q1CG-0Gy{A_n8wd^MLtwpm9!=Ph@GccdD;c@WOWVx zSgmln@l>V)Rs2LD6iP-PqY8J2rgf+b7;DzC;XDR zo#>!eFBCwzHt)B<7v zVL#cgM!DqBTu?rd$f@olR(k&$ZL@{}RkbAtegI@t=4+@JNmczm4hOvWKwhoP4dOk7 z2=_@KPC@t}7E;#FzeLx;Jhvdk4k=Z;%+%sTAeKyXNtZMKdgu^V?5En2;9*M37}eo5 zssgCghIS&N{vh^bN7QIbH6)dsFpgv)OMS|3Q7Iybg2z#87tm)i#o?XkD&|DF7g`yy z)fTcix<>VoOiZa_YVta!MqYY|+u>9*RdWYh0{sZN~Cp-zh9x--FzF)Zzg&l)B}n9f%4 zR57N4ZWg@HN&Q-SUL-=`xwZAhVM>-nVDo~k^1PZT$0Jm4J;2xTEr-vu2Td|CtyX+K zYb*GK0m2-l$5w+>khp-?Vi*dAlte*X$X=i4i#m)#$01gpjcz zEWbxz;in#)!NjWF1G6w_xB^;UoS8vgr@#8hBOB%mf&iY;37x^Bh0lrLo1Q@{ulf8? zy9&N9@EmpQs59ZLa0nbR!^O#q`x1MT44l;SWyCo6uLRd%+W0hI@bL=g2pORELIUi0f#U(25M2XjgLR9 z%}BZUh#emI+;XvSh98U77Zn$FPoD_e9-1p%eEF0YF2%){VLlU@Wk5p?F`Yhq&gx7V zMs~8H`Z(ZxQJbYiMk4yMHnTg3@DC?aU$IJve2XvBkr{r?Le(1ip^$AYT3mTVN}3$D zx3g&fBb)fn5WK95s>|f|7WsUwX9tTyylh|*?5N`lyx#Jpvy+Zb#5iXgFABYQ=Yk$F zW|x8<@!-g=1wCS6chgA=I=fq>m6AV6noa`aJuFI+^BsFyv@JB-5ex>9^$f^vTwm~Q4`)zr-@1?-My4W^ZoVNBHST6J3wEJCT@5{2kJl( ziK%~(4#fN4gLNS2A585KeW6Kz54Fe_0|A}3XUFV^SyW<>&FqWEf%0&RiU2uab(1YV z!lHeh?9UzDAIZ{?z0zNcL*k=&(bWBpjEhwk9}v;IDRfU{_%6WFIzn0L6Hek7OFPJx zeuE}}tq(34VYi6w!m+GEk{$gZ`#2q~It6d}%l+hd=2H&Q(4N4nDcjWu(SM>Yl8(0$ zmz>10IwL%ZCnyK%y<+gm%!!hVoFNZ9g_&19f_v^bm03|82C>r&Y3kH?dz_WiF-}5Zm`KG*xcG@bXZRZz^q-^7Yf_8Gl7g|)48^XvIg?pC>bFGWSQVp>}CU-F# zP2o_y8s)VvvFL2BuwOM^TEG>}|1vgk6)re3U(SkQG~pR3=iz%u!$s4(aby1}C{hKVh6wWOa*luQ@#(xTJ zyCv%<1h-l<0N(Yw%}#V1OF^BXr3!vK3)pC8H+u)q!e|#H?#$z%gS@-g+6{O<-xIZw zyYqvHzk7HUh1mG9$FO}b^P`$r!C0~HV+^vLwTGMUS00PDcuHxw=K&p2mw0b+`-95A z(+EDFBs+hIrz_EWy%?1ahp9ZQvnT@jBYKkvYLBuW$l)>rdyE%Hw$W@KR}BbkvDfVO zpRni-HX!{se5BHE+T=cM;g$)# zQu>TFy%mU`&suA!Xv6G86eaHHS-a<&Z{atGv*{;1#`<}JoP-6=J zzO|n00wG-YMR=r}`5&a{MYDQO_Csqe2~H2e@~g2Qr4*@2z76|v$}k#v3ZLj;wDF;L zUO!E#11x*Z^)u_68I|ETTR*qHRoE$BX8l5m66jdHNz62(FO6a92}>vo8{Svew>6}C zFTbVwwLTrFk=xqVR`LfOv?wy$*&6GrUA=y~y{$=4ym7jNy=F$35btP<*93i<05xFn zPPST9ZWFq(vp$mE9^J)gfOL1&8|WR;-E5^sz{5qP-EB2*R37qgg6?4}#o=yp7iyw= z+TW3kn_VPPmf2qEWElY7aC~pG3H9XOKDN?7hN1}*&!c9(9nxQdG8sjFX z*>iFnz$HV++~joI7Lq^1o{^$D(_TFj=vj7MvU|2YBW2|rfH!dtM>9MZ{Hw(|&#p^p zpKs4d1$u#P3sx?)rz^@ADg9=Cl}s;IO2@5IgqJAojgns+7BKasT zFSn=T7L7x9X0EVnG?6Q9Jx)=JT#&15Tg>NbVpo{(HFk}B#kIB-(0{M9EuP)=w$1;I zZ@>?Jw)RHbVzzIxZDHp(+ZGG(7P~IRcdK2O!n+N>gkj%q*GNQn&?s7(J8i4kfp*+w z+im`Fw>@3_aFcs53OuZ6$M>R9{=Cl+h~WQzLz;3q9#C$RrAeb7G+Ky_hg3XZ7;16C z0AcRod^?gvH+jTRJ~0C^;?bfW9`l%OIX}a#hsW)WHTA@P8oM=*ukez%ka)CPPbmM% z?BLQXYGFvC5ReEYe$w6~O7j3KEA0+Wh_ACdvVapFuO!kwP z$uA`#N3d5&h2?LQBfJ*A_Dlg^CBQbrt$Yo7!M|R&S9kE8LO`YN@iz!F{UIj&Ch;Z4 zbJp^fZS$BFZ)Y9c@Qz(~9Nfe3#^23&qd(uXEqt`voqV522h9ZGA^v~{%inah>_agm z;v)tp_y~rEPnzh?(8qRtq8TM&xA6%m<0;{8<5S2WLYn)TJ$;1~%jfn?As?jtk@tmN zr(4a)48OFieYf?MJtqi}+>3G*ER?R`_r?Dx;cI)winu2RZ(E-pqw+&9t#4Ncvs=fA zG)}aAy%xh`>`<@Mc5XcIcC1_6wNriOL_`}2eE-tz?_8fwawluwr4Dx~e&$wS*E-}h zKxKDgH~JNK@F~phG&JrYDQoUgw_(^pqqk?h)`s!!RiB9kqt6D&-uJFgN3nwc+^5bS z0CLzDLlTIny`TKi+8=$?60{Demrwmbnj^HH5Fdo8(}+P39IOThhsa-p;82MbI^lyPZYnw`hwocj>Y%n(bC&@xn%H;bJ_Ry6I}ank^5P+sGp5 zs*W{xW@8YH&l7^5yE-p2SKQ~$?hbgi^Tf5Qc<$`O8t(`BxC_yFtw0Iq4{ AxBvhE literal 0 HcmV?d00001 From 67f43e8f60f960b9da83c84ae11cc259e91a10b4 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Sun, 25 Jan 2026 17:25:27 -0600 Subject: [PATCH 06/14] Simplify setup and teardown Allow the buffer functions to manage the internal pointer and use consistent argument order for calloc. --- java-wasm/src/main/java/org/prism/Prism.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/java-wasm/src/main/java/org/prism/Prism.java b/java-wasm/src/main/java/org/prism/Prism.java index ba13f18aed..51552569e6 100644 --- a/java-wasm/src/main/java/org/prism/Prism.java +++ b/java-wasm/src/main/java/org/prism/Prism.java @@ -40,10 +40,9 @@ public byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength) { int sourcePointer = 0; int optionsPointer = 0; int bufferPointer = 0; - int resultPointer = 0; byte[] result; try { - sourcePointer = exports.calloc(1, sourceLength); + sourcePointer = exports.calloc(sourceLength, 1); exports.memory().write(sourcePointer, source); optionsPointer = exports.calloc(1, packedOptions.length); @@ -54,10 +53,8 @@ public byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength) { exports.pmSerializeParse(bufferPointer, sourcePointer, sourceLength, optionsPointer); - resultPointer = exports.pmBufferValue(bufferPointer); - result = instance.memory().readBytes( - resultPointer, + exports.pmBufferValue(bufferPointer), exports.pmBufferLength(bufferPointer)); } finally { if (sourcePointer != 0) { @@ -67,11 +64,9 @@ public byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength) { exports.free(optionsPointer); } if (bufferPointer != 0) { + exports.pmBufferFree(bufferPointer); exports.free(bufferPointer); } - if (resultPointer != 0) { - exports.free(resultPointer); - } } return result; From 8db0445232d9d1ea78074af24104cd3465d304a9 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Mon, 26 Jan 2026 12:31:20 -0600 Subject: [PATCH 07/14] Support AOT and interp WASM Primarily for testing purposes. --- java-wasm/src/main/java/org/prism/Prism.java | 76 +++------------- .../src/main/java/org/prism/PrismAOT.java | 79 +++++++++++++++++ .../src/main/java/org/prism/PrismWASM.java | 70 +++++++++++++++ .../src/test/java/org/prism/DummyTest.java | 86 +++---------------- .../src/test/java/org/prism/JRubyTest.java | 4 + 5 files changed, 175 insertions(+), 140 deletions(-) create mode 100644 java-wasm/src/main/java/org/prism/PrismAOT.java create mode 100644 java-wasm/src/main/java/org/prism/PrismWASM.java create mode 100644 java-wasm/src/test/java/org/prism/JRubyTest.java diff --git a/java-wasm/src/main/java/org/prism/Prism.java b/java-wasm/src/main/java/org/prism/Prism.java index 51552569e6..8bb9c63365 100644 --- a/java-wasm/src/main/java/org/prism/Prism.java +++ b/java-wasm/src/main/java/org/prism/Prism.java @@ -1,89 +1,37 @@ package org.prism; import com.dylibso.chicory.annotations.WasmModuleInterface; -import com.dylibso.chicory.runtime.ByteArrayMemory; -import com.dylibso.chicory.runtime.ImportValues; -import com.dylibso.chicory.runtime.Instance; import com.dylibso.chicory.wasi.WasiOptions; import com.dylibso.chicory.wasi.WasiPreview1; -import com.dylibso.chicory.wasm.WasmModule; -import com.dylibso.chicory.wasm.types.MemoryLimits; import java.nio.charset.StandardCharsets; @WasmModuleInterface(WasmResource.absoluteFile) -public class Prism implements AutoCloseable { - private final WasiPreview1 wasi; - private final Instance instance; - private final Prism_ModuleExports exports; +public abstract class Prism implements AutoCloseable { + protected final WasiPreview1 wasi; - public Prism() { + Prism() { this(WasiOptions.builder().build()); } - public Prism(WasiOptions wasiOpts) { - wasi = WasiPreview1.builder().withOptions(wasiOpts).build(); - WasmModule module = PrismParser.load(); - PrismParser parser = new PrismParser(); - instance = Instance.builder(module) - .withMemoryFactory(limits -> new ByteArrayMemory(new MemoryLimits(10, MemoryLimits.MAX_PAGES))) - .withMachineFactory(parser.machineFactory()) - .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) - .build(); - exports = new Prism_ModuleExports(instance); - } - public Prism_ModuleExports exports() { - return exports; + Prism(WasiOptions wasiOpts) { + wasi = WasiPreview1.builder().withOptions(wasiOpts).build(); } - public byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength) { - int sourcePointer = 0; - int optionsPointer = 0; - int bufferPointer = 0; - byte[] result; - try { - sourcePointer = exports.calloc(sourceLength, 1); - exports.memory().write(sourcePointer, source); - - optionsPointer = exports.calloc(1, packedOptions.length); - exports.memory().write(optionsPointer, packedOptions); - - bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1); - exports.pmBufferInit(bufferPointer); - - exports.pmSerializeParse(bufferPointer, sourcePointer, sourceLength, optionsPointer); + public static Prism newInstance(boolean aot) { + if (aot) return new PrismAOT(); - result = instance.memory().readBytes( - exports.pmBufferValue(bufferPointer), - exports.pmBufferLength(bufferPointer)); - } finally { - if (sourcePointer != 0) { - exports.free(sourcePointer); - } - if (optionsPointer != 0) { - exports.free(optionsPointer); - } - if (bufferPointer != 0) { - exports.pmBufferFree(bufferPointer); - exports.free(bufferPointer); - } - } - - return result; + return new PrismWASM(); } - public ParseResult serializeParse(byte[] packedOptions, String source) { - var sourceBytes = source.getBytes(StandardCharsets.US_ASCII); + public abstract byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength); + public ParseResult serializeParse(byte[] packedOptions, String source) { + var sourceBytes = source.getBytes(StandardCharsets.ISO_8859_1); byte[] result = serialize(packedOptions, sourceBytes, sourceBytes.length); - return Loader.load(result, sourceBytes); } @Override - public void close() { - if (wasi != null) { - wasi.close(); - } - } + public abstract void close(); } diff --git a/java-wasm/src/main/java/org/prism/PrismAOT.java b/java-wasm/src/main/java/org/prism/PrismAOT.java new file mode 100644 index 0000000000..2637e12646 --- /dev/null +++ b/java-wasm/src/main/java/org/prism/PrismAOT.java @@ -0,0 +1,79 @@ +package org.prism; + +import com.dylibso.chicory.annotations.WasmModuleInterface; +import com.dylibso.chicory.runtime.ByteArrayMemory; +import com.dylibso.chicory.runtime.ImportValues; +import com.dylibso.chicory.runtime.Instance; +import com.dylibso.chicory.wasm.WasmModule; +import com.dylibso.chicory.wasm.types.MemoryLimits; + +import java.nio.charset.StandardCharsets; + +@WasmModuleInterface(WasmResource.absoluteFile) +public class PrismAOT extends Prism { + private final Instance instance; + private final Prism_ModuleExports exports; + + public PrismAOT() { + super(); + WasmModule module = PrismParser.load(); + PrismParser parser = new PrismParser(); + instance = Instance.builder(module) + .withMemoryFactory(limits -> new ByteArrayMemory(new MemoryLimits(10, MemoryLimits.MAX_PAGES))) + .withMachineFactory(parser.machineFactory()) + .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) + .build(); + exports = new Prism_ModuleExports(instance); + } + + public byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength) { + int sourcePointer = 0; + int optionsPointer = 0; + int bufferPointer = 0; + byte[] result; + try { + sourcePointer = exports.calloc(sourceLength, 1); + exports.memory().write(sourcePointer, source); + + optionsPointer = exports.calloc(1, packedOptions.length); + exports.memory().write(optionsPointer, packedOptions); + + bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1); + exports.pmBufferInit(bufferPointer); + + exports.pmSerializeParse(bufferPointer, sourcePointer, sourceLength, optionsPointer); + + result = instance.memory().readBytes( + exports.pmBufferValue(bufferPointer), + exports.pmBufferLength(bufferPointer)); + } finally { + if (sourcePointer != 0) { + exports.free(sourcePointer); + } + if (optionsPointer != 0) { + exports.free(optionsPointer); + } + if (bufferPointer != 0) { + exports.pmBufferFree(bufferPointer); + exports.free(bufferPointer); + } + } + + return result; + } + + public ParseResult serializeParse(byte[] packedOptions, String source) { + var sourceBytes = source.getBytes(StandardCharsets.US_ASCII); + + byte[] result = serialize(packedOptions, sourceBytes, sourceBytes.length); + + return Loader.load(result, sourceBytes); + } + + @Override + public void close() { + if (wasi != null) { + wasi.close(); + } + } +} diff --git a/java-wasm/src/main/java/org/prism/PrismWASM.java b/java-wasm/src/main/java/org/prism/PrismWASM.java new file mode 100644 index 0000000000..235bfb54cc --- /dev/null +++ b/java-wasm/src/main/java/org/prism/PrismWASM.java @@ -0,0 +1,70 @@ +package org.prism; + +import com.dylibso.chicory.annotations.WasmModuleInterface; +import com.dylibso.chicory.runtime.ByteArrayMemory; +import com.dylibso.chicory.runtime.ExportFunction; +import com.dylibso.chicory.runtime.ImportValues; +import com.dylibso.chicory.runtime.Instance; +import com.dylibso.chicory.runtime.WasmRuntimeException; +import com.dylibso.chicory.wasi.WasiOptions; +import com.dylibso.chicory.wasi.WasiPreview1; +import com.dylibso.chicory.wasm.WasmModule; +import com.dylibso.chicory.wasm.types.MemoryLimits; + +import java.nio.charset.StandardCharsets; + +@WasmModuleInterface(WasmResource.absoluteFile) +public class PrismWASM extends Prism { + private final ExportFunction calloc; + private final ExportFunction pmSerializeParse; + private final ExportFunction pmBufferInit; + private final ExportFunction pmBufferSizeof; + private final ExportFunction pmBufferValue; + private final ExportFunction pmBufferLength; + + private final Instance instance; + + public PrismWASM() { + super(); + instance = Instance.builder(PrismParser.load()) + .withMemoryFactory(ByteArrayMemory::new) + .withMachineFactory(PrismParser::create) + .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) + .build(); + + calloc = instance.exports().function("calloc"); + pmSerializeParse = instance.exports().function("pm_serialize_parse"); + pmBufferInit = instance.exports().function("pm_buffer_init"); + pmBufferSizeof = instance.exports().function("pm_buffer_sizeof"); + pmBufferValue = instance.exports().function("pm_buffer_value"); + pmBufferLength = instance.exports().function("pm_buffer_length"); + } + + @Override + public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLength) { + var sourcePointer = calloc.apply(1, sourceLength); + instance.memory().write((int) sourcePointer[0], sourceBytes, 0, sourceLength); + + var optionsPointer = calloc.apply(1, packedOptions.length); + instance.memory().write((int) optionsPointer[0], packedOptions); + + var bufferPointer = calloc.apply(pmBufferSizeof.apply()[0], 1); + pmBufferInit.apply(bufferPointer); + + pmSerializeParse.apply( + bufferPointer[0], sourcePointer[0], sourceLength, optionsPointer[0]); + + var result = instance.memory().readBytes( + (int) pmBufferValue.apply(bufferPointer[0])[0], + (int) pmBufferLength.apply(bufferPointer[0])[0]); + + return result; + } + + @Override + public void close() { + if (wasi != null) { + wasi.close(); + } + } +} diff --git a/java-wasm/src/test/java/org/prism/DummyTest.java b/java-wasm/src/test/java/org/prism/DummyTest.java index 9e49f1afdd..fe6d87d2e7 100644 --- a/java-wasm/src/test/java/org/prism/DummyTest.java +++ b/java-wasm/src/test/java/org/prism/DummyTest.java @@ -1,14 +1,7 @@ package org.prism; -import com.dylibso.chicory.runtime.ImportValues; -import com.dylibso.chicory.runtime.Instance; -import com.dylibso.chicory.wasi.WasiOptions; -import com.dylibso.chicory.wasi.WasiPreview1; -import com.dylibso.chicory.wasm.Parser; -import com.dylibso.chicory.wasm.types.Value; import org.junit.jupiter.api.Test; -import java.nio.charset.StandardCharsets; import java.util.EnumSet; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -31,42 +24,13 @@ public class DummyTest { @Test public void test1() { - WasiOptions wasiOpts = WasiOptions.builder().build(); - WasiPreview1 wasi = WasiPreview1.builder().withOptions(wasiOpts).build(); - var wasmPrism = Instance.builder(Parser.parse(DummyTest.class.getResourceAsStream("/prism.wasm"))) - .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) - .build(); - var memory = wasmPrism.memory(); - var calloc = wasmPrism.export("calloc"); - var pmSerializeParse = wasmPrism.export("pm_serialize_parse"); - var pmBufferInit = wasmPrism.export("pm_buffer_init"); - var pmBufferSizeof = wasmPrism.export("pm_buffer_sizeof"); - var pmBufferValue = wasmPrism.export("pm_buffer_value"); - var pmBufferLength = wasmPrism.export("pm_buffer_length"); - // The Ruby source code to be processed var source = "1 + 1"; - var sourceBytes = source.getBytes(StandardCharsets.US_ASCII); - - var sourcePointer = calloc.apply(1, source.length()); - memory.writeString((int) sourcePointer[0], source); - - var optionsPointer = calloc.apply(1, packedOptions.length); - memory.write((int) optionsPointer[0], packedOptions); - - var bufferPointer = calloc.apply(pmBufferSizeof.apply()[0], 1); - pmBufferInit.apply(bufferPointer); - - pmSerializeParse.apply( - bufferPointer[0], sourcePointer[0], source.length(), optionsPointer[0]); - - var result = memory.readBytes( - (int) pmBufferValue.apply(bufferPointer[0])[0], - (int) pmBufferLength.apply(bufferPointer[0])[0]); - System.out.println("RESULT: " + new String(result)); - - ParseResult pr = Loader.load(result, sourceBytes); + ParseResult pr = null; + try (Prism prism = new PrismWASM()) { + pr = prism.serializeParse(packedOptions, source); + } assertEquals(1, pr.value.childNodes().length); System.out.println("Nodes:"); @@ -80,7 +44,7 @@ public void test1Aot() { var source = "1 + 1"; ParseResult pr = null; - try (Prism prism = new Prism()) { + try (Prism prism = new PrismAOT()) { pr = prism.serializeParse(packedOptions, source); } @@ -92,45 +56,15 @@ public void test1Aot() { @Test public void test2() { - WasiOptions wasiOpts = WasiOptions.builder().build(); - WasiPreview1 wasi = WasiPreview1.builder().withOptions(wasiOpts).build(); - var wasmPrism = Instance.builder(Parser.parse(DummyTest.class.getResourceAsStream("/prism.wasm"))) - .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) - .build(); - var memory = wasmPrism.memory(); - var calloc = wasmPrism.export("calloc"); - var pmSerializeParse = wasmPrism.export("pm_serialize_parse"); - var pmBufferInit = wasmPrism.export("pm_buffer_init"); - var pmBufferSizeof = wasmPrism.export("pm_buffer_sizeof"); - var pmBufferValue = wasmPrism.export("pm_buffer_value"); - var pmBufferLength = wasmPrism.export("pm_buffer_length"); - // The Ruby source code to be processed var source = "puts \"h\ne\nl\nl\no\n\""; - var sourceBytes = source.getBytes(StandardCharsets.US_ASCII); - var sourcePointer = calloc.apply(1, source.length()); - memory.writeString((int) sourcePointer[0], source); - - var optionsPointer = calloc.apply(1, packedOptions.length); - memory.write((int) optionsPointer[0], packedOptions); - - var bufferPointer = calloc.apply(pmBufferSizeof.apply()[0], 1); - pmBufferInit.apply(bufferPointer); - - pmSerializeParse.apply( - bufferPointer[0], sourcePointer[0], source.length(), optionsPointer[0]); - - var result = memory.readBytes( - (int) pmBufferValue.apply(bufferPointer[0])[0], - (int) pmBufferLength.apply(bufferPointer[0])[0]); - - System.out.println("RESULT: " + new String(result)); - - ParseResult pr = Loader.load(result, sourceBytes); + ParseResult pr = null; + try (Prism prism = new PrismWASM()) { + pr = prism.serializeParse(packedOptions, source); + } assertEquals(1, pr.value.childNodes().length); - System.out.println("Nodes:"); System.out.println(pr.value.childNodes()[0]); assertTrue(pr.value.childNodes()[0].toString().contains("CallNode")); @@ -142,7 +76,7 @@ public void test2Aot() { var source = "puts \"h\ne\nl\nl\no\n\""; ParseResult pr = null; - try (Prism prism = new Prism()) { + try (Prism prism = new PrismAOT()) { pr = prism.serializeParse(packedOptions, source); } diff --git a/java-wasm/src/test/java/org/prism/JRubyTest.java b/java-wasm/src/test/java/org/prism/JRubyTest.java new file mode 100644 index 0000000000..1308f33b4c --- /dev/null +++ b/java-wasm/src/test/java/org/prism/JRubyTest.java @@ -0,0 +1,4 @@ +package org.prism; + +public class JRubyTest { +} From f10e5b710a89581ca76c43b43955c53016f96dd1 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Mon, 26 Jan 2026 12:32:08 -0600 Subject: [PATCH 08/14] Add test that parses JRuby's boot files This is not all of the boot files but is sufficient to demonstrate a memory fault in the AOT WASM parser. --- java-wasm/pom.xml | 2 +- .../src/test/java/org/prism/JRubyTest.java | 78 +++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index 45f5eb71fc..1592c12174 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -61,7 +61,7 @@ org.jruby - jruby-base + jruby-complete 10.0.2.0 diff --git a/java-wasm/src/test/java/org/prism/JRubyTest.java b/java-wasm/src/test/java/org/prism/JRubyTest.java index 1308f33b4c..634d651592 100644 --- a/java-wasm/src/test/java/org/prism/JRubyTest.java +++ b/java-wasm/src/test/java/org/prism/JRubyTest.java @@ -1,4 +1,82 @@ package org.prism; +import org.jruby.Ruby; +import org.junit.jupiter.api.Test; + +import java.io.DataInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.EnumSet; + public class JRubyTest { + final static String[] JRUBY_BOOT_FILES = { + "jruby/java.rb", + "jruby/java/core_ext.rb", + "jruby/java/core_ext/object.rb", + "jruby/java/java_ext.rb", + "jruby/kernel.rb", + "jruby/kernel/signal.rb", + "jruby/kernel/kernel.rb", + "jruby/kernel/proc.rb", + "jruby/kernel/process.rb", + "jruby/kernel/enumerator.rb", + "jruby/kernel/enumerable.rb", + "jruby/kernel/io.rb", + "jruby/kernel/gc.rb", + "jruby/kernel/range.rb", + "jruby/kernel/file.rb", + "jruby/kernel/method.rb", + "jruby/kernel/thread.rb", + "jruby/kernel/integer.rb", + "jruby/kernel/time.rb", + "jruby/preludes.rb", + "jruby/kernel/prelude.rb", + "jruby/kernel/enc_prelude.rb", + "META-INF/jruby.home/lib/ruby/stdlib/unicode_normalize.rb", + "jruby/kernel/gem_prelude.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rbconfig.rb", + "jruby/kernel/rbconfig.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/compatibility.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/defaults.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/deprecate.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/errors.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/target_rbconfig.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/exceptions.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/unknown_command_spell_checker.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/specification.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/basic_specification.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/stub_specification.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/platform.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/specification_record.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/util/list.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/requirement.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/version.rb", + }; + + @Test + public void basicJRubyTest() throws Throwable{ + Prism prism = new PrismWASM(); + byte[] src = new byte[1024*1024]; + + for (var file : JRUBY_BOOT_FILES) { + byte[] options = ParsingOptions.serialize( + file.getBytes(StandardCharsets.UTF_8), + 1, + "UTF-8".getBytes(StandardCharsets.UTF_8), + false, + EnumSet.noneOf(ParsingOptions.CommandLine.class), + ParsingOptions.SyntaxVersion.LATEST, + false, + false, + false, + new byte[][][]{} + ); + try (InputStream fileIn = Ruby.getClassLoader().getResourceAsStream(file)) { + DataInputStream dis = new DataInputStream(fileIn); + int read = dis.read(src); + prism.serialize(options, src, read); + } + } + } } From f2582e1b31b143102c8c3741d25019020a636b2a Mon Sep 17 00:00:00 2001 From: andreatp Date: Tue, 27 Jan 2026 14:07:03 +0000 Subject: [PATCH 09/14] Fix the memory leak --- java-wasm/src/main/java/org/prism/Prism.java | 6 +- .../src/main/java/org/prism/PrismAOT.java | 41 ++++------ .../src/main/java/org/prism/PrismWASM.java | 82 +++++++++---------- .../src/test/java/org/prism/JRubyTest.java | 26 +++++- 4 files changed, 85 insertions(+), 70 deletions(-) diff --git a/java-wasm/src/main/java/org/prism/Prism.java b/java-wasm/src/main/java/org/prism/Prism.java index 8bb9c63365..8c40c6dce5 100644 --- a/java-wasm/src/main/java/org/prism/Prism.java +++ b/java-wasm/src/main/java/org/prism/Prism.java @@ -33,5 +33,9 @@ public ParseResult serializeParse(byte[] packedOptions, String source) { } @Override - public abstract void close(); + public void close() { + if (wasi != null) { + wasi.close(); + } + } } diff --git a/java-wasm/src/main/java/org/prism/PrismAOT.java b/java-wasm/src/main/java/org/prism/PrismAOT.java index 2637e12646..fce4bd7168 100644 --- a/java-wasm/src/main/java/org/prism/PrismAOT.java +++ b/java-wasm/src/main/java/org/prism/PrismAOT.java @@ -9,45 +9,46 @@ import java.nio.charset.StandardCharsets; -@WasmModuleInterface(WasmResource.absoluteFile) public class PrismAOT extends Prism { - private final Instance instance; private final Prism_ModuleExports exports; + private final Instance instance; public PrismAOT() { super(); - WasmModule module = PrismParser.load(); - PrismParser parser = new PrismParser(); - instance = Instance.builder(module) - .withMemoryFactory(limits -> new ByteArrayMemory(new MemoryLimits(10, MemoryLimits.MAX_PAGES))) - .withMachineFactory(parser.machineFactory()) + instance = Instance.builder(PrismParser.load()) + .withMemoryFactory(ByteArrayMemory::new) + .withMachineFactory(PrismParser::create) .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) .build(); exports = new Prism_ModuleExports(instance); } - public byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength) { + @Override + public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLength) { int sourcePointer = 0; int optionsPointer = 0; int bufferPointer = 0; byte[] result; try { - sourcePointer = exports.calloc(sourceLength, 1); - exports.memory().write(sourcePointer, source); + sourcePointer = exports.calloc(1, sourceLength + 1); + instance.memory().write(sourcePointer, sourceBytes, 0, sourceLength); + instance.memory().writeByte(sourcePointer + sourceLength, (byte) 0); optionsPointer = exports.calloc(1, packedOptions.length); - exports.memory().write(optionsPointer, packedOptions); + instance.memory().write(optionsPointer, packedOptions); bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1); exports.pmBufferInit(bufferPointer); - exports.pmSerializeParse(bufferPointer, sourcePointer, sourceLength, optionsPointer); + exports.pmSerializeParse( + bufferPointer, sourcePointer, sourceLength, optionsPointer); result = instance.memory().readBytes( exports.pmBufferValue(bufferPointer), exports.pmBufferLength(bufferPointer)); } finally { if (sourcePointer != 0) { + exports.pmStringFree(sourcePointer); exports.free(sourcePointer); } if (optionsPointer != 0) { @@ -62,18 +63,8 @@ public byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength) { return result; } - public ParseResult serializeParse(byte[] packedOptions, String source) { - var sourceBytes = source.getBytes(StandardCharsets.US_ASCII); - - byte[] result = serialize(packedOptions, sourceBytes, sourceBytes.length); - - return Loader.load(result, sourceBytes); - } - - @Override - public void close() { - if (wasi != null) { - wasi.close(); - } + // DEBUG CHECK + public int memorySize() { + return instance.memory().pages(); } } diff --git a/java-wasm/src/main/java/org/prism/PrismWASM.java b/java-wasm/src/main/java/org/prism/PrismWASM.java index 235bfb54cc..a1b7c374e4 100644 --- a/java-wasm/src/main/java/org/prism/PrismWASM.java +++ b/java-wasm/src/main/java/org/prism/PrismWASM.java @@ -1,70 +1,70 @@ package org.prism; -import com.dylibso.chicory.annotations.WasmModuleInterface; import com.dylibso.chicory.runtime.ByteArrayMemory; -import com.dylibso.chicory.runtime.ExportFunction; import com.dylibso.chicory.runtime.ImportValues; import com.dylibso.chicory.runtime.Instance; -import com.dylibso.chicory.runtime.WasmRuntimeException; -import com.dylibso.chicory.wasi.WasiOptions; -import com.dylibso.chicory.wasi.WasiPreview1; +import com.dylibso.chicory.runtime.InterpreterMachine; +import com.dylibso.chicory.wasm.Parser; import com.dylibso.chicory.wasm.WasmModule; -import com.dylibso.chicory.wasm.types.MemoryLimits; -import java.nio.charset.StandardCharsets; - -@WasmModuleInterface(WasmResource.absoluteFile) public class PrismWASM extends Prism { - private final ExportFunction calloc; - private final ExportFunction pmSerializeParse; - private final ExportFunction pmBufferInit; - private final ExportFunction pmBufferSizeof; - private final ExportFunction pmBufferValue; - private final ExportFunction pmBufferLength; - + private final Prism_ModuleExports exports; private final Instance instance; public PrismWASM() { super(); - instance = Instance.builder(PrismParser.load()) + WasmModule module = Parser.parse( + PrismWASM.class.getResourceAsStream("/prism.wasm")); + instance = Instance.builder(module) .withMemoryFactory(ByteArrayMemory::new) - .withMachineFactory(PrismParser::create) + .withMachineFactory(InterpreterMachine::new) .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) .build(); - - calloc = instance.exports().function("calloc"); - pmSerializeParse = instance.exports().function("pm_serialize_parse"); - pmBufferInit = instance.exports().function("pm_buffer_init"); - pmBufferSizeof = instance.exports().function("pm_buffer_sizeof"); - pmBufferValue = instance.exports().function("pm_buffer_value"); - pmBufferLength = instance.exports().function("pm_buffer_length"); + exports = new Prism_ModuleExports(instance); } @Override public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLength) { - var sourcePointer = calloc.apply(1, sourceLength); - instance.memory().write((int) sourcePointer[0], sourceBytes, 0, sourceLength); + int sourcePointer = 0; + int optionsPointer = 0; + int bufferPointer = 0; + byte[] result; + try { + sourcePointer = exports.calloc(1, sourceLength + 1); + instance.memory().write(sourcePointer, sourceBytes, 0, sourceLength); + instance.memory().writeByte(sourcePointer + sourceLength, (byte) 0); - var optionsPointer = calloc.apply(1, packedOptions.length); - instance.memory().write((int) optionsPointer[0], packedOptions); + optionsPointer = exports.calloc(1, packedOptions.length); + instance.memory().write(optionsPointer, packedOptions); - var bufferPointer = calloc.apply(pmBufferSizeof.apply()[0], 1); - pmBufferInit.apply(bufferPointer); + bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1); + exports.pmBufferInit(bufferPointer); - pmSerializeParse.apply( - bufferPointer[0], sourcePointer[0], sourceLength, optionsPointer[0]); + exports.pmSerializeParse( + bufferPointer, sourcePointer, sourceLength, optionsPointer); - var result = instance.memory().readBytes( - (int) pmBufferValue.apply(bufferPointer[0])[0], - (int) pmBufferLength.apply(bufferPointer[0])[0]); + result = instance.memory().readBytes( + exports.pmBufferValue(bufferPointer), + exports.pmBufferLength(bufferPointer)); + } finally { + if (sourcePointer != 0) { + exports.pmStringFree(sourcePointer); + exports.free(sourcePointer); + } + if (optionsPointer != 0) { + exports.free(optionsPointer); + } + if (bufferPointer != 0) { + exports.pmBufferFree(bufferPointer); + exports.free(bufferPointer); + } + } return result; } - @Override - public void close() { - if (wasi != null) { - wasi.close(); - } + // DEBUG + public int memorySize() { + return instance.memory().pages(); } } diff --git a/java-wasm/src/test/java/org/prism/JRubyTest.java b/java-wasm/src/test/java/org/prism/JRubyTest.java index 634d651592..7dc265c983 100644 --- a/java-wasm/src/test/java/org/prism/JRubyTest.java +++ b/java-wasm/src/test/java/org/prism/JRubyTest.java @@ -8,6 +8,8 @@ import java.nio.charset.StandardCharsets; import java.util.EnumSet; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class JRubyTest { final static String[] JRUBY_BOOT_FILES = { "jruby/java.rb", @@ -55,9 +57,27 @@ public class JRubyTest { }; @Test - public void basicJRubyTest() throws Throwable{ - Prism prism = new PrismWASM(); - byte[] src = new byte[1024*1024]; + public void jrubyAOT() throws Exception { + var prismAot = new PrismAOT(); + + for (int i = 0; i < 3; i++) { + basicJRubyTest(prismAot); + } + var memoryPagesBefore = prismAot.memorySize(); + for (int i = 0; i < 100; i++) { + basicJRubyTest(prismAot); + } + var memoryPagesAfter = prismAot.memorySize(); + assertEquals(memoryPagesBefore, memoryPagesAfter); + } + + @Test + public void jrubyWASM() throws Exception { + basicJRubyTest(new PrismWASM()); + } + + private static void basicJRubyTest(Prism prism) throws Exception { + byte[] src = new byte[1024 * 1024]; for (var file : JRUBY_BOOT_FILES) { byte[] options = ParsingOptions.serialize( From 6ff674120215efb028ef58780eae78b9380d607c Mon Sep 17 00:00:00 2001 From: andreatp Date: Tue, 27 Jan 2026 15:52:21 +0000 Subject: [PATCH 10/14] rem string free --- java-wasm/src/main/java/org/prism/PrismAOT.java | 1 - java-wasm/src/main/java/org/prism/PrismWASM.java | 1 - 2 files changed, 2 deletions(-) diff --git a/java-wasm/src/main/java/org/prism/PrismAOT.java b/java-wasm/src/main/java/org/prism/PrismAOT.java index fce4bd7168..f669c1ab07 100644 --- a/java-wasm/src/main/java/org/prism/PrismAOT.java +++ b/java-wasm/src/main/java/org/prism/PrismAOT.java @@ -48,7 +48,6 @@ public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLeng exports.pmBufferLength(bufferPointer)); } finally { if (sourcePointer != 0) { - exports.pmStringFree(sourcePointer); exports.free(sourcePointer); } if (optionsPointer != 0) { diff --git a/java-wasm/src/main/java/org/prism/PrismWASM.java b/java-wasm/src/main/java/org/prism/PrismWASM.java index a1b7c374e4..63afd5495e 100644 --- a/java-wasm/src/main/java/org/prism/PrismWASM.java +++ b/java-wasm/src/main/java/org/prism/PrismWASM.java @@ -48,7 +48,6 @@ public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLeng exports.pmBufferLength(bufferPointer)); } finally { if (sourcePointer != 0) { - exports.pmStringFree(sourcePointer); exports.free(sourcePointer); } if (optionsPointer != 0) { From 993759bbc8bc0f2af0caf91271460bcf0e46fd3d Mon Sep 17 00:00:00 2001 From: andreatp Date: Wed, 28 Jan 2026 10:39:04 +0000 Subject: [PATCH 11/14] Cleanup and improvements --- .github/workflows/java-wasm-bindings.yml | 2 +- .gitignore | 2 + Makefile | 6 +- java-wasm/perf-test/.gitignore | 1 + java-wasm/perf-test/bench.sh | 6 ++ java-wasm/perf-test/test | 97 +++++++++++++++++++ java-wasm/pom.xml | 2 +- .../org/prism/WasmResource.java | 2 +- java-wasm/src/main/java/org/prism/Prism.java | 70 +++++++++++-- .../src/main/java/org/prism/PrismAOT.java | 69 ------------- .../src/main/java/org/prism/PrismWASM.java | 69 ------------- .../src/test/java/org/prism/DummyTest.java | 8 +- .../src/test/java/org/prism/JRubyTest.java | 33 ++++--- .../src/{main => test}/resources/.gitignore | 0 14 files changed, 199 insertions(+), 168 deletions(-) create mode 100644 java-wasm/perf-test/.gitignore create mode 100755 java-wasm/perf-test/bench.sh create mode 100755 java-wasm/perf-test/test delete mode 100644 java-wasm/src/main/java/org/prism/PrismAOT.java delete mode 100644 java-wasm/src/main/java/org/prism/PrismWASM.java rename java-wasm/src/{main => test}/resources/.gitignore (100%) diff --git a/.github/workflows/java-wasm-bindings.yml b/.github/workflows/java-wasm-bindings.yml index 5d130c07e1..3a0a066334 100644 --- a/.github/workflows/java-wasm-bindings.yml +++ b/.github/workflows/java-wasm-bindings.yml @@ -48,4 +48,4 @@ jobs: - uses: actions/upload-artifact@v6 with: name: prism.wasm - path: java-wasm/src/main/resources/prism.wasm + path: java-wasm/src/test/resources/prism.wasm diff --git a/.gitignore b/.gitignore index 6706482b64..b00333f107 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,5 @@ compile_commands.json .vscode/ tags + +wasi-sdk* diff --git a/Makefile b/Makefile index cefc199a52..7f61f753fa 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ SOEXT ?= $(shell ruby -e 'puts RbConfig::CONFIG["SOEXT"]') CPPFLAGS := -Iinclude $(CPPFLAGS) CFLAGS := -g -O2 -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -Wno-missing-braces -fPIC -fvisibility=hidden -Wimplicit-fallthrough $(CFLAGS) -JAVA_WASM_CFLAGS := -g -Oz -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -Wno-missing-braces -fPIC -fvisibility=hidden -Wimplicit-fallthrough $(JAVA_WASM_CFLAGS) +JAVA_WASM_CFLAGS := -g0 -O2 -Oz -std=c99 -Wall -Werror -Wextra -Wpedantic -Wundef -Wconversion -Wno-missing-braces -fno-sanitize=all -fno-stack-protector -fPIC -fvisibility=hidden -Wimplicit-fallthrough $(JAVA_WASM_CFLAGS) CC ?= cc AR ?= ar ARFLAGS ?= -r$(V0:1=v) @@ -31,7 +31,7 @@ all: shared static shared: build/libprism.$(SOEXT) static: build/libprism.a wasm: javascript/src/prism.wasm -java-wasm: java-wasm/src/main/resources/prism.wasm +java-wasm: java-wasm/src/test/resources/prism.wasm build/libprism.$(SOEXT): $(SHARED_OBJECTS) $(ECHO) "linking $@ with $(CC)" @@ -51,7 +51,7 @@ javascript/src/prism.wasm: Makefile $(SOURCES) $(HEADERS) -Oz -g0 -flto -fdata-sections -ffunction-sections \ -o $@ $(SOURCES) -java-wasm/src/main/resources/prism.wasm: Makefile $(SOURCES) $(HEADERS) +java-wasm/src/test/resources/prism.wasm: Makefile $(SOURCES) $(HEADERS) $(ECHO) "building $@" $(Q) $(MAKEDIRS) $(@D) $(Q) $(WASI_SDK_PATH)/bin/clang $(DEBUG_FLAGS) -DPRISM_EXCLUDE_PRETTYPRINT -DPRISM_EXPORT_SYMBOLS -D_WASI_EMULATED_MMAN -lwasi-emulated-mman $(CPPFLAGS) $(JAVA_WASM_CFLAGS) -Wl,--export-all -Wl,--no-entry -mexec-model=reactor -lc++ -lc++abi -o $@ $(SOURCES) diff --git a/java-wasm/perf-test/.gitignore b/java-wasm/perf-test/.gitignore new file mode 100644 index 0000000000..60286da241 --- /dev/null +++ b/java-wasm/perf-test/.gitignore @@ -0,0 +1 @@ +profile.html diff --git a/java-wasm/perf-test/bench.sh b/java-wasm/perf-test/bench.sh new file mode 100755 index 0000000000..1ad69239b1 --- /dev/null +++ b/java-wasm/perf-test/bench.sh @@ -0,0 +1,6 @@ +#! /bin/bash +set -euxo pipefail + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +jbang --fresh --deps org.openjdk.jmh:jmh-generator-annprocess:1.36 --javaagent=ap-loader@jvm-profiling-tools/ap-loader=start,event=cpu,file=${SCRIPT_DIR}/profile.html ${SCRIPT_DIR}/test \ No newline at end of file diff --git a/java-wasm/perf-test/test b/java-wasm/perf-test/test new file mode 100755 index 0000000000..e3aed8347c --- /dev/null +++ b/java-wasm/perf-test/test @@ -0,0 +1,97 @@ +///usr/bin/env jbang "$0" "$@" ; exit $? + +//DEPS org.jruby:chicory-prism:0.0.1-SNAPSHOT +//DEPS org.jruby:jruby-complete:10.0.2.0 + +import static java.lang.System.*; + +import java.io.DataInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.EnumSet; + +import org.jruby.Ruby; + +import org.prism.Prism; +import org.prism.ParsingOptions; + +public class test { + + final static String[] JRUBY_BOOT_FILES = { + "jruby/java.rb", + "jruby/java/core_ext.rb", + "jruby/java/core_ext/object.rb", + "jruby/java/java_ext.rb", + "jruby/kernel.rb", + "jruby/kernel/signal.rb", + "jruby/kernel/kernel.rb", + "jruby/kernel/proc.rb", + "jruby/kernel/process.rb", + "jruby/kernel/enumerator.rb", + "jruby/kernel/enumerable.rb", + "jruby/kernel/io.rb", + "jruby/kernel/gc.rb", + "jruby/kernel/range.rb", + "jruby/kernel/file.rb", + "jruby/kernel/method.rb", + "jruby/kernel/thread.rb", + "jruby/kernel/integer.rb", + "jruby/kernel/time.rb", + "jruby/preludes.rb", + "jruby/kernel/prelude.rb", + "jruby/kernel/enc_prelude.rb", + "META-INF/jruby.home/lib/ruby/stdlib/unicode_normalize.rb", + "jruby/kernel/gem_prelude.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rbconfig.rb", + "jruby/kernel/rbconfig.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/compatibility.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/defaults.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/deprecate.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/errors.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/target_rbconfig.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/exceptions.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/unknown_command_spell_checker.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/specification.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/basic_specification.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/stub_specification.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/platform.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/specification_record.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/util/list.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/requirement.rb", + "META-INF/jruby.home/lib/ruby/stdlib/rubygems/version.rb", + }; + + public static void main(String... args) throws Exception { + out.println("Starting"); + var count = 100; + + var prism = new Prism(); + byte[] src = new byte[1024 * 1024]; + + for (int i = 0; i < count; i++) { + for (var file : JRUBY_BOOT_FILES) { + byte[] options = ParsingOptions.serialize( + file.getBytes(StandardCharsets.UTF_8), + 1, + "UTF-8".getBytes(StandardCharsets.UTF_8), + false, + EnumSet.noneOf(ParsingOptions.CommandLine.class), + ParsingOptions.SyntaxVersion.LATEST, + false, + false, + false, + new byte[][][]{} + ); + + try (InputStream fileIn = Ruby.getClassLoader().getResourceAsStream(file)) { + DataInputStream dis = new DataInputStream(fileIn); + int read = dis.read(src); + prism.serialize(options, src, read); + } + } + } + + out.println("End"); + } +} diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index 1592c12174..0e0ed2fb96 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -131,7 +131,7 @@ org.prism.PrismParser - src/main/resources/prism.wasm + src/test/resources/prism.wasm diff --git a/java-wasm/src/main/java-templates/org/prism/WasmResource.java b/java-wasm/src/main/java-templates/org/prism/WasmResource.java index ccf1d0bcdd..48f2671714 100644 --- a/java-wasm/src/main/java-templates/org/prism/WasmResource.java +++ b/java-wasm/src/main/java-templates/org/prism/WasmResource.java @@ -1,7 +1,7 @@ package org.prism; public final class WasmResource { - public static final String absoluteFile = "file://${project.basedir}/src/main/resources/prism.wasm"; + public static final String absoluteFile = "file://${project.basedir}/src/test/resources/prism.wasm"; private WasmResource() {} } diff --git a/java-wasm/src/main/java/org/prism/Prism.java b/java-wasm/src/main/java/org/prism/Prism.java index 8c40c6dce5..a92709f932 100644 --- a/java-wasm/src/main/java/org/prism/Prism.java +++ b/java-wasm/src/main/java/org/prism/Prism.java @@ -1,30 +1,82 @@ package org.prism; import com.dylibso.chicory.annotations.WasmModuleInterface; +import com.dylibso.chicory.runtime.ByteArrayMemory; +import com.dylibso.chicory.runtime.ImportValues; +import com.dylibso.chicory.runtime.Instance; import com.dylibso.chicory.wasi.WasiOptions; import com.dylibso.chicory.wasi.WasiPreview1; import java.nio.charset.StandardCharsets; @WasmModuleInterface(WasmResource.absoluteFile) -public abstract class Prism implements AutoCloseable { - protected final WasiPreview1 wasi; +public class Prism implements AutoCloseable { + private final WasiPreview1 wasi; + protected final Prism_ModuleExports exports; + private final Instance instance; - Prism() { + private int bufferPointer; + private int preSourcePointer; + private int preOptionsPointer; + + private final int SOURCE_SIZE = 2 * 1024 * 1024; // 2 MiB + private final int PACKED_OPTIONS_BUFFER_SIZE = 1024; + + public Prism() { this(WasiOptions.builder().build()); } - Prism(WasiOptions wasiOpts) { + public Prism(WasiOptions wasiOpts) { wasi = WasiPreview1.builder().withOptions(wasiOpts).build(); - } + instance = Instance.builder(PrismParser.load()) + .withMemoryFactory(ByteArrayMemory::new) + .withMachineFactory(PrismParser::create) + .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) + .build(); + exports = new Prism_ModuleExports(instance); - public static Prism newInstance(boolean aot) { - if (aot) return new PrismAOT(); + preOptionsPointer = exports.calloc(1, PACKED_OPTIONS_BUFFER_SIZE); + preSourcePointer = exports.calloc(1, SOURCE_SIZE); - return new PrismWASM(); + bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1); + exports.pmBufferInit(bufferPointer); } - public abstract byte[] serialize(byte[] packedOptions, byte[] source, int sourceLength); + public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLength) { + int sourcePointer = 0; + boolean useDefaultSourcePointer = sourceLength + 1 > SOURCE_SIZE; + int optionsPointer = 0; + boolean useDefaultOptionsPointer = packedOptions.length > PACKED_OPTIONS_BUFFER_SIZE; + byte[] result; + try { + sourcePointer = (!useDefaultSourcePointer) ? + exports.calloc(1, sourceLength + 1) : preSourcePointer; + instance.memory().write(sourcePointer, sourceBytes, 0, sourceLength); + instance.memory().writeByte(sourcePointer + sourceLength, (byte) 0); + + optionsPointer = (!useDefaultOptionsPointer) ? + exports.calloc(1, packedOptions.length) : preOptionsPointer; + instance.memory().write(optionsPointer, packedOptions); + + exports.pmBufferClear(bufferPointer); + + exports.pmSerializeParse( + bufferPointer, sourcePointer, sourceLength, optionsPointer); + + result = instance.memory().readBytes( + exports.pmBufferValue(bufferPointer), + exports.pmBufferLength(bufferPointer)); + } finally { + if (!useDefaultSourcePointer) { + exports.free(sourcePointer); + } + if (!useDefaultOptionsPointer) { + exports.free(optionsPointer); + } + } + + return result; + } public ParseResult serializeParse(byte[] packedOptions, String source) { var sourceBytes = source.getBytes(StandardCharsets.ISO_8859_1); diff --git a/java-wasm/src/main/java/org/prism/PrismAOT.java b/java-wasm/src/main/java/org/prism/PrismAOT.java deleted file mode 100644 index f669c1ab07..0000000000 --- a/java-wasm/src/main/java/org/prism/PrismAOT.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.prism; - -import com.dylibso.chicory.annotations.WasmModuleInterface; -import com.dylibso.chicory.runtime.ByteArrayMemory; -import com.dylibso.chicory.runtime.ImportValues; -import com.dylibso.chicory.runtime.Instance; -import com.dylibso.chicory.wasm.WasmModule; -import com.dylibso.chicory.wasm.types.MemoryLimits; - -import java.nio.charset.StandardCharsets; - -public class PrismAOT extends Prism { - private final Prism_ModuleExports exports; - private final Instance instance; - - public PrismAOT() { - super(); - instance = Instance.builder(PrismParser.load()) - .withMemoryFactory(ByteArrayMemory::new) - .withMachineFactory(PrismParser::create) - .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) - .build(); - exports = new Prism_ModuleExports(instance); - } - - @Override - public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLength) { - int sourcePointer = 0; - int optionsPointer = 0; - int bufferPointer = 0; - byte[] result; - try { - sourcePointer = exports.calloc(1, sourceLength + 1); - instance.memory().write(sourcePointer, sourceBytes, 0, sourceLength); - instance.memory().writeByte(sourcePointer + sourceLength, (byte) 0); - - optionsPointer = exports.calloc(1, packedOptions.length); - instance.memory().write(optionsPointer, packedOptions); - - bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1); - exports.pmBufferInit(bufferPointer); - - exports.pmSerializeParse( - bufferPointer, sourcePointer, sourceLength, optionsPointer); - - result = instance.memory().readBytes( - exports.pmBufferValue(bufferPointer), - exports.pmBufferLength(bufferPointer)); - } finally { - if (sourcePointer != 0) { - exports.free(sourcePointer); - } - if (optionsPointer != 0) { - exports.free(optionsPointer); - } - if (bufferPointer != 0) { - exports.pmBufferFree(bufferPointer); - exports.free(bufferPointer); - } - } - - return result; - } - - // DEBUG CHECK - public int memorySize() { - return instance.memory().pages(); - } -} diff --git a/java-wasm/src/main/java/org/prism/PrismWASM.java b/java-wasm/src/main/java/org/prism/PrismWASM.java deleted file mode 100644 index 63afd5495e..0000000000 --- a/java-wasm/src/main/java/org/prism/PrismWASM.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.prism; - -import com.dylibso.chicory.runtime.ByteArrayMemory; -import com.dylibso.chicory.runtime.ImportValues; -import com.dylibso.chicory.runtime.Instance; -import com.dylibso.chicory.runtime.InterpreterMachine; -import com.dylibso.chicory.wasm.Parser; -import com.dylibso.chicory.wasm.WasmModule; - -public class PrismWASM extends Prism { - private final Prism_ModuleExports exports; - private final Instance instance; - - public PrismWASM() { - super(); - WasmModule module = Parser.parse( - PrismWASM.class.getResourceAsStream("/prism.wasm")); - instance = Instance.builder(module) - .withMemoryFactory(ByteArrayMemory::new) - .withMachineFactory(InterpreterMachine::new) - .withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build()) - .build(); - exports = new Prism_ModuleExports(instance); - } - - @Override - public byte[] serialize(byte[] packedOptions, byte[] sourceBytes, int sourceLength) { - int sourcePointer = 0; - int optionsPointer = 0; - int bufferPointer = 0; - byte[] result; - try { - sourcePointer = exports.calloc(1, sourceLength + 1); - instance.memory().write(sourcePointer, sourceBytes, 0, sourceLength); - instance.memory().writeByte(sourcePointer + sourceLength, (byte) 0); - - optionsPointer = exports.calloc(1, packedOptions.length); - instance.memory().write(optionsPointer, packedOptions); - - bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1); - exports.pmBufferInit(bufferPointer); - - exports.pmSerializeParse( - bufferPointer, sourcePointer, sourceLength, optionsPointer); - - result = instance.memory().readBytes( - exports.pmBufferValue(bufferPointer), - exports.pmBufferLength(bufferPointer)); - } finally { - if (sourcePointer != 0) { - exports.free(sourcePointer); - } - if (optionsPointer != 0) { - exports.free(optionsPointer); - } - if (bufferPointer != 0) { - exports.pmBufferFree(bufferPointer); - exports.free(bufferPointer); - } - } - - return result; - } - - // DEBUG - public int memorySize() { - return instance.memory().pages(); - } -} diff --git a/java-wasm/src/test/java/org/prism/DummyTest.java b/java-wasm/src/test/java/org/prism/DummyTest.java index fe6d87d2e7..fd106e07a3 100644 --- a/java-wasm/src/test/java/org/prism/DummyTest.java +++ b/java-wasm/src/test/java/org/prism/DummyTest.java @@ -28,7 +28,7 @@ public void test1() { var source = "1 + 1"; ParseResult pr = null; - try (Prism prism = new PrismWASM()) { + try (Prism prism = new Prism()) { pr = prism.serializeParse(packedOptions, source); } @@ -44,7 +44,7 @@ public void test1Aot() { var source = "1 + 1"; ParseResult pr = null; - try (Prism prism = new PrismAOT()) { + try (Prism prism = new Prism()) { pr = prism.serializeParse(packedOptions, source); } @@ -60,7 +60,7 @@ public void test2() { var source = "puts \"h\ne\nl\nl\no\n\""; ParseResult pr = null; - try (Prism prism = new PrismWASM()) { + try (Prism prism = new Prism()) { pr = prism.serializeParse(packedOptions, source); } @@ -76,7 +76,7 @@ public void test2Aot() { var source = "puts \"h\ne\nl\nl\no\n\""; ParseResult pr = null; - try (Prism prism = new PrismAOT()) { + try (Prism prism = new Prism()) { pr = prism.serializeParse(packedOptions, source); } diff --git a/java-wasm/src/test/java/org/prism/JRubyTest.java b/java-wasm/src/test/java/org/prism/JRubyTest.java index 7dc265c983..c158568602 100644 --- a/java-wasm/src/test/java/org/prism/JRubyTest.java +++ b/java-wasm/src/test/java/org/prism/JRubyTest.java @@ -56,26 +56,36 @@ public class JRubyTest { "META-INF/jruby.home/lib/ruby/stdlib/rubygems/version.rb", }; + private class TestingPrism extends Prism { + TestingPrism() { + super(); + } + + public int memPages() { + return exports.memory().pages(); + } + } + @Test - public void jrubyAOT() throws Exception { - var prismAot = new PrismAOT(); + public void jrubyReproducer() throws Exception { + var prism = new TestingPrism(); for (int i = 0; i < 3; i++) { - basicJRubyTest(prismAot); + basicJRubyTest(prism); } - var memoryPagesBefore = prismAot.memorySize(); + var memoryPagesBefore = prism.memPages(); for (int i = 0; i < 100; i++) { - basicJRubyTest(prismAot); + var before = System.currentTimeMillis(); + + basicJRubyTest(prism); + + var after = System.currentTimeMillis(); + System.out.println("Elapsed: " + (after - before)); } - var memoryPagesAfter = prismAot.memorySize(); + var memoryPagesAfter = prism.memPages(); assertEquals(memoryPagesBefore, memoryPagesAfter); } - @Test - public void jrubyWASM() throws Exception { - basicJRubyTest(new PrismWASM()); - } - private static void basicJRubyTest(Prism prism) throws Exception { byte[] src = new byte[1024 * 1024]; @@ -92,6 +102,7 @@ private static void basicJRubyTest(Prism prism) throws Exception { false, new byte[][][]{} ); + try (InputStream fileIn = Ruby.getClassLoader().getResourceAsStream(file)) { DataInputStream dis = new DataInputStream(fileIn); int read = dis.read(src); diff --git a/java-wasm/src/main/resources/.gitignore b/java-wasm/src/test/resources/.gitignore similarity index 100% rename from java-wasm/src/main/resources/.gitignore rename to java-wasm/src/test/resources/.gitignore From db2a53e7353131b9bd10e13eb688a1f3905ab0bd Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Tue, 3 Feb 2026 13:42:07 -0600 Subject: [PATCH 12/14] Update java-wasm to Java 21 minimum This is only intended to ever be used with JRuby 10+, which already requires Java 21. --- .github/workflows/java-wasm-bindings.yml | 2 +- java-wasm/pom.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/java-wasm-bindings.yml b/.github/workflows/java-wasm-bindings.yml index 3a0a066334..679fb09a8b 100644 --- a/.github/workflows/java-wasm-bindings.yml +++ b/.github/workflows/java-wasm-bindings.yml @@ -38,7 +38,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: 'temurin' - java-version: '17' + java-version: '21' cache: maven - name: Run the tests diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index 0e0ed2fb96..501711e1fd 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -12,8 +12,8 @@ UTF-8 UTF-8 - 11 - 11 + 21 + 21 1.6.1 6.0.3 @@ -86,7 +86,7 @@ maven-compiler-plugin 3.15.0 - 11 + 21 com.dylibso.chicory From 813fa65dbe4742c0d8972b7bb4fac342200655c7 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Tue, 3 Feb 2026 14:18:12 -0600 Subject: [PATCH 13/14] Move WASM parser to a JRuby package * org.jruby.parser is base package for JRuby parsers * org.jruby.parser.prism is for parsers based on Prism * org.jruby.parser.prism.wasm is for the WASM Prism wrapper --- java-wasm/perf-test/test | 2 +- java-wasm/pom.xml | 2 +- .../org/{prism => jruby/parser/prism/wasm}/WasmResource.java | 2 +- .../java/org/{prism => jruby/parser/prism/wasm}/Prism.java | 4 +++- .../test/java/org/{ => jruby/parser}/prism/DummyTest.java | 5 ++++- .../test/java/org/{ => jruby/parser}/prism/JRubyTest.java | 4 +++- 6 files changed, 13 insertions(+), 6 deletions(-) rename java-wasm/src/main/java-templates/org/{prism => jruby/parser/prism/wasm}/WasmResource.java (82%) rename java-wasm/src/main/java/org/{prism => jruby/parser/prism/wasm}/Prism.java (97%) rename java-wasm/src/test/java/org/{ => jruby/parser}/prism/DummyTest.java (94%) rename java-wasm/src/test/java/org/{ => jruby/parser}/prism/JRubyTest.java (97%) diff --git a/java-wasm/perf-test/test b/java-wasm/perf-test/test index e3aed8347c..e2c8dfb575 100755 --- a/java-wasm/perf-test/test +++ b/java-wasm/perf-test/test @@ -12,7 +12,7 @@ import java.util.EnumSet; import org.jruby.Ruby; -import org.prism.Prism; +import org.jruby.parser.prism.wasm.Prism; import org.prism.ParsingOptions; public class test { diff --git a/java-wasm/pom.xml b/java-wasm/pom.xml index 501711e1fd..587e094ab7 100644 --- a/java-wasm/pom.xml +++ b/java-wasm/pom.xml @@ -130,7 +130,7 @@ compile - org.prism.PrismParser + org.jruby.parser.prism.wasm.PrismParser src/test/resources/prism.wasm diff --git a/java-wasm/src/main/java-templates/org/prism/WasmResource.java b/java-wasm/src/main/java-templates/org/jruby/parser/prism/wasm/WasmResource.java similarity index 82% rename from java-wasm/src/main/java-templates/org/prism/WasmResource.java rename to java-wasm/src/main/java-templates/org/jruby/parser/prism/wasm/WasmResource.java index 48f2671714..2b95406d13 100644 --- a/java-wasm/src/main/java-templates/org/prism/WasmResource.java +++ b/java-wasm/src/main/java-templates/org/jruby/parser/prism/wasm/WasmResource.java @@ -1,4 +1,4 @@ -package org.prism; +package org.jruby.parser.prism.wasm; public final class WasmResource { public static final String absoluteFile = "file://${project.basedir}/src/test/resources/prism.wasm"; diff --git a/java-wasm/src/main/java/org/prism/Prism.java b/java-wasm/src/main/java/org/jruby/parser/prism/wasm/Prism.java similarity index 97% rename from java-wasm/src/main/java/org/prism/Prism.java rename to java-wasm/src/main/java/org/jruby/parser/prism/wasm/Prism.java index a92709f932..dafba022e9 100644 --- a/java-wasm/src/main/java/org/prism/Prism.java +++ b/java-wasm/src/main/java/org/jruby/parser/prism/wasm/Prism.java @@ -1,4 +1,4 @@ -package org.prism; +package org.jruby.parser.prism.wasm; import com.dylibso.chicory.annotations.WasmModuleInterface; import com.dylibso.chicory.runtime.ByteArrayMemory; @@ -6,6 +6,8 @@ import com.dylibso.chicory.runtime.Instance; import com.dylibso.chicory.wasi.WasiOptions; import com.dylibso.chicory.wasi.WasiPreview1; +import org.prism.Loader; +import org.prism.ParseResult; import java.nio.charset.StandardCharsets; diff --git a/java-wasm/src/test/java/org/prism/DummyTest.java b/java-wasm/src/test/java/org/jruby/parser/prism/DummyTest.java similarity index 94% rename from java-wasm/src/test/java/org/prism/DummyTest.java rename to java-wasm/src/test/java/org/jruby/parser/prism/DummyTest.java index fd106e07a3..5c12fb45a1 100644 --- a/java-wasm/src/test/java/org/prism/DummyTest.java +++ b/java-wasm/src/test/java/org/jruby/parser/prism/DummyTest.java @@ -1,6 +1,9 @@ -package org.prism; +package org.jruby.parser.prism; +import org.jruby.parser.prism.wasm.Prism; import org.junit.jupiter.api.Test; +import org.prism.ParseResult; +import org.prism.ParsingOptions; import java.util.EnumSet; diff --git a/java-wasm/src/test/java/org/prism/JRubyTest.java b/java-wasm/src/test/java/org/jruby/parser/prism/JRubyTest.java similarity index 97% rename from java-wasm/src/test/java/org/prism/JRubyTest.java rename to java-wasm/src/test/java/org/jruby/parser/prism/JRubyTest.java index c158568602..5b6364a926 100644 --- a/java-wasm/src/test/java/org/prism/JRubyTest.java +++ b/java-wasm/src/test/java/org/jruby/parser/prism/JRubyTest.java @@ -1,7 +1,9 @@ -package org.prism; +package org.jruby.parser.prism; import org.jruby.Ruby; +import org.jruby.parser.prism.wasm.Prism; import org.junit.jupiter.api.Test; +import org.prism.ParsingOptions; import java.io.DataInputStream; import java.io.InputStream; From d702898afe6659d90a670b115e610c9f0b25d2b9 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Wed, 4 Feb 2026 14:48:06 -0600 Subject: [PATCH 14/14] Rename Java package to org.ruby_lang.prism This moves all of the non-JRuby Java code from the org.prism package to the org.ruby_lang.prism package (corresponding to the ruby-lang.org domain and prism project). --- .gitignore | 6 +++--- docs/configuration.md | 6 +++--- docs/releasing.md | 6 +++--- java-wasm/perf-test/test | 2 +- .../src/main/java/org/jruby/parser/prism/wasm/Prism.java | 4 ++-- .../src/test/java/org/jruby/parser/prism/DummyTest.java | 4 ++-- .../src/test/java/org/jruby/parser/prism/JRubyTest.java | 2 +- java/org/{ => ruby_lang}/prism/MarkNewlinesVisitor.java | 2 +- java/org/{ => ruby_lang}/prism/ParseResult.java | 2 +- java/org/{ => ruby_lang}/prism/Parser.java | 2 +- java/org/{ => ruby_lang}/prism/ParsingOptions.java | 2 +- rakelib/serialization.rake | 2 +- .../org/{ => ruby_lang}/prism/AbstractNodeVisitor.java.erb | 2 +- templates/java/org/{ => ruby_lang}/prism/Loader.java.erb | 4 ++-- templates/java/org/{ => ruby_lang}/prism/Nodes.java.erb | 2 +- templates/template.rb | 6 +++--- 16 files changed, 27 insertions(+), 27 deletions(-) rename java/org/{ => ruby_lang}/prism/MarkNewlinesVisitor.java (98%) rename java/org/{ => ruby_lang}/prism/ParseResult.java (98%) rename java/org/{ => ruby_lang}/prism/Parser.java (92%) rename java/org/{ => ruby_lang}/prism/ParsingOptions.java (99%) rename templates/java/org/{ => ruby_lang}/prism/AbstractNodeVisitor.java.erb (94%) rename templates/java/org/{ => ruby_lang}/prism/Loader.java.erb (99%) rename templates/java/org/{ => ruby_lang}/prism/Nodes.java.erb (99%) diff --git a/.gitignore b/.gitignore index b00333f107..218a76cd00 100644 --- a/.gitignore +++ b/.gitignore @@ -39,9 +39,9 @@ out.svg /javascript/src/visitor.js /javascript/src/prism.wasm /javascript/src/*.d.ts -/java/org/prism/AbstractNodeVisitor.java -/java/org/prism/Loader.java -/java/org/prism/Nodes.java +/java/org/ruby_lang/prism/AbstractNodeVisitor.java +/java/org/ruby_lang/prism/Loader.java +/java/org/ruby_lang/prism/Nodes.java /lib/prism/compiler.rb /lib/prism/dispatcher.rb /lib/prism/dot_visitor.rb diff --git a/docs/configuration.md b/docs/configuration.md index 04887d6d9c..97e01c8d82 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -7,9 +7,9 @@ A lot of code in prism's repository is templated from a single configuration fil * `include/prism/diagnostic.h` - for defining the diagnostics * `javascript/src/deserialize.js` - for defining how to deserialize the nodes in JavaScript * `javascript/src/nodes.js` - for defining the nodes in JavaScript -* `java/org/prism/AbstractNodeVisitor.java` - for defining the visitor interface for the nodes in Java -* `java/org/prism/Loader.java` - for defining how to deserialize the nodes in Java -* `java/org/prism/Nodes.java` - for defining the nodes in Java +* `java/org/ruby_lang/prism/AbstractNodeVisitor.java` - for defining the visitor interface for the nodes in Java +* `java/org/ruby_lang/prism/Loader.java` - for defining how to deserialize the nodes in Java +* `java/org/ruby_lang/prism/Nodes.java` - for defining the nodes in Java * `lib/prism/compiler.rb` - for defining the compiler for the nodes in Ruby * `lib/prism/dispatcher.rb` - for defining the dispatch visitors for the nodes in Ruby * `lib/prism/dot_visitor.rb` - for defining the dot visitor for the nodes in Ruby diff --git a/docs/releasing.md b/docs/releasing.md index a7d3cf5eb3..6d0f892926 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -23,9 +23,9 @@ ruby -pi -e 'gsub(/PRISM_VERSION_PATCH \d+/, %Q{PRISM_VERSION_PATCH #{ENV["PRISM ruby -pi -e 'gsub(/PRISM_VERSION ".+?"/, %Q{PRISM_VERSION "#{ENV["PRISM_VERSION"]}"})' include/prism/version.h ruby -pi -e 'gsub(/"version": ".+?"/, %Q{"version": "#{ENV["PRISM_VERSION"]}"})' javascript/package.json ruby -pi -e 'gsub(/lossy\(\), ".+?"/, %Q{lossy(), "#{ENV["PRISM_VERSION"]}"})' rust/ruby-prism-sys/tests/utils_tests.rs -ruby -pi -e 'gsub(/\d+, "prism major/, %Q{#{ENV["PRISM_MAJOR"]}, "prism major})' templates/java/org/prism/Loader.java.erb -ruby -pi -e 'gsub(/\d+, "prism minor/, %Q{#{ENV["PRISM_MINOR"]}, "prism minor})' templates/java/org/prism/Loader.java.erb -ruby -pi -e 'gsub(/\d+, "prism patch/, %Q{#{ENV["PRISM_PATCH"]}, "prism patch})' templates/java/org/prism/Loader.java.erb +ruby -pi -e 'gsub(/\d+, "prism major/, %Q{#{ENV["PRISM_MAJOR"]}, "prism major})' templates/java/org/ruby_lang/prism/Loader.java.erb +ruby -pi -e 'gsub(/\d+, "prism minor/, %Q{#{ENV["PRISM_MINOR"]}, "prism minor})' templates/java/org/ruby_lang/prism/Loader.java.erb +ruby -pi -e 'gsub(/\d+, "prism patch/, %Q{#{ENV["PRISM_PATCH"]}, "prism patch})' templates/java/org/ruby_lang/prism/Loader.java.erb ruby -pi -e 'gsub(/MAJOR_VERSION = \d+/, %Q{MAJOR_VERSION = #{ENV["PRISM_MAJOR"]}})' templates/javascript/src/deserialize.js.erb ruby -pi -e 'gsub(/MINOR_VERSION = \d+/, %Q{MINOR_VERSION = #{ENV["PRISM_MINOR"]}})' templates/javascript/src/deserialize.js.erb ruby -pi -e 'gsub(/PATCH_VERSION = \d+/, %Q{PATCH_VERSION = #{ENV["PRISM_PATCH"]}})' templates/javascript/src/deserialize.js.erb diff --git a/java-wasm/perf-test/test b/java-wasm/perf-test/test index e2c8dfb575..f2d5492bc4 100755 --- a/java-wasm/perf-test/test +++ b/java-wasm/perf-test/test @@ -13,7 +13,7 @@ import java.util.EnumSet; import org.jruby.Ruby; import org.jruby.parser.prism.wasm.Prism; -import org.prism.ParsingOptions; +import org.ruby_lang.prism.ParsingOptions; public class test { diff --git a/java-wasm/src/main/java/org/jruby/parser/prism/wasm/Prism.java b/java-wasm/src/main/java/org/jruby/parser/prism/wasm/Prism.java index dafba022e9..6dd89c70cb 100644 --- a/java-wasm/src/main/java/org/jruby/parser/prism/wasm/Prism.java +++ b/java-wasm/src/main/java/org/jruby/parser/prism/wasm/Prism.java @@ -6,8 +6,8 @@ import com.dylibso.chicory.runtime.Instance; import com.dylibso.chicory.wasi.WasiOptions; import com.dylibso.chicory.wasi.WasiPreview1; -import org.prism.Loader; -import org.prism.ParseResult; +import org.ruby_lang.prism.Loader; +import org.ruby_lang.prism.ParseResult; import java.nio.charset.StandardCharsets; diff --git a/java-wasm/src/test/java/org/jruby/parser/prism/DummyTest.java b/java-wasm/src/test/java/org/jruby/parser/prism/DummyTest.java index 5c12fb45a1..4e89f6f6e3 100644 --- a/java-wasm/src/test/java/org/jruby/parser/prism/DummyTest.java +++ b/java-wasm/src/test/java/org/jruby/parser/prism/DummyTest.java @@ -2,8 +2,8 @@ import org.jruby.parser.prism.wasm.Prism; import org.junit.jupiter.api.Test; -import org.prism.ParseResult; -import org.prism.ParsingOptions; +import org.ruby_lang.prism.ParseResult; +import org.ruby_lang.prism.ParsingOptions; import java.util.EnumSet; diff --git a/java-wasm/src/test/java/org/jruby/parser/prism/JRubyTest.java b/java-wasm/src/test/java/org/jruby/parser/prism/JRubyTest.java index 5b6364a926..b8249f4c70 100644 --- a/java-wasm/src/test/java/org/jruby/parser/prism/JRubyTest.java +++ b/java-wasm/src/test/java/org/jruby/parser/prism/JRubyTest.java @@ -3,7 +3,7 @@ import org.jruby.Ruby; import org.jruby.parser.prism.wasm.Prism; import org.junit.jupiter.api.Test; -import org.prism.ParsingOptions; +import org.ruby_lang.prism.ParsingOptions; import java.io.DataInputStream; import java.io.InputStream; diff --git a/java/org/prism/MarkNewlinesVisitor.java b/java/org/ruby_lang/prism/MarkNewlinesVisitor.java similarity index 98% rename from java/org/prism/MarkNewlinesVisitor.java rename to java/org/ruby_lang/prism/MarkNewlinesVisitor.java index 27ab8643e7..8d08424942 100644 --- a/java/org/prism/MarkNewlinesVisitor.java +++ b/java/org/ruby_lang/prism/MarkNewlinesVisitor.java @@ -1,4 +1,4 @@ -package org.prism; +package org.ruby_lang.prism; // Keep in sync with Ruby MarkNewlinesVisitor final class MarkNewlinesVisitor extends AbstractNodeVisitor { diff --git a/java/org/prism/ParseResult.java b/java/org/ruby_lang/prism/ParseResult.java similarity index 98% rename from java/org/prism/ParseResult.java rename to java/org/ruby_lang/prism/ParseResult.java index 144ea16e36..aad05a892d 100644 --- a/java/org/prism/ParseResult.java +++ b/java/org/ruby_lang/prism/ParseResult.java @@ -1,4 +1,4 @@ -package org.prism; +package org.ruby_lang.prism; // @formatter:off public final class ParseResult { diff --git a/java/org/prism/Parser.java b/java/org/ruby_lang/prism/Parser.java similarity index 92% rename from java/org/prism/Parser.java rename to java/org/ruby_lang/prism/Parser.java index 717c3e5179..5c60977d80 100644 --- a/java/org/prism/Parser.java +++ b/java/org/ruby_lang/prism/Parser.java @@ -1,4 +1,4 @@ -package org.prism; +package org.ruby_lang.prism; public abstract class Parser { diff --git a/java/org/prism/ParsingOptions.java b/java/org/ruby_lang/prism/ParsingOptions.java similarity index 99% rename from java/org/prism/ParsingOptions.java rename to java/org/ruby_lang/prism/ParsingOptions.java index be0a8a7dba..8990f72104 100644 --- a/java/org/prism/ParsingOptions.java +++ b/java/org/ruby_lang/prism/ParsingOptions.java @@ -1,4 +1,4 @@ -package org.prism; +package org.ruby_lang.prism; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; diff --git a/rakelib/serialization.rake b/rakelib/serialization.rake index a57a7ba700..499be443ce 100644 --- a/rakelib/serialization.rake +++ b/rakelib/serialization.rake @@ -26,7 +26,7 @@ task "test:java_loader:internal" => :compile do puts path serialized = Prism.dump_file(path) source_bytes = File.binread(path).unpack('c*') - parse_result = org.prism.Loader.load(serialized.unpack('c*'), source_bytes) + parse_result = org.ruby_lang.prism.Loader.load(serialized.unpack('c*'), source_bytes) puts parse_result.value end end diff --git a/templates/java/org/prism/AbstractNodeVisitor.java.erb b/templates/java/org/ruby_lang/prism/AbstractNodeVisitor.java.erb similarity index 94% rename from templates/java/org/prism/AbstractNodeVisitor.java.erb rename to templates/java/org/ruby_lang/prism/AbstractNodeVisitor.java.erb index a66daedf63..58eabebae8 100644 --- a/templates/java/org/prism/AbstractNodeVisitor.java.erb +++ b/templates/java/org/ruby_lang/prism/AbstractNodeVisitor.java.erb @@ -1,4 +1,4 @@ -package org.prism; +package org.ruby_lang.prism; // GENERATED BY <%= File.basename(__FILE__) %> // @formatter:off diff --git a/templates/java/org/prism/Loader.java.erb b/templates/java/org/ruby_lang/prism/Loader.java.erb similarity index 99% rename from templates/java/org/prism/Loader.java.erb rename to templates/java/org/ruby_lang/prism/Loader.java.erb index aa8e1e30c9..af47aeed73 100644 --- a/templates/java/org/prism/Loader.java.erb +++ b/templates/java/org/ruby_lang/prism/Loader.java.erb @@ -1,7 +1,7 @@ <%- string_type = Prism::Template::JAVA_STRING_TYPE -%> -package org.prism; +package org.ruby_lang.prism; -import org.prism.Nodes; +import org.ruby_lang.prism.Nodes; import java.lang.Short; import java.math.BigInteger; diff --git a/templates/java/org/prism/Nodes.java.erb b/templates/java/org/ruby_lang/prism/Nodes.java.erb similarity index 99% rename from templates/java/org/prism/Nodes.java.erb rename to templates/java/org/ruby_lang/prism/Nodes.java.erb index 8b0a9ce20d..47b2ea0a7e 100644 --- a/templates/java/org/prism/Nodes.java.erb +++ b/templates/java/org/ruby_lang/prism/Nodes.java.erb @@ -1,5 +1,5 @@ <%- string_type = Prism::Template::JAVA_STRING_TYPE -%> -package org.prism; +package org.ruby_lang.prism; import java.lang.Override; import java.lang.String; diff --git a/templates/template.rb b/templates/template.rb index 65e6ed0381..18da0647a0 100755 --- a/templates/template.rb +++ b/templates/template.rb @@ -724,9 +724,9 @@ def locals "javascript/src/deserialize.js", "javascript/src/nodes.js", "javascript/src/visitor.js", - "java/org/prism/Loader.java", - "java/org/prism/Nodes.java", - "java/org/prism/AbstractNodeVisitor.java", + "java/org/ruby_lang/prism/Loader.java", + "java/org/ruby_lang/prism/Nodes.java", + "java/org/ruby_lang/prism/AbstractNodeVisitor.java", "lib/prism/compiler.rb", "lib/prism/dispatcher.rb", "lib/prism/dot_visitor.rb",