diff --git a/src/vm/jvm/Truffle.nqp b/src/vm/jvm/Truffle.nqp index da52336789..05cbee74e4 100644 --- a/src/vm/jvm/Truffle.nqp +++ b/src/vm/jvm/Truffle.nqp @@ -272,6 +272,8 @@ class QAST::OperationsTruffle { add_simple_op('scwbenable', $INT, []); add_simple_op('scwbdisable', $INT, []); + add_simple_op('setmethcache', $OBJ, [$OBJ, $OBJ], :decont(0)); + add_op('list_b', sub ($comp, $node, :$want) { my @cuids; for $node.list -> $block { diff --git a/src/vm/jvm/runtime/org/perl6/nqp/truffle/nodes/sixmodel/NQPSetmethcacheNode.java b/src/vm/jvm/runtime/org/perl6/nqp/truffle/nodes/sixmodel/NQPSetmethcacheNode.java new file mode 100644 index 0000000000..cf3e321260 --- /dev/null +++ b/src/vm/jvm/runtime/org/perl6/nqp/truffle/nodes/sixmodel/NQPSetmethcacheNode.java @@ -0,0 +1,27 @@ +package org.perl6.nqp.truffle.nodes.sixmodel; +import com.oracle.truffle.api.frame.VirtualFrame; +import com.oracle.truffle.api.nodes.NodeInfo; +import org.perl6.nqp.truffle.nodes.NQPNode; +import org.perl6.nqp.truffle.nodes.NQPObjNodeWithSTableGetting; +import org.perl6.nqp.truffle.runtime.NQPHash; +import org.perl6.nqp.dsl.Deserializer; + +@NodeInfo(shortName = "setmethcache") +public final class NQPSetmethcacheNode extends NQPObjNodeWithSTableGetting { + @Child private NQPNode objNode; + @Child private NQPNode methodsNode; + + @Deserializer + public NQPSetmethcacheNode(NQPNode objNode, NQPNode methodsNode) { + this.objNode = objNode; + this.methodsNode = methodsNode; + } + + @Override + public Object execute(VirtualFrame frame) { + Object obj = objNode.execute(frame); + NQPHash methodCache = ((NQPHash) methodsNode.execute(frame)); + getStable(obj).methodCache = methodCache.getContents(); + return obj; + } +}