What's fixed
What's fixed in OmniMark 10.1.2
      
    
What's fixed in the OmniMark 10.1.2 compiler
      
        
-   An internal error was triggered at run-time if a program contained an elsewheredefinition of anoverridingfunction, without providing an implementation of the function. This is contrary to the specification. A compile-time error is now triggered.
-   A space at the beginning of the description field of a licence key request would cause a segmentation fault. This could prevent users from requesting their authorization key.
          
-   The -gc-thresholdcommand-line argument was limited to 32-bit values. This is inappropriate on 64-bit platforms.
-   Authorization could be very slow on Windows platforms.
          
-   Using a newline character in an insertion-breakdeclaration would lead to an illegible error message.
-   The deprecated =form of the pattern capture operator was being given precedence in expression contexts such asdropandtake. This prevented correct programs from compiling.
-   An internal error was triggered at compile-time if a parenthesized expression was used where a shelf reference was required.
          
-   The warning reported when deprecated indexer syntax was encountered recommended replacing it with different, equally-deprecated syntax.
          
-   The specified attributesshelf was not allowed in aprocessrule even when applied to an element event.
-   A warning is now emitted if outputis used at the top-level of amarkup sinkfunction, since this can fail at run-time.
-   An internal error was triggered at compile-time if a shelf-class function was incorrectly defined without a return type.
          
-   An internal error was triggered at compile-time if a pattern variable and a shelf of the same name appeared in the same pattern.
          
-   A do markup-parseblock nested inside either ado sgml-parseordo xml-parsewould corrupt the type of#current-dtd.
-   The compiler would incorrectly reject a module that exported an overloadeddynamicfunctionon one type, without also exporting any otheroverloadeddynamicfunctions on other unrelated types.
-   Cascading comparisons did not evaluate correctly if one of the comparisons was !=and the type of the arguments wasstringorstream. This could cause programs to behave incorrectly.
-   An internal error could be triggered at compile-time when returning an expression from a shelf-class function.
          
-   An internal error was triggered at compile-time if the name ofoperator was applied to thecurrent elementspseudo-shelf.
-   The compiler incorrectly insisted that a shelf literal on the right-hand side of copyorcopy-clearhad to have its type disambiguated. The type context of the right-hand side ofcopyorcopy-clearis now determined by the left-hand side of the action.
-   An internal error was triggered at compile-time if the is specifiedtest was applied to theattributesshelf reference.
-   The compiler incorrectly accepted a parenthesized function definition with a single optional argument. This is contrary to the specification and is now disallowed.
          
-   An internal error was triggered at compile-time if an element set was used in the doctype istest.
-   An internal error was triggered by the compiler if has keywas applied to an element qualifier in an element test. This is now a syntax error.
What's fixed in the OmniMark 10.1.2 runtime
      
        
-   An uncaught program error in a sink coroutine could result in an internal error.
            
          
-   The OmniMark garbage collector could cause a segmentation fault after a re-allocation of a large block of memory.
            
          
-   Use of #contentdoes not trigger the Attempting to process content twice in one rule error even if it consumes the entire rest of the content.
-   An OmniMark program with heavy memory use and using throws through a scope with savedeclarations could, on rare occasions, produce corrupted outputs.
-   Large attribute values provided incrementally could lead to an inordinate amount of memory being allocated.
            
          
-   Preserving a reference to an attribute of an unreachable markup-element-eventcould cause an internal error or memory corruption.
-   The output #contentaction could be used afteroutput %cwith no error. This is now flagged as a run-time error.
-   A markup error inside a comment would end the comment and cause the remainder of the comment text to spill after the comment.
            
          
-   Referencing the #contentsource twice in the same markup rule could cause a segmentation fault during the execution.
-   Cloning with create-element-declarationan element declaration produced by parsing a DTD could lead to a segmentation fault at run-time.
-   The -gc-keep-memorycommand-line option could cause a segmentation fault at the end of program execution.
-   The validating XML parser would reject an element declaration when the content model was expressed using a parameter entity, and the parameter entity did not consist of at least one token, or started or ended with a connector. Although this is not an error in XML, its use is discouraged. A warning is now emitted instead of an error.
          
-   There was a typo in the markup error emitted when duplicate token values appeared in an attribute declaration.
        
What's fixed in the OmniMark 10.1.2 libraries
      
        
-   A segmentation fault could be triggered in the OMFTP library when connecting to certain FTP servers.
          
-   The OMHTTP library was not using the correct syntax for the acceptheader in HTTP requests.
-   The ommail function MailInBoxGetMessagewas occasionally ignoring the lines of the message body that started with the '+' character.
-   The fork operator &can now be applied to twomarkup-buffervalues.
-   The omrelaxnglibrary refused to compile a valid RELAX NG schema using acombineattribute on astartnode only in the including schema.
What's fixed in OmniMark 10.1.1
      
    
What's fixed in the OmniMark 10.1.1 compiler
      
        
-   The landumodifiers were being rejected on%eq. This was contrary to the specification.
-   If an undeclared identifier was supplied to a module in an importdeclaration, a non-sensical error message was emitted.
-   An internal error could be triggered if a valueargument was passed as a shelf-class argument to a shelf-class function, and the result of the function was used in arepeat over.
-   Error recovery has been improved when a do select-typeis missing the required alias.
-   An internal error was triggered at compile-time if an invalid newexpression of typemarkup sinkappeared as an argument of astring sinkormarkup sinkfunction.
-   The attributealias in arepeat over attributesorrepeat over specified attributesloop was being converted to astringvalue and back upon assignment to a shelf. This lead to the loss of the attribute's declaration in the target shelf.
-   An incorrect error message was being emitted at compile-time if the optionalargument initializers did not agree between adynamicfunction and one of itsoverridingfunctions. The correct error message is now emitted
-   A conditional operator containing ancestry expressions in its alternatives would trigger an internal error at compile-time.
          
-   An internal error could be triggered at compile-time if contentwas used on the left-hand side of aset, in a context where no shelf calledcontentwas previously-declared.
-   An overloading of name ofcould not be declareddynamic.
-   An internal error could be triggered if a syntax error occurred in the guard of a rule
          
-   An overloadedinfix-functionwith either  argument declared to have typemarkup-element-eventcould not be invoked using an element expression in that position.
-   An internal error was triggered at compile-time if a shelf-class function call was used as the dispatch argument of a dynamicfunction.
-   An internal error could be triggered at compile-time when parsing a syntactically-invalid element test
          
-   An internal error was triggered at compile-time if a cast appeared in the head of a do select-type.
-   A segmentation fault would occur at compile-time when attempting to apply newto anoptionalvaluefunction argument, inside anis specifiedtest.
-   Constant propagation was incorrectly being applied to the alias in a repeat overloop. This would lead to incorrect results at run-time.
-   The compiler would lose track of %cor#contentif it happened to be used as the argument of anoverloadedfunction call. This could cause correct programs to fail to compile.
-   An internal error could be triggered at compile-time if contentappeared in aprocessrule, in certain contexts.
-   An internal error could be triggered at compile-time when a markup sourcefunction's signature did not match its declaration.
-   An internal error was triggered at compile-time when a streamfield of arecordinstance was used in a branch of a conditional operator, in the head of ausing output asscope.
What's fixed in the OmniMark 10.1.1 runtime
      
        
-   After a throw from a markup source functionused bydo markup-parse, the scope withindo markup-parseterminated without a proper cleanup. This could lead to resource leaks, internal errors, or segfaults.
-   Passing create-element-eventan attribute shelf item with an empty string for a key would cause a segmentation fault at run-time.
-   Expressions beginning with attributes of create-element-eventcould lead to a segmentation fault at run-time.
-   Invoking create-unspecified-attributemultiple times could lead to an infinite loop.
-   The result of declaration of attributes of create-element-eventwas not always correctly initialized. This could lead to a run-time error or segmentation fault.
-   Returning a keyed shelf item from a shelf-returning function would remove the item's key.
          
-   A second attempt to consume the same #contentafter the first was interrupted could drop some data content.
-   Casting the result of create-specified-attributeto aspecified-attributeand then accessing its value could cause an internal error at run-time.
-   Invoking a pattern function with a do scanaction from amarkup-errorrule could cause an internal error at run-time.
-   If a value-returning function made a call from within an alwaysclause to a coroutine function which called another function returning the same type of value, a program error could be issued even though there was no error.
-   Passing a jointo a function that pattern matches ahead on the source could leave the source in an inconsistent state, potentially leading to corrupt output or a segmentation fault.
-   Using create-element-eventonly to fetch anattributeof the result could cause a segmentation fault.
-   If #contentwas only partially consumed, the remaining unpaired#markup-endevents would appear in reverse order.
-   Failing to closeastreamattached to areferentby the end of thenested-referentsscope the referent was bound to could lead to a segmentation fault at run-time.
-   An external text entity event generated by a parse that was emitting only #content, and then getting processed by ado markup-parsein a differentmarkup sinkcoroutine, could cause an internal error and segmentation fault.
What's fixed in the OmniMark 10.1.1 libraries
      
        
-   The OMFTP library would fail when attempting to perform data transfers (for example, uploading files) if the host was a recent Linux distribution.
          
-   When trasferring files to or from certain FTP servers using FTPConnectionRemoteOutputFileorFTPConnectionRemoteInputFile, the operations could fail with errorOMFTP002.
-   The netutil.host-ipfunction in the omnetutil library would return a useless value when querying for the address of the local host.
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 streamwhere one of typemarkup sinkwas expected. This is contrary to the specification, and is
            no longer allowed.
-   A signal toaction inside acatchclause 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 attributespseudo-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 ofoperator was the
            sole operation applied to a shelf that had been assigned a value.
-   An incorrect error message was output if with
              document-elementappeared out of sequence in ado sgml-parseordo xml-parseaction.
-   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 dynamicfunctiondefinition whoseexportstatus did not match a previouselsewheredefinition 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 stringset
            was left unclosed.
-   An internal error was triggered at compile-time when an instance of
            an opaquetype occurred in a branch of the conditional operator, in a context where astring
              sourceormarkup sourcewas expected.
-   An internal error could be triggered at run-time if a string
              sourcefunction call with a shelf-class argument (e.g.,read-only) was passed as avalue
              string sourceargument to an outer function call, and the argument of the inner function call was an
            alias fromdo selectordo select-type.
-   An internal error was triggered at compile-time if an overloadedfunction was defined on arequiredrecordtype.
-   A dynamicfunctioncould be defined both with and
            without anoverloadedqualifier. This is not well-defined, and is no longer allowed.
-   An internal error was triggered at compile-time if a value of type
            specified-attributewas compared to a value of typeinteger.
-   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 attributesin the guard of a rule.
-   Using the same alias twice in the header of a repeat overloop 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 newwas applied to an invalid value in the header of ausingscope.
-   In some contexts, a shelf-class function call
            could lead to a segmentation fault at compile-time.
          
-   A repeat overof a shelf with a fixed-size of zero could
            lead to a cascade of incorrect compile-time errors.
-   OmniMark compiler was allowing #current-inputinprocessrules, 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 keyedtest was applied to theattributesshelf.
-   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 streamtest.
-   Casts to built-in types like markup-element-eventinside 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-inandsgml-outactions were erroneously
            affecting the validating XML parser as well.
-   A throw from an external-text-entityrule triggered bydo markup-parsecould lead to an invalid memory access.
-   If #current-dtdand#doctypeare set to
            incompatible values, and the subsequent program error thrown by#contentwas 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-eventon an element with a
            namespace-binding attribute was leaking memory.
-   Accessing attributesorspecified attributesof
            an element created bycreate-element-eventcould 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 throwperformed athrowback 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-inputinside amarkup sink functioncould cause a memory leak or a segmentation fault.
-   Applying do markup-parseto amarkup sourcecontaining external text entity references in some circumstances could lead to a segmentation fault.
-   Consumption of #contentwould lead to a segmentation
            fault if it included the end of an external text entity, but not its beginning.
-   The repeat over attributesaction 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-eventandcreate-element-declaration, could cause a segmentation fault when
            processed bydo 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 attributesshelf was passed to a function as aread-onlyargument.
-   Consuming #contenttwice inside ado markup-parsescope lead to a segmentation fault.
-   An element event returned by create-element-eventdid not
            havexmlns-nameassigned 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 ATTLISTdeclaration 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-parseto amarkup source functionwith an argument that was anotherstring source functionfollowed bydropcould cause an
            internal error.
-   An external-text-entity #documentrule 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 executefunction 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.canonicalwas properly working only on local URIs,
            with no server.
-   Function uri.canonicalwas stripping the double-slash sequence
            into a single slash even before the path segments. The result was an incorrect URI.
-   Function uri.canonicalwas 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 maxOccursinteger attribute value.
-   The omxerces library was not firing the
            external-text-entityrules 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 globalis neversaved.
-   In some circumstances, the line number information given
for a compile-time error that followed the exportkeyword 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-inputand#current-outputwere not being tracked properly, allowing invalid programs to
compile. This is contrary to the specification, and has been
fixed.
-   A recordtype could not beelsewhered
after it had been fully declared.
-   Using key ofon a single-item unkeyedrecordfieldcould lead to a segmentation fault at
run-time.
-   In some circumstances, the compiler rejected a built-in
streamin the header ofusing output as.
-   
The value-startandvalue-endpositional patterns were not
allowed inprocessing-instructionrule 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-dtdwas used withsubdocumentindo
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
newwhere only one is allowed.
-   The compiler accepted an optionalargument in the
first position for adynamicoroverridingfunction. 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 dynamicandoverridingfunctions. This
is contrary to the specification, and is no longer
allowed.
-   The error message emitted when attempting to savea shelf literal was misleading.
-   The error message emitted when applying saveto a
built-in shelf was incorrect.
-   An internal error was triggered at compile-time if a functionimported from amoduleconflicted with arequire.
-   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 copyfrom 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 examplelength 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 recorddeclaration could
differ from that given in theelsewheredeclaration. 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 overloadedswitchfunction with a
non-parenthesized argument list was not being accepted when compiling patterns
fortake,drop, andmatches.
-   
The error messages on the uses of the previous istest in various
disallowed contexts were always reporting thecontentkeyword as
being disallowed.
What's fixed in the OmniMark 10.0.0 runtime
      
        
-   
Existence of markup-commentandmarked-sectionrules could
affect the boundaries oftranslaterules' pattern matching across the
module boundaries. This is now restricted only to the rules within the same
module.
-   
The removeaction could fail when applied to a shelf item created byusing newinside the scope.
-   
The content-startandcontent-endpatterns intranslaterules
were not firing only at the beginning and end of element content, as they were
supposed to.
-   
Interrupting consumption of #contentof 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 newcould 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 streamwas opened, when in fact it was
closed.
-   
The name of an SGML external entity captured by #contentwas 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-errorrule.
-   
Catching a throw from an external-text-entityrule and then
continuing to feed the parser could cause a segmentation fault.
-   
A do markup-parsecommand applied to a join ofxerces.xmlexternal parser and another markup source could cause a
segmentation fault at run-time.
-   
Consumption of a markup sourceafter catching a throw could
erroneously lead to a markup event being thrown in a wrong coroutine.
-   
The previous istest always failed on the top-level element, and
itsoccurrencewas always one.
-   
The dynamic element name tests could fail on element events that were not
generated by a the currently active parse.
-   
The previous istest could return random results inside ado
markup-parseconsuming events from parses that were not active any more.
-   A throwfrom anexternalstring
source functionwas 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.parsedid not accept a URI that contained nothing but
the URI fragment.
-   
If a markup-bufferwas 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 lettersdeclaration.
-   The production for a name referred to data
characters.
-   fieldreferences had been omitted from the
grammar.