You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@daffodil.apache.org by GitBox <gi...@apache.org> on 2018/03/30 20:03:25 UTC
[GitHub] mbeckerle closed pull request #58: Eliminates backpointers from RuntimeData structures.
mbeckerle closed pull request #58: Eliminates backpointers from RuntimeData structures.
URL: https://github.com/apache/incubator-daffodil/pull/58
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala
index 428ac9eb9..2e852511f 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ChoiceGroup.scala
@@ -248,11 +248,6 @@ abstract class ChoiceTermBase( final override val xml: Node,
namespaces,
defaultBitOrder,
groupMembersRuntimeData,
- enclosingElement.map { _.elementRuntimeData }.getOrElse(
- Assert.invariantFailed("model group with no surrounding element.")),
- enclosingTerm.map { _.termRuntimeData }.getOrElse {
- Assert.invariantFailed("model group with no surrounding term.")
- },
isRepresented,
couldHaveText,
alignmentValueInBits,
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLSchemaFile.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLSchemaFile.scala
index d65379420..3e3eb80cb 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLSchemaFile.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/DFDLSchemaFile.scala
@@ -150,8 +150,8 @@ final class DFDLSchemaFile(val sset: SchemaSet,
ldr.validateSchema(schemaSource) // validate as XSD (catches UPA errors for example)
} catch {
case _: org.xml.sax.SAXParseException =>
- // ok to absorb this. We have captured fatal exceptions in the
- // error handler.
+ // ok to absorb this. We have captured fatal exceptions in the
+ // error handler.
case e: Exception =>
Assert.invariantFailed("Unexpected exception type " + e)
}
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
index 7972f1ddb..f79fa4fc3 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/ElementBase.scala
@@ -478,34 +478,11 @@ trait ElementBase
}.value
protected def computeElementRuntimeData(): ElementRuntimeData = {
- val ee = enclosingElement
- //
- // Must be lazy below, because we are defining the elementRuntimeData in terms of
- // the elementRuntimeData of its enclosing element. This backpointer must be
- // constructed lazily so that we first connect up all the erds to their children,
- // and only subsequently ask for these parents to be elaborated.
- //
- lazy val parent = ee.map { enc =>
- Assert.invariant(this != enc)
- enc.elementRuntimeData
- }
- lazy val parentTerm = this.enclosingTerm.map { enc =>
- Assert.invariant(this != enc)
- enc.termRuntimeData
- }
-
- //
- // I got sick of initialization time problems, so this mutual recursion
- // defines the tree of ERDs.
- //
- // This works because of deferred arguments and lazy evaluation
- //
+
lazy val childrenERDs: Seq[ElementRuntimeData] =
elementChildren.map { _.elementRuntimeData }
val newERD: ElementRuntimeData = new ElementRuntimeData(
- parent,
- parentTerm,
childrenERDs,
schemaSet.variableMap,
nextElementResolver,
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala
index 103ce0e8a..935ed0e2d 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SchemaComponent.scala
@@ -24,7 +24,6 @@ import org.apache.daffodil.xml.NS
import org.apache.daffodil.xml.XMLUtils
import org.apache.daffodil.processors.NonTermRuntimeData
import org.apache.daffodil.processors.RuntimeData
-import org.apache.daffodil.util.Maybe
import org.apache.daffodil.processors.VariableMap
import org.apache.daffodil.processors.NonTermRuntimeData
import org.apache.daffodil.xml.ResolvesQNames
@@ -91,8 +90,6 @@ trait SchemaComponent
diagnosticDebugName,
path,
namespaces,
- enclosingElement.map { _.erd },
- Maybe.toMaybe(enclosingTerm.map { _.termRuntimeData }),
tunable)
}.value
diff --git a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala
index 0b2947bdc..2d1e02a94 100644
--- a/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala
+++ b/daffodil-core/src/main/scala/org/apache/daffodil/dsom/SequenceGroup.scala
@@ -31,7 +31,6 @@ import org.apache.daffodil.schema.annotation.props.gen.OccursCountKind
import org.apache.daffodil.schema.annotation.props.gen.SequenceKind
import org.apache.daffodil.Implicits.ns2String
import org.apache.daffodil.grammar.SequenceGrammarMixin
-import org.apache.daffodil.exceptions.Assert
import org.apache.daffodil.processors.SequenceRuntimeData
import org.apache.daffodil.schema.annotation.props.Found
import org.apache.daffodil.schema.annotation.props.PropertyLookupResult
@@ -230,11 +229,6 @@ abstract class SequenceTermBase(
namespaces,
defaultBitOrder,
groupMembersRuntimeData,
- enclosingElement.map { _.elementRuntimeData }.getOrElse(
- Assert.invariantFailed("model group with no surrounding element.")),
- enclosingTerm.map { _.termRuntimeData }.getOrElse {
- Assert.invariantFailed("model group with no surrounding term.")
- },
isRepresented,
couldHaveText,
alignmentValueInBits,
diff --git a/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ElementKindUnparsers.scala b/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ElementKindUnparsers.scala
index dce6baf80..d9000c6e5 100644
--- a/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ElementKindUnparsers.scala
+++ b/daffodil-runtime1-unparser/src/main/scala/org/apache/daffodil/processors/unparsers/ElementKindUnparsers.scala
@@ -87,17 +87,7 @@ class SequenceCombinatorUnparser(ctxt: ModelGroupRuntimeData, childUnparsers: Ar
doUnparser = true
}
} else if (ev.isEnd && ev.isComplex) {
- val c = ev.asComplex
- //ok. We've peeked ahead and found the end of the complex element
- //that this sequence is the model group of.
- val optParentRD = ctxt.immediateEnclosingElementRuntimeData
- optParentRD match {
- case Some(e: ElementRuntimeData) =>
- Assert.invariant(c.runtimeData.namedQName =:= e.namedQName)
- case _ =>
- Assert.invariantFailed("Not end element for this sequence's containing element. Event %s, optParentRD %s.".format(
- ev, optParentRD))
- }
+ // ok. Expected case. Do nothing.
} else {
Assert.invariantFailed("Not a start event: " + ev)
}
diff --git a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/RuntimeData.scala b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/RuntimeData.scala
index 7a299982d..348559245 100644
--- a/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/RuntimeData.scala
+++ b/daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/RuntimeData.scala
@@ -76,8 +76,6 @@ sealed trait RuntimeData
val path: String
val namespaces: NamespaceBinding
- def immediateEnclosingElementRuntimeData: Option[ElementRuntimeData]
- def immediateEnclosingTermRuntimeData: Maybe[TermRuntimeData]
def variableMap: VariableMap
override def toString = diagnosticDebugName
@@ -103,8 +101,6 @@ sealed abstract class TermRuntimeData(
* hook these objects into a parent-child tree without
* having to use an assignment to a var.
*/
- @TransientParam immediateEnclosingElementRuntimeDataArg: => Option[ElementRuntimeData],
- @TransientParam immedEnclosingTermRuntimeDataArg: => Maybe[TermRuntimeData],
@TransientParam encodingInfoArg: => EncodingRuntimeData,
@TransientParam dpathCompileInfoArg: => DPathCompileInfo,
@TransientParam isRepresentedArg: => Boolean,
@@ -144,8 +140,6 @@ sealed abstract class TermRuntimeData(
*/
def tunable = dpathCompileInfo.tunable
- lazy val immediateEnclosingElementRuntimeData = immediateEnclosingElementRuntimeDataArg
- lazy val immediateEnclosingTermRuntimeData = immedEnclosingTermRuntimeDataArg
lazy val encodingInfo = encodingInfoArg
lazy val dpathCompileInfo = dpathCompileInfoArg
lazy val isRepresented = isRepresentedArg
@@ -160,8 +154,6 @@ sealed abstract class TermRuntimeData(
override def preSerialization: Unit = {
super.preSerialization
- immediateEnclosingElementRuntimeData
- immediateEnclosingTermRuntimeData
encodingInfo
dpathCompileInfo
isRepresented
@@ -191,8 +183,6 @@ sealed class NonTermRuntimeData(
@TransientParam diagnosticDebugNameArg: => String,
@TransientParam pathArg: => String,
@TransientParam namespacesArg: => NamespaceBinding,
- @TransientParam immediateEnclosingElementRuntimeDataArg: => Option[ElementRuntimeData],
- @TransientParam immedEnclosingTermRuntimeDataArg: => Maybe[TermRuntimeData],
@TransientParam tunableArg: => DaffodilTunables)
extends RuntimeData
with PreSerialization {
@@ -202,8 +192,6 @@ sealed class NonTermRuntimeData(
lazy val diagnosticDebugName = diagnosticDebugNameArg
lazy val path = pathArg
lazy val namespaces = namespacesArg
- lazy val immediateEnclosingElementRuntimeData = immediateEnclosingElementRuntimeDataArg
- lazy val immediateEnclosingTermRuntimeData = immedEnclosingTermRuntimeDataArg
lazy val tunable = tunableArg
override def preSerialization: Unit = {
@@ -213,8 +201,6 @@ sealed class NonTermRuntimeData(
diagnosticDebugName
path
namespaces
- immediateEnclosingElementRuntimeData
- immediateEnclosingTermRuntimeData
tunable
}
@throws(classOf[java.io.IOException])
@@ -248,7 +234,7 @@ final class SimpleTypeRuntimeData(
@TransientParam fractionDigitsArg: => Option[java.math.BigDecimal],
@TransientParam unionMemberTypesArg: => Seq[SimpleTypeRuntimeData],
@TransientParam tunableArg: => DaffodilTunables) extends NonTermRuntimeData(variableMapArg, schemaFileLocationArg, diagnosticDebugNameArg,
- pathArg, namespacesArg, None, None, tunableArg) {
+ pathArg, namespacesArg, tunableArg) {
import OKOrError._
@@ -600,8 +586,6 @@ final class ElementRuntimeData(
* all transient elements must be added to the preSerialization method below
* to allow parser serialization/deserialization to work.
*/
- @TransientParam parentArg: => Option[ElementRuntimeData],
- @TransientParam parentTermArg: => Maybe[TermRuntimeData],
@TransientParam childrenArg: => Seq[ElementRuntimeData],
@TransientParam variableMapArg: => VariableMap,
@TransientParam nextElementResolverArg: => NextElementResolver,
@@ -654,13 +638,11 @@ final class ElementRuntimeData(
@TransientParam maybeFillByteEvArg: => Maybe[FillByteEv],
@TransientParam maybeCheckByteAndBitOrderEvArg: => Maybe[CheckByteAndBitOrderEv],
@TransientParam maybeCheckBitOrderAndCharsetEvArg: => Maybe[CheckBitOrderAndCharsetEv])
- extends TermRuntimeData(parentArg, parentTermArg, encInfoArg, dpathElementCompileInfoArg, isRepresentedArg, couldHaveTextArg, alignmentValueInBitsArg, hasNoSkipRegionsArg,
+ extends TermRuntimeData(encInfoArg, dpathElementCompileInfoArg, isRepresentedArg, couldHaveTextArg, alignmentValueInBitsArg, hasNoSkipRegionsArg,
defaultBitOrderArg, optIgnoreCaseArg, maybeFillByteEvArg,
maybeCheckByteAndBitOrderEvArg,
maybeCheckBitOrderAndCharsetEvArg) {
- lazy val parent = parentArg
- lazy val parentTerm = parentTermArg
lazy val children = childrenArg
lazy val variableMap = variableMapArg
lazy val nextElementResolver = nextElementResolverArg
@@ -696,8 +678,6 @@ final class ElementRuntimeData(
override def preSerialization: Unit = {
super.preSerialization
- parent
- parentTerm
children
variableMap
nextElementResolver
@@ -735,8 +715,6 @@ final class ElementRuntimeData(
@throws(classOf[java.io.IOException])
final private def writeObject(out: java.io.ObjectOutputStream): Unit = serializeObject(out)
- lazy val rootERD: ElementRuntimeData = parent.map { _.rootERD }.getOrElse(this)
-
final def childERDs = children
def isSimpleType = optPrimType.isDefined
@@ -772,8 +750,6 @@ sealed abstract class ModelGroupRuntimeData(
@TransientParam namespacesArg: => NamespaceBinding,
@TransientParam defaultBitOrderArg: => BitOrder,
@TransientParam groupMembersArg: => Seq[TermRuntimeData],
- @TransientParam erdArg: ElementRuntimeData,
- @TransientParam trdArg: => TermRuntimeData,
@TransientParam isRepresentedArg: => Boolean,
@TransientParam couldHaveTextArg: => Boolean,
@TransientParam alignmentValueInBitsArg: => Int,
@@ -782,8 +758,7 @@ sealed abstract class ModelGroupRuntimeData(
@TransientParam maybeFillByteEvArg: => Maybe[FillByteEv],
@TransientParam maybeCheckByteAndBitOrderEvArg: => Maybe[CheckByteAndBitOrderEv],
@TransientParam maybeCheckBitOrderAndCharsetEvArg: => Maybe[CheckBitOrderAndCharsetEv])
- extends TermRuntimeData(Some(erdArg),
- Maybe(trdArg),
+ extends TermRuntimeData(
encInfoArg, ciArg, isRepresentedArg, couldHaveTextArg, alignmentValueInBitsArg, hasNoSkipRegionsArg,
defaultBitOrderArg, optIgnoreCaseArg, maybeFillByteEvArg,
maybeCheckByteAndBitOrderEvArg,
@@ -797,8 +772,6 @@ sealed abstract class ModelGroupRuntimeData(
lazy val path = pathArg
lazy val namespaces = namespacesArg
lazy val groupMembers = groupMembersArg
- lazy val erd = erdArg
- lazy val trd = trdArg
override def preSerialization: Unit = {
super.preSerialization
@@ -810,8 +783,6 @@ sealed abstract class ModelGroupRuntimeData(
path
namespaces
groupMembers
- erd
- trd
}
@throws(classOf[java.io.IOException])
final private def writeObject(out: java.io.ObjectOutputStream): Unit = serializeObject(out)
@@ -832,8 +803,6 @@ final class SequenceRuntimeData(
@TransientParam namespacesArg: => NamespaceBinding,
@TransientParam defaultBitOrderArg: => BitOrder,
@TransientParam groupMembersArg: => Seq[TermRuntimeData],
- @TransientParam erdArg: ElementRuntimeData,
- @TransientParam trdArg: => TermRuntimeData,
@TransientParam isRepresentedArg: => Boolean,
@TransientParam couldHaveTextArg: => Boolean,
@TransientParam alignmentValueInBitsArg: => Int,
@@ -843,7 +812,7 @@ final class SequenceRuntimeData(
@TransientParam maybeCheckByteAndBitOrderEvArg: => Maybe[CheckByteAndBitOrderEv],
@TransientParam maybeCheckBitOrderAndCharsetEvArg: => Maybe[CheckBitOrderAndCharsetEv])
extends ModelGroupRuntimeData(variableMapArg, encInfoArg, schemaFileLocationArg, ciArg, diagnosticDebugNameArg, pathArg, namespacesArg, defaultBitOrderArg, groupMembersArg,
- erdArg, trdArg, isRepresentedArg, couldHaveTextArg, alignmentValueInBitsArg, hasNoSkipRegionsArg, optIgnoreCaseArg,
+ isRepresentedArg, couldHaveTextArg, alignmentValueInBitsArg, hasNoSkipRegionsArg, optIgnoreCaseArg,
maybeFillByteEvArg,
maybeCheckByteAndBitOrderEvArg,
maybeCheckBitOrderAndCharsetEvArg)
@@ -863,8 +832,6 @@ final class ChoiceRuntimeData(
@TransientParam namespacesArg: => NamespaceBinding,
@TransientParam defaultBitOrderArg: => BitOrder,
@TransientParam groupMembersArg: => Seq[TermRuntimeData],
- @TransientParam erdArg: ElementRuntimeData,
- @TransientParam trdArg: => TermRuntimeData,
@TransientParam isRepresentedArg: => Boolean,
@TransientParam couldHaveTextArg: => Boolean,
@TransientParam alignmentValueInBitsArg: => Int,
@@ -874,7 +841,7 @@ final class ChoiceRuntimeData(
@TransientParam maybeCheckByteAndBitOrderEvArg: => Maybe[CheckByteAndBitOrderEv],
@TransientParam maybeCheckBitOrderAndCharsetEvArg: => Maybe[CheckBitOrderAndCharsetEv])
extends ModelGroupRuntimeData(variableMapArg, encInfoArg, schemaFileLocationArg, ciArg, diagnosticDebugNameArg, pathArg, namespacesArg, defaultBitOrderArg, groupMembersArg,
- erdArg, trdArg, isRepresentedArg, couldHaveTextArg, alignmentValueInBitsArg, hasNoSkipRegionsArg, optIgnoreCaseArg, maybeFillByteEvArg,
+ isRepresentedArg, couldHaveTextArg, alignmentValueInBitsArg, hasNoSkipRegionsArg, optIgnoreCaseArg, maybeFillByteEvArg,
maybeCheckByteAndBitOrderEvArg,
maybeCheckBitOrderAndCharsetEvArg)
@@ -895,8 +862,6 @@ final class VariableRuntimeData(
diagnosticDebugNameArg,
pathArg,
namespacesArg,
- None,
- None,
tunableArg)
with Serializable {
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services