Mike Beckerle created DAFFODIL-2326:
---------------------------------------

             Summary: Do not pass RuntimeData to DPathCompileInfo constructor
                 Key: DAFFODIL-2326
                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2326
             Project: Daffodil
          Issue Type: Improvement
          Components: Back End, Middle "End"
    Affects Versions: 2.5.0
            Reporter: Mike Beckerle
             Fix For: 3.0.0


DPathCompileInfo should not be passed a RuntimeData to its constructor.

This causes a great deal of circularity between RuntimeData objects and 
computations that provide the values needed in those RuntimeData objects.

This prevents simplifying the constructors of the RuntimeData objects 
(DAFFODIL-2325), and causes them to hold onto large compile-time structures 
unnecessarily (DAFFODIL-1879)

Any computation that uses a check of an Evaluatable if it isConstant, 
(knownEncoding for example asks EncodingEv.isConstant), well.... constructing 
an evaluatable requires a DPathCompileInfo object, and ..... here's the 
problem: right now we pass a RuntimeData object to the DPathCompileInfo 
constructor purely for use compiling type-calc-related functions.

The type-calc functions need to know about sibling elements. The DPath compile 
info objects don't have sibling info. But the RuntimeData objects do. So that's 
where the expression compiler gets the sibling info it needs.

If some sibling information is needed to compile these functions, then we 
should compute that information and pass it to the DPathCompileInfo 
constructor, not just pass in the RuntimeData object.

 

Note however. The whole set of type-calc related functions is an experimental 
feature and subject to review. There are proposals to simplify it 
significantly. It's possible these functions will just not be needed. And in 
that case, the sibling info won't be needed in the DPathCompileInfo objects.

 

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to