Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[truffle] Implement nqp::hash and nqp::bindkey, nqp::atkey and nqp::e…
…lems for hashes
- Loading branch information
Showing
6 changed files
with
139 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletions
25
src/vm/jvm/runtime/org/perl6/nqp/truffle/nodes/expression/NQPAtkeyNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
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.NQPObjNode; | ||
import org.perl6.nqp.dsl.Deserializer; | ||
import org.perl6.nqp.truffle.runtime.NQPHash; | ||
|
||
|
||
@NodeInfo(shortName = "atkey") | ||
public final class NQPAtkeyNode extends NQPObjNode { | ||
@Child private NQPNode hashNode; | ||
@Child private NQPNode keyNode; | ||
|
||
@Deserializer | ||
public NQPAtkeyNode(NQPNode hashNode, NQPNode keyNode) { | ||
this.hashNode = hashNode; | ||
this.keyNode = keyNode; | ||
} | ||
|
||
@Override | ||
public Object execute(VirtualFrame frame) { | ||
return ((NQPHash)hashNode.execute(frame)).atkey(keyNode.executeStr(frame)); | ||
} | ||
} |
27 changes: 27 additions & 0 deletions
27
src/vm/jvm/runtime/org/perl6/nqp/truffle/nodes/expression/NQPBindkeyNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
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.NQPObjNode; | ||
import org.perl6.nqp.truffle.runtime.NQPHash; | ||
import org.perl6.nqp.dsl.Deserializer; | ||
|
||
@NodeInfo(shortName = "bindkey") | ||
public final class NQPBindkeyNode extends NQPObjNode { | ||
@Child private NQPNode hashNode; | ||
@Child private NQPNode keyNode; | ||
@Child private NQPNode valueNode; | ||
|
||
@Deserializer | ||
public NQPBindkeyNode(NQPNode hashNode, NQPNode keyNode, NQPNode valueNode) { | ||
this.hashNode = hashNode; | ||
this.keyNode = keyNode; | ||
this.valueNode = valueNode; | ||
} | ||
|
||
@Override | ||
public Object execute(VirtualFrame frame) { | ||
NQPHash hash = (NQPHash) hashNode.execute(frame); | ||
return hash.bindkey(keyNode.executeStr(frame), valueNode.execute(frame)); | ||
} | ||
} |
22 changes: 22 additions & 0 deletions
22
src/vm/jvm/runtime/org/perl6/nqp/truffle/nodes/expression/NQPElemsNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.truffle.nodes.NQPIntNode; | ||
import org.perl6.nqp.dsl.Deserializer; | ||
import org.perl6.nqp.truffle.runtime.NQPHash; | ||
|
||
@NodeInfo(shortName = "elems") | ||
public final class NQPElemsNode extends NQPIntNode { | ||
@Child private NQPNode argNode; | ||
|
||
@Deserializer | ||
public NQPElemsNode(NQPNode argNode) { | ||
this.argNode = argNode; | ||
} | ||
|
||
@Override | ||
public long executeInt(VirtualFrame frame) { | ||
return ((NQPHash)argNode.execute(frame)).elems(); | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
src/vm/jvm/runtime/org/perl6/nqp/truffle/nodes/expression/NQPHashNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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.NQPObjNode; | ||
import org.perl6.nqp.dsl.Deserializer; | ||
import org.perl6.nqp.truffle.runtime.NQPHash; | ||
|
||
@NodeInfo(shortName = "hash") | ||
public final class NQPHashNode extends NQPObjNode { | ||
@Children private final NQPNode[] keyValueNodes; | ||
|
||
@Deserializer | ||
public NQPHashNode(NQPNode[] keyValueNodes) { | ||
this.keyValueNodes = keyValueNodes; | ||
} | ||
|
||
@Override | ||
public Object execute(VirtualFrame frame) { | ||
NQPHash hash = new NQPHash(); | ||
for (int i = 0; i < keyValueNodes.length; i += 2) { | ||
hash.bindkey(keyValueNodes[i].executeStr(frame), keyValueNodes[i+1].execute(frame)); | ||
} | ||
return hash; | ||
} | ||
} |
23 changes: 23 additions & 0 deletions
23
src/vm/jvm/runtime/org/perl6/nqp/truffle/runtime/NQPHash.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package org.perl6.nqp.truffle.runtime; | ||
|
||
import java.util.HashMap; | ||
|
||
public final class NQPHash { | ||
HashMap<String, Object> contents; | ||
|
||
public NQPHash() { | ||
this.contents = new HashMap<String, Object>(); | ||
} | ||
|
||
public Object atkey(String key) { | ||
return contents.get(key); | ||
} | ||
|
||
public Object bindkey(String key, Object value) { | ||
return contents.put(key, value); | ||
} | ||
|
||
public int elems() { | ||
return contents.size(); | ||
} | ||
} |