Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add a JavaWrap representation and associated code
  • Loading branch information
sorear committed Jul 3, 2013
1 parent ec5448d commit 56f116f
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/vm/jvm/runtime/org/perl6/nqp/runtime/GlobalContext.java
Expand Up @@ -92,6 +92,11 @@ public class GlobalContext {
* BOOTIO type; a basic, method-less type with the IOHandle REPR.
*/
public SixModelObject BOOTIO;

/**
* BOOTJava type; a basic, method-less type with the JavaWrap REPR.
*/
public SixModelObject BOOTJava;

/**
* Typed VMArrays.
Expand Down
Expand Up @@ -41,6 +41,7 @@ public static void bootstrap(ThreadContext tc)

tc.gc.Continuation = bootType(tc, "Continuation", "Continuation");
tc.gc.Lexotic = bootType(tc, "Lexotic", "Lexotic");
tc.gc.BOOTJava = bootType(tc, "BOOTJavaObject", "JavaWrap");

Ops.setboolspec(tc.gc.BOOTIter, BoolificationSpec.MODE_ITER, null, tc);
Ops.setboolspec(tc.gc.BOOTInt, BoolificationSpec.MODE_UNBOX_INT, null, tc);
Expand Down
2 changes: 2 additions & 0 deletions src/vm/jvm/runtime/org/perl6/nqp/sixmodel/REPRRegistry.java
Expand Up @@ -8,6 +8,7 @@
import org.perl6.nqp.sixmodel.reprs.ContextRef;
import org.perl6.nqp.sixmodel.reprs.Continuation;
import org.perl6.nqp.sixmodel.reprs.IOHandle;
import org.perl6.nqp.sixmodel.reprs.JavaWrap;
import org.perl6.nqp.sixmodel.reprs.KnowHOWAttribute;
import org.perl6.nqp.sixmodel.reprs.KnowHOWREPR;
import org.perl6.nqp.sixmodel.reprs.Lexotic;
Expand Down Expand Up @@ -62,6 +63,7 @@ private static void addREPR(String name, REPR REPR) {
addREPR("P6num", new P6num());
addREPR("Uninstantiable", new Uninstantiable());
addREPR("SCRef", new SCRef());
addREPR("JavaWrap", new JavaWrap());
addREPR("ContextRef", new ContextRef());
addREPR("Continuation", new Continuation());
addREPR("Lexotic", new Lexotic());
Expand Down
@@ -0,0 +1,7 @@
package org.perl6.nqp.sixmodel.reprs;

import org.perl6.nqp.sixmodel.SixModelObject;

public class JavaObjectWrapper extends SixModelObject {
public Object theObject;
}
32 changes: 32 additions & 0 deletions src/vm/jvm/runtime/org/perl6/nqp/sixmodel/reprs/JavaWrap.java
@@ -0,0 +1,32 @@
package org.perl6.nqp.sixmodel.reprs;

import org.perl6.nqp.runtime.ExceptionHandling;
import org.perl6.nqp.runtime.ThreadContext;
import org.perl6.nqp.sixmodel.REPR;
import org.perl6.nqp.sixmodel.STable;
import org.perl6.nqp.sixmodel.SerializationReader;
import org.perl6.nqp.sixmodel.SixModelObject;
import org.perl6.nqp.sixmodel.TypeObject;

public class JavaWrap extends REPR {
public SixModelObject type_object_for(ThreadContext tc, SixModelObject HOW) {
STable st = new STable(this, HOW);
SixModelObject obj = new TypeObject();
obj.st = st;
st.WHAT = obj;
return st.WHAT;
}

public SixModelObject allocate(ThreadContext tc, STable st) {
throw ExceptionHandling.dieInternal(tc, "Java wrappers may not be directly instantiated");
}

public SixModelObject deserialize_stub(ThreadContext tc, STable st) {
throw ExceptionHandling.dieInternal(tc, "Java objects do not participate in serialization");
}

public void deserialize_finish(ThreadContext tc, STable st,
SerializationReader reader, SixModelObject obj) {
throw ExceptionHandling.dieInternal(tc, "Java objects do not participate in serialization");
}
}

0 comments on commit 56f116f

Please sign in to comment.