[Swift-commit] r5869 - branches/release-0.93.1/src/org/griphyn/vdl/karajan/lib
hategan at ci.uchicago.edu
hategan at ci.uchicago.edu
Fri Jul 20 12:18:37 CDT 2012
Author: hategan
Date: 2012-07-20 12:18:37 -0500 (Fri, 20 Jul 2012)
New Revision: 5869
Modified:
branches/release-0.93.1/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java
Log:
backport of assignment file copy fix from trunk
Modified: branches/release-0.93.1/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java
===================================================================
--- branches/release-0.93.1/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java 2012-07-20 17:18:27 UTC (rev 5868)
+++ branches/release-0.93.1/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java 2012-07-20 17:18:37 UTC (rev 5869)
@@ -47,7 +47,6 @@
// type checking.
deepCopy(leaf, value, stack, 0);
-
return null;
}
catch (FutureFault f) {
@@ -118,10 +117,21 @@
}
}
+ @SuppressWarnings("unchecked")
private static void copyStructure(DSHandle dest, DSHandle source,
VariableStack stack, int level) throws ExecutionException {
Type type = dest.getType();
- for (String fname : type.getFieldNames()) {
+ Iterator<String> fni = (Iterator<String>) stack.currentFrame().getVar("it" + level);
+ if (fni == null) {
+ fni = type.getFieldNames().iterator();
+ stack.currentFrame().setVar("it" + level, fni);
+ }
+ String fname = (String) stack.currentFrame().getVar("f" + level);
+ while (fni.hasNext() || fname != null) {
+ if (fname == null) {
+ fname = fni.next();
+ stack.currentFrame().setVar("f" + level, fname);
+ }
Path fpath = Path.EMPTY_PATH.addFirst(fname);
try {
DSHandle dstf = dest.getField(fpath);
@@ -137,7 +147,11 @@
throw new ExecutionException("Internal type inconsistency detected. " +
dest + " claims not to have a " + fname + " field");
}
+ stack.currentFrame().deleteVar("f" + level);
+ fname = null;
}
+ stack.currentFrame().deleteVar("it" + level);
+ dest.closeShallow();
}
private static void copyNonComposite(DSHandle dest, DSHandle source,
@@ -153,7 +167,7 @@
}
else {
if (stack.currentFrame().isDefined("fc")) {
- FileCopier fc = (FileCopier) stack.currentFrame().getVar("fc");
+ FileCopier fc = (FileCopier) stack.currentFrame().getVarAndDelete("fc");
if (!fc.isClosed()) {
throw new FutureNotYetAvailable(fc);
}
@@ -189,8 +203,12 @@
it = new PairIterator(source.getArrayValue());
stack.setVar("it" + level, it);
}
- while (it.hasNext()) {
- Pair pair = (Pair) it.next();
+ Pair pair = (Pair) stack.currentFrame().getVar("p" + level);
+ while (it.hasNext() || pair != null) {
+ if (pair == null) {
+ pair = (Pair) it.next();
+ stack.currentFrame().setVar("p" + level, pair);
+ }
Object lhs = pair.get(0);
DSHandle rhs = (DSHandle) pair.get(1);
Path memberPath;
@@ -208,6 +226,8 @@
throw new ExecutionException("Could not get destination field",ipe);
}
deepCopy(field, rhs, stack, level + 1);
+ stack.currentFrame().deleteVar("p" + level);
+ pair = null;
}
stack.currentFrame().deleteVar("it" + level);
dest.closeShallow();
Property changes on: branches/release-0.93.1/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java
___________________________________________________________________
Added: svn:mergeinfo
+ /trunk/src/org/griphyn/vdl/karajan/lib/SetFieldValue.java:5859
More information about the Swift-commit
mailing list