Skip to content

Commit

Permalink
[truffle] Teach the DSL about FrameSlot contextSlot arguments and get…
Browse files Browse the repository at this point in the history
… rid of a bunch of boilerplate
  • Loading branch information
pmurias committed Sep 24, 2018
1 parent 2ba5155 commit 08367fe
Show file tree
Hide file tree
Showing 12 changed files with 25 additions and 61 deletions.
1 change: 1 addition & 0 deletions src/vm/jvm/dsl/org/perl6/nqp/dsl/AstBuilder.java
Expand Up @@ -17,6 +17,7 @@
Class strsClass();
Class scopeClass();
Class hllClass();
Class contextSlotClass();

boolean tastToByteCode();
boolean tastToNode();
Expand Down
14 changes: 14 additions & 0 deletions src/vm/jvm/dsl/org/perl6/nqp/dsl/Processor.java
Expand Up @@ -40,6 +40,7 @@ static class AstTypes {
TypeMirror strsClass;
TypeMirror scopeClass;
TypeMirror hllClass;
TypeMirror contextSlotClass;

AstTypes(AstBuilder annotation) {
try {
Expand Down Expand Up @@ -95,6 +96,12 @@ static class AstTypes {
} catch (MirroredTypeException e) {
hllClass = e.getTypeMirror();
}

try {
annotation.contextSlotClass();
} catch (MirroredTypeException e) {
contextSlotClass = e.getTypeMirror();
}
}
}

Expand Down Expand Up @@ -151,6 +158,9 @@ private void writeParams(ExecutableElement executableElement, AstTypes astTypes,
} else if (paramType.equals(astTypes.hllClass)) {
writer.append("scope.getCurrentHLL()");
i--;
} else if (paramType.equals(astTypes.contextSlotClass)) {
writer.append("scope.getContextSlot()");
i--;
} else {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Wrong param type: " + paramType.toString());
}
Expand Down Expand Up @@ -265,6 +275,8 @@ private void writeArgumentsToByteCode(ExecutableElement executableElement, AstTy
i--;
} else if (paramType.equals(astTypes.hllClass)) {
i--;
} else if (paramType.equals(astTypes.contextSlotClass)) {
i--;
} else {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Wrong param type: " + paramType.toString());
}
Expand Down Expand Up @@ -303,6 +315,8 @@ private void writeByteCodeParams(ExecutableElement executableElement, String rea
writer.append("scope");
} else if (paramType.equals(astTypes.hllClass)) {
writer.append("scope.getCurrentHLL()");
} else if (paramType.equals(astTypes.contextSlotClass)) {
writer.append("scope.getContextSlot()");
} else {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Wrong param type: " + paramType.toString());
}
Expand Down
Expand Up @@ -67,6 +67,7 @@
strClass = String.class,
strsClass = String[].class,
scopeClass = NQPScope.class,
contextSlotClass = FrameSlot.class,
hllClass = HLL.class,
tastToByteCode = false,
tastToNode = false,
Expand Down
Expand Up @@ -45,6 +45,7 @@
strsClass = String[].class,
scopeClass = NQPScope.class,
hllClass = HLL.class,
contextSlotClass = FrameSlot.class,
tastToByteCode = true,
tastToNode = true,
byteCodeToNode = false
Expand Down
Expand Up @@ -50,8 +50,6 @@
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.truffle.nodes.NQPObjNode;

import org.perl6.nqp.truffle.NQPScope;

import org.perl6.nqp.truffle.runtime.NQPCodeRef;
import org.perl6.nqp.truffle.runtime.NQPArguments;
import org.perl6.nqp.truffle.runtime.NQPList;
Expand All @@ -77,6 +75,7 @@ public final class NQPCallNode extends NQPObjNode {

@Child private NQPDispatchNode dispatchNode;

@Deserializer("call")
public NQPCallNode(FrameSlot contextSlot, NQPNode functionNode, long[] argumentFlags, String[] argumentNames, NQPNode[] argumentNodes) {
this.contextSlot = contextSlot;
this.functionNode = functionNode;
Expand All @@ -86,11 +85,6 @@ public NQPCallNode(FrameSlot contextSlot, NQPNode functionNode, long[] argumentF
this.dispatchNode = NQPDispatchNodeGen.create();
}

@Deserializer("call")
public static NQPCallNode deserialize(NQPScope scope, NQPNode functionNode, long[] argumentFlags, String[] argumentNames, NQPNode[] argumentNodes) {
return new NQPCallNode(scope.getContextSlot(), functionNode, argumentFlags, argumentNames, argumentNodes);
}

@ExplodeLoop
@Override
public Object execute(VirtualFrame frame) {
Expand Down
Expand Up @@ -4,7 +4,6 @@
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.NQPScope;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.truffle.nodes.NQPObjNode;
import com.oracle.truffle.api.nodes.IndirectCallNode;
Expand Down Expand Up @@ -32,6 +31,7 @@ public final class NQPCallmethodNode extends NQPObjNode {

@Children private final NQPNode[] argumentNodes;

@Deserializer
public NQPCallmethodNode(FrameSlot contextSlot, NQPNode invocantNode, NQPNode methodNode, long[] argumentFlags, String[] argumentNames, NQPNode[] argumentNodes) {
this.contextSlot = contextSlot;
this.invocantNode = invocantNode;
Expand All @@ -41,11 +41,6 @@ public NQPCallmethodNode(FrameSlot contextSlot, NQPNode invocantNode, NQPNode me
this.argumentNodes = argumentNodes;
}

@Deserializer("callmethod")
public static NQPCallmethodNode deserialize(NQPScope scope, NQPNode invocantNode, NQPNode methodNode, long[] argumentFlags, String[] argumentNames, NQPNode[] argumentNodes) {
return new NQPCallmethodNode(scope.getContextSlot(), invocantNode, methodNode, argumentFlags, argumentNames, argumentNodes);
}

@Override
public Object execute(VirtualFrame frame) {
Object invocant = invocantNode.execute(frame);
Expand Down
Expand Up @@ -11,21 +11,14 @@
import org.perl6.nqp.truffle.runtime.NQPNull;
import org.perl6.nqp.dsl.Deserializer;

import org.perl6.nqp.truffle.NQPScope;

public class NQPCreateNewContextNode extends NQPObjNode {
private final FrameSlot contextSlot;

@Deserializer("create-new-context")
public NQPCreateNewContextNode(FrameSlot contextSlot) {
this.contextSlot = contextSlot;
}

@Deserializer("create-new-context")
public static NQPCreateNewContextNode getLexical(NQPScope scope) {
FrameSlot contextSlot = scope.getContextSlot();
return new NQPCreateNewContextNode(contextSlot);
}

@Override
public Object execute(VirtualFrame frame) {
Object[] arguments = frame.getArguments();
Expand Down
Expand Up @@ -9,25 +9,18 @@
import org.perl6.nqp.truffle.runtime.DynamicContext;
import org.perl6.nqp.dsl.Deserializer;

import org.perl6.nqp.truffle.NQPScope;

public class NQPDynamicBindDirectNode extends NQPObjNode {
private final FrameSlot contextSlot;
private final String name;
private final NQPNode valueNode;

@Deserializer("dynamic-bind-direct")
public NQPDynamicBindDirectNode(FrameSlot contextSlot, String name, NQPNode valueNode) {
this.contextSlot = contextSlot;
this.name = name;
this.valueNode = valueNode;
}

@Deserializer("dynamic-bind-direct")
public static NQPDynamicBindDirectNode deserializer(NQPScope scope, String name, NQPNode valueNode) {
FrameSlot contextSlot = scope.getContextSlot();
return new NQPDynamicBindDirectNode(contextSlot, name, valueNode);
}

@Override
public Object execute(VirtualFrame frame) {
DynamicContext context = (DynamicContext) FrameUtil.getObjectSafe(frame, contextSlot);
Expand Down
Expand Up @@ -9,25 +9,18 @@
import org.perl6.nqp.truffle.runtime.DynamicContext;
import org.perl6.nqp.dsl.Deserializer;

import org.perl6.nqp.truffle.NQPScope;

public class NQPDynamicBindNode extends NQPObjNode {
private final FrameSlot contextSlot;
private final String name;
private final NQPNode valueNode;

@Deserializer("dynamic-bind")
public NQPDynamicBindNode(FrameSlot contextSlot, String name, NQPNode valueNode) {
this.contextSlot = contextSlot;
this.name = name;
this.valueNode = valueNode;
}

@Deserializer("dynamic-bind")
public static NQPDynamicBindNode deserializer(NQPScope scope, String name, NQPNode valueNode) {
FrameSlot contextSlot = scope.getContextSlot();
return new NQPDynamicBindNode(contextSlot, name, valueNode);
}

@Override
public Object execute(VirtualFrame frame) {
DynamicContext context = (DynamicContext) FrameUtil.getObjectSafe(frame, contextSlot);
Expand Down
Expand Up @@ -49,23 +49,16 @@
import org.perl6.nqp.truffle.runtime.DynamicContext;
import org.perl6.nqp.dsl.Deserializer;

import org.perl6.nqp.truffle.NQPScope;

public class NQPDynamicGetDirectNode extends NQPObjNode {
private final FrameSlot contextSlot;
private final String name;

@Deserializer("dynamic-get-direct")
public NQPDynamicGetDirectNode(FrameSlot contextSlot, String name) {
this.contextSlot = contextSlot;
this.name = name;
}

@Deserializer("dynamic-get-direct")
public static NQPDynamicGetDirectNode getLexical(NQPScope scope, String name) {
FrameSlot contextSlot = scope.getContextSlot();
return new NQPDynamicGetDirectNode(contextSlot, name);
}

@Override
public Object execute(VirtualFrame frame) {
DynamicContext context = (DynamicContext) FrameUtil.getObjectSafe(frame, contextSlot);
Expand Down
Expand Up @@ -49,23 +49,16 @@
import org.perl6.nqp.truffle.runtime.DynamicContext;
import org.perl6.nqp.dsl.Deserializer;

import org.perl6.nqp.truffle.NQPScope;

public class NQPDynamicGetNode extends NQPObjNode {
private final FrameSlot contextSlot;
private final String name;

@Deserializer("dynamic-get")
public NQPDynamicGetNode(FrameSlot contextSlot, String name) {
this.contextSlot = contextSlot;
this.name = name;
}

@Deserializer("dynamic-get")
public static NQPDynamicGetNode getLexical(NQPScope scope, String name) {
FrameSlot contextSlot = scope.getContextSlot();
return new NQPDynamicGetNode(contextSlot, name);
}

@Override
public Object execute(VirtualFrame frame) {
DynamicContext context = (DynamicContext) FrameUtil.getObjectSafe(frame, contextSlot);
Expand Down
Expand Up @@ -10,21 +10,14 @@
import org.perl6.nqp.truffle.runtime.NQPNull;
import org.perl6.nqp.dsl.Deserializer;

import org.perl6.nqp.truffle.NQPScope;

public class NQPGetParentContextNode extends NQPObjNode {
private final FrameSlot contextSlot;

@Deserializer("get-parent-context")
public NQPGetParentContextNode(FrameSlot contextSlot) {
this.contextSlot = contextSlot;
}

@Deserializer("get-parent-context")
public static NQPGetParentContextNode getLexical(NQPScope scope) {
FrameSlot contextSlot = scope.getContextSlot();
return new NQPGetParentContextNode(contextSlot);
}

@Override
public Object execute(VirtualFrame frame) {
Object[] arguments = frame.getArguments();
Expand Down

0 comments on commit 08367fe

Please sign in to comment.