Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Implement atposref_[ins].
  • Loading branch information
jnthn committed Feb 28, 2015
1 parent 6559876 commit 42da59a
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/vm/jvm/runtime/org/perl6/nqp/runtime/Ops.java
Expand Up @@ -90,6 +90,7 @@
import org.perl6.nqp.sixmodel.reprs.NativeRefInstanceAttribute;
import org.perl6.nqp.sixmodel.reprs.NativeRefInstanceIntLex;
import org.perl6.nqp.sixmodel.reprs.NativeRefInstanceNumLex;
import org.perl6.nqp.sixmodel.reprs.NativeRefInstancePositional;
import org.perl6.nqp.sixmodel.reprs.NativeRefInstanceStrLex;
import org.perl6.nqp.sixmodel.reprs.NativeRefREPRData;
import org.perl6.nqp.sixmodel.reprs.P6bigintInstance;
Expand Down Expand Up @@ -2822,6 +2823,38 @@ public static SixModelObject splice(SixModelObject arr, SixModelObject from, lon
return arr;
}

/* Positional reference operations. */
public static SixModelObject atposref_i(SixModelObject obj, long idx, ThreadContext tc) {
SixModelObject refType = tc.curFrame.codeRef.staticInfo.compUnit.hllConfig.intPosRef;
if (refType == null)
throw ExceptionHandling.dieInternal(tc,
"No int positional reference type registered for current HLL");
NativeRefInstancePositional ref = (NativeRefInstancePositional)refType.st.REPR.allocate(tc, refType.st);
ref.obj = obj;
ref.idx = idx;
return ref;
}
public static SixModelObject atposref_n(SixModelObject obj, long idx, ThreadContext tc) {
SixModelObject refType = tc.curFrame.codeRef.staticInfo.compUnit.hllConfig.numPosRef;
if (refType == null)
throw ExceptionHandling.dieInternal(tc,
"No num positional reference type registered for current HLL");
NativeRefInstancePositional ref = (NativeRefInstancePositional)refType.st.REPR.allocate(tc, refType.st);
ref.obj = obj;
ref.idx = idx;
return ref;
}
public static SixModelObject atposref_s(SixModelObject obj, long idx, ThreadContext tc) {
SixModelObject refType = tc.curFrame.codeRef.staticInfo.compUnit.hllConfig.strPosRef;
if (refType == null)
throw ExceptionHandling.dieInternal(tc,
"No string positional reference type registered for current HLL");
NativeRefInstancePositional ref = (NativeRefInstancePositional)refType.st.REPR.allocate(tc, refType.st);
ref.obj = obj;
ref.idx = idx;
return ref;
}

/* Associative operations. */
public static SixModelObject atkey(SixModelObject hash, String key, ThreadContext tc) {
return hash.at_key_boxed(tc, key);
Expand Down

0 comments on commit 42da59a

Please sign in to comment.