What's fixed
What's fixed in OmniMark 10.1.0
      
    
What's fixed in the OmniMark 10.1.0 compiler
      
        
-   The warning emitted when a shelf was unused was unclear.
          
 -   The compiler was incorrectly accepting an expression of type 
stream where one of type markup sink was expected. This is contrary to the specification, and is
            no longer allowed.
          
 -   A 
signal to action inside a catch clause could cause
            incorrect code generation, possibly leading to an internal error at run-time.
          
 -   A spurious warning could be emitted when using an alias to output an
            item of the 
specified attributes pseudo-shelf.
          
 -   A specific ancestry selector was being accepted on the left-hand
            side of an element test. This is contrary to the specification, and allows for misleading programs. This is
            no longer permitted.
          
 -   A spurious warning was output if the 
key of operator was the
            sole operation applied to a shelf that had been assigned a value.
          
 -   An incorrect error message was output if 
with
              document-element appeared out of sequence in a do sgml-parse or do xml-parse action.
          
 -   An incomplete error message was emitted when an invalid character
            class declaration was encountered.
          
 -   A segfault was triggered at run time when calling a shelf-class function with a coroutine class argument.
          
 -   New style indexers were being incorrectly rejected in function call
            arguments when the argument was shelf-class (e.g., 
read-only).
          
 -   The OmniMark compiler would accept a 
dynamic function definition whose export status did not match a previous elsewhere definition of
            the same function.
          
 -   A set of circular extended record declarations could incorrectly
            cause compiler error report.
          
 -   OmniMark did not always detect at compile time and report the error that a record type requires infinite initialization depth.
          
 -   An incomplete error message was emitted when a 
string set
            was left unclosed.
          
 -   An internal error was triggered at compile-time when an instance of
            an 
opaque type occurred in a branch of the conditional operator, in a context where a string
              source or markup source was expected.
          
 -   An internal error could be triggered at run-time if a 
string
              source function call with a shelf-class argument (e.g., read-only) was passed as a value
              string source argument to an outer function call, and the argument of the inner function call was an
            alias from do select or do select-type.
          
 -   An internal error was triggered at compile-time if an 
overloaded function was defined on a required record type.
          
 -   A 
dynamic function could be defined both with and
            without an overloaded qualifier. This is not well-defined, and is no longer allowed.
          
 -   An internal error was triggered at compile-time if a value of type
            
specified-attribute was compared to a value of type integer.
          
 -   Compile-time error recovery has been improved when a type name was
            encountered in an unexpected context.
          
 -   A segfault could occur if a run-time error occurred while accessing
            the 
attributes in the guard of a rule.
          
 -   Using the same alias twice in the header of a 
repeat over
            loop could crash the compiler if one of the aliased shelves was a shelf literal.
          
 -   Duplicate shelf names were being allowed in the header of a 
repeat over. This is contrary to the specification. This had been an error in versions of OmniMark
            previous to 10.0.0. The error has been re-instated.
          
 -   An internal error could be triggered at compile-time if 
new
            was applied to an invalid value in the header of a using scope.
          
 -   In some contexts, a shelf-class function call
            could lead to a segmentation fault at compile-time.
          
 -   A 
repeat over of a shelf with a fixed-size of zero could
            lead to a cascade of incorrect compile-time errors.
          
 -   OmniMark compiler was allowing 
#current-input in process rules, even though it was not attached and bound to fail at run-time.
          
 -   In certain situations, a segmentation fault could occur at run-time
            when a shelf literal or shelf-class function appeared in a rule
            guard.
          
 -   The compiler was incorrectly accepting an ELEMENT qualifier on
            DOCTYPE, in certain contexts. This is contrary to the specification, and is no longer accepted.
          
 -   Attempting to apply a shelf test (e.g., 
is specified) to the
            result of a function call could trigger an internal error at compile-time.
          
 -   An internal error could be triggered at compile-time if the 
is keyed test was applied to the attributes shelf.
          
 -   A segfault occurred at compile-time if an syntactically-invalid
            indexer was used with 
attributes
          
 -   A shelf-class function call was not being
            handled properly in the context of a 
stream test.
          
 -   Casts to built-in types like 
markup-element-event inside a
            module that didn't import other modules would cause a compile-time internal error.
        
 
    
What's fixed in the OmniMark 10.1.0 runtime
      
        
-   Run-time error messages that refer to sink coroutines now
            correctly report their return type.
          
 -   The 
sgml-in and sgml-out actions were erroneously
            affecting the validating XML parser as well. 
          
 -   A throw from an 
external-text-entity rule triggered by
            do markup-parse could lead to an invalid memory access.
          
 -   If 
#current-dtd and #doctype are set to
            incompatible values, and the subsequent program error thrown by #content was caught, it was possible
            to trigger an internal error or incorrect behaviour.
          
 -   A pattern function that ends without returning a value could
            trigger an internal error after the legitimate program error.
          
 -   Capturing 
#current-markup-event on an element with a
            namespace-binding attribute was leaking memory.
          
 -   Accessing 
attributes or specified attributes of
            an element created by create-element-event could trigger an internal error or a segmentation fault
            at run-time.
          
 -   When reporting long file paths in error messages, OmniMark now
            inserts an ellipsis to better indicate that the file path is truncated. It also removes the middle of the
            overlong file path instead of its end, which is more informative.
          
 -   An internal error could result if the target coroutine of 
signal throw performed a throw back to the original coroutine through intermediates.
          
 -   A long processing instruction text could cause a segmentation
            fault when consumed through 
#content.
          
 -   A throw from a markup rule triggered by 
do markup-parse
              #current-input inside a markup sink function could cause a memory leak or a segmentation fault.
          
 -   Applying 
do markup-parse to a markup source
            containing external text entity references in some circumstances could lead to a segmentation fault.
          
 -   Consumption of 
#content would lead to a segmentation
            fault if it included the end of an external text entity, but not its beginning.
          
 -   The 
repeat over attributes action could segfault on
            an element that has both declared but unspecified, and undeclared but specified attributes.
          
 -   An element event with an empty element name, created using 
create-element-event and create-element-declaration, could cause a segmentation fault when
            processed by do markup-parse.
          
 -   Entity-matching translate rules could cause memory corruption and
            segmentation faults on large data content blocks.
          
 -   The indexing mode was not being preserved when the 
attributes shelf was passed to a function as a read-only argument.
          
 -   Consuming 
#content twice inside a do markup-parse
            scope lead to a segmentation fault.
          
 -   An element event returned by 
create-element-event did not
            have xmlns-name assigned even if its attributes specified one.
          
 -   Multiple occurrences of the same attribute name in an ATTLIST were
            reported as markup errors both in SGML and XML. The behaviour of the validating XML parser has been changed
            to a markup warning, in conformance with the XML specification, and only the first attribute declaration is
            kept.
          
 -   An empty 
ATTLIST declaration was reported as a markup
            error in validating XML parser, even though the XML specification allows it.
          
 -   The well-formed XML parser used to issue markup errors on characters
            like backspace, which are discouraged but allowed by the XML specification. This error has been replaced by
            a markup warning.
          
 -   A malformed XML processing instruction could cause an internal error in
            OmniMark's well-formed XML parser, abruptly terminating the current parse.
          
 -   Applying 
do markup-parse to a markup source function
            with an argument that was another string source function followed by drop could cause an
            internal error.
          
 -   An 
external-text-entity #document rule could in some rare
            circumstances cause a segmentation fault in the interpreter during the loading time.
          
 -   Library file path command-line parameters starting with a
            
// or /./ character sequence could trigger a memory corruption or segmentation
            fault.
        
 
    
What's fixed in the OmniMark 10.1.0 libraries
      
        
-   The 
execute function in the omprocess
            library would not always allow the invoked process to consume all of its standard input, when used on
            Windows platforms.
          
 -   Function 
uri.canonical was properly working only on local URIs,
            with no server.
          
 -   Function 
uri.canonical was stripping the double-slash sequence
            into a single slash even before the path segments. The result was an incorrect URI.
          
 -   Function 
uri.canonical was normalizing the fragment portion of
            the URI. The function now conforms to the standard and leaves the fragment unmodified.
          
 -   The omxerces library could cause a
            segmentation fault if given an XML schema with a large 
maxOccurs integer attribute value.
          
 -   The omxerces library was not firing the
            
external-text-entity rules for entities whose system identifier was an empty string.
          
 -   The omxerces library could cause a
            segmentation fault when applied to a malformed XML with a schema declaration.
        
 
    
What's fixed in the OmniMark 10.1.0 Studio for Eclipse
      
        
-   OmniMark Studio now shows more detailed information about
            markup event values.
        
 
    
What's fixed in OmniMark 10.0.0
      
    
What's fixed in the OmniMark 10.0.0 compiler
      
        
-   
A warning is now emitted if a 
domain-bound global is never saved. 
 -   In some circumstances, the line number information given
for a compile-time error that followed the 
export keyword was
incorrect.
 -   The types of the branches of the conditional operator were
not being unified if the closest common supertype was not exported from the
module exporting the child types.
 -   The types of 
#current-input and #current-output were not being tracked properly, allowing invalid programs to
compile. This is contrary to the specification, and has been
fixed.
 -   A 
record type could not be elsewhered
after it had been fully declared.
 -   Using 
key of on a single-item unkeyed record field could lead to a segmentation fault at
run-time.
 -   In some circumstances, the compiler rejected a built-in
stream in the header of using output as.
 -   
The 
value-start and value-end positional patterns were not
allowed in processing-instruction rule headers.
 -   
Certain record type hierarchies could cause live record instances to be
garbage-collected.
 -   An incorrect error message was emitted by the compiler if
with current sgml-dtd was used with subdocument in do
sgml-parse.
 -   An internal error was triggered at compile-time if a
pretentious module referred to a predefined shelf.
 -   The compiler accepted multiple occurrences of the keyword
new where only one is allowed.
 -   The compiler accepted an 
optional argument in the
first position for a dynamic or overriding function. This is
not well-defined and is now rejected.
 -   The compiler allowed a constant item indexer on a shelf
literal to exceed the size of the shelf literal.
 -   The compiler accepted invalid type variances on the return
types and arguments of 
dynamic and overriding functions. This
is contrary to the specification, and is no longer
allowed.
 -   The error message emitted when attempting to 
save
a shelf literal was misleading.
 -   The error message emitted when applying 
save to a
built-in shelf was incorrect.
 -   An internal error was triggered at compile-time if a 
function imported from a module conflicted with a require.
 -   The successful compilation of a call to an overloaded
function in a pattern context could depend on the order of the definitions of
the overloadings.
 -   The compiler would accept 
copy from a fixed-size
shelf to a variable-size shelf, even when the former was larger than the
latter. This cannot succeed at run-time and must be
disallowed.
 -   Two-token keywords ending in 
of, as for example
length of, were being rejected if they appeared as a function argument
and the following function argument was heralded by the second token of the
two-token keyword.
 -   The parent type in a 
record declaration could
differ from that given in the elsewhere declaration. This is contrary
to the specification and is no longer allowed.
 -   
using input as "%c" was not always tracking the
use of %c, which could lead to correct programs not
compiling.
 -   An 
overloaded switch function with a
non-parenthesized argument list was not being accepted when compiling patterns
for take, drop, and matches.
 -   
The error messages on the uses of the 
previous is test in various
disallowed contexts were always reporting the content keyword as
being disallowed.
        
 
    
What's fixed in the OmniMark 10.0.0 runtime
      
        
-   
Existence of 
markup-comment and marked-section rules could
affect the boundaries of translate rules' pattern matching across the
module boundaries. This is now restricted only to the rules within the same
module.
 -   
The 
remove action could fail when applied to a shelf item created by
using new inside the scope.
 -   
The 
content-start and content-end patterns in translate rules
were not firing only at the beginning and end of element content, as they were
supposed to.
 -   
Interrupting consumption of 
#content of an element with an XML
namespace change could trigger an internal error.
 -   The validating XML parser was not treating numeric
character entities entered in hexadecimal as it was treating numeric character
entities entered decimal. These two should be treated
equivalently.
 -   A guarded 
new could fail when the maximum shelf
size was reached, even when no new item was being added to the
shelf.
 -   
Dynamic element name tests could fail when applied to element events created by
do markup-parse.
 -   
A markup event explicitly signalled from a pattern function through an
intermediate coroutine and to a markup parser could be parsed before preceding
data content.
 -   In certain circumstances, a markup error could mislead
OmniMark into thinking a 
stream was opened, when in fact it was
closed.
 -   
The name of an SGML external entity captured by 
#content was sometimes
incorrectly reported as a part of the SGML declaration.
 -   
The -FTRACE command-line option could cause incorrect program behaviour in
functions called from a 
markup-error rule.
 -   
Catching a throw from an 
external-text-entity rule and then
continuing to feed the parser could cause a segmentation fault.
 -   
A 
do markup-parse command applied to a join of
xerces.xml external parser and another markup source could cause a
segmentation fault at run-time.
 -   
Consumption of a 
markup source after catching a throw could
erroneously lead to a markup event being thrown in a wrong coroutine.
 -   
The 
previous is test always failed on the top-level element, and
its occurrence was always one.
 -   
The dynamic element name tests could fail on element events that were not
generated by a the currently active parse.
 -   
The 
previous is test could return random results inside a do
markup-parse consuming events from parses that were not active any more.
 -   A 
throw from an external string
source function was not being propagated if the function was called in the
setup of a pattern matching environment.
        
 
    
What's fixed in the OmniMark 10.0.0 libraries
      
        
-   
The function 
uri.parse did not accept a URI that contained nothing but
the URI fragment.
 -   
If a 
markup-buffer was written to through multiple sinks, the order of
the written string data was determined by the order in which the sinks were
closed. This could lead to unexpected results, so this has been changed so that
the data order depends on the order in which the sinks are open.
 -   
Compiling a RELAX NG schema with the RELAX NG collection elements in a
namespace other than the default one caused an internal error.
 -   
The omxmlwrite library was producing well-formed XML even when its
input markup stream was malformed.
 -   
Certain circular references in a schema could cause an internal error in 
relaxng.compile-schema.
        
 
    
What's fixed in the OmniMark 10.0.0 grammar
      
        
-   The grammar production for a user-defined name character
referred to the deprecated 
letters declaration.
 -   The production for a name referred to data
characters.
 -   
field references had been omitted from the
grammar.