daffodil.git
2 years agoAdd new TimeTracker for more advanced performance analysis
Steve Lawrence [Fri, 31 Jan 2020 14:05:35 +0000 (09:05 -0500)] 
Add new TimeTracker for more advanced performance analysis

Because of our nested parsers, it can sometimes be difficult to
determine how much time each processor takes on average to complete it's
parse/unparse, even when using a profiler. This adds a new timer that
makes it much easier to determine how much total time particular parsers
take and on average how long they take. This can help to prioritize
performance optimizations.

The intended use is to modify the Parser.scala parse1() function to look
like this:

  try {
    TimeTracker.track(parserName) {
      parse(pstate)
    }
  }

The resulting output gives a break down of all the parsers and how
performant they are. Once slow processors are found, it can then be
useful to wrap subsections of the parse() method in a call to
TimeTracker.track() to determine which sections are slow. This incurs
less overhead than traditional profilers and give more control over
which sections are actually profiled.

DAFFODIL-1883

2 years agoFixes format string
olabusayoT [Tue, 28 Jan 2020 18:29:52 +0000 (13:29 -0500)] 
Fixes format string

-- unable to trigger ClassNotFoundException in a test

DAFFODIL-2245

2 years agoAssortment of changes to improve performance
Steve Lawrence [Tue, 21 Jan 2020 15:16:25 +0000 (10:16 -0500)] 
Assortment of changes to improve performance

- Optimize how we parse date/times from an XML infoset. Previously we
  attempted to parse a handful of different potential patterns using
  ICU4J SimpleDateFormat.parse(). Profiling show this simple parse
  performed many allocations. Considering that this is a fairly strict
  format we can implement the parsing ourselves, which is much more
  efficient, minimizes allocations, and avoids thread-locals since
  SimpleDateFormat is not thread safe.
- Instead of creating new calendar every time we parse an XML Date/Time,
  clone an already existing one. The process to initialize a new
  Calendar is pretty expensive, cloning is much more efficient.
- Skip remapping XML strings if they do not contain any invalid
  characters. This avoids unnecessary string allocations in the common
  case, but does incur some overhead in the rare case when remapping is
  needed.
- Use the same empty Array of DFADelimiters in the delimiter stack.
  Otherwise we allocate a bunch of empty arrays, and scala even ends up
  allocating even ore stuff to support it (e.g. ClassTags).
- Fix MaybeBoolean to avoid allocating new MaybeBoolean's
- Use Array.length == 0 instead of Array.isEmpty in inner loops. Using
  .isEmpty will allocate a scala ArrayOps, which is unnecssary if all
  were doing is checking the length. Note that .size will also allocate
  an ArrayOps.
- Fix maybeConstant_ in Evaluatable to avoid Maybe allocations

These issues were discovered while profiling an unparse of a CSV schema.
Performance averaged around 20% faster on my testing.

DAFFODIL-2222, DAFFODIL-1883

2 years agoAdd support for textStandardBase
Steve Lawrence [Mon, 13 Jan 2020 13:24:42 +0000 (08:24 -0500)] 
Add support for textStandardBase

Add new primitive, parser, and unparser to handle non base-10 text
numbers. Actual logic from converting to/from bases is handled by Java's
built-in functions.

To maintain backwards compatibility, if the textStandardBase property is
not defined it defaults to "10" unless the requireTextStandardBaseProperty
tunable is set to true, default to false.

Also noticed some unordered sequence tests were commented out and work
with minor tweaks due to incorrect tests.

DAFFODIL-840

2 years agoPrepare for 2.6.0 development
Steve Lawrence [Mon, 13 Jan 2020 14:19:39 +0000 (09:19 -0500)] 
Prepare for 2.6.0 development

DAFFODIL-2271

2 years agoRefactor text numbers and related primitives/parsers
Steve Lawrence [Wed, 18 Dec 2019 18:59:21 +0000 (13:59 -0500)] 
Refactor text numbers and related primitives/parsers

For each text number parser, we allocated a helper which did things like
check if a number was in a valid range, or convert a parsed number to
the correct type. Many of the actions were actually static and aren't
really specific to text numbers, but are more specific to the actual
data type (e.g. int, float). This moves all that static information out
of helpers and into NodeInfo Primitives.

The information in the helper that isn't static is really just specific
to the single text number parser, and so is just passed in directly to
the parser. This also gets rid of the NumberFormatFactory and
CacheDynamic stuff and replaces it with the more modern Evaluatable.

This allows for complete removal of the helpers and even all the
different text number primitives with type parameter, removing a lot of
unnecessary duplication.

This also led to the refactoring of other parts of code that do range
checking, particularly DPath conversions. That removed a lot of
duplicate range checking logic and instead uses the new range checker in
NodeInfo. This also uncovered a handful of cases where we were too lax
or incorrect in the DataValues that were being used (e.g. a dpath
function should return xs:unsignedByte but returned a JLong instead of
JShort). These changes make conversion much more strict about which
numeric types are expected to enforce correctness. This also avoids
unnecessary conversions since we now know exactly which types things
should be.

Additionally, it was discovered that binary numbers do not enforce range
checking, so that is now checked and a PE created if a binary number is
too large for the type. That is the only functional change here.

DAFFODIL-942

2 years agoFix unparsing nested arrays when separatorSuppressionPolicy="never" v2.5.0 v2.5.0-rc2
Steve Lawrence [Thu, 2 Jan 2020 19:16:45 +0000 (14:16 -0500)] 
Fix unparsing nested arrays when separatorSuppressionPolicy="never"

When data has separators and separatorSuppressionPolicy="never", then we
were not pushing/popping onto the arrayIndexStack during unparsing. This
meant that if an array with separatorSuppressionPolicy="never" was a
child of a parent array, then we would incorrectly modify the array
stack of the parent instead of the childs own array stack. This led to
incorrect array indices and invariant failures.

To fix this, this copies the array stack logic and invariant checks from
unparseWithSuppression into the unparseWithNoSuppression.

DAFFODIL-2263

2 years agoUpdate copyright year to 2020
Steve Lawrence [Fri, 3 Jan 2020 12:08:12 +0000 (07:08 -0500)] 
Update copyright year to 2020

DAFFODIL-2265

2 years agoAdd more automation to release candidate container
Steve Lawrence [Thu, 2 Jan 2020 13:42:06 +0000 (08:42 -0500)] 
Add more automation to release candidate container

- Install the wix shell script as part of creating the container instead
  of getting it from the cloned daffodil repo. This avoids having a
  broken symlink before the daffodil repo is cloned
- Change how we clone the svn repo to avoid unneeded directories
- svn remove any previous release candidates if they exist. Needed for
  when doing an rc2, for example
- svn add the new release files so they are ready for commit if all
  checks pass
- Put final steps in a script to automate release after all checks pass
- Add some missing suppression of popd output

DAFFODIL-2264

2 years agoFixed incorrect separator suppression with ock=expression
Josh Adams [Tue, 31 Dec 2019 20:02:40 +0000 (15:02 -0500)] 
Fixed incorrect separator suppression with ock=expression

A user ran into a bug involving incorrect separator suppresion when a
sequence was using occursCountKind='expression', which should behave as
if separatorSuppressionPolicy='never'.

DAFFODIL-2262

2 years agoFixed issue unparsing optional unordered elements
Josh Adams [Mon, 30 Dec 2019 15:05:48 +0000 (10:05 -0500)] 
Fixed issue unparsing optional unordered elements

A user discovered an issue when the first element of an unordered
sequence is optinal and does not have a maxOccurs > 1. There was a logic
error that was resulting in the element being treated as a scalar
element when it should have been treated as an array, due to it being
optional.

DAFFODIL-2261

2 years agoFix choice bug DAFFODIL-2259
Michael Beckerle [Thu, 26 Dec 2019 18:54:03 +0000 (13:54 -0500)] 
Fix choice bug DAFFODIL-2259

Added tests for this.

Also adding tests to mil-std-2045 schema that exercise the previously
unused element that would have shown this bug up before.

Fixed a debugger abort found while debugging the issue.

DAFFODIL-2259

2 years agoPrepare for 2.5.0 release v2.5.0-rc1
Steve Lawrence [Fri, 20 Dec 2019 12:39:07 +0000 (07:39 -0500)] 
Prepare for 2.5.0 release

DAFFODIL-2258

2 years agoSwitch to scala-xml EncodingHeuristics to determine schema encoding
Steve Lawrence [Fri, 20 Dec 2019 14:15:38 +0000 (09:15 -0500)] 
Switch to scala-xml EncodingHeuristics to determine schema encoding

There seems to be a bug or race condigion in Apache Commons IO
XmlStreamReader that sporadically fails to detect UTF-16 encoded
schmeas, which causes Daffodil to fail to parse the schemas. Though it's
difficult reliably reproduce.

Try switching to scala-xml's EncodingHeuristics to determine the schema
encoding and see if that fixes the problem. If not, it's likely a bug in
Daffodil somewhere.

DAFFODIL-1908

2 years agoPurge scala.math.{BigInt BigDecimal}
Brandon Sloane [Thu, 19 Dec 2019 17:56:23 +0000 (12:56 -0500)] 
Purge scala.math.{BigInt BigDecimal}

Long ago, we switch over to use just Java's version of BigInt/BigDecimal,
instead of the Scala wrapper. This commit goes through and systemetically cleans up
all lingering uses of Scala's version.

DAFFODIL-2256

2 years agoRefactor type calculator to take advantage of DataValue type
Brandon Sloane [Mon, 16 Dec 2019 15:56:49 +0000 (10:56 -0500)] 
Refactor type calculator to take advantage of DataValue type

This fixes a bug where we would inadvertandly use Scala BigInts

Daffodil-2188

2 years agoAdd typesafty to our handling of infoset data values.
Brandon Sloane [Wed, 24 Jul 2019 00:14:29 +0000 (20:14 -0400)] 
Add typesafty to our handling of infoset data values.

For performance reasons, we have been making extensive use of
AnyRef to store data values in our infoset, and throughout the runtime.
This allows us to avoid boxing, but prevents the type system from validating
that unexepected types to not infect our values.

This commit introduces a value type, DataValue, which provides a 0 overhead (eg. no boxing)
wrapper around AnyRef, while only allowing a limited number of types to populate it.

In doing so, an unrelated bug of mixing Java and Scala BigInts was uncovered and corrected.
Such a bug should be much less likely to occur in the future.

Due to a bug in Scala 2.11 (https://github.com/scala/bug/issues/7521), we have 2 implementations
of DataValue. The 2.11 version automatically boxes/unboxes all instances of Array[Byte]

DAFFODIL-2169

2 years agoUse a container for building release candidates
Steve Lawrence [Thu, 12 Dec 2019 19:56:39 +0000 (14:56 -0500)] 
Use a container for building release candidates

There are too many environment configurations that can lead to difficult
and inconsistent builds. This switches to containers to build and
publish release candidates. Also makes the release candidate script more
mature, including the ability to use --dry-run to test a build without
publishing anything.

The Dockerfile is used to create a new container based on Fedora 30
minimal, install dependencies, set up the environment, and installs the
release candidate script as the entrypoint to the container. This script
has the logic to download all the necessary repos, build everything,
copy build artifacts to the right places, gives the user a list of
things to check, and if everything looks good, the steps to publish the
release candidate.

DAFFODIL-2227

2 years agoChanges to eliminate need for ERD/TRD at Expression compilation time.
Michael Beckerle [Sat, 7 Dec 2019 02:03:29 +0000 (21:03 -0500)] 
Changes to eliminate need for ERD/TRD at Expression compilation time.

They should only need DPathCompileInfo to compile expressions and
compile Evaluatables.

This eliminates a dependency from the compiler on the details of the
runtime data objects.

Another small incremental step toward DAFFODIL-1444 (schema compiler
space/speed issue.)

The DPathCompileInfo objects are really "universal runtime" objects. If
you are going to compile expressions, then regardless of back-end you
need this information. It has to be in the runtime because of the
debugger, and for runtime diagnostics.

Any runtime backend data structures will subsume what is in
DPathCompileInfo in order to be able to issue decent diagnostics.

DAFFODIL-1444

2 years agoRemove GitHub Actions linux dependency step
Steve Lawrence [Fri, 13 Dec 2019 13:40:49 +0000 (08:40 -0500)] 
Remove GitHub Actions linux dependency step

We currently run apt-get to install linux dependencies like RPM and SBT
as part of our Github Actions workflow. Unfortunately, GitHub has
updated their container to include a Microsoft repository that is buggy
and started breaking builds everyone's builds that ran apt. We could
remove just this buggy repo, but other repos could always break in the
future.

Fortunately, it the GitHub Actions container now includes SBT and RPM by
default, so our dependencies are already met. So remove the Install
Linux Dependencies step so we never have to worry about random
repositories breaking our build.

DAFFODIL-2253

2 years agoRemoved DaffodilTunables object from the Infoset entirely.
Michael Beckerle [Fri, 8 Nov 2019 05:13:36 +0000 (00:13 -0500)] 
Removed DaffodilTunables object from the Infoset entirely.

They aren't stored on the DIDocument even.
Nor are they available on the RuntimeData/DPathCompileInfo.

They are saved in the state of the DataProcessor object when it is
serialized. They exist nowhere else in the runtime data structures.

They go from there, as modified by setTunable() calls, into
the PState/UState for runtime usage. They, or
some value they contain, must be passed everywhere they are needed
at runtime.

DAFFODIL-2242

2 years agoSwitch to file output stream for large data
Josh Adams [Mon, 11 Nov 2019 17:45:15 +0000 (12:45 -0500)] 
Switch to file output stream for large data

Previously, we exclusively were using a ByteArrayOutputStream to handle
buffered output streams, which has a hard limit of 2GB. This commit
allows the output stream to change to a FileOutputStream to a temporary
file once the buffer grows to a specified size, removing the 2GB limit.

This change also removes the BufferedBlobDataOutputStream as it is not
longer needed.

DAFFODIL-2194

2 years agoAdded TakTimer to Timer.scala
Michael Beckerle [Tue, 3 Dec 2019 18:34:38 +0000 (13:34 -0500)] 
Added TakTimer to Timer.scala

Removed Tak-timing stuff from Maybe.scala

DAFFODIL-2246

2 years agoAdded test to tutorials module that runs a TDML test from java code.
Michael Beckerle [Fri, 22 Nov 2019 21:36:19 +0000 (16:36 -0500)] 
Added test to tutorials module that runs a TDML test from java code.

This is an example.

DAFFODIL-2241

2 years agoCode improvements to restrict scoped property lookup to only terms.
Michael Beckerle [Wed, 27 Nov 2019 16:01:57 +0000 (11:01 -0500)] 
Code improvements to restrict scoped property lookup to only terms.

DAFFODIL-2244

2 years agoMany changes to algorithm for how streaming unparser resolves elements.
Michael Beckerle [Fri, 8 Nov 2019 05:13:36 +0000 (00:13 -0500)] 
Many changes to algorithm for how streaming unparser resolves elements.

The relationship/contract
between unparsers and InfosetInputters now requires pushTRD/popTRD
as well as pulling events.

Removed all traces of former inspectPure method, as inspect/advance
methods of infoset inputter are now side-effect free.

I explicly tested:

mil-std-2045 works
bmp works (DAFFODIL-2224)
csv works
edifact works
HL7-v2.7 works
usmtf works
vmf works

DAFFODIL-2192, DAFFODIL-2224

2 years agoAdds serializability checks for UDFs
olabusayoT [Wed, 20 Nov 2019 17:55:21 +0000 (12:55 -0500)] 
Adds serializability checks for UDFs

-- adds check to catch any issues with serializability at UDF
initialization time (i.e when the udf object is created)
-- moves internal UDFProcessing/FatalErrors to udf package
-- wraps error on loading udfs to propagate to a UDFFatalError
-- adds associated tests/test classes

DAFFODIL-2235

2 years agoCleanup: create runtime1 package and mixins for Term classes and Gram.
Michael Beckerle [Thu, 14 Nov 2019 00:46:04 +0000 (19:46 -0500)] 
Cleanup: create runtime1 package and mixins for Term classes and Gram.

The purpose here is separation of concerns.
Things specific to daffodil-runtime1 should be segregated in the schema
compiler to a package with that specific runtime/backend in mind.

This makes it clear that the dsom and grammar packages are supposed to contain
backend-independent code.

However, this is a very partial first step in this direction. The
grammar primitives are still very runtime1-specific with their parser and
unparser methods. Also the dpath package needs separating as well.

Nevertheless, this change is worth it to help better categorize the
various schema compiler optimizers and various computed LV "attributes" into
those that are runtime1 specific, and those that are fully general.

DAFFODIL-2233

2 years agoRemove the 2GB limit when unparsing BLOBs
Steve Lawrence [Wed, 30 Oct 2019 14:00:14 +0000 (10:00 -0400)] 
Remove the 2GB limit when unparsing BLOBs

Due to suspensions, it is possible that we could unparse a BLOB to a
buffered DataOutputStream, which means the entire contents of the BLOB
would be stored in memory until the suspension and its DataOutputStream
were finished. Not only is this a waste of memory since the blob is all
on disk, but can also limit BLOBs to 2GB since buffered
DataOutputStreams use a Byte array for buffering.

This resolves this issue by not immediately unparsing BLOB data, but
instead adding a new BLOB DataOutputStream which writes BLOB data to the
previous DataOutputStream once that stream becomes direct. This means we
never store the full BLOB data in memory and remove the 2GB limit.

Also updates gen_blob to be compatible with python2 and 3 and to write
larger chunks to speed up file creation.

CLI BLOB tests are modified to unaprse the infoset after parsing to test
full round trip to large BLOB support.

DAFFODIL-2194

2 years agoFix eclipse classpaths. Insure generated correctly with source and doc
Michael Beckerle [Wed, 6 Nov 2019 16:35:52 +0000 (11:35 -0500)] 
Fix eclipse classpaths. Insure generated correctly with source and doc

2 years agoFix incorrect comment about queue depth. Whitespace standardization.
Michael Beckerle [Wed, 6 Nov 2019 00:14:20 +0000 (19:14 -0500)] 
Fix incorrect comment about queue depth. Whitespace standardization.

2 years agoTypo fixes and whitespace standardization.
Michael Beckerle [Wed, 6 Nov 2019 00:13:41 +0000 (19:13 -0500)] 
Typo fixes and whitespace standardization.

2 years agoRename Siblings to UnparserInfo. Prior name was misleading.
Michael Beckerle [Wed, 6 Nov 2019 00:11:47 +0000 (19:11 -0500)] 
Rename Siblings to UnparserInfo. Prior name was misleading.

2 years agoDelete ChoOrd dead code file.
Michael Beckerle [Tue, 5 Nov 2019 14:22:03 +0000 (09:22 -0500)] 
Delete ChoOrd dead code file.

2 years agoAdded clarifying comments about ResolvesProperties mixin.
Michael Beckerle [Tue, 5 Nov 2019 13:40:24 +0000 (08:40 -0500)] 
Added clarifying comments about ResolvesProperties mixin.

2 years agoFixes javadoc error of UDFProvider
olabusayoT [Wed, 6 Nov 2019 20:37:50 +0000 (15:37 -0500)] 
Fixes javadoc error of UDFProvider

-- updates with descriptions and adds missing @return

DAFFODIL-2228

2 years agoImproved tutorials content.
Michael Beckerle [Thu, 7 Nov 2019 01:42:22 +0000 (20:42 -0500)] 
Improved tutorials content.

Web security reasons make it better to eliminate file includes.

A variety of cross-site security provisions that are the default these
days make it impossible for a TDML file to reference a stylesheet that
is on a different web server.

That makes maintaining these things far too tedious. So the XSL
stylesheet lives alongside the tutorial files and is included by
relative URI path.

Unfortunately, this means there is some duplication between the
templates used in the daffodil-site jekyll configuration, and this XSLT
stylesheet for the tutorials.

I don't know how to fix that when html doesn't have a first-class
include capability.

The way this is done now you can view a TDML tutorial from a file:///
style URL and it presents properly.

DAFFODIL-2004

2 years agoAdds 2 arg constructor for TDML Runner
olabusayoT [Tue, 5 Nov 2019 20:54:48 +0000 (15:54 -0500)] 
Adds 2 arg constructor for TDML Runner

-- useful for Java calls
-- fixes typo in UDF tests
-- Adds unit tests for RunnerFactory constructors

DAFFODIL-2229

2 years agoSetup so tutorials are deployed to daffodil-site.
Michael Beckerle [Thu, 10 Oct 2019 22:03:46 +0000 (18:03 -0400)] 
Setup so tutorials are deployed to daffodil-site.

The XSLT and other infrastructure are now maintained as part of
daffodil-site.

release-candidate script copies tutorial files from daffodil tree
to daffodil-site tree.

Assumes daffodil-site changes which put tutorial infrastructure and
asciidoc capability into deployed site.

DAFFODIL-2004

2 years agoRemove heap sized limit for parsing
Josh Adams [Thu, 31 Oct 2019 15:15:04 +0000 (11:15 -0400)] 
Remove heap sized limit for parsing

This involved setting a maximum number of buckets and removing old
buckets once that maximum has been reached.

DAFFODIL-2194

2 years agoSpecify the appropriate shell for installing GitHub Actions dependencies
Steve Lawrence [Thu, 31 Oct 2019 15:57:25 +0000 (11:57 -0400)] 
Specify the appropriate shell for installing GitHub Actions dependencies

GitHub Actions seems to have changed the default shell on Windows from
cmd.exe to powershell. We relied on the cmd.exe 'mklink' built-in to add
sbt to the PATH on windows, but that doesn't work in powershell. Ensure
we use cmd.exe for this step.

Also switch to REM for comments in the windows script. YAML does not
treat hashes as comments inside multi-line scalars, so they end being
fed directly to cmd.exe. Change them to cmd.exe style comments.

Also use Util.echoN and pathSeparator to be OS agnostic

DAFFODIL-2225

2 years agoAdd User Defined Functions feature
olabusayoT [Thu, 19 Sep 2019 23:01:15 +0000 (19:01 -0400)] 
Add User Defined Functions feature

- Adds daffodil-udf submodule that has the files needed to write a UDF
- Adds readme doc (which will be posted on website when complete)
- Adds unit tests and tdml tests
- Adds checks, warnings and errors to our UDFService loader
 - invalid UDFs and UDFPs are dropped, and emit a warning
 - if an attempt is made to use a dropped UDF, an SDE will occur
- Adds error handling from UDFs during evaluate execution
- Updates Eclipse .classpath script to add formatting, and more
descriptive error checking

DAFFODIL-2186

2 years agoAdd tests for recent bugs found. Improve a trailingEmptyStrict test.
Michael Beckerle [Thu, 17 Oct 2019 23:21:42 +0000 (19:21 -0400)] 
Add tests for recent bugs found. Improve a trailingEmptyStrict test.

DAFFODIL-2219, DAFFODIL-2217

2 years agoRemove continue-on-error from github actions
Steve Lawrence [Tue, 15 Oct 2019 16:11:01 +0000 (12:11 -0400)] 
Remove continue-on-error from github actions

The original intention of this option was that as long as compilation
succeeded we would run all test steps, even if some one of the test
steps failed. This would allow us to potentially find multiple failures
in a single build instead of just the first failure.

Unfortunately, this option actually just makes it so the step is
considered a success regardless of pass/fail, so this actually hid
errors. We definitely don't want that, so remove the option where it is
used.

Turning this option off actually revealed a handful of tests that have
always been broken on Windows. The following changes were made to fix
those issues:

- Convert files/strings to a URI to force correct URI syntax
- Replace newline separators in tests with pipes to avoid CRLF differences
- Change CLI integration tests to not check for newlines
- Use the portable Util.echoN instead of "echo -n"

DAFFODIL-2215

2 years agoUpdated Unordered Sequence code to better support vCard
Josh Adams [Fri, 11 Oct 2019 18:13:42 +0000 (14:13 -0400)] 
Updated Unordered Sequence code to better support vCard

the vCard schema had triggered some edge cases that weren't found during
the development of unordered sequences. This commit deals with those
edge cases and enables support for the vCard schema.

DAFFODIL-1034

2 years agoAdded AlignedMixin tweak to allow enabling the test.
Michael Beckerle [Thu, 10 Oct 2019 19:54:27 +0000 (15:54 -0400)] 
Added AlignedMixin tweak to allow enabling the test.

2 years agoAdded smaller test to reproduce vCard failure.
Michael Beckerle [Thu, 10 Oct 2019 16:04:16 +0000 (12:04 -0400)] 
Added smaller test to reproduce vCard failure.

Fails currently so is commented out in the scala driver.

DAFFODIL-1034

2 years agoFixes and tests twoPass Mac LE bug
olabusayoT [Wed, 2 Oct 2019 18:21:32 +0000 (14:21 -0400)] 
Fixes and tests twoPass Mac LE bug

Fixes bug where data containing CRs aren't replaced with LFs during
twoPass testing.

DAFFODIL-2209

2 years agoEnabled tests that were blocked by UO seqs
Josh Adams [Thu, 3 Oct 2019 14:22:39 +0000 (10:22 -0400)] 
Enabled tests that were blocked by UO seqs

Also implemented a SDE check for empty UO sequences and converted tabs
to spaces withing the tdml file.

DAFFODIL-918
DAFFODIL-1091
DAFFODIL-1120
DAFFODIL-1151

2 years agoImplemented unordered sequences
Josh Adams [Thu, 11 Jul 2019 13:52:34 +0000 (09:52 -0400)] 
Implemented unordered sequences

Unordered sequences are now ipmlemented using a choice of the sequence
member parsers. This choice is then looped over until we either consume
all the data or hit a failure. The parsed infoset is then sorted into
schema definition order, and unparsing is identical to ordered
sequences.

DAFFODIL-1159

2 years agoAdded tests that illustrate nested choice technique.
Michael Beckerle [Thu, 26 Sep 2019 01:32:27 +0000 (21:32 -0400)] 
Added tests that illustrate nested choice technique.

DAFFODIL-2207

2 years agoDAFFODIL-2200. xs:import problems with xsd files provided in daffodil-lib
dchitlangia [Sat, 21 Sep 2019 05:54:07 +0000 (01:54 -0400)] 
DAFFODIL-2200. xs:import problems with xsd files provided in daffodil-lib

xs:import problems with xsd files provided in daffodil-lib

Corrected schemaLocation to remove prefix 'xsd/'
Removed extra whitespaces
Added schemaLocation for dfdl namespace

DAFFODIL-2200

3 years agoImprove diagnostic with more hex output.
Michael Beckerle [Tue, 17 Sep 2019 23:44:01 +0000 (16:44 -0700)] 
Improve diagnostic with more hex output.

DAFFODIL-2204

3 years agoAllow globals with no referringComponents
Michael Beckerle [Fri, 6 Sep 2019 20:35:16 +0000 (16:35 -0400)] 
Allow globals with no referringComponents

DAFFODIL-2197

3 years agoAdd blob support
Steve Lawrence [Thu, 15 Aug 2019 17:02:34 +0000 (13:02 -0400)] 
Add blob support

- Adds support for xs:anyURI primitive type. Elements with this type
  must specifiy the new property dfdl:objectKind, which can be
  "bytes" or "characters". Support for "characters" is not added in this
  patch.
- On parse elements with objectKind="bytes" will have the data read
  and written out to a file with a randomly generated name, with a URI
  to that file being put in the infoset. On unparse, the data is read
  from the URI and written to the data stream. Behavior is very similar
  to xs:hexBinary.
- BLOB Objects must have lengths set with dfdl:lengthKind="explicit".
- New API functions are added to set where to write blob files to and to
  a get list of all blob files that were written.
- TDML Runner is updated to be aware of xsi:type="xs:anyURI" and compare
  the contents of the blob files. It will also delete blob files after a
  test passes.
- The CLI will write blob files to the $PWD/daffodil-blobs/ directory.

DAFFODIL-1735

3 years agoAdd Github Actions continuous integration configuration
Steve Lawrence [Tue, 20 Aug 2019 16:05:30 +0000 (12:05 -0400)] 
Add Github Actions continuous integration configuration

GitHub Actions (currently in beta, but enabled for Apache projects) has
a lot of nice features compared to TravisCI. We get more memory, it
supports Windows, it averages about 5-10 minutes faster, builds all
matrices at the same time, and it can split build steps into separate
sections making it easier to find why something fails.

This adds a configuration to enable builds for Java 8, 9, and 11, Scala
2.11 and 2.12, and Windows and Linux. There are some limitations to the
config file that make it difficult to reduce some duplication, but
hopefully those issues will be resolved by the time it comes out of
beta.

DAFFODIL-498

3 years agoAdd more obscure charsets needed for some mil formats.
Michael Beckerle [Thu, 18 Jul 2019 20:57:37 +0000 (16:57 -0400)] 
Add more obscure charsets needed for some mil formats.

Also minor changes to support debug.

Added tests of LSBF encoding variants.

DAFFODIL-2185

3 years agoUpdates code for clarity
Olabusayo Kilo [Wed, 10 Jul 2019 15:58:49 +0000 (11:58 -0400)] 
Updates code for clarity

3 years agoAdds support for non-spacing and combining chars
Olabusayo Kilo [Tue, 9 Jul 2019 22:04:27 +0000 (18:04 -0400)] 
Adds support for non-spacing and combining chars

Pads non-spacing/combining chars with spaces so they show up properly
aligned in the debugger without combining with our ~ delimiters or
whitespace. Since they sometimes combine with preceding and following
characters, so we pad them on either side.

DAFFODIL-2168

3 years agoIncremental progress on schema compilation space/speed issue.
Michael Beckerle [Fri, 28 Jun 2019 05:07:15 +0000 (01:07 -0400)] 
Incremental progress on schema compilation space/speed issue.

This change set reorganizes expression compilation so that
expressions are compiled taking all possible contexts where the
expression
is reused into account, rather than compiling a separate copy for each
expression location.

However, it does not implement polymorphic behavior. Rather, it requires
all points of reuse to have the same type usage.

It issues diagnostics that show all places where different type usage
appears (up to 4 instances. Suppresses more than that.)

This does NOT yet eliminate the excessive copying of objects in the
schema compiler. It does eliminate expressions from the set of things
preventing copy-elimination by removing the problem caused by
up-and-out relative paths.

DAFFODIL-1444

3 years agoBump to 2.5.0-SNAPSHOT for development
Steve Lawrence [Fri, 12 Jul 2019 16:57:39 +0000 (12:57 -0400)] 
Bump to 2.5.0-SNAPSHOT for development

DAFFODIL-2181

3 years agoAdds bitawareness to left over data dump
Olabusayo Kilo [Tue, 2 Jul 2019 19:43:25 +0000 (15:43 -0400)] 
Adds bitawareness to left over data dump

If a parse partially consumes a byte, the left over data dump prints
the rest of the consumed bytes as binary output(0bxx101011/0b101010xx)
depending on bitOrder with the x's representing already consumed bytes

DAFFODIL-2173

3 years agoBump version to 2.4.0 v2.4.0 v2.4.0-rc1
Steve Lawrence [Tue, 2 Jul 2019 14:02:14 +0000 (10:02 -0400)] 
Bump version to 2.4.0

DAFFODIL-2174

3 years agoDespecialized typeCalc functions
Brandon Sloane [Wed, 26 Jun 2019 17:19:50 +0000 (13:19 -0400)] 
Despecialized typeCalc functions

Instead of having a seperate function for each return type,
typeCalc functions now look at the schema to determine what
their return type is.

This also remove the arbitrary restrictions of types that
they can return.

DAFFODIL-2165

3 years agoEmit SDE when a type calculator attempts to use an undefined type.
Brandon Sloane [Fri, 7 Jun 2019 18:00:41 +0000 (14:00 -0400)] 
Emit SDE when a type calculator attempts to use an undefined type.

This lays down the infrastructure which allows the DPath
interperator to lookup type calculators at compile time,
which will allow us to make their return type dependent on
the calculator they are using, instead of their functin name.

DAFFODIL-2148

3 years agoSupport terminators and initiators containing %ES;
Steve Lawrence [Thu, 27 Jun 2019 17:25:21 +0000 (13:25 -0400)] 
Support terminators and initiators containing %ES;

- Modify DFA building code so that we actually compile %ES; into a DFA
  that matches anything. This allows us to use the same delimiter
  scanning code for finding ES. This also fixes the issue where a literal
  "%ES;" would be unparsed instead of an empty string.
- Modify the various delimiter scanning iterators so that they skip past
  %ES; delimiters at the appropriate time (e.g. delimiter scanning)
- Remove the logic in DelimiterParsers to no longer include special
  checks for ES since that is now handled by standard delimiter scanning
  logic and new delimiter iterator logic
- Update "delimiter not found" error to include all local delimiters
  rather than just the first
- Update DelimiterNoES cooker to mention that the no ES restriction only
  applies to lengthKind="delimited". This cooker is only used in the
  lengthKind="delimited" case.

DAFFODIL-1474, DAFFODIL-1477, DAFFODIL-1493

3 years agoAdds hex/utf-8 data dump on left over data
Olabusayo Kilo [Thu, 27 Jun 2019 19:09:12 +0000 (15:09 -0400)] 
Adds hex/utf-8 data dump on left over data

- Fixes dumpTextLine to decode whole characters rather than per byte
in keeping with the updates to converToCharRepr
- Limited to 8 bytes displayed and decoded
- Uses Java utf-8 decoder
- 1 based indexing

DAFFODIL 1387

3 years agoReplaces arrayIndex with occursIndex
Olabusayo Kilo [Fri, 28 Jun 2019 14:12:47 +0000 (10:12 -0400)] 
Replaces arrayIndex with occursIndex

Now the debugger uses "info occursIndex" instead of "info arrayIndex"

DAFFODIL 1478

3 years agoAdd dfdlx:choiceBranchKeyRanges
Brandon Sloane [Wed, 19 Jun 2019 21:56:41 +0000 (17:56 -0400)] 
Add dfdlx:choiceBranchKeyRanges

DAFFODIL-2157

3 years agoAdded X-DFDL-5-BIT-DFI-1661-DUI-001 char encoding
Brandon Sloane [Mon, 24 Jun 2019 14:59:10 +0000 (10:59 -0400)] 
Added X-DFDL-5-BIT-DFI-1661-DUI-001 char encoding

Also snuck in a typo fix for X-DFDL-6-BIT-DFI-311-DUI-002
DAFFODIL-2164

3 years agoFixes decoding unicode with surrogate pairs
Olabusayo Kilo [Wed, 26 Jun 2019 14:38:53 +0000 (10:38 -0400)] 
Fixes decoding unicode with surrogate pairs

Fixes decoding function for unicode characters that decode to a surrogate
pair

DAFFODIL-2123

3 years agoModify inspectPure to be aware of pending events
Steve Lawrence [Wed, 26 Jun 2019 16:36:06 +0000 (12:36 -0400)] 
Modify inspectPure to be aware of pending events

When unparsing, there are some cases where Daffodil will read multiple
events and cache future events in a buffer, called pending events. The
inspectPure function wasn't aware of these pending events and so it
would always try to read an event, which resulted in it returning events
after the current pending.

This modifies inspectPure so that if there are pending events, it just
returns the first one instead of reading more events.

DAFFODIL-2167

3 years agoFix unused properties related to implied choice sequences
Steve Lawrence [Tue, 25 Jun 2019 15:01:38 +0000 (11:01 -0400)] 
Fix unused properties related to implied choice sequences

When a ChoiceBranchImpliedSequence was created, because groupMembers was
not overridden, it would actually create a complete duplicate of all the
children terms because that's what the ModelGroup groupMembers that it
inherits does. This meant that properties would be cached on different
terms than we checked for unused properties, which lead to warnings.

This overrides groupMembers for ChoiceBranchImpliedSequence so that it
does not create new terms, but is instead just a sequence of the Term it
wraps. This allows all the same behavior provided by the implied
sequence, but 1) removes the duplicate Terms and 2) allows correct
caching/checking of unused properties.

DAFFODIL-2163

3 years agoAdd debugger infosetParents config option and update trace mode
Steve Lawrence [Tue, 25 Jun 2019 17:10:07 +0000 (13:10 -0400)] 
Add debugger infosetParents config option and update trace mode

This new config option determines how many parent elements to include
when running the "info infoset" debugger command. A value of -1 will
show the entire inforset, which is the current and default behavior. A
value of zero or more will show 0 or more parent elements, in addition
to the current element.

Also modify the trace mode commands to set this property to "1" to show
a single parent and use "info infoset" so show the infoset. This
replaces the "eval .." command which gave unfriendly results going past
the root element.

DAFFODIL-1931

3 years agoSwitch to OpenJDK on TravisCI builds
Steve Lawrence [Wed, 26 Jun 2019 11:20:45 +0000 (07:20 -0400)] 
Switch to OpenJDK on TravisCI builds

TravisCI downloads the OracleJDK from oracles website. Periodially
Oracle changes something and builds start to break. Since OracleJDK and
OpenJDK are virtually the same (except OpenJDK is easier to install)
switch to OpenJDK for TravisCI builds.

DAFFODIL-2166

3 years agoPass findPropertyOption through a ChoiceBranchImpliedSequence to the underlying Term
Steve Lawrence [Fri, 21 Jun 2019 18:26:08 +0000 (14:26 -0400)] 
Pass findPropertyOption through a ChoiceBranchImpliedSequence to the underlying Term

The ChoiceCombinator asks all of its child Terms for the choiceBranchKey
property (and other properties related to direct dispatch) to build the
dispatch mappings. This means that property lookup results are cached on
the implied sequence instead of on the Term that the properties actually
appear. This leads to the Term thinking the property wasn't used because
its access didn't appear it its cache, and leads it an incorrect
warning.

Instead, pass through the findPropertyOption function to the underlying
Term so that look ups happen and are cached on the Term, getting rid of
the false warnings.

DAFFODIL-2162

3 years agoUpdate .gitignore to include vim's temp files
Brandon Sloane [Thu, 20 Jun 2019 16:35:38 +0000 (12:35 -0400)] 
Update .gitignore to include vim's temp files

DAFFODIL-2160

3 years agoFixes reversal of hexl bytes in RTL Debugging
Olabusayo Kilo [Thu, 20 Jun 2019 18:19:29 +0000 (14:19 -0400)] 
Fixes reversal of hexl bytes in RTL Debugging

Now we do reversal per hexl byte rather than a simple reversal of the
whole hexl line.

DAFFODIL-1701

3 years agoFixed choice with dispatch key on array element.
Michael Beckerle [Thu, 20 Jun 2019 20:23:54 +0000 (16:23 -0400)] 
Fixed choice with dispatch key on array element.

DAFFODIL-2162

3 years agoSmall changes to make sure daffodil-test-ibm1-crossTest still works.
Michael Beckerle [Wed, 19 Jun 2019 17:12:28 +0000 (13:12 -0400)] 
Small changes to make sure daffodil-test-ibm1-crossTest still works.

3 years agoFixes OVC on elements of complex type
Olabusayo Kilo [Wed, 19 Jun 2019 20:24:30 +0000 (16:24 -0400)] 
Fixes OVC on elements of complex type

Rather than a huge trace, we get a schema definition error if an
outputValueCalc is put on element of complex type

DAFFODIL-1701

3 years agoFixes silent ignoring of DFDL appinfo annotations in complexType
Olabusayo Kilo [Tue, 18 Jun 2019 14:59:22 +0000 (10:59 -0400)] 
Fixes silent ignoring of DFDL appinfo annotations in complexType

Adds warning for annotations with DFDL appInfos in complexTypes
instead of silently ignoring it. Non-DFDL appInfos will be silently
ignored.

Moves checks for non ModelGroups to complexTypes, to avoid duplicating
logic. If the code does end up processing a non-Model Group child we call
Assert.invariantFailed rather than SDE

Removes checks for non Term nodes as they were done to account for
ModelGroupFactory. TermFactory's caller actually already handles non
Term nodes.

Now both factories only return their expected product.

DAFFODIL-2142

3 years agoFixes incorrect discriminator behavior for initiatedContent and non-optionals.
Michael Beckerle [Tue, 18 Jun 2019 13:29:10 +0000 (09:29 -0400)] 
Fixes incorrect discriminator behavior for initiatedContent and non-optionals.

DAFFODIL-2143

3 years agoFix optional complex with zero-length nilled child bug.
Michael Beckerle [Tue, 18 Jun 2019 15:16:41 +0000 (11:16 -0400)] 
Fix optional complex with zero-length nilled child bug.

DAFFODIL-2154

3 years agoAdd support for Link16 Charset 311:002
Brandon Sloane [Tue, 18 Jun 2019 18:26:26 +0000 (14:26 -0400)] 
Add support for Link16 Charset 311:002

DAFFODIL-2155

3 years agoRemove the emptyElementParsePolicy warning
Steve Lawrence [Tue, 11 Jun 2019 13:07:34 +0000 (09:07 -0400)] 
Remove the emptyElementParsePolicy warning

This property is a new extension that most schemas will not have. And if
they do not have it, it results in a lot of warnings, seems almost one
for every element. For now, just remove this warning so that users
aren't spammed with it and forced to add an extension property to hide
the warning. If this extension becomes part of the spec, we can reenable
the warning then.

DAFFODIL-2150

3 years agoDSOM backpointer - def to ref - alternative in place.
Michael Beckerle [Mon, 3 Jun 2019 15:59:21 +0000 (11:59 -0400)] 
DSOM backpointer - def to ref - alternative in place.

This is incremental progress toward fixing the schema compiler
space/speed problem. (DAFFODIL-1444).

The tests in daffodil-core-unittests TestRefMap demonstrate exponential
growth of schema component instances being compiled versus the number of
actual "real" schema components.

Root.refMap allows any component (having a factory), to determine what
is referring to it from within the schema.

SchemaComponents have a referringComponents that allows one to obtain
the list of components referring to this one.

DAFFODIL-1444

3 years agoWarn when DFDL properties are ignored
Steve Lawrence [Thu, 13 Jun 2019 13:40:38 +0000 (09:40 -0400)] 
Warn when DFDL properties are ignored

During schema compilation, a cache of properties exists to speed up
subsequent property lookups. This patch takes advantage of that cache to
determine which properties have been used or not. At the end of schema
compilation, we now inspect all Terms and look for any properties that
are defined on each Term but are not in the cache, which implies that a
property was not used and we can create an SDW. These warnings should
help schema developers realize when properties are accidentally ignored
(e.g. dfdl:lengthPattern is defined but dfdl:lengthKind is not "pattern").

Additionally, lookup functions were refactored to ensure properties are
always cached. Some parts of the code would skip caching if it used
findPropertyOption or other functions instead of cachePropertyOption. To
avoid accidentally not adding a lookup to the cache, the cache*
functions are removed, the findPropertyOption always caches, and all
property lookups are changed to use this function or a wrapper.

Also modify all tests to remove unused properties unless explicitly
testing that a property is ignored.

DAFFODIL-1619

3 years agoAdd support for namespacing DFDL extension properties and functions
Steve Lawrence [Tue, 11 Jun 2019 13:00:41 +0000 (09:00 -0400)] 
Add support for namespacing DFDL extension properties and functions

Create a new dfdlx namespace and move a handful of extensions properties
and functions to it. This is where all future extensions should go.

Extensions that have not been part of an official Daffodil release just
have their namespace changed to dfdlx--backwards compatibility is not
maintained. For extensions that have been part of an official release,
backwards compatibility is maintained, but now results in a deprecation
warning if the old namespace is used. Below is the list of all extension
properties and functions moved to the dfdlx namespace.

Backwards compatibility is supported for:

  dfdl:layerTransform
  dfdl:layerEncoding
  dfdl:layerLengthKind
  dfdl:layerLength
  dfdl:layerLengthUnits
  dfdl:layerBoundaryMark
  daf:parseUnparsePolicy
  daf:trace()
  daf:error()

Backwards compatibility is not supported for:

  dfdl:emptyElementParseUnparsePolicy
  dfdl:inputTypeCalc
  dfdl:outputTypeCalc
  dfdl:repType
  dfdl:repValueRanges
  dfdl:repValues
  dfdl:inputTypeCalcInt()
  dfdl:inputTypeCalcString()
  dfdl:logicalTypeValueInt()
  dfdl:logicalTypeValueString()
  dfdl:outputTypeCalcInt()
  dfdl:outputTypeCalcString()
  dfdl:repTypeValueInt()
  dfdl:repTypeValueString()
  dfdl:outputTypeCalcNextSiblingInt()
  dfdl:outputTypeCalcNextSiblingString()
  daf:lookahead()

The daf namespace does still exist, but is only used for Daffodil
specific things like tunables, configurations files, etc. Only its use
in DFDL schemas is deprecated.

DAFFODIL-2096

3 years agoSimplify how we show text differences when a TDML test fails
Steve Lawrence [Tue, 11 Jun 2019 18:05:38 +0000 (14:05 -0400)] 
Simplify how we show text differences when a TDML test fails

We previously found every character that differed and showed its path,
index, and expected/actual characters. But when an XML element contains
a lot of text (e.g. hexBinary blob) with a lot of differences, this
character by character diff is not very helpful and consumed a lot
memory to build the output string. This easily leads to an OutOfMemory
exception.

Instead, when showing the diff of two XML text elements, only show the
index of the first diff plus some following characters for context. This
should be useful enough in most cases to figure out where things when
off the rails while keep memory usage low, even on large diffs.

Also change the diff output to show the actual infoset before the
differences summary. Displaying the actual infoset after the diff made
it very difficult to find the summary of differences when big infosets
were involved.

DAFFODIL-2118

3 years agoBugfix in type calc logic
Brandon Sloane [Fri, 7 Jun 2019 15:39:10 +0000 (11:39 -0400)] 
Bugfix in type calc logic

Also adds (small amount) of type safety to DState.currentValue

DAFFODIL-2146

3 years agoEnable schema validation of attribute- and short-form properties
Steve Lawrence [Fri, 7 Jun 2019 15:58:00 +0000 (11:58 -0400)] 
Enable schema validation of attribute- and short-form properties

- Use xs:anyAttribute and xs:any defined in the DFDL namespace to enable
  validation for attribute-form and short-form properties. Other
  namespaces use lax validation and will mostly likely just be ignored,
  but could still be validated if the other namespace schema defines the
  dfdl namespace and is a valid DFDL schema.
- Fix XML Schema for DFDL to allow for repValues in xs:enumerations,
  layering properties in xs:sequences, and short form dfdl:bitOrder.
- Fix tests that used incorrect properties or had typos that are now
  checked.

DAFFODIL-598, DAFFODIL-1024

3 years agoSick of NPE. lexicalParent is now optLexicalParent and is Option type
Michael Beckerle [Sat, 1 Jun 2019 04:42:06 +0000 (00:42 -0400)] 
Sick of NPE. lexicalParent is now optLexicalParent and is Option type

DAFFODIL-1444

3 years agoImplement dfdl:choiceLength='explicit'
Josh Adams [Mon, 13 May 2019 12:23:39 +0000 (08:23 -0400)] 
Implement dfdl:choiceLength='explicit'

DAFFODIL-640

3 years agoAvoid using deprecated new JLong()
Brandon Sloane [Thu, 6 Jun 2019 14:48:50 +0000 (10:48 -0400)] 
Avoid using deprecated new JLong()

3 years agoImplement daf:lookAhead
Brandon Sloane [Mon, 3 Jun 2019 16:15:48 +0000 (12:15 -0400)] 
Implement daf:lookAhead

* Adds daf:lookAhead functino
* Adds maxLookaheadFunctionBits tunable (default 512)
* Adds support for tunables of type Long
    (Probably unnessasary, but if someone wants to lookahead by more than
     2GB they can try)

DAFFODIL-2140

3 years agoSimple Types no longer have backpointer to elements.
Michael Beckerle [Thu, 30 May 2019 21:50:23 +0000 (17:50 -0400)] 
Simple Types no longer have backpointer to elements.

The SimpleType factory classes have been consolidated with the
instance classes, as we no longer need the distinction between them,
though only for simple types so far.

RestrictionFactory and UnionFactory also merged.

Rename parent to lexicalParent in schema compiler.

This is part of changing terminology to make clear that we're
not considering an object referencing a component by QName a "parent".

The term for that is going to be refSources (plural, since there can be
several), and refTarget.

Added toOption to OOLAGValue. Fixes the tests in daffodil-core-unittest
that were broken. Cleans up OOLAG a bit.

Remove hasSep from Element classes. Only sequences can have
separators. They're the only objects we should be asking if they have
separators or not.

Tighten types - DPathElementCompileInfo only points to other of same.

Minor refactor: It is generally better if the classes being inherited
from are abstract. So hoisted the LocalElementDecl into a
LocalElementDeclBase, so that the other flavors of quasi-element aren't
inheriting from a concrete class.

DAFFODIL-1444

3 years agoGenerate DaffodilTunables and WarnID from dafext.xsd
Steve Lawrence [Wed, 15 May 2019 12:09:29 +0000 (08:09 -0400)] 
Generate DaffodilTunables and WarnID from dafext.xsd

- Add Tuanble and WarnID generators to generate code based on
  dafext.xsd. This makes adding new warnings or tunables much easier,
  and the schema acts as documentation.
- Modifies the parseUnparsePolicy tunable to add a "fromRoot" value,
  which is the new default. The old default of empty string is no longer
  supported.
- Generates ParseUnparsePolicy and UnqualifyPathStepPolicy tunable
  enums, which are also now props.Enums to gets improved enum
  functionality and allows for consistent logic in the generator
- Cleaned up the dafext.xsd schema, added tunable documentation and
  default values

DAFFODIL-2117

3 years agoDelete line counter.
Michael Beckerle [Mon, 8 Apr 2019 19:19:18 +0000 (15:19 -0400)] 
Delete line counter.

A new tool at OpenDFDL sbt-stats, an improved version of the
sbt-stats plugin, can be used instead.

DAFFODIL-2106

3 years agoAdded a few new tests that verify specific sequence behaviors.
Michael Beckerle [Fri, 24 May 2019 21:07:26 +0000 (17:07 -0400)] 
Added a few new tests that verify specific sequence behaviors.

Fixed bugs with not pushing/popping the array stack properly.

This enabled agnosc_remedy, army_drrs, and uscg_ucop schemas to work
again.

DAFFODIL-2135