Skip to content

Commit

Permalink
[truffle] Implement (g|s)etcodename
Browse files Browse the repository at this point in the history
However, getcodename currently doesn't work and I don't know why.
  • Loading branch information
MasterDuke17 committed Oct 26, 2019
1 parent 0263bdf commit 8e82f33
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/vm/jvm/Truffle.nqp
Expand Up @@ -170,6 +170,9 @@ class QAST::OperationsTruffle {
add_simple_op('bindcomp', $OBJ, [$STR, $OBJ], :side_effects);
add_simple_op('getcomp', $OBJ, [$STR]);

add_simple_op('getcodename', $STR, [$OBJ]);
add_simple_op('setcodename', $OBJ, [$OBJ, $STR]);

add_simple_op('loadbytecode', $STR, [$STR]);
add_simple_op('forceouterctx', $OBJ, [$OBJ, $OBJ]);

Expand Down
@@ -0,0 +1,23 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.runtime.NQPCodeRef;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.truffle.nodes.NQPStrNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "getcodename")
public final class NQPGetcodenameNode extends NQPStrNode {
@Child private NQPNode codeNode;

@Deserializer
public NQPGetcodenameNode(NQPNode codeNode) {
this.codeNode = codeNode;
}

@Override
public String executeStr(VirtualFrame frame) {
NQPCodeRef code = (NQPCodeRef) codeNode.execute(frame);
return code.name;
}
}
@@ -0,0 +1,26 @@
package org.perl6.nqp.truffle.nodes.expression;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.NodeInfo;
import org.perl6.nqp.truffle.runtime.NQPCodeRef;
import org.perl6.nqp.truffle.nodes.NQPNode;
import org.perl6.nqp.truffle.nodes.NQPObjNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "setcodename")
public final class NQPSetcodenameNode extends NQPObjNode {
@Child private NQPNode codeNode;
@Child private NQPNode nameNode;

@Deserializer
public NQPSetcodenameNode(NQPNode codeNode, NQPNode nameNode) {
this.codeNode = codeNode;
this.nameNode = nameNode;
}

@Override
public Object execute(VirtualFrame frame) {
NQPCodeRef code = (NQPCodeRef) codeNode.execute(frame);
code.name = nameNode.executeStr(frame);
return code;
}
}
Expand Up @@ -52,6 +52,7 @@ public final class NQPCodeRef {

private MaterializedFrame outer;

public String name;

public NQPCodeRef(RootNode root, MaterializedFrame outer) {
this.callTarget = Truffle.getRuntime().createCallTarget(root);
Expand Down

0 comments on commit 8e82f33

Please sign in to comment.