Skip to content

Commit

Permalink
Implement trap dispatch
Browse files Browse the repository at this point in the history
  • Loading branch information
danielperano committed Jun 16, 2024
1 parent a74305f commit b7da4d0
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions Lang/src/main/java/chipmunk/vm/ChipmunkVM.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import java.util.Objects;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Consumer;

public class ChipmunkVM {

Expand Down Expand Up @@ -418,28 +419,38 @@ protected boolean isSamType(Class<?> interfaceType){
return nonDefaults == 1;
}

public static void trap(Object payload){
private static void handleTrap(Consumer<TrapHandler> h){
var script = ChipmunkScript.getCurrentScript();
if(script != null){
var handler = script.getTrapHandler();
if(handler != null){
h.accept(handler);
}
}
}

public static void trap(Object payload){
handleTrap(handler -> handler.runtimeTrap(payload));
}

public static void backJump(TrapSite site){

handleTrap(handler -> handler.backJump(site));
}

public static void trapObjectAlloc(TrapSite site, Class<?> objectType){

handleTrap(hander -> hander.objectAlloc(site, objectType));
}

public static void trapArrayAlloc(TrapSite site, Class<?> arrayType, int dimensions, int capacity){

handleTrap(handler -> handler.arrayAlloc(site, arrayType, dimensions, capacity));
}

public static void trapMethodCall(TrapSite site, MethodIdentifier method){

handleTrap(handler -> handler.methodCall(site, method));
}

public static void trapObjectInit(TrapSite site, Object object){

handleTrap(handler -> handler.postObjectInit(site, object));
}

}

0 comments on commit b7da4d0

Please sign in to comment.