Skip to content

Commit

Permalink
[truffle] Implement nqp::chr
Browse files Browse the repository at this point in the history
  • Loading branch information
MasterDuke17 committed Jul 8, 2018
1 parent dbb7753 commit 3c84804
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/vm/jvm/Truffle.nqp
Expand Up @@ -220,6 +220,8 @@ class QAST::OperationsTruffle {

add_simple_op('x', $STR, [$STR, $INT]);

add_simple_op('chr', $STR, [$INT]);

for <postinc postdec> -> $op {
add_op($op, sub ($comp, $node, :$want) {
my $old_value := $comp.as_truffle($node[0], :want($INT));
Expand Down
@@ -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.nodes.NQPNode;
import org.perl6.nqp.truffle.nodes.NQPStrNode;
import org.perl6.nqp.dsl.Deserializer;

@NodeInfo(shortName = "chr")
public final class NQPChrNode extends NQPStrNode {
@Child private NQPNode argNode;

@Deserializer
public NQPChrNode(NQPNode argNode) {
this.argNode = argNode;
}

@Override
public String executeStr(VirtualFrame frame) {
long ord = argNode.executeInt(frame);

if (ord < 0)
throw new RuntimeException("chr codepoint cannot be negative");

return (new StringBuffer()).append(Character.toChars((int)ord)).toString();
}
}

0 comments on commit 3c84804

Please sign in to comment.