Skip to content

Commit

Permalink
[truffle] Skeleton of attribute implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
pmurias committed Nov 19, 2018
1 parent 58a9285 commit 6106229
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/vm/jvm/Truffle.nqp
Expand Up @@ -1168,6 +1168,18 @@ class QAST::TruffleCompiler does SerializeOnce {
return TAST.new($OBJ, ['dynamic-get', $node.name]);
}
}
elsif $node.scope eq 'attribute' {
my int $type := self.type_from_typeobj($node.returns);
my $obj := self.as_truffle_clear_bindval($node[0], :want($OBJ)).tree;
my $class_handle := self.as_truffle_clear_bindval($node[1], :want($OBJ)).tree;

if $*BINDVAL {
my $value := self.as_truffle_clear_bindval($*BINDVAL, :want($OBJ)).tree;
return TAST.new($OBJ, ['attribute-bind', $obj, $class_handle, $node.name, $value]);
} else {
return TAST.new($OBJ, ['attribute-get', $obj, $class_handle, $node.name]);
}
}
else {
self.NYI("var scope {$node.scope}");
}
Expand Down
@@ -0,0 +1,32 @@
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.NQPObjNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "attribute-bind")
public final class NQPAttributeBindNode extends NQPObjNode {
@Child private NQPNode objNode;
@Child private NQPNode classHandleNode;
private final String name;
@Child private NQPNode valueNode;

@Deserializer("attribute-bind")
public NQPAttributeBindNode(NQPNode objNode, NQPNode classHandleNode, String name, NQPNode valueNode) {
this.objNode = objNode;
this.classHandleNode = classHandleNode;
this.name= name;
this.valueNode = valueNode;
}

@Override
public Object execute(VirtualFrame frame) {
Object obj = objNode.execute(frame);
Object classHandle = classHandleNode.execute(frame);
Object value = valueNode.execute(frame);
System.out.println("attribute-bind: " + name);
//return attribute-bind(obj, classHandleNode, name, value);
return value;
}
}
@@ -0,0 +1,31 @@
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.NQPObjNode;
import org.perl6.nqp.truffle.runtime.NQPNull;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "attribute-get")
public final class NQPAttributeGetNode extends NQPObjNode {
@Child private NQPNode objNode;
@Child private NQPNode classHandleNode;
private final String name;

@Deserializer("attribute-get")
public NQPAttributeGetNode(NQPNode objNode, NQPNode classHandleNode, String name) {
this.objNode = objNode;
this.classHandleNode = classHandleNode;
this.name = name;
}

@Override
public Object execute(VirtualFrame frame) {
Object obj = objNode.execute(frame);
Object classHandle = classHandleNode.execute(frame);

//return attribute-get(objNode.execute(frame), classHandleNode.execute(frame), nameNode.executeStr(frame), dNode.execute(frame));
System.out.println("attribute-get: " + name);
return NQPNull.SINGLETON;
}
}

0 comments on commit 6106229

Please sign in to comment.