Skip to content

Commit

Permalink
[truffle] Implement a bunch of comparision ops
Browse files Browse the repository at this point in the history
  • Loading branch information
pmurias committed Jul 1, 2018
1 parent f6cb253 commit 3b6bba5
Show file tree
Hide file tree
Showing 20 changed files with 427 additions and 0 deletions.
9 changes: 9 additions & 0 deletions nqp-truffle.nqp
Expand Up @@ -124,6 +124,15 @@ class QAST::OperationsTruffle {
add_op('numify', sub ($comp, $node, :$want) {
$comp.as_truffle($node[0], :want($NUM));
});

for ['_i', $INT, '_n', $NUM, '_s', $STR] -> $suffix, $type {
for <le lt gt ge eq ne> -> $cmp {
add_simple_op('is' ~ $cmp ~ $suffix, $INT, [$type, $type]);
}
}

add_simple_op('eqaddr', $INT, [$OBJ, $OBJ]);

for ['_i', $INT, '', $OBJ, '_s', $STR, '_n', $NUM] -> $suffix, $type {
my str $op_name := 'list' ~ $suffix;
add_op($op_name, sub ($comp, $node, :$want) {
Expand Down
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "eqaddr")
public final class NQPEqaddrNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPEqaddrNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return (leftNode.execute(frame) == rightNode.execute(frame)) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "iseq_i")
public final class NQPIseqIntNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIseqIntNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return (leftNode.executeInt(frame) == rightNode.executeInt(frame) ? 1 : 0);
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "iseq_n")
public final class NQPIseqNumNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIseqNumNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return (leftNode.executeNum(frame) == rightNode.executeNum(frame)) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "iseq_s")
public final class NQPIseqStrNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIseqStrNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeStr(frame).equals(rightNode.executeStr(frame)) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isge_i")
public final class NQPIsgeIntNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsgeIntNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeInt(frame) >= rightNode.executeInt(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isge_n")
public final class NQPIsgeNumNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsgeNumNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeNum(frame) >= rightNode.executeNum(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isge_s")
public final class NQPIsgeStrNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsgeStrNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeStr(frame).compareTo(rightNode.executeStr(frame)) >= 0 ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isgt_i")
public final class NQPIsgtIntNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsgtIntNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeInt(frame) > rightNode.executeInt(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isgt_n")
public final class NQPIsgtNumNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsgtNumNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeNum(frame) > rightNode.executeNum(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isgt_s")
public final class NQPIsgtStrNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsgtStrNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeStr(frame).compareTo(rightNode.executeStr(frame)) > 0 ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isle_i")
public final class NQPIsleIntNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsleIntNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeInt(frame) <= rightNode.executeInt(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isle_n")
public final class NQPIsleNumNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsleNumNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeNum(frame) <= rightNode.executeNum(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "isle_s")
public final class NQPIsleStrNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsleStrNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeStr(frame).compareTo(rightNode.executeStr(frame)) <= 0 ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "islt_i")
public final class NQPIsltIntNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsltIntNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeInt(frame) < rightNode.executeInt(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "islt_n")
public final class NQPIsltNumNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsltNumNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeNum(frame) < rightNode.executeNum(frame) ? 1 : 0;
}
}
@@ -0,0 +1,22 @@
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.nodes.NQPNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "islt_s")
public final class NQPIsltStrNode extends NQPNode {
@Child private NQPNode leftNode;
@Child private NQPNode rightNode;

@Deserializer
public NQPIsltStrNode(NQPNode leftNode, NQPNode rightNode) {
this.leftNode = leftNode;
this.rightNode = rightNode;
}

@Override
public long executeInt(VirtualFrame frame) {
return leftNode.executeStr(frame).compareTo(rightNode.executeStr(frame)) < 0 ? 1 : 0;
}
}

0 comments on commit 3b6bba5

Please sign in to comment.