Skip to content

Commit dca257c

Browse files
committed
Make the DebugParser an interface discoverable via ServiceLoader.
Signed-off-by: Hiram Chirino <hiram@hiramchirino.com>
1 parent 2388691 commit dca257c

12 files changed

Lines changed: 46 additions & 57 deletions

File tree

build-time-compiler/src/main/java/com/dylibso/chicory/build/time/compiler/Config.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.dylibso.chicory.build.time.compiler;
22

33
import com.dylibso.chicory.compiler.InterpreterFallback;
4-
import com.dylibso.chicory.runtime.Stratum;
5-
import com.dylibso.chicory.wasm.WasmModule;
4+
import com.dylibso.chicory.runtime.DebugParser;
65
import java.nio.file.Path;
76
import java.util.Set;
87
import java.util.StringJoiner;
9-
import java.util.function.Function;
108

119
public final class Config {
1210
/**
@@ -47,7 +45,7 @@ public final class Config {
4745
/**
4846
* the debug parser to use to extract debug symbols from the wasm module.
4947
*/
50-
private Function<WasmModule, Stratum> debugParser;
48+
private final DebugParser debugParser;
5149

5250
private Config(
5351
Path wasmFile,
@@ -57,7 +55,7 @@ private Config(
5755
Path targetWasmFolder,
5856
InterpreterFallback interpreterFallback,
5957
Set<Integer> interpretedFunctions,
60-
Function<WasmModule, Stratum> debugParser) {
58+
DebugParser debugParser) {
6159
this.wasmFile = wasmFile;
6260
this.name = name;
6361
this.targetClassFolder = targetClassFolder;
@@ -100,7 +98,7 @@ public static Builder builder() {
10098
return new Builder();
10199
}
102100

103-
public Function<WasmModule, Stratum> debugParser() {
101+
public DebugParser debugParser() {
104102
return debugParser;
105103
}
106104

@@ -128,7 +126,7 @@ public static final class Builder {
128126
private Path targetWasmFolder;
129127
private InterpreterFallback interpreterFallback = InterpreterFallback.FAIL;
130128
private Set<Integer> interpretedFunctions;
131-
private Function<WasmModule, Stratum> debugParser;
129+
private DebugParser debugParser;
132130

133131
private Builder() {}
134132

@@ -167,7 +165,7 @@ public Builder withInterpretedFunctions(Set<Integer> interpretedFunctions) {
167165
return this;
168166
}
169167

170-
public Builder withDebugParser(Function<WasmModule, Stratum> debugParser) {
168+
public Builder withDebugParser(DebugParser debugParser) {
171169
this.debugParser = debugParser;
172170
return this;
173171
}

compiler-maven-plugin/pom.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@
2626
<groupId>com.dylibso.chicory</groupId>
2727
<artifactId>runtime</artifactId>
2828
</dependency>
29-
<dependency>
30-
<groupId>com.dylibso.chicory</groupId>
31-
<artifactId>wasm</artifactId>
32-
</dependency>
3329
<dependency>
3430
<groupId>org.apache.maven</groupId>
3531
<artifactId>maven-core</artifactId>

compiler-maven-plugin/src/main/java/com/dylibso/chicory/build/time/maven/ChicoryCompilerGenMojo.java

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
package com.dylibso.chicory.build.time.maven;
22

3-
import static java.lang.invoke.MethodHandleProxies.asInterfaceInstance;
4-
import static java.lang.invoke.MethodHandles.publicLookup;
5-
import static java.lang.invoke.MethodType.methodType;
6-
73
import com.dylibso.chicory.build.time.compiler.Config;
84
import com.dylibso.chicory.build.time.compiler.Generator;
95
import com.dylibso.chicory.compiler.InterpreterFallback;
10-
import com.dylibso.chicory.runtime.Stratum;
11-
import com.dylibso.chicory.wasm.WasmModule;
6+
import com.dylibso.chicory.runtime.DebugParser;
127
import java.io.File;
138
import java.io.IOException;
9+
import java.util.ServiceConfigurationError;
10+
import java.util.ServiceLoader;
1411
import java.util.Set;
15-
import java.util.function.Function;
1612
import org.apache.maven.model.Resource;
1713
import org.apache.maven.plugin.AbstractMojo;
1814
import org.apache.maven.plugin.MojoExecutionException;
@@ -84,14 +80,15 @@ public class ChicoryCompilerGenMojo extends AbstractMojo {
8480
@Override
8581
public void execute() throws MojoExecutionException {
8682

87-
Function<WasmModule, Stratum> debugParser;
88-
83+
DebugParser debugParser = null;
8984
// Use the DebugParser if it's on the classpath.
9085
try {
91-
debugParser = createDebugParser("com.dylibso.chicory.dwarf.rust.DebugParser", "parse");
92-
getLog().info("Debug parser enabled");
93-
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException ignore) {
94-
getLog().info("Debug parser disabled");
86+
for (var service : ServiceLoader.load(DebugParser.class)) {
87+
debugParser = service;
88+
getLog().info("Using debug parser: " + debugParser.getClass().getName());
89+
break;
90+
}
91+
} catch (ServiceConfigurationError ignore) {
9592
debugParser = null;
9693
}
9794

@@ -124,16 +121,4 @@ public void execute() throws MojoExecutionException {
124121
project.addResource(resource);
125122
project.addCompileSourceRoot(targetSourceFolder.getPath());
126123
}
127-
128-
private Function<WasmModule, Stratum> createDebugParser(String clazzName, String method)
129-
throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException {
130-
var classLoader = ChicoryCompilerGenMojo.class.getClassLoader();
131-
var clazz = classLoader.loadClass(clazzName);
132-
var handle =
133-
publicLookup()
134-
.findStatic(clazz, method, methodType(Stratum.class, WasmModule.class));
135-
@SuppressWarnings("unchecked")
136-
Function<WasmModule, Stratum> function = asInterfaceInstance(Function.class, handle);
137-
return function;
138-
}
139124
}

compiler/src/main/java/com/dylibso/chicory/compiler/MachineFactoryCompiler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.dylibso.chicory.compiler;
22

33
import com.dylibso.chicory.compiler.internal.MachineFactory;
4+
import com.dylibso.chicory.runtime.DebugParser;
45
import com.dylibso.chicory.runtime.Instance;
56
import com.dylibso.chicory.runtime.Machine;
6-
import com.dylibso.chicory.runtime.Stratum;
77
import com.dylibso.chicory.wasm.WasmModule;
88
import java.util.Set;
99
import java.util.function.Function;
@@ -102,7 +102,7 @@ public Builder withInterpretedFunctions(Set<Integer> interpretedFunctions) {
102102
return this;
103103
}
104104

105-
public Builder withDebugParser(Function<WasmModule, Stratum> debugParser) {
105+
public Builder withDebugParser(DebugParser debugParser) {
106106
compilerBuilder.withDebugParser(debugParser);
107107
return this;
108108
}

compiler/src/main/java/com/dylibso/chicory/compiler/internal/Compiler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import static org.objectweb.asm.commons.InstructionAdapter.OBJECT_TYPE;
5959

6060
import com.dylibso.chicory.compiler.InterpreterFallback;
61+
import com.dylibso.chicory.runtime.DebugParser;
6162
import com.dylibso.chicory.runtime.Instance;
6263
import com.dylibso.chicory.runtime.Machine;
6364
import com.dylibso.chicory.runtime.Memory;
@@ -190,7 +191,7 @@ public static final class Builder {
190191
private int maxFunctionsPerClass;
191192
private InterpreterFallback interpreterFallback;
192193
private Set<Integer> interpretedFunctions;
193-
private Function<WasmModule, Stratum> debugParser;
194+
private DebugParser debugParser;
194195

195196
private Builder(WasmModule module) {
196197
this.module = module;
@@ -201,7 +202,7 @@ public Builder withClassName(String className) {
201202
return this;
202203
}
203204

204-
public Builder withDebugParser(Function<WasmModule, Stratum> debugParser) {
205+
public Builder withDebugParser(DebugParser debugParser) {
205206
this.debugParser = debugParser;
206207
return this;
207208
}

docs/docs/experimental/dwarf-debug-symbols.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ Instance instance = Instance.builder(module)
111111
.build();
112112
```
113113

114-
> Note: The `withDebugParser` hook accepts any implementation of `Function<WasmModule, Stratum>`, so you can plug in your own debug symbol parser if desired.
114+
> Note: The `withDebugParser` hook accepts any implementation of `DebugParser`, so you can plug in your own debug symbol parser if desired.
115115
116116
### Build Time Compiler
117117

dwarf-rust-experimental/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@
4141
</dependency>
4242
<dependency>
4343
<groupId>com.dylibso.chicory</groupId>
44-
<artifactId>wasm-corpus</artifactId>
44+
<artifactId>compiler</artifactId>
4545
<scope>test</scope>
4646
</dependency>
4747
<dependency>
4848
<groupId>com.dylibso.chicory</groupId>
49-
<artifactId>compiler</artifactId>
49+
<artifactId>wasm-corpus</artifactId>
5050
<scope>test</scope>
5151
</dependency>
5252

dwarf-rust-experimental/src/main/java/com/dylibso/chicory/dwarf/rust/DebugParser.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,15 @@
2424
import java.util.Map;
2525
import java.util.Set;
2626

27-
public final class DebugParser {
27+
public final class DebugParser implements com.dylibso.chicory.runtime.DebugParser {
2828
private static final Logger logger = new SystemLogger();
2929
private static final WasmModule MODULE = Wasm.load();
3030

31+
@Override
32+
public Stratum apply(WasmModule wasmModule) {
33+
return parse(wasmModule);
34+
}
35+
3136
static final class SourceResult {
3237
public String error;
3338
public List<SourceUnit> units;
@@ -64,8 +69,6 @@ public FileInfo(String path, SourceFile file) {
6469
}
6570
}
6671

67-
private DebugParser() {}
68-
6972
private static byte[] toBytes(WasmModule module) {
7073
var writer = new WasmWriter();
7174
var keepers =
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.dylibso.chicory.dwarf.rust.DebugParser

dwarf-rust-experimental/src/test/java/com/dylibso/chicory/dwarf/rust/MachinesTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package com.dylibso.chicory.dwarf.rust;
22

3+
import static org.junit.jupiter.api.Assertions.assertThrows;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
36
import com.dylibso.chicory.compiler.MachineFactoryCompiler;
47
import com.dylibso.chicory.runtime.Instance;
58
import com.dylibso.chicory.runtime.TrapException;
69
import com.dylibso.chicory.wasm.Parser;
710
import com.dylibso.chicory.wasm.WasmModule;
8-
import org.junit.jupiter.api.Test;
9-
1011
import java.io.PrintWriter;
1112
import java.io.StringWriter;
12-
13-
import static org.junit.jupiter.api.Assertions.assertThrows;
14-
import static org.junit.jupiter.api.Assertions.assertTrue;
13+
import org.junit.jupiter.api.Test;
1514

1615
public final class MachinesTest {
1716

0 commit comments

Comments
 (0)