mbeckerle commented on a change in pull request #473:
URL: https://github.com/apache/incubator-daffodil/pull/473#discussion_r562036274



##########
File path: 
daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ExpressionEvaluatingUnparsers.scala
##########
@@ -77,30 +76,52 @@ final class SetVariableUnparser(
 
 }
 
+final class NewVariableInstanceSuspendableExpression(
+  override val expr: CompiledExpression[AnyRef],
+  override val rd: VariableRuntimeData)
+  extends SuspendableExpression {
+
+  override protected def processExpressionResult(ustate: UState, v: 
DataValuePrimitive): Unit = {
+    ustate.variableMap.newVariableInstance(rd, v)
+  }
+
+  override protected def maybeKnownLengthInBits(ustate: UState) = MaybeULong(0)
+}
+

Review comment:
       Doing the full dependency analysis of every read/write of a variable 
across the DFDL schema is one way to solve this, albeit a complex one.
   
   I think a "workaround" fix might be this: in variable direction both or 
unparseOnly, disallow setVariable after a NVI with a default value. This 
requires the user to either remove the default value from the NVI, or remove 
the setVariable. This requires analysis of whether there are setVariable 
statements in scope of an unparse-direction NVI having default value, and 
that's itself somewhat tricky, but it is far easier than a full dependency 
analysis. 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to