6 years agoEliminated DFAStatus structure.
Mike Beckerle [Wed, 28 Oct 2015 16:35:32 +0000 (12:35 -0400)] 
Eliminated DFAStatus structure.

Reduces allocation in inner loop of DFA (aka tokenizer or lexical

Note: There is still lots of per-element allocation. This just
eliminates the per-character allocation of DFAStatus objects.

Also converts from Seq[Delim] to Array so that we can open-code a
foreach loop as a while loop knowing that the indexing into the array is
constant time.

Added additional scala 2.11 compiler flags to force more aggressive
inlining. Things like OnStack were still allocating closures without
these flags.


6 years agoAdded more 'final' keywords to enable inlining.
Mike Beckerle [Wed, 14 Oct 2015 16:51:34 +0000 (12:51 -0400)] 
Added more 'final' keywords to enable inlining.

Added -Yopt-warnings to scalac options - now issues a warning if unable
to inline something labeled @inline. Provides some reassurance that
inlining we have done to avoid allocation of downward closures/funargs
will be implemented.

Removed inlining of Maybe class constructor - was causing

Added scala 2.11 additional flags to detect more warnings and potential problems.

Features so we can keep unused Implicits and Equality imports and
suppress the warnings.

Lots of assertNotNull inserted to provide use of local values that
otherwise would generate non-used warnings.

Also a few changes that eliminate dead-code warnings. We can't leave
-Ywarn-dead-code on because there are dead-code warnings we can't do
anything about, but if we turn it on temporarily, then we can fix the
things that are fixable.

Converted with-body methods into @inline final def that are not
polymorphic, and so can be inlined to avoid allocating closures.

Replaced foreach in StatementElementParserBase with while loops.

Removed use of Maybe objects from Infoset (uses Object/null)

Removed use of Maybe objects from MStack of currentInfosetNode in PState
and UState. (uses Object/null)


6 years agoRemoved nopub from macroLib.
Mike Beckerle [Tue, 20 Oct 2015 22:32:13 +0000 (18:32 -0400)] 
Removed nopub from macroLib.

It should be nopub, but there is some issue that is causing macroLib to
be required.


6 years agoFix deprecation warnings in sbt configuration
Steve Lawrence [Mon, 19 Oct 2015 17:35:20 +0000 (13:35 -0400)] 
Fix deprecation warnings in sbt configuration

- The defaultSettings name was split into multiple variables, we just
  want the core default settings
- The way we created 'sbt new', 'sbt cli', and 'sbt debug' tasks used
  now deprecated methods, but was additionally overly complicated.
  Replace that with much more concise code that won't be deprecated in
  the future and is much easier to understand.


6 years agoFix broken test. I removed the ability to setLoggingOff(), but the call
Mike Beckerle [Thu, 8 Oct 2015 14:48:25 +0000 (10:48 -0400)] 
Fix broken test. I removed the ability to setLoggingOff(), but the call
was still there and this test failing.

6 years agoCreated macro-lib project/module, and converted Assert's usage,
Mike Beckerle [Wed, 7 Oct 2015 13:46:04 +0000 (09:46 -0400)] 
Created macro-lib project/module, and converted Assert's usage,
invariant, and notYetImplemented methods into macros.

ECLIPSE SETUP CHANGE: you must add -language:experimental.macros option
to the scala compiler settings. This setting is not set in our git
repository eclipse-projects, but is a global setting for the entire
eclipse instance (or maybe workspace?).

Unit tests of macro-lib are in daffodil-lib-unittest

Converted logging system to use macros.

This eliminates all these Glob objects, and closure forming.

The way to log now is log(LogLevel.Debug, "something %s", args...)


6 years agoRefactored OnStack so we have LocalStack which avoids the ThreadLocal
Mike Beckerle [Thu, 3 Sep 2015 19:02:56 +0000 (15:02 -0400)] 
Refactored OnStack so we have LocalStack which avoids the ThreadLocal
overhead when we already have a thread-local state object, which we do
in the PState/UState, and DataInputStream and DataOutputStream objects.

No point paying for access to a ThreadLocal when it can just be a data
member of the state that is already thread-local.

Removed call-by-name from Maybe.getOrElse. Requires rewriting things
that use it as a control structure (e.g., which throw or assert in the
body arg) using if-then-else.

We badly need macros!

MaybeLong, MaybeInt, MaybeChar, MaybeBoolean classes added.

Changed DataInputStream API to avoid allocation (which Maybe[Long],
Maybe[Double] etc. were causing). Now throws
DataInputStream.NotEnoughDataException if there isn't enough data, but
can check in advance by calling isDefinedForLength(nBits): Boolean which
replaces use of a Maybe type for Long, Double, Float.

Rebase onto 2.11 scala.

Fix compilation error in cli Main.scala
Update TestLogger because until log is a macro, it now evaluates its

DFDL-1424, DFDL-1212

6 years agoscala 2.11-specific scalacheck version.
Mike Beckerle [Tue, 6 Oct 2015 21:40:32 +0000 (17:40 -0400)] 
scala 2.11-specific scalacheck version.
eclipse classpath src and doc attachment

6 years agoscala 2.11-specific scalacheck version.
Mike Beckerle [Tue, 6 Oct 2015 21:40:32 +0000 (17:40 -0400)] 
scala 2.11-specific scalacheck version.
eclipse classpath src and doc attachment

7 years agoClasspath changes to build in Eclipse with scala 2.11
Mike Beckerle [Fri, 2 Oct 2015 16:30:38 +0000 (12:30 -0400)] 
Classpath changes to build in Eclipse with scala 2.11

Note: default scala Compiler flag change (-Xxml:coalescing) is also
needed for Eclipse configuration. This is not part of each project, but
is specified for each eclipse workspace.

gitignore for .cache-tests and .cache-main directories (which
Eclipse-Mars version creates?)

7 years agoUpdate to scala 2.11
Steve Lawrence [Mon, 28 Sep 2015 13:44:21 +0000 (09:44 -0400)] 
Update to scala 2.11

- Mostly just replaced deprecated functions and make functions protected
  where necessary.

- Add a fix to allow @transient to work on constructor parameters.

- Fixes for many namespace changes. It appears that the scala-xml module
  fixed a handful of bugs related to namespaces. This broke the
  DaffodilConstructingLoader, because we weren't correctly modifying
  scopes to include dafint (we added the scope bottom up rather than top
  down, which meant that child elements weren't properly sharing the
  dafint namespace binding with their parents, so every element had what
  appeared to be a unique dafint namespace binding. This was why when
  looking at a schema dump you would see the xmlns:dafint namespace
  declared on every element. This changes the way we construct those to
  build the namespace properly. This fixed a handful of namespace
  issues that cropped up with 2.11.

- Pull in changes from scala-xml in the PrettyPrinter that change the
  default top scope from null to TopScope. Without these fixes, the
  namespace xmlns="" was incorrectly added in some cases.

- Add the -Xxml:coalescing compiler flag, which prevents scala-xml from
  coalescing nodes. This allows us to keep the PCData information around
  and properly coalesce for our needs.

- Fixes removal of all whitespace text nodes. We don't actually want
  that. Now that PCData and Text nodes remain separate, it's possible
  that we have whitespace text nodes inbetween PCData nodes. This is
  perfectly acceptable, and we do not want to remove those whitespace
  nodes. What we really want to do is remove white space nodes that are
  mixed with Elem nodes. This changes XMLUtils to perform that action.


7 years agoAdd test to demonstrate that the value of dfdl:fillByte
Jessie Chab [Fri, 25 Sep 2015 19:04:47 +0000 (12:04 -0700)] 
Add test to demonstrate that the value of dfdl:fillByte
is not validated


7 years agoReduce memory allocations and improve performance
Steve Lawrence [Wed, 16 Sep 2015 16:23:19 +0000 (12:23 -0400)] 
Reduce memory allocations and improve performance

- Store the value of bitLimit rather than recalculating it. There isn't
  much done to calculate bitLimit (pretty much a shift + addition) but
  it is used a ton. So rather than recalculating it every time, change
  it from a def to var and only recalculate it when maybeBitLimitOffset0b
  or data.limit changes.

- Change the decodeIt function so it is no longer a closure. This
  resulted in the allocation of an anonymous function in hot spot

- Comment some assertions in hot spots. These result in the allocation
  of a huge amount of anonymous functions. Until we can use macros to
  turn these off for production builds, we may need to leave these
  commented out in critical sections.

- Remove def ist() in BBDISCharIterator. This function is called alot in
  inner code, sometimes multiple times in the same function. But it
  always returns the same value. @inline-ing didn't seem to get rid of
  of calls. Since this never changes within a function, change it to a
  local val if it used more than once to avoid the extra calls.

- Create a per-thread pool for Registers so that they can be reused and
  avoid allocations. Additionally, get rid of the Either allocations in
  the DFA and store the necessary information in the Registers. This
  also requires removing the delims as a constructor parameter, and
  moving it to the reset function. This seems fine, since reset is
  always called immediately after getting a new Register.

- In Registers, change the charIterator to a def. This avoids recreating
  many char iterators when the same one can be used.

- Alot of time is spent in SeqCompParser, primarily because it is just
  called so many times. So in an attempt to get it as fast as possible,
  switch it to use an Array and while-loop instead of a Seq and foreach.
  This seems faster, and avoids allocation of the anonmyous function.

- When getting cooked delims, avoid calling getAllTerminatingMarkup
  twice, which creates a new list. Instead, call it once and then map the
  first one. This whole section really needs to be replaced, there are a
  whole lot of list allocations that are probably unnecessary.

- Switch the few remaining instances of StringBuffer with StringBuilder.
  There weren't any instances of this in critical code, but we really
  shouldn't be using StringBuffer.

- Move the MarkStack into the TLStateCharBuffers class, and rename it to
  just TLState. This way we can reuse the MarkState pool among an entire
  performance test instead of just during a single parse. With this
  change, we only allocate something like 50 MarkStates total, rather
  than 50 * (number of performans runs) MarkStates

DFDL-1421, DFDL-1415, DFDL-1423

7 years agoOptimize enumeration value lookup
Steve Lawrence [Wed, 9 Sep 2015 18:11:06 +0000 (14:11 -0400)] 
Optimize enumeration value lookup

In some cases we look up the value of a enum by string at runtime, like
with PCAP when looking up the result of the byteOrder expression and
converting "bigEndian" or "littleEndian" to the byte order enum value.
With PCAP, we this many times since we can't yet statically determine if
the when the value of the expression might change and so we reevaluate
the expression many times, and thus reevaluate the byte order.

The string to enum value algorithm is innefficient for what it does. It
first converts to lowercase (a char array allocation), hashes the
string, and looks up in a hash table. Considering that that the vast
majority of enum's have less than 3-4 values, a map look up is overkill.

So replace the Map with an ArrayBuffer and just linearly look through
the array using a while loop. This removes the hash calculation, as
well as removes the Option allocation returned from the map lookup.
Additionally, use equalsIgnoreCase to avoid a char array allocation.

In testing of PCAP, this resulted in about a 12% improvement in


7 years agoAdd test to demonstrate scala XMLEventReader bug, where apostrophes
Jessie Chab [Thu, 3 Sep 2015 11:22:40 +0000 (04:22 -0700)] 
Add test to demonstrate scala XMLEventReader bug, where apostrophes
are not handled properly when unparsing.


7 years agoVerify fix for unparsing arrays with occursCountKind="expression"
Jessie Chab [Wed, 2 Sep 2015 20:13:59 +0000 (13:13 -0700)] 
Verify fix for unparsing arrays with occursCountKind="expression"
Add more tests and move existing tests from scala-new to scala


7 years agoAdjusted test output for some tests of fixed array unparsing and these
Mike Beckerle [Tue, 28 Jul 2015 16:58:39 +0000 (12:58 -0400)] 
Adjusted test output for some tests of fixed array unparsing and these
tests now pass.

Mostly just moved tests that are spontaneously now working from debug to

Fixed a few other small things that improve diagnostic message clarity.

Debugger change so that expression evaluation works even when the
current infoset node is an array node.

Added change to weed out the NadaParsers and NadaUnparsers that
sometimes get inserted by the Grammar optimizations.

Added code to generate InfosetEvents for unparsing corresponding to
defaultable and outputValueCalc elements.

Needed so that outputValueCalc computations can be implemented.

This simplifies unparsing because unparsers don't have to worry about
whether the element corresponding to the right schema component will be
provided as an InfosetEvent or not.

Renamed "couldBeXYZZY" members/methods that were actually collections to
have names suitable for collections like "possibleXYZZYElements" and

Kept "couldBeXYZZY" that were booleans.

Fixed val that should be lazy val was breaking core unit tests by
requiring parser for examples that don't have parsers possible.

Because the definition of "emptyIsAConcept" was fixed, tests that used
to work regardless of the setting of dfdl:separatorSuppressionPolicy
were broken. Changed these from "never" policy to "trailingEmpty" and
they work again.

DFDL-1301, DFDL-1296, DFDL-1266, DFDL-1270, DFDL-115, DFDL-1259

7 years agoVerify fix for bad diagnostic message
Jessie Chab [Wed, 2 Sep 2015 13:14:14 +0000 (06:14 -0700)] 
Verify fix for bad diagnostic message


7 years agoAdded missing gitignore file to daffodil-test so git will ignore the
Mike Beckerle [Wed, 26 Aug 2015 17:40:23 +0000 (13:40 -0400)] 
Added missing gitignore file to daffodil-test so git will ignore the
testData_onClassPath directory.

7 years agoFix broken CLI test.
Mike Beckerle [Tue, 1 Sep 2015 20:54:36 +0000 (16:54 -0400)] 
Fix broken CLI test.

7 years agoAdded MStack class which is @specialized for all our stacks of Long and
Mike Beckerle [Thu, 27 Aug 2015 20:10:52 +0000 (16:10 -0400)] 
Added MStack class which is @specialized for all our stacks of Long and
Boolean - without this, every push/pop of a Boolean or a Long was Boxing
and unboxing, that is allocating.

Also MStack adds a mark/reset capability for resetting a stack, and
removes most of the operations on stacks that were O(n).

Eliminated all @deprecated methods, and unnecessary copying of PState,
UState, and the DataInputStream and DataOutputStream. The mark objects
used to implement mark/reset are all managed in pools now, not allocated
on the heap.

Put back build.sbt setting that converts warnings to errors.

Abstracted out common Pool utility class

Abstracted out common ThreadCheckMixin utility

Eliminated some use of ThreadLocal in PState and BBDataInputStream.
All the state that was in those ThreadLocal objects is now part of PState or
BBDataInputStream directly. The ThreadLocal is just there to cache large
buffers per thread so we don't allocate these large buffers over and over when
testing on 20K files for example.

Created Debugger-specific state-capture object that is used to copy bits
of state explicitly needed by the debugger. This eliminates the need for
the PState.Mark object to carry things that aren't needed for mark/reset
but the debugger was accessing.

Added markPos and resetPos which are mark/reset for just the position.

Modified DFA and specified length and assert pattern parsers to use
this. Should improve performance/decrease allocation overhead for

DFDL-1415, DFDL-1417

7 years agoReplace mutable.Stack with mutable.ArrayStack
Steve Lawrence [Tue, 25 Aug 2015 19:04:02 +0000 (15:04 -0400)] 
Replace mutable.Stack with mutable.ArrayStack

The standard Scala mutable Stack is very inefficient. Switching over to
a mutable ArrayStack, along with removing some expensive assertions in
the new IO layer, improved performance across the board, with some tests
seeing 20% performance improvements and others seeing and 50-60%.


7 years agoFix minor issues with debugger data dumps
Steve Lawrence [Fri, 21 Aug 2015 19:48:02 +0000 (15:48 -0400)] 
Fix minor issues with debugger data dumps

In some cases, the debugger data dumps displayed the wrong data, or the
indicator bars were off or went too long. Various changes to fix these

- Switch to dumping based on the DataLoc of the prestate rather than the
  current state. This made it so it would consistently show the
  beginning of data, even when the length of the data is long
- When getting past data, it was possible that the debugOutputStream was
  null.  This was because we switched to the prestate. When the debugger
  pushes the very first state to the stack, that state isn't fully
  initialized because some lazy vals haven't yet been evaluated
  (particularly the outputStream and thus debugOutputStream). But this
  only happens for the first state, which doesn't have any data, so if
  the debugOutuptStream is null, we just return an empty buffer.
- Apply the shamStartBitAddress correctly. In tests, it looks like this
  was used as a value to skip data, but in the comments and the way it
  it is used by the debugger, is is supposed to be the address of the
  first bit in the buffer to dump. To fix this, we just need to offset
  some values by -startByteAddress.
- Improve the creation of the indicator picture. Sometimes it was off or
  was too long
- When unparsing, move the addEventHandler(debugger) and notifyDebugging
  calls earlier in the process. These calls must be done before the call
  to init(), otherwise the debugger doesn't get the init call and the
  runner isn't properly initialized. Only affects the interactive
  debugger and not trace, since trace doesn't use the init function.


7 years agoReplace NS thread cache with UniquenessCache from scala
Steve Lawrence [Thu, 13 Aug 2015 16:11:43 +0000 (12:11 -0400)] 
Replace NS thread cache with UniquenessCache from scala

The existing cache using a mutable map was not thread safe. Replace that
with the UniquenessCache from scala which contains all the logic to be
thread safe and simplifies the NS code a bit. This also changes the
cache to key on a URI rather than a string representation of a URI.


7 years agoInclude passera info in license configuration
Steve Lawrence [Wed, 12 Aug 2015 18:08:33 +0000 (14:08 -0400)] 
Include passera info in license configuration

- Modify license settings to include unmanaged passera information. This
  can be easily modified to include any other umanaged dependency
  information as well
- Remove license information for test dependencies. None of those
  dependencies are ever distributed with daffodil source/binaries, and
  so aren't necessary to display for our use.


7 years agoSupport unparsing hexBinary
Steve Lawrence [Mon, 29 Jun 2015 19:01:57 +0000 (15:01 -0400)] 
Support unparsing hexBinary

- Add support for fixed and variable width (in bytes) hexBinary
- Remove unused hex binary length in bits parser. Hex binary does not
  allow length to be specified in bits.


7 years agoRemove scalatest as a dependency
Steve Lawrence [Tue, 11 Aug 2015 17:22:18 +0000 (13:22 -0400)] 
Remove scalatest as a dependency

Having two test infrastructures (junit and scalatest) caused confusion
in some cases. For example, if you ever tried to run sbt testOnly and
provide arguments, the arguments would be passed to both test
infrastructures. However, the arguments are specific to the
infrastructures, which the other didn't know about, which caused a
failure. So remove the scalatest dependency and convert those tests
(only passera) to junit.


7 years agoRemoved dependency on the ICU CharsetICU and related classes.
Mike Beckerle [Fri, 7 Aug 2015 16:39:19 +0000 (12:39 -0400)] 
Removed dependency on the ICU CharsetICU and related classes.

These were painfully requiring us to have a manually maintained lib
directory with two manually maintained jar files.

And anything that used Daffodil, also needed these.

So this dependency is now gone. We're still using ICU, just not the
parts that were in these unmanaged jars.

Turns out the only thing we had that was depending on these unmanaged
jars was some unit tests.

Interesting that two tests in daffodil-test changed behavior as a
result. They now insert two Unicode replacement characters instead of

This happened due to a change in UTF-8 decoder behavior. What it does is
different when it encounters broken data that starts with F0 - the utf-8
indicator byte for a 4-byte codepoint. It doesn't get an error unless
there is room in the output char buffer for 2 16-bit codepoints.

This required some adaptation in the fillCharBuffer call of the
dataInputStream layer.


7 years agoRemoved stateful singletons for LongConverters. These are now allocated
Mike Beckerle [Mon, 3 Aug 2015 19:27:29 +0000 (15:27 -0400)] 
Removed stateful singletons for LongConverters. These are now allocated
objects that are part of the ByteBufferDataInputStream state.

7 years agoModify test suites to use Runner object instead of DFDLTestSuite
Jessie Chab [Wed, 29 Jul 2015 03:25:31 +0000 (20:25 -0700)] 
Modify test suites to use Runner object instead of DFDLTestSuite
Remove duplicate tests; remove empty debug test suites


7 years agoAdded ability to specify validateTDMLFile, validateDFDLSchemas,
Mike Beckerle [Tue, 28 Jul 2015 19:56:57 +0000 (15:56 -0400)] 
Added ability to specify validateTDMLFile, validateDFDLSchemas,
compileAllTopLevel: Boolean.

7 years agoVerify fix for escaping block end character during unparse.
Jessie Chab [Mon, 27 Jul 2015 18:45:52 +0000 (11:45 -0700)] 
Verify fix for escaping block end character during unparse.
Move existing test from scala-new to scala and add more tests.


7 years agoEnabled parallel test execution, logBuffered=true to hopefully get
Mike Beckerle [Tue, 28 Jul 2015 13:37:52 +0000 (09:37 -0400)] 
Enabled parallel test execution, logBuffered=true to hopefully get
output from tests that is not terribly interleaved.

7 years agoVerified that the @AfterClass, even if put in the object, not the class,
Mike Beckerle [Fri, 24 Jul 2015 16:33:57 +0000 (12:33 -0400)] 
Verified that the @AfterClass, even if put in the object, not the class,
is run after all the tests are complete, and is not just run when the
jvm shuts down, but at completion of those tests.

Changed Runner to be thread-safe. Can now run tests in parallel (should
be able to)

Changed TDMLRunner to use a thread-safe collection for the compiled
schema cache.

Generic SchemaCache, unit tests of it. Recompiles if file has changed.

Synchronized block around compiler, so we're only running one compile of
any schema at a time. I don't know that this is necessary, but it is the
conservative thing to do, as we've not tried to make compilation thread


7 years agoRemoved bug reference after verifying fix
Jessie Chab [Mon, 27 Jul 2015 16:25:05 +0000 (09:25 -0700)] 
Removed bug reference after verifying fix


7 years agoRevert timeout of test to default 30 seconds. Bamboo automated test was
Mike Beckerle [Fri, 24 Jul 2015 20:52:43 +0000 (16:52 -0400)] 
Revert timeout of test to default 30 seconds. Bamboo automated test was
timing out at 5 seconds.

7 years agoThis bug is fixed. Test now passes.
Mike Beckerle [Fri, 24 Jul 2015 14:17:27 +0000 (10:17 -0400)] 
This bug is fixed. Test now passes.


7 years agoNew DataInputStream layer
Mike Beckerle [Tue, 16 Jun 2015 18:01:49 +0000 (14:01 -0400)] 
New DataInputStream layer

Moved DataLoc into its own file.

Changed lookingAt to call fillCharBuffer so that it is independent of
bitorder/byteorder issues.

Added branching for the big/little endian and msbFirst/lsbFirst cases to
the operations where it matters.

Changed Skip - was calling big int in one place - should have been using

Moved some code into BitOrder.scala that belongs there with other
bit-order related utility methods.

Changes to implement byteOrder little endian and bit order LSBFirst.

Moved things around so that daffodil-io module can be unit tested with
7-bit characters.

Basically, the 7-bit stuff all moves into the io module from the
daffodil-runtime1 module.

Changed factory to centralize all the mmap and buffer setup.

Implemented 7-bit character support, little-endian, least-significant
bit first, and unaligned access to everything.

Tests for unaligned byte buffers and char buffers, and iteration over
characters intersperced with skips.

Added unit tests for unaligned byte buffer fills, char buffer fills, and
7-bit char support.

Added getString to DataInputStream and OnStack char buffer pool.

Moved surrogate-pairs/4-byte-utf-8 character test to scala debug. Broken
right now, and low priority to fix relative to many other things.

Removed InStream trait and all related. Removed DFDLCharReader.

Added DataOutputStream symmetric with DataInputStream

Made limits tunable/settable in DataInputStream to allow for parsers to
provide element/parser-specific tunings.

Added regex test used while debugging. Missing '(?s)' (dot matches
newline) was causing regressions.

Fixed bug in USASCII-7-bit decoder not handling final fragment byte
properly when prior char ended at a byte boundary.

Removed Compatibility layer. Compiles without warnings.

Created DataOutputStream and BasicDataOutputStream.

Test BA000 in daffodil-test-ibm1 was failing. This is a corner case
where the escapeEscape character appears first before the escape-block
start. In this case it should be preserved, but is being removed.

schemas based on mil-std-2045 also work. Had to add (?s) to regex

Narrowed a bunch of catches that were catching Exception or Throwable
when they could be more specific.

Added bypass catch for scala.util.control.ControlThrowable, which is a
base for all Scala's built-in throwables that it uses to implement
things like non-local return statements.

Made pool (a mutable stack) be thread-local.

Add instrumentation for detecting access to shared state by multiple

Implemented ByteOrderChange, EncodingChange processors. So that we don't
have to set encoding and set byte order for every single term instance.

This fixes some formats like mil-std-2045 and related formats that make
extensive use of bit order and byte order. (Which ... a bug.... wasn't
being set in every situation where it was needed.)

Currently, it is very conservative about deciding when a ByteOrderChange
may occur or an EncodingChange may occur. If these are non-constant
expressions it is pessimistic and assumes a possible change.

DFDL-933, DFDL-1397

7 years agoMoved passera-unsigned into daffodil-lib.
Mike Beckerle [Tue, 30 Jun 2015 18:21:20 +0000 (14:21 -0400)] 
Moved passera-unsigned into daffodil-lib.

This library is just too small to be making/managing a separate jar for
it. Complicates packaging.

7 years agoEclipse projects - Remove excess "src" folders from build path that are
Mike Beckerle [Thu, 25 Jun 2015 21:00:37 +0000 (17:00 -0400)] 
Eclipse projects - Remove excess "src" folders from build path that are
not used by these projects.

Moved a debug test from main/scala-debug to test/scala-debug.

maintain eclipse project dependency on unparser subproject

7 years agoEnsure ElementRef always uses the ElementRuntimeData from the referenced element
Steve Lawrence [Tue, 21 Jul 2015 16:25:04 +0000 (12:25 -0400)] 
Ensure ElementRef always uses the ElementRuntimeData from the referenced element

The runtimeData of an element and an element reference are virtually the
same, except for things like schema location. However, these runtime
data are used to assert that the correct events are received during
unparse. If an event uses an element and the parser uses a reference, or
vice cersa, the assertions fail because the expected erd doesn't exactly
match the actual. So modify ElementRef to always get the runtime data
from the referenced element to ensure these assertions pass.


7 years agoAdd tests to verify that PUA infoset characters
Jessie Chab [Tue, 21 Jul 2015 11:56:58 +0000 (04:56 -0700)] 
Add tests to verify that PUA infoset characters
are mapped back to their original value
when unparsing


7 years agoAdd tests to verify that scalar non-defaultable nillable
Jessie Chab [Thu, 16 Jul 2015 15:35:32 +0000 (08:35 -0700)] 
Add tests to verify that scalar non-defaultable nillable
simple elements unparse properly


7 years agoVerify unit tests and move from scala-new to scala
Jessie Chab [Fri, 3 Jul 2015 11:55:01 +0000 (04:55 -0700)] 
Verify unit tests and move from scala-new to scala


7 years agoAdding tests for unparse with textNumberPattern
Beth Finnegan [Fri, 3 Jul 2015 12:17:30 +0000 (08:17 -0400)] 
Adding tests for unparse with textNumberPattern


7 years agoUpdating CLI listing test to include added test
Beth Finnegan [Thu, 2 Jul 2015 14:43:22 +0000 (10:43 -0400)] 
Updating CLI listing test to include added test


7 years agoAdding test to check encoding in error messages
Beth Finnegan [Thu, 25 Jun 2015 12:45:56 +0000 (08:45 -0400)] 
Adding test to check encoding in error messages


7 years agoMoving dev-created tests from scala-new to scala,
Jessie Chab [Tue, 30 Jun 2015 13:20:01 +0000 (06:20 -0700)] 
Moving dev-created tests from scala-new to scala,
adding new tests to verify elementFormDefault property,
including automated CLI tests.


7 years agoAdding tests for ignoring assertions and discriminators with unparse
Beth Finnegan [Tue, 30 Jun 2015 21:54:56 +0000 (17:54 -0400)] 
Adding tests for ignoring assertions and discriminators with unparse


7 years agoFix issues with determining identifying branches
Steve Lawrence [Tue, 30 Jun 2015 17:44:37 +0000 (13:44 -0400)] 
Fix issues with determining identifying branches

- If a branch of a choice is a model group and that model group has
  required elements, then we should not even attempt to find an end
  event identifier. One of the required elements must show up in
  infoset, and so it is not possible for an end event to be a idenfiying
  event for the branch. If it doesn't have required elements, then we do
  the thing where we look at parents terms looking for and element or a
  model group that has next required elements.
- There was an error in calculating couldBeFirstChildTerm and
  couldBeNextSiblingTerm. When trying to figure out if and element must
  appear in the infoset or not, we used the logic if (isOptional ||
  !isRequiredArray). For a scalar element (minOccurs == maxOccurs == 1)
  this condition could actually return true. This is because
  isRequiredArray returns false for non-arrays. This would end up
  treating an element in a sequence as if it was not mandatory,
  resulting in too many elements being considered as couldBeFirstChild
  or couldBeNextSibling. This didn't really change the behavior of
  anything, but would have potentially allowed invalid infosets.

DFDL-1385, DFDL-1313

7 years agoComment out test until it can be fixed
Steve Lawrence [Tue, 30 Jun 2015 16:51:52 +0000 (12:51 -0400)] 
Comment out test until it can be fixed

DFDL-1385 is the bug to fix this.

7 years agoSupport end events for determine unparse choice branches
Steve Lawrence [Thu, 25 Jun 2015 19:02:49 +0000 (15:02 -0400)] 
Support end events for determine unparse choice branches

In some cases, it is an end event that determines which choice branch to
unparse. For example:

  <element name="a">
      <element name="a">
      <sequence />

In this case, the infoset could look like:


and seeing the start event for "a" would mean we choose the "a" branch of
the choice. However, the infoset could also look like:


and seeing the end event for "a" (note a different "a", but the same
qname) would mean we choose the empty sequence branch of the choice.

Currently we only match against start events, and we would get an error
when trying to find identifying elements for this empty sequence.

This change makes it so that we also find identifying elements
for a choice that are end events, and modifies the choice unparser to
match both start and end events.


7 years agoMoving working unparse choice test to scala
Beth Finnegan [Thu, 25 Jun 2015 13:11:10 +0000 (09:11 -0400)] 
Moving working unparse choice test to scala


7 years agoFix unparse padding test based on recent changes to the spec
Jessie Chab [Thu, 25 Jun 2015 14:15:09 +0000 (07:15 -0700)] 
Fix unparse padding test based on recent changes to the spec
Fix name of test so it is no longer misleading


7 years agoMoving working unparse test to scala
Beth Finnegan [Wed, 24 Jun 2015 21:01:44 +0000 (17:01 -0400)] 
Moving working unparse test to scala


7 years agoAdd test to demonstrate that errors occurring in the middle
Jessie Chab [Wed, 24 Jun 2015 15:06:31 +0000 (08:06 -0700)] 
Add test to demonstrate that errors occurring in the middle
of a roundTrip unparse/parse test are propagated to the user.


7 years agoUncommenting test for trace mode in CLI unparsing
Beth Finnegan [Wed, 24 Jun 2015 18:51:31 +0000 (14:51 -0400)] 
Uncommenting test for trace mode in CLI unparsing


7 years agoAdd test to demonstrate poor diagnostic message
Jessie Chab [Wed, 24 Jun 2015 14:37:24 +0000 (07:37 -0700)] 
Add test to demonstrate poor diagnostic message


7 years agoDisable asserts and discriminators during unparse
Steve Lawrence [Tue, 23 Jun 2015 14:50:59 +0000 (10:50 -0400)] 
Disable asserts and discriminators during unparse

Asserts and discriminators are not evaulated during unparsing. So set
the associate primitives to have forWhat = ForParsing. Additionally,
modify the Prod gram to return a NadaParser/Unparser if its gram is not
ForParsing/Unparsing, in addition to if the Prod itself is not


7 years agoAdding test for InitiatedContent unparser not implemented
Beth Finnegan [Tue, 23 Jun 2015 21:22:43 +0000 (17:22 -0400)] 
Adding test for InitiatedContent unparser not implemented


7 years agoFix tests to specifcy that the functions throw a generic Exception
Steve Lawrence [Mon, 22 Jun 2015 13:28:12 +0000 (09:28 -0400)] 
Fix tests to specifcy that the functions throw a generic Exception

Fixes errors where java complains that tests aren't catching all
exceptions (specifically, InvalidParserException from .reload()). These
tests aren't testing that part of reload, so just let the exceptions
bubble up to the test runner to catch and cause a failure.

7 years agoUpdate java/scala docs
Steve Lawrence [Fri, 19 Jun 2015 13:13:52 +0000 (09:13 -0400)] 
Update java/scala docs

- Update the genjavadoc plugin to 0.9, which adds better support for
  java 1.8
- Disable doclint, which adds checks that the genjavadoc tool doesn't
  follow. For example, if the @throws tag is used in the javadoc, then
  any exceptions that aren't RuntimeExceptions must be included in the
  throws java thing. But the genjavadoc does not add those.
- Add missing @param and @return javadoc tag to remove warnings
- Fix link to new location of setDebugger
- Also require that the build system is Java 1.8


7 years agoUpdating expected output and moving tests to scala
Beth Finnegan [Fri, 19 Jun 2015 09:19:57 +0000 (05:19 -0400)] 
Updating expected output and moving tests to scala


7 years agoAdding tests for unparse with textNumberPattern
Beth Finnegan [Fri, 19 Jun 2015 08:49:24 +0000 (04:49 -0400)] 
Adding tests for unparse with textNumberPattern


7 years agoCommenting out failing CLI test
Beth Finnegan [Wed, 17 Jun 2015 22:25:05 +0000 (18:25 -0400)] 
Commenting out failing CLI test


7 years agoCLI tests now run under eclipse.
Mike Beckerle [Tue, 16 Jun 2015 14:48:59 +0000 (10:48 -0400)] 
CLI tests now run under eclipse.


7 years agoTrace and Interactive Debug for Unparsing.
Mike Beckerle [Thu, 14 May 2015 19:05:15 +0000 (15:05 -0400)] 
Trace and Interactive Debug for Unparsing.

Also fixed charset used when presenting data in debugger.

New DataInputStream low-level I/O API for parser.

First cut at an implementation that just buffers the data in
a single ByteBuffer.

Added third-party-source/passera-unsigned library to the repository.
This library is source-code only. No place for sbt to just grab the jar.

Enhanced ULong to always print as a positive number, and added toBigInt

Not yet implemented: support for little-endian byte order,
least-significant-bit-first bit order, and non-8-bit code unit

Added Dump utility. Makes richer emacs-style text and hex data dumps and
uses the correct character set encoding if there is one.

New events architecture. Generalizes debugger callbacks to event

Debugger is one subscriber to events.

Alternate outputs like JSON could also be subscribers to events, though
that will need some additional event methods such as
'resolveDiscriminator' etc.

Added trace method to DFDLTestSuite. Idiom for a trace is now

Caveats/Todo: Not quite all hooked together. We have the old
DFDLCharBuffer and
InStream in the code, as well as the new DataInputStream.

Currently a bad hack is in here temporarily. Data dumps come from a
DataInputStream which is a whole second copy of the input data. This
will go away once we cut over to the DataInputStream and get rid or
DFDLByteReader and all its layers.

DFDL-1265, DFDL-933, DFDL-378, DFDL-1264

7 years agoAdd tests of decoder that detect Java 7 decoder bug, and require Java 8.
Mike Beckerle [Mon, 1 Jun 2015 20:51:53 +0000 (16:51 -0400)] 
Add tests of decoder that detect Java 7 decoder bug, and require Java 8.

DFDL-1357, DFDL-1039

7 years agoAdding test for unparsing with escape chars
Beth Finnegan [Fri, 12 Jun 2015 19:15:31 +0000 (15:15 -0400)] 
Adding test for unparsing with escape chars


7 years agoMoving working encoding test from new to scala
Beth Finnegan [Thu, 11 Jun 2015 19:21:27 +0000 (15:21 -0400)] 
Moving working encoding test from new to scala


7 years agoRemap PUA characters to original parsed data
Steve Lawrence [Thu, 11 Jun 2015 15:15:08 +0000 (11:15 -0400)] 
Remap PUA characters to original parsed data

When parsing data and writing to XML, we map characters that are illegal
in XML to PUA. When reading this XML back in for unparse, we need to map
PUA characters back to the original values. This adds that function, and
refactors the remap function to reuse the string traversal code.

This also adds conversion for INF, -INF, and NaN for double and float
types to the PrimTypes that was added in InfosetImpl in commit


7 years agoRemove AltComp for scalarNonDefaultableSimpleContent
Steve Lawrence [Wed, 10 Jun 2015 18:36:43 +0000 (14:36 -0400)] 
Remove AltComp for scalarNonDefaultableSimpleContent

If it is nillable (nilOrValue) then it uses a nil/parsedValue
combinator. If it is not nillable (nonNilNonEmptyParsedValue) then it
just uses the parsedValue.


7 years agoAdding test for inputValueCalc on a choice branch
Beth Finnegan [Wed, 10 Jun 2015 21:00:32 +0000 (17:00 -0400)] 
Adding test for inputValueCalc on a choice branch


7 years agoUpdating tests for optional choice branch
Beth Finnegan [Wed, 10 Jun 2015 17:33:59 +0000 (13:33 -0400)] 
Updating tests for optional choice branch


7 years agoAdd support for unparsing text numbers
Steve Lawrence [Tue, 9 Jun 2015 20:00:20 +0000 (16:00 -0400)] 
Add support for unparsing text numbers

- Add new combinator which so to reverse order of conversion and
  parsing/unparsing value. With unparse, conversion must happen first.
  This combinator is ignored in the interactive debugger, as it really
  isn't interesting. It is essentially a SeqCombinator, but the order
  is reversed for unparse.
- Creates new unparser that formats the number appropriately, taking
  into account zero representation
- Adds variables containing XML infinity, negative infinity, and NaN
  representations to remove duplicate magic strings
- Deleted old unparser code that was commented out and was mostly
- Fixed bug in TDML runner where round tripping would break if the
  length changed
- Marked most tests directly deal with number conversion/formatting as
  roundTrip="true". A handful of tests are not round trippable due to
  precision loss when parsing the unparsed data, meaning the two parsed
  infosets aren't exactly the same. Those tests are marked as
  roundTrip="false". Tests that failed do to other reasons (e.g.
  unimplemented unparsers) were left as is.


7 years agoAdding CLI tests for invalid schema path
Beth Finnegan [Fri, 5 Jun 2015 19:29:56 +0000 (15:29 -0400)] 
Adding CLI tests for invalid schema path


7 years agoSDE now occurs when branch of a choice is optional.
Mike Beckerle [Thu, 28 May 2015 22:07:31 +0000 (18:07 -0400)] 
SDE now occurs when branch of a choice is optional.
SDE now occurs when a branch of a choice has dfdl:inputValueCalc

Some tests adjusted to make sure this error doesn't occur (was
undetected before, but for those tests it did not matter.

DFDL-1355, DFDL-1358, DFDL-726

7 years agoMerge branch '1.1.0' into 1.2.0
Beth Finnegan [Tue, 2 Jun 2015 17:14:38 +0000 (13:14 -0400)] 
Merge branch '1.1.0' into 1.2.0

7 years agoFix line endings with dos2unix v1.1.0
Beth Finnegan [Tue, 2 Jun 2015 17:10:31 +0000 (13:10 -0400)] 
Fix line endings with dos2unix

7 years agoAdding tests for StatementElementUnparser
Beth Finnegan [Tue, 2 Jun 2015 17:08:28 +0000 (13:08 -0400)] 
Adding tests for StatementElementUnparser


7 years agoRelax restrictions on unbounded rep unparser
Steve Lawrence [Mon, 25 May 2015 21:29:03 +0000 (17:29 -0400)] 
Relax restrictions on unbounded rep unparser

The RepUnboundedUnparser asserts that the current infoset node when
starting repetitions is a DIArray. However, this isn't always the case.
For example, if we have an array with minOccurs=1 and
maxOccurs=unbounded, then we will have a RepExactlyN unparser (with N =
1) followed by a RepUnbounded unparser. This means that when we get to
the RepUnbounded parser, the current infoset node will be one of the
elements in the array (i.e. DIComplex or DISimple) that was retrieved by
the RepExactlyN unparser. As such, the currentInfosetNode is potentially
meaningless in the RepUnboundedparser as far as asserting its in an
array. So remove these asserts.

This shouldn't affect anything, since the parent/child ElementKindParsers should
properly assert that the correct infoset elements/events are retrieved.


7 years agoMerge branch '1.1.0' into 1.2.0
Jessie Chab [Sat, 30 May 2015 13:02:22 +0000 (06:02 -0700)] 
Merge branch '1.1.0' into 1.2.0

7 years agoFix up tests that were using an optional choice branch which is not
Jessie Chab [Sat, 30 May 2015 12:56:10 +0000 (05:56 -0700)] 
Fix up tests that were using an optional choice branch which is not
allowed. Add test to demonstrate that the Schema Definition Error is not
raised in this scenario


7 years agoMerge branch '1.1.0' into 1.2.0
Beth Finnegan [Fri, 29 May 2015 20:02:03 +0000 (16:02 -0400)] 
Merge branch '1.1.0' into 1.2.0

7 years agoMoving working test and adding tests for StatementElementUnparser
Beth Finnegan [Thu, 28 May 2015 21:44:11 +0000 (17:44 -0400)] 
Moving working test and adding tests for StatementElementUnparser


7 years agoDetects if a delimiter is an escChar, if so escapes it properly.
Taylor Wise [Fri, 22 May 2015 16:11:17 +0000 (12:11 -0400)] 
Detects if a delimiter is an escChar, if so escapes it properly.

Moves now working test to scala-new.


7 years agoMerge branch '1.1.0' into 1.2.0
Beth Finnegan [Thu, 28 May 2015 22:14:06 +0000 (18:14 -0400)] 
Merge branch '1.1.0' into 1.2.0

7 years agoAdding Mike's test for infoset events with unparse
Beth Finnegan [Thu, 28 May 2015 22:08:58 +0000 (18:08 -0400)] 
Adding Mike's test for infoset events with unparse


7 years agoMerge branch '1.1.0' into 1.2.0
Jessie Chab [Thu, 28 May 2015 14:58:48 +0000 (07:58 -0700)] 
Merge branch '1.1.0' into 1.2.0

7 years agoAdd test to demonstrate issue where second choice branch
Jessie Chab [Thu, 28 May 2015 14:55:22 +0000 (07:55 -0700)] 
Add test to demonstrate issue where second choice branch
cannot be selected


7 years agoChange line endings to Unix-style
Jessie Chab [Thu, 28 May 2015 13:36:04 +0000 (06:36 -0700)] 
Change line endings to Unix-style

7 years agoMerge branch '1.1.0' into 1.2.0
Beth Finnegan [Wed, 27 May 2015 19:11:58 +0000 (15:11 -0400)] 
Merge branch '1.1.0' into 1.2.0

7 years agoAdding automated performance tests for unparsing with CLI
Beth Finnegan [Wed, 27 May 2015 19:05:41 +0000 (15:05 -0400)] 
Adding automated performance tests for unparsing with CLI


7 years agoMerge branch '1.1.0' into 1.2.0
Jessie Chab [Mon, 25 May 2015 14:09:15 +0000 (07:09 -0700)] 
Merge branch '1.1.0' into 1.2.0

7 years agoAdd unparsing tests for delimiter properties,
Jessie Chab [Mon, 25 May 2015 14:02:55 +0000 (07:02 -0700)] 
Add unparsing tests for delimiter properties,
specifically using lists as initiators, separators, and

7 years agoMerge branch '1.1.0' into 1.2.0
Jessie Chab [Mon, 25 May 2015 11:27:33 +0000 (04:27 -0700)] 
Merge branch '1.1.0' into 1.2.0

7 years agoConvert Windows-style line endings to Unix
Jessie Chab [Mon, 25 May 2015 11:22:19 +0000 (04:22 -0700)] 
Convert Windows-style line endings to Unix

7 years agoAdd test to demonstrate that a nilValue of %WSP*; is not
Jessie Chab [Mon, 25 May 2015 11:21:34 +0000 (04:21 -0700)] 
Add test to demonstrate that a nilValue of %WSP*; is not
treating the empty string as nilled.


7 years agoMerge branch '1.1.0' into 1.2.0
Beth Finnegan [Fri, 22 May 2015 18:21:12 +0000 (14:21 -0400)] 
Merge branch '1.1.0' into 1.2.0

7 years agoAdding test for CLI parsing with large infoset
Beth Finnegan [Fri, 22 May 2015 18:01:07 +0000 (14:01 -0400)] 
Adding test for CLI parsing with large infoset