Skip to content

Commit

Permalink
Final bits to pass all serialization/01-basic.t.
Browse files Browse the repository at this point in the history
  • Loading branch information
jnthn committed Mar 9, 2013
1 parent 38f58ba commit f7de85f
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 20 deletions.
27 changes: 26 additions & 1 deletion src/org/perl6/nqp/sixmodel/SerializationReader.java
Expand Up @@ -442,7 +442,7 @@ public SixModelObject readRef() {
SixModelObject sResult = BOOTStr.st.REPR.allocate(tc, BOOTStr.st);
sResult.set_str(tc, lookupString(orig.getInt()));
return sResult;
case REFVAR_VM_ARR_VAR:
case REFVAR_VM_ARR_VAR: {
SixModelObject BOOTArray = tc.gc.BOOTArray;
SixModelObject resArray = BOOTArray.st.REPR.allocate(tc, BOOTArray.st);
resArray.initialize(tc);
Expand All @@ -451,6 +451,31 @@ public SixModelObject readRef() {
resArray.bind_pos_boxed(tc, i, readRef());
resArray.sc = sc;
return resArray;
}
case REFVAR_VM_ARR_STR: {
SixModelObject BOOTStrArray = tc.gc.BOOTStrArray;
SixModelObject resArray = BOOTStrArray.st.REPR.allocate(tc, BOOTStrArray.st);
resArray.initialize(tc);
elems = orig.getInt();
for (int i = 0; i < elems; i++) {
tc.native_s = readStr();
resArray.bind_pos_native(tc, i);
}
resArray.sc = sc;
return resArray;
}
case REFVAR_VM_ARR_INT: {
SixModelObject BOOTIntArray = tc.gc.BOOTIntArray;
SixModelObject resArray = BOOTIntArray.st.REPR.allocate(tc, BOOTIntArray.st);
resArray.initialize(tc);
elems = orig.getInt();
for (int i = 0; i < elems; i++) {
tc.native_i = readLong();
resArray.bind_pos_native(tc, i);
}
resArray.sc = sc;
return resArray;
}
case REFVAR_VM_HASH_STR_VAR:
SixModelObject BOOTHash = tc.gc.BOOTHash;
SixModelObject resHash = BOOTHash.st.REPR.allocate(tc, BOOTHash.st);
Expand Down
18 changes: 3 additions & 15 deletions src/org/perl6/nqp/sixmodel/SerializationWriter.java
Expand Up @@ -197,11 +197,6 @@ public void writeObjRef(SixModelObject ref) {
outputs[currentBuffer].putInt(ref.sc.root_objects.indexOf(ref));
}

/* Writes a hash; just delegate to the REPR. */
private void writeHashStrVar(SixModelObject ref) {
ref.st.REPR.serialize(tc, this, ref);
}

/* Writing function for references to things. */
public void writeRef(SixModelObject ref) {
/* Work out what kind of thing we have and determine the discriminator. */
Expand Down Expand Up @@ -284,21 +279,14 @@ else if (ref.sc != null) {
case REFVAR_VM_STR:
writeStr(ref.get_str(tc));
break;
// XXX Implement these cases.
/*
case REFVAR_VM_ARR_VAR:
writeArrayVar(ref);
break;
case REFVAR_VM_ARR_INT:
writeArrayInt(ref);
break;
case REFVAR_VM_ARR_STR:
writeArrayStr(ref);
break;
*/
case REFVAR_VM_HASH_STR_VAR:
writeHashStrVar(ref);
/* These all delegate to the REPR. */
ref.st.REPR.serialize(tc, this, ref);
break;
// XXX Implement these cases.
/*
case REFVAR_STATIC_CODEREF:
case REFVAR_CLONED_CODEREF:
Expand Down
8 changes: 4 additions & 4 deletions src/org/perl6/nqp/sixmodel/reprs/VMArray.java
Expand Up @@ -80,9 +80,9 @@ public SixModelObject deserialize_stub(ThreadContext tc, STable st) {

public void deserialize_finish(ThreadContext tc, STable st,
SerializationReader reader, SixModelObject obj) {
long elems = reader.readLong();
int elems = reader.readInt32();
if (st.REPRData == null) {
for (long i = 0; i < elems; i++)
for (int i = 0; i < elems; i++)
obj.bind_pos_boxed(tc, i, reader.readRef());
}
else {
Expand All @@ -106,8 +106,8 @@ public void deserialize_finish(ThreadContext tc, STable st,
}

public void serialize(ThreadContext tc, SerializationWriter writer, SixModelObject obj) {
long elems = obj.elems(tc);
writer.writeInt(elems);
int elems = (int)obj.elems(tc);
writer.writeInt32(elems);
if (obj.st.REPRData == null) {
for (long i = 0; i < elems; i++)
writer.writeRef(obj.at_pos_boxed(tc, i));
Expand Down

0 comments on commit f7de85f

Please sign in to comment.