Skip to content

Commit 0dc156c

Browse files
committed
[truffle] Implement nqp::setmethcache
1 parent fb82379 commit 0dc156c

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/vm/jvm/Truffle.nqp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,8 @@ class QAST::OperationsTruffle {
272272
add_simple_op('scwbenable', $INT, []);
273273
add_simple_op('scwbdisable', $INT, []);
274274

275+
add_simple_op('setmethcache', $OBJ, [$OBJ, $OBJ], :decont(0));
276+
275277
add_op('list_b', sub ($comp, $node, :$want) {
276278
my @cuids;
277279
for $node.list -> $block {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.perl6.nqp.truffle.nodes.sixmodel;
2+
import com.oracle.truffle.api.frame.VirtualFrame;
3+
import com.oracle.truffle.api.nodes.NodeInfo;
4+
import org.perl6.nqp.truffle.nodes.NQPNode;
5+
import org.perl6.nqp.truffle.nodes.NQPObjNodeWithSTableGetting;
6+
import org.perl6.nqp.truffle.runtime.NQPHash;
7+
import org.perl6.nqp.dsl.Deserializer;
8+
9+
@NodeInfo(shortName = "setmethcache")
10+
public final class NQPSetmethcacheNode extends NQPObjNodeWithSTableGetting {
11+
@Child private NQPNode objNode;
12+
@Child private NQPNode methodsNode;
13+
14+
@Deserializer
15+
public NQPSetmethcacheNode(NQPNode objNode, NQPNode methodsNode) {
16+
this.objNode = objNode;
17+
this.methodsNode = methodsNode;
18+
}
19+
20+
@Override
21+
public Object execute(VirtualFrame frame) {
22+
Object obj = objNode.execute(frame);
23+
NQPHash methodCache = ((NQPHash) methodsNode.execute(frame));
24+
getStable(obj).methodCache = methodCache.getContents();
25+
return obj;
26+
}
27+
}

0 commit comments

Comments
 (0)