Skip to content

Commit 70c9921

Browse files
authored
Merge pull request ruby#3532 from andreaTP/finalize-chicory-aot
Java prism finalization. Merging with 2 failure jobs but those are due to older ubuntu being phased out this month and these particular changes do not use those tests at all.
2 parents ae88bcc + af38156 commit 70c9921

File tree

4 files changed

+82
-27
lines changed

4 files changed

+82
-27
lines changed

java-wasm/pom.xml

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<maven.compiler.source>11</maven.compiler.source>
1616
<maven.compiler.target>11</maven.compiler.target>
1717

18-
<chicory.version>1.2.0</chicory.version>
18+
<chicory.version>1.2.1</chicory.version>
1919
<junit.version>5.12.1</junit.version>
2020
</properties>
2121

@@ -45,10 +45,43 @@
4545
<artifactId>junit-jupiter-engine</artifactId>
4646
<version>${junit.version}</version>
4747
</dependency>
48+
<dependency>
49+
<groupId>com.dylibso.chicory</groupId>
50+
<artifactId>host-module-annotations-experimental</artifactId>
51+
<scope>provided</scope>
52+
</dependency>
4853
</dependencies>
4954

5055
<build>
5156
<plugins>
57+
<plugin>
58+
<groupId>org.codehaus.mojo</groupId>
59+
<artifactId>templating-maven-plugin</artifactId>
60+
<version>3.0.0</version>
61+
<executions>
62+
<execution>
63+
<id>filtering-java-templates</id>
64+
<goals>
65+
<goal>filter-sources</goal>
66+
</goals>
67+
</execution>
68+
</executions>
69+
</plugin>
70+
<plugin>
71+
<groupId>org.apache.maven.plugins</groupId>
72+
<artifactId>maven-compiler-plugin</artifactId>
73+
<version>3.14.0</version>
74+
<configuration>
75+
<release>11</release>
76+
<annotationProcessorPaths>
77+
<path>
78+
<groupId>com.dylibso.chicory</groupId>
79+
<artifactId>host-module-processor-experimental</artifactId>
80+
<version>${chicory.version}</version>
81+
</path>
82+
</annotationProcessorPaths>
83+
</configuration>
84+
</plugin>
5285
<plugin>
5386
<groupId>org.apache.maven.plugins</groupId>
5487
<artifactId>maven-surefire-plugin</artifactId>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.prism;
2+
3+
public final class WasmResource {
4+
public static final String absoluteFile = "file://${project.basedir}/src/test/resources/prism.wasm";
5+
6+
private WasmResource() {}
7+
}

java-wasm/src/main/java/org/prism/Prism.java

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,20 @@
11
package org.prism;
22

33
import com.dylibso.chicory.runtime.ByteArrayMemory;
4-
import com.dylibso.chicory.runtime.ExportFunction;
4+
import com.dylibso.chicory.experimental.hostmodule.annotations.WasmModuleInterface;
5+
import com.dylibso.chicory.runtime.ByteArrayMemory;
56
import com.dylibso.chicory.runtime.ImportValues;
67
import com.dylibso.chicory.runtime.Instance;
78
import com.dylibso.chicory.wasi.WasiOptions;
89
import com.dylibso.chicory.wasi.WasiPreview1;
910

1011
import java.nio.charset.StandardCharsets;
1112

13+
@WasmModuleInterface(WasmResource.absoluteFile)
1214
public class Prism implements AutoCloseable {
13-
private final ExportFunction calloc;
14-
private final ExportFunction pmSerializeParse;
15-
private final ExportFunction pmBufferInit;
16-
private final ExportFunction pmBufferSizeof;
17-
private final ExportFunction pmBufferValue;
18-
private final ExportFunction pmBufferLength;
19-
2015
private final WasiPreview1 wasi;
2116
private final Instance instance;
17+
private final Prism_ModuleExports exports;
2218

2319
public Prism() {
2420
this(WasiOptions.builder().build());
@@ -30,33 +26,52 @@ public Prism(WasiOptions wasiOpts) {
3026
.withMachineFactory(PrismModule::create)
3127
.withImportValues(ImportValues.builder().addFunction(wasi.toHostFunctions()).build())
3228
.build();
29+
exports = new Prism_ModuleExports(instance);
30+
}
3331

34-
calloc = instance.exports().function("calloc");
35-
pmSerializeParse = instance.exports().function("pm_serialize_parse");
36-
pmBufferInit = instance.exports().function("pm_buffer_init");
37-
pmBufferSizeof = instance.exports().function("pm_buffer_sizeof");
38-
pmBufferValue = instance.exports().function("pm_buffer_value");
39-
pmBufferLength = instance.exports().function("pm_buffer_length");
32+
public Prism_ModuleExports exports() {
33+
return exports;
4034
}
4135

4236
public ParseResult serializeParse(byte[] packedOptions, String source) {
4337
var sourceBytes = source.getBytes(StandardCharsets.US_ASCII);
4438

45-
var sourcePointer = calloc.apply(1, source.length());
46-
instance.memory().writeString((int) sourcePointer[0], source);
39+
int sourcePointer = 0;
40+
int optionsPointer = 0;
41+
int bufferPointer = 0;
42+
int resultPointer = 0;
43+
byte[] result;
44+
try {
45+
sourcePointer = exports.calloc(1, source.length());
46+
exports.memory().writeString(sourcePointer, source);
4747

48-
var optionsPointer = calloc.apply(1, packedOptions.length);
49-
instance.memory().write((int) optionsPointer[0], packedOptions);
48+
optionsPointer = exports.calloc(1, packedOptions.length);
49+
exports.memory().write(optionsPointer, packedOptions);
5050

51-
var bufferPointer = calloc.apply(pmBufferSizeof.apply()[0], 1);
52-
pmBufferInit.apply(bufferPointer);
51+
bufferPointer = exports.calloc(exports.pmBufferSizeof(), 1);
52+
exports.pmBufferInit(bufferPointer);
5353

54-
pmSerializeParse.apply(
55-
bufferPointer[0], sourcePointer[0], source.length(), optionsPointer[0]);
54+
exports.pmSerializeParse(bufferPointer, sourcePointer, source.length(), optionsPointer);
5655

57-
var result = instance.memory().readBytes(
58-
(int) pmBufferValue.apply(bufferPointer[0])[0],
59-
(int) pmBufferLength.apply(bufferPointer[0])[0]);
56+
resultPointer = exports.pmBufferValue(bufferPointer);
57+
58+
result = instance.memory().readBytes(
59+
resultPointer,
60+
exports.pmBufferLength(bufferPointer));
61+
} finally {
62+
if (sourcePointer != 0) {
63+
exports.free(sourcePointer);
64+
}
65+
if (optionsPointer != 0) {
66+
exports.free(optionsPointer);
67+
}
68+
if (bufferPointer != 0) {
69+
exports.free(bufferPointer);
70+
}
71+
if (resultPointer != 0) {
72+
exports.free(resultPointer);
73+
}
74+
}
6075

6176
return Loader.load(result, sourceBytes);
6277
}

java-wasm/src/test/java/org/prism/DummyTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
public class DummyTest {
1818

19-
byte[] packedOptions = ParsingOptions.serialize(
19+
private static final byte[] packedOptions = ParsingOptions.serialize(
2020
new byte[] {},
2121
1,
2222
new byte[] {},

0 commit comments

Comments
 (0)