[ 
https://issues.apache.org/jira/browse/DAFFODIL-2132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16844294#comment-16844294
 ] 

Michael Beckerle commented on DAFFODIL-2132:
--------------------------------------------

Ultimately, the hasFraming method of Terms is what is giving entirely the wrong 
answer due to this.

> isKnownNotEmpty for delimiters is misused. Need isKnownNonZeroLength for 
> delimiters
> -----------------------------------------------------------------------------------
>
>                 Key: DAFFODIL-2132
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-2132
>             Project: Daffodil
>          Issue Type: Bug
>          Components: Clean Ups, Middle "End"
>    Affects Versions: 2.3.0
>            Reporter: Michael Beckerle
>            Priority: Major
>
> There are many optimizations based on whether a term (element or model group) 
> has framing, which is defined as meaning if it has initiator/terminator, for 
> example, and the expressions for those satisfy "isKnownNonEmpty".
> This is a bad mixup. The property being "isKnownNotEmpty" means that the 
> property in the schema doesn't have "" as its value.
> That's not at all what is being asked of the these delimiter expressions. 
> What the optimizations want to know is if the delimiter is able to occupy 
> zero bits in the data stream, or known to require some non-zero number of 
> bits in the data stream.
> Currently this expression:
> dfdl:terminator='\{ if (...) then "%WSP*;" else "%#x7F;" }
> satisfies the isKnownNonEmpty test. But depending on the predictate test, if 
> this returns "%WSP*;", which is allowed when dfdl:lengthKind is NOT 
> delimited, then this could match zero bits.
> To fix this, scaladoc has been added to hasInitiator, hasTerminator, and 
> hasSeparator to warn about this.
> But we really need to define isKnownNonZeroLength for delimiters so that 
> calculations for terms like isKnownNonZeroLength can be correct.
> isKnownNonZeroLength can be false for  delimiters that have expressions as 
> their values, always for initiators, and false for terminators/separators 
> when lengthKind is not 'delimited'. So that it does not have to involve 
> analysis of the expression.
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to