|
 |
|

|
What's fixed
See also What's New in OmniMark 8 and Backwards Compatibility.
What's fixed in OmniMark 8.2.0
Fixed in the grammar for OmniMark 8.2.0
- A comment in the grammar for
string sink literal erroneously referred to the production for [void function call], where the
production for [value function call] was meant.
Fixed in the OmniMark 8.2.0 compiler
- In certain contexts, hash-quoted names were not being handled
properly. In particular, a hash-quoted name with an embedded
null
character would be truncated, thereby making it inaccessible.
- A misleading error message was given when attempting to define a
conversion-function from numeric-literal to string.
- The error message emitted when an invalid format item was
encountered in a function definition was needlessly confusing.
- A recursive
conversion-function was being silently accepted. A
compile-time warning is now generated where a conversion-function may recurse.
- The error message emitted when attempting to
require a record
type was misleading, implying that record types cannot be exported.
- An initialiser was required when declaring a
constant shelf of
size 0; this is no longer needed.
- A shelf literal appearing in the header of a rule caused an
internal error at run-time.
- A function containing a %c in a branch of a conditional operator
could not be called in a context where %c is unavailable. (This should
be legal, so long as the %c is never executed.)
- A pretentious module could lead to a cascade of incorrect error
messages. In some cases, a subsequent error could trigger an internal
error in the OmniMark compiler.
- An incorrect line number was given in the error message emitted
when a dynamic initialiser in a shelf declaration would throw.
-
element names were referred to as GIs in certain error messages.
- Reference comparisons could not be applied to instances of
invisible type.
- A confusing error message was emitted when a sub-expression
requires parenthesisation.
- The compiler allowed
#current-output at the outermost scope of a string sink function.
-
this referent could not be used as a string sink in contexts
where this use is unambiguous (e.g., using output as this referent).
- An incorrect value would be printed for optional function
arguments when the
-ftrace command-line option was used.
- Attempting to pass a
string source to a function accepting an
argument of class read-only would trigger an internal error.
- The
-ftrace option could lead to an internal error in programs
using catch/throw.
- A misleading error message was emitted when a
string shelf item
appeared in a position where a character class was expected.
- An internal error would be triggered if
referent or file <filename> appeared in one of the branches of the conditional
operator, which in turn appeared in a string sink context.
-
open ... as applied to a string sink function predeclared with
elsewhere would cause an internal error.
- A misleading error message was emitted when attempting to define
an
overriding of a dynamic function for a type that is not visible.
- A compile-time error was being triggered when attempting to
access the item number of
referents, indexed by item number, i.e.,
output "d" % item of referents[1] || "%n"
- In certain error messages, a
catch was being referred to as a function.
- An internal error would result when using operator
new on a switch in an expression context.
- In some situations, if the arguments to a numeric comparison
were specified as string literals, the incorrect result would be
yielded at compile-time.
-
translate rules did not flush the content captured by the implicit translate rule early enough. That could cause the content captured by a translate rule to be mixed up with the content preceding the rule.
- The compiler allowed an
else clause on a do select-type block
when the head type had already been handled in a case clause. This is contrary to the specification, since the else clause is dead code, and should be removed. An error is now emitted.
- The
append modifier could not be used in conjuction with the new
operator on the left-hand side of the open action.
- A misleading error message was emitted when an invalid
identifier was encountered in an argument position.
- A type disambiguation was incorrectly required when a shelf
literal appeared on the right-hand side of
set.
- Error messages related to the
declare data-letters declaration
referred to it as the (deprecated) letters declaration.
- And internal error would be triggered on an invalid
declare name-letters declaration.
- An invalid
shared as name in an interface module would lead to a segmentation fault when the corresponding implementation module was imported.
- A shelf literal in a character class would trigger an internal error.
- The compiler would get stuck in an infinite loop if a compile-time error occurred when the error threshold was crossed, and the original program had triggered compile-time warnings.
- In certain contexts, the type of the right-hand argument of an infix operator was not being determined properly.
- The error message emitted when an ellipsis was missing from a function definition was needlessly precise.
- A duplicate warning message was being emitted when the overloading argument of an
overloaded function was declared as either value source or value output.
- A warning is emitted when the
current elements pseudo-shelf is accessed in a context where it is guaranteed to be empty.
- The error message emitted when an element test appeared in an invalid context was misleading.
- An
overloaded switch function could not be used in a find rule.
- Attempting to pass a
value string source argument to a function taking a read-only string argument would trigger an internal error.
- The error message emitted when an argument was declared with an improper class was incorrect.
- Following a compile-time error, errors about missing
returns in function bodies were not being emitted.
- A segmentation fault would occur when declaring a pre-declared
record type that extended another pre-declared record type.
- Defining a function as non-
overloaded when it was previously-defined as overloaded would lead to an incorrect error message.
- Action
next group is in a find rule did not affect the find-end rules' active group.
- In certain contexts, hash-quoted names were not being handled properly. In particular, a hash-quoted name with an embedded
null character would be truncated, thereby making it inaccessible.
- A
conversion-function from string source to switch could not be invoked: an error was emitted claiming that a type cycle had been created.
- A cast could not appear as the first component of a pattern.
- A
string source cast on #current-input was causing the input to be buffered. This was both unnecessary and incorrect.
- In certain contexts the
new operator applied to strings and streams would lead to an internal error in the OmniMark compiler.
- A shelf literal appearing in a strong context occasionally required a type disambiguation.
- The
doctype is test inside a repeat over loop could lead to a segmentation fault.
- An unnecessarily cryptic error message was given when the pattern occurrence operator was applied to something other than a pattern.
- Warning codes were not being emitted in warning messages.
- Attempting to use a function's
value argument as a shelf-class argument (i.e., read-only, modifiable, or write-only) to a
catch would trigger an internal error.
- A function
elsewhered, never defined, and called in a using input as qualifier, would lead to an internal error at run-time.
- An internal error would be triggered if a
stream test was applied to a value stream argument.
-
string source modifiers (e.g., binary-mode, buffered, ...) were
not always being propagated to external string source functions.
- An unspecified
optional argument could be used in a context where its value was required but unknown, leading to undefined results. This is now a run-time error.
- A syntax error while generating a call to a function taking a
value string sink argument would lead to a segmentation fault in the compiler.
- Passing an
stream indexed numerically to a function as optional string sink argument could corrupt the optionality of other arguments.
- In
elsewhered function definitions, the OmniMark compiler rejected #main-input and #process-input as initialisers on optional string source function arguments, as well as #main-output, #error,
#suppress, and #process-output as initializers on optional string sink function arguments.
- A compile-time warning is now emitted when
#main-output or #process-input is encountered in contexts where it might lead OmniMark to wait indefinitely for input.
-
#current-input and #current-output are no longer accessible in record type constructors.
- In some contexts, calling a
dynamic function on an undeclared shelf could lead to an internal error.
- A shelf of type
string could not be copyed to a shelf of type
stream. This operation is well-defined and should be allowed.
- A run-time error in an
else clause of a do...done block
pointed to an incorrect line number.
Fixed in the OmniMark 8.2.0 Runtime
- The error message issued when a wrong type of file is given to
-load command-line option now indicates so.
- For certain program errors, OmniMark would lose portions of the message if the exception was caught.
-
name of on supplied functions did not always return the correct name.
- The test
is thrown did not succeed for exceptions that have been thrown and will be handled by the current catch scope, nor for exceptions thrown by other coroutines.
- If an external exception was thrown from a
catch clause, the program could continue running.
-
insertion-break and replacement-break rules were not properly module-protected. Now they fire in the module where the stream was opened.
- The error message issued for format items such as "%4ki" and "%6ka" was wrong.
- Content processing with "%c" could not be delegated to a child coroutine.
- The error message issued for invalid format items like "%12g" was unhelpful.
-
external-text-entity rules in one module was turning off default entity resolution in other modules.
- A segmentation fault would result when using the
repeated (||*) operator on a string longer than 4096 characters.
- Non-printable characters in string values are now escaped in run-time error messages.
- Pattern-matching a long pattern variable belonging to the
string source being matched could erroneously fail.
- The
content-start> pattern was sometimes erroneously succeeding at a point following an entity.
- Values of pattern variables assigned from patterns containing other pattern variable assignments could get corrupted.
- If a notation referenced in a DTD is not defined, the error message reported the last entity instead of the entity that was using the notation.
- An internal error was triggered if "%epq" was used inside a
repeat over #libpath, inside an >external-text-entity rule.
- A
stream previously opened as a buffer without referents-allowed
and then reopened with referents-allowed no longer buffers the previous contents of the buffer. This should result in a small performance improvement.
- A parse of a string source function on the left-hand side of
drop or take operator was causing a crash.
-
reopen with referents-allowed without as clause was failing if the stream did not already have referents allowed.
- A terminating
string sink function passed as a value string sink argument could cause an internal error, or a section of code to be not executed.
-
output-to a string sink function with an empty body, predeclared with elsewhere, could cause an internal error at run-time.
- A call to a predeclared
external string sink function could crash at run time.
- The
value-start pattern didn't match on the beginning of a source created using drop operator.
- A call to a predeclared
string source function that was eventually resolved to an external string souce exported from a module was not correctly generated: incorrect data was generated from the call.
- Messages with embedded
null characters were truncated when emitted by assert or not-reached.
- Pattern-matching a long, generated string could erroneously fail.
- An internal error was occurring in some complex cases when multiple exceptions were being thrown and caught.
- A throw from a
translate rule header could cause a segmentation fault.
- A
halt-everything in markup-error rule would cause a segmentation fault at run time.
- A function call inside a scope feeding a
string source function could raise an internal error.
- A
find-start rule could affect the element rules' active group.
- Run-time errors that list many conflicting rules could cause a segmentation fault.
- An unspecified argument passed through as an
optional argument to an external function was treated as specified.
- An externally-defined function could not manipulate an argument of class
write-only.
- A
string sink function passed as an argument to an external function did not receive any input until the external function closed it.
- External functions with
value string sink arguments could not be passed a multi-component sink, constructed using operator '&'.
- The precedence of modifier lists was incorrect. This could cause modifier expressions passed as arguments to user-define infix functions to be parsed incorrectly. In some cases, an internal error
in the OmniMark compiler would be triggered.
- The test
#current-output in an always clause could lead to a segmentation fault if the current output was a coroutine that executed halt.
- A
string source function with another string source function passed as argument was being bypassed when called in the context of a do xml-parse or do sgml-parse.
- A
string source that was consumed as a part of a join could sometimes be scanned again outside of the join.
- If a
join of multiple string sources was scanned and then restored to its starting position, the join's components' positions were not restored.
- Markup errors and warnings were reporting entities as though they were files.
- OmniMark engines and VMs were reporting run-time warnings with command-line option
-warning specified, but no total warning count.
- The VM executables allowed
#main-input and #process-input string sources to be used together even when there were no input files specified.
- Repeated uses of
log-message could unnecessarily consume large
amounts of memory.
Fixed in the OmniMark 8.2.0 markup-parser
- The grammar of the error message emitted for a misspelled end tag was incorrect.
Fixed in the OmniMark 8.2.0 libraries and external API
- The functions in the modules OMBESSEL and OMTRIG could not be used with numeric literals.
- OMWSB services now log to the same log stream used by the server.
- The ODBC back-end of OMDB could raise an error or trim
significant digits off numeric field values that were near the top of their range.
- External library functions that were taking a
modifiable stream argument have been generalized to take a write-only string argument.
- The OMXERCES library would leak a small amount of memory in
exceptional circumstances.
- The OMVFS function
vfs.connect-directory was expecting a "file:" protocol specification. It now works on plain file system paths.
- An environment variable whose value was an empty string was not being picked up in OMUTIL.
- The OMVFS library function
vfs.copy was failing to copy symbolically linked directories on Unix platforms.
- The OMVFS library function
vfs.describe did not report proper results for a Unix file when its owner or group identifier did not correspond to a known user or group.
- The C++ API has been extended with function
OM_PersistentSource_t::AtEnd () that provides access to the low-level
C API call OMXF_SourceAtEnd ().
- The functions provided by the module OMTCP now all throw on
errors.
- A memory leak occurred if an exception was triggered in an
external function taking an argument of type
string or stream, and of
shelf class (i.e., read-only, write-only, or modifiable).
- A memory leak occurred if an exception was triggered in an
external function taking an argument of type
opaque, and of shelf
class (i.e., read-only, write-only, or modifiable).
- When using the OMXSLT library, the memory allocated for a
stylesheet would be leaked if an error was encountered while parsing the stylesheet.
- An error message related to a use of an
external string sink would refer to it as a persistent source, rather than persistent sink.
- OMDB library functions
db.insert, db.update, and db.delete that operate on tables now can handle table and field names with non-alphanumeric characters.
Fixed in OmniMark 8.2.0 Studio
- The
global referents entry in the variable table now appears only if the program uses referents.
- Programs written using aided translation types, such as
cross-translate, could be run but not debugged in Studio for Eclipse.
- A
throw from within a using nested-referents scope would terminate the current debugging session in OmniMark Studio.
- The
-ftrace option was missing from the OmniMark Studio debugger.
- The
#external-text-entity #document rule was not working in the OmniMark Studio debugger.
- A throw collapsing an
#external-test-entity rule could terminate the current OmniMark Studio debugging session.
- A throw from a function argument initializer could terminate
the current debugging session in OmniMark Studio.
- A dynamic initializer on a
global or constant shelf could stop the Studio debugger.
- An
invalid-data rule could cause the OmniMark Studio debugger to prematurely quit execution.
- The documentation plug-in for OmniMark Studio for Eclipse did
not work in Eclipse 3.3.
What's fixed in OmniMark 8.1.0
- When a cascade of multiple markup parses feeding each other was
terminated, an error could occur.
- The
-help command-line option text did not specify the arguments for
the -gc-threshold and -gc-increment options.
- A shelf literal appearing in the header of a rule caused an internal
error at run-time. This is now a compile-time error.
- The SGML
#appinfo information was accessible from an XML parse
nested in an SGML parse.
- A run-time error (e.g., inaccessible file) occuring inside a
referent scope could lead to an internal error in OmniMark, or a
segmentation fault.
- An output to
#current-output< from a function called within a fork
(i.e., the & operator) could go to another stream specified by the
fork.
- The parsing of
using output as (and similar constructs) with
multiple destinations could be confused by extra parentheses around
the first stream.
- The
using attribute scope containing "%c" could cause an internal
error in some cases.
- The output of a
string source function used on the right-hand side
of a scanned join operator (i.e., ||) was sometimes discarded.
- An
always clause could stop exception propagation.
- Using the
submit action in a pattern matching context (e.g., do scan), prefixed by a using output as would lead to an internal error.
- A
submit of a string source derived from the output of a parse could
cause a segmentation fault.
- A program that uses line-breaking rules would leak a small amount of
memory.
- Attempting to use a
string source as a string sink would lead to an
internal error in certain circumstances.
- The behavior of coroutine termination depended on whether the scope
that launched the coroutine was left normally or thrown out of.
- The prefix
binary operator could not be overloaded.
- The infix operators
difference, format, mask, modulo, shift, and
union could not be stropped (i.e., escaped using the backtick)
- A
process-end rule in an implementation module would cause an
internal error.
- A warning is now emitted if a
document-start, document-end,
find-start, or find-end rule is encountered in a module; these rules
cannot be triggered within a module.
- A warning is now emitted when the
is keyed> shelf query is applied to
a keyless shelf; this test is invariant and should be removed.
- When using the
-ftrace command-line option, the compiler could
report that a valid function definition was invalid.
- Outputting to the
#markup-parser sink from an element rule would
cause an internal error instead of throwing to #program-error.
- A
newline declaration was allowed in a program that contained
modules, if it appeared after the module import(s). This is not
well-defined, and is contrary to the specification. An error message
is now generated.
- Stream modifiers specified on the attachment of
open or reopen did
not have any effect.
- The
buffer attachment type did not allow modifiers to be specified.
- Usage of disallowed modifiers on
value string sink arguments was not
reported at compile-time, and could lead to a segmentation fault at
run-time.
- The compiler was not reporting the usage of
open-only modifiers,
like text-mode, in other contexts like using output as.
- When
reopen...as was applied to a stream that cannot be reopened,
an invalid error was reported.
- Trying to use a shelf literal of type
string sink or string source
would lead to an internal error.
- The
new operator appearing where a string sink was expected could
cause a segmentation fault. This is now a compile-time error.
- A failing
++ operator sometimes did not restore the input consumed.
- The
string sink functions from external filter libraries (e.g.,
omffbase64) would close persistent string sinks (such as #main-output) that were
passed to them.
- An internal
string sink function passed as an argument to an
external function would not see the data written into it by the
external function.
- Duplicate environment variables were not being handled properly by
OmniMark.
- The test
#current-output has name caused an internal error instead
of a proper compile-time error.
- Passing
#current-output as a write-only argument could cause an
internal error instead of a proper compile-time error.
- A list of modifiers with an open parenthesis did not require a
matching closing parenthesis.
- A
string coercion could cause an internal error in certain contexts.
- The precedence of the arguments for user-defined infix functions was
too low.
- An incorrect result was generated when a shelf item query was
applied to an indexed shelf item (e.g.,
item of applied to a shelf
indexed by item).
- The pattern expression
lookahead not not would lead to an internal
error, rather than a syntax error in certain circumstances.
- Using the
named sub-pattern anywhere but in the header of a
translate rule or in the header of a processing-instruction> rule would
lead to an internal error.
- A second
return (from an always clause) from a string source or
string sink function caused an error.
- An invalid argument type in a
catch declaration would lead to an
internal error in a catch clause.
- A small memory leak occurred whenever an external
string source
function was lazily consumed.
- The compiler did not report an error for two
constant shelves
declared with the same name, but with different types.
- The error message emitted when a duplicate shelf declaration was
encountered could be misleading.
- A
global shelf of a record type could be used in its
initializer. This is no longer allowed, since the shelf has not been
created when the initializer runs.
- The error message emitted when attempting to
save a constant
specified the wrong type.
- The shelf use warnings emitted for shelves of record types were not
consistent with those for shelves of other types.
- The help text on some command-line options was incorrect.
- Exceptions were not being handled properly by
using nested-referents
scopes.
- The line numbers reported with referent-resolution errors were
incorrect.
- The leading herald in a
catch invocation could be left out. This is
contrary to the specification: the herald is now required.
- Attempting to use a
string sink function in a using shelf item
association would trigger a misleading error message.
- An internal error would be triggered if a
value string source
argument appeared in a using shelf item association.
- The compiler erroneously accepted a
value string sink argument in a
using shelf item association.
- The error message given when an incorrect
save groups was
encountered was incorrect.
- A number of memory management issues in omdb_sedna have been fixed.
- Outputting from a
string source function to its #current-output and
a string sink function in parallel could cause an internal error.
submit within a using input scope in a find rule could trigger an
internal error in the compiler.
- Use of a dynamic element test in presence of multiple coroutines could
cause the same test to fail when applied in a different coroutine.
What's fixed in OmniMark 8.0.1
- The non-validating built-in XML parser could cause a crash on
parameter entity declarations in some circumstances.
- Compiling a module as though it were a main program could crash a
compiler.
- The
-f command-line option on Unix did not accept OmniMark project
files (.xop) produced on Windows.
- Using an explicit
switch cast would cause an internal error.
- The
#current-input is attached test returned a wrong value in some
circumstances.
- In some situations, the compiler would segfault when recursively
invoking an overloaded dynamic function.
- The compiler would segfault when defining a function with the same
name as a previously-defined type.
- It was possible to satisfy the requirements of an interface module
from an unrelated module.
- The code generated for the
is specified test on optional arguments to a
function was incorrect under certain circumstances.
- When a
string source coroutine was output through an intermediary,
context switches did not occur until the coroutine was finished.
- An incorrect error message was emitted when an
initial clause was specified on an
optional argument of class other than value.
- Using operator
newon a shelf literal heralded by an undeclared type
would trigger an internal error or a segfault in the compiler.
- The compiler allowed
using output as to be applied to the result of
operator new.
- The compiler would not report an error on name collisions between
catch arguments.
- The OmniMark interpreter could lose track of specified attributes in a
well-formed XML parse. This could lead to run-time errors when trying
to access attributes.
- Non-ASCII characters were not properly handled by the
command-line parser. This could also have affected Studio.
- A throw from an optional function argument initializer was catchable
in the function body. This behavior has been modified: argument
initializers are outside the function scope.
- A throw from a function called by a record field initializer was not
catchable and would terminate the program.
- The compiler did not flag an error on encountering
#current-input in
several contexts where #current-input would be unattached at
run-time. This moves an error from run-time to compile-time.
- The compiler erroneously allowed access to
#current-input in a string source function. This error used to be caught at run-time; it is now
caught at compile-time.
- A throw from a translate rule that consumed all its input could cause
a segmentation fault.
- Casting a non-existant variable name to
sink would cause an internal
error.
- A compiler internal error could be caused by specifying an incorrect
file name for an interface module in some circumstances.
- The compiler would incorrectly accept the syntax
export as opaque catch.
- The function
capture-environment in the library OMUTIL was not
displaying error messages in failure cases.
- A
string-returning function called from a pattern could consume
#current-input and affect the continued pattern matching. The patterns
are now protected from side-effects on href="../keyword/1393.htm">#current-input.
- OmniMark VM for Java could not use the omutil library.
- OmniMark VM for ActiveX could not use the omutil library.
- OmniMark ActiveX component is now automatically registered
during the installation.
- A warning is emitted if the old pattern-variable style syntax is used
to access the parameters of a
markup-error or sgml-error rule: this
style is deprecated, and its support will be removed in a future
version of OmniMark.
- In the case where the result type of a function required by a module and the result type supplied to it did not match, the resulting error message misnamed the two functions.
- A warning is now reported when
#console is encountered; #console is
deprecated.
- If an external function exported from a module had an optional
argument with an initializer, and that function was called from a
different module were a pre-declaration for the function existed, the
argument's initializer was not being generated.
- Operators
drop, matches and take did not try to invoke conversion
functions on their first argument.
- The error message emitted when a disallowed declaration was
encountered was incorrect.
- An internal error was triggered when the operator
item of was applied
to a shelf indexed by item.
- New error messages have been documented in the error documentation.
- Reading of large buffers from external functions has been optimized.
- A pattern of the form
any{"%d(i)"}, where i is an integer, was being
rejected.
- The error message emitted when a pattern-save operator appeared inside
a repeated pattern has been improved.
- The error message for patterns like 'any ++ 5' would advise defining a
pattern conversion-function, which is not allowed.
- The -help command-line option text did not specify the arguments for
-gc-threshold and -gc-increment options.
- The compiler did not detect dead code appearing
after a
return action in a function body.
- A warning is now emitted when a shared module uses the same share name
as an apparently different module.
- The restriction that
#current-input from a string sink function
cannot be used as a value string source function argument has been
removed.
- The AIX version of Concurrent Processing Engine was checking the total
CPU count, instead of the active CPU count.
What's fixed in the libraries of OmniMark 8.0.1
- It was not possible to sort a shelf of
streams if one item on the
shelf was unattached.
- Services were not always shut down by the Web Services Broker.
- Performance improvements were made to the load monitoring algorithm in
the Web Services Broker.
What's fixed in OmniMark 8.0
- The warning "pattern can match zero characters" was being emitted
spuriously for patterns using the ++ operator.
- The pattern
any* would consume only up to 2 GB of data. This
limitation has been removed.
- A
repeat over loop inside of a catch clause would scramble the
information required to rethrow the exception.
- The
with append modifier had no effect when assigning to a
referent.
- Two functions overloaded on related
modifiable record types would
collide. This restriction has been removed.
- A memory leak when performing a well-formed XML parse could cause
OmniMark to exhaust available memory under certain circumstances.
- A memory leak when allocating and freeing shelf items has been
fixed.
- Certain patterns could cause the OmniMark run-time pattern stack
to become unbalanced, which would lead to an internal error.
- A problem with the
is default-entity test caused it to always
evaluate to false.
- A segmentation fault would occur when using the keyword
opaque as
the data type of an argument of a catch or a function. The problem
would not be manifest if a user-defined data type named opaque was
declared.
- Assigning a value to a
switch shelf item using an item indexer was
not being handled properly, which could lead to erroneous behavior at
run-time.
- It was possible to corrupt the run-time stacks of the OmniMark
interpreter using recursive function calls. This would lead to an
internal error.
- .An internal error was being triggered on the pattern
any* when true.
- A memory leak would occur if a throw happened in a
find-start rule
for a cross-translate program.
- Trying to use the
lastmost indexer on a shelf-class function
argument could lead to a segmentation fault in the OmniMark
interpreter.
- The
% (format) operator was not being handled properly in a pattern
context.
- The
referents shelf now supports the new indexer syntax.
- Successive pattern matches and
any** were not being evaluated correctly.
- The conditional operator (
->) did not handle user-defined types
properly.
- An internal error occurred when using a sequence of
any** (or any++).
- An internal error was produced on
number of sgml-dtds.
- A segmentation fault occurred when using
scan input #main-input in an XML parse.
- The time required to scan a large buffer is now proportional to the size of the buffer, rather than being proportional to the square of the size of the buffer.
- The behavior of the
-ftrace command-line option has been changed:
instead of writing its output to the #error stream, it is written to
log-message, allowing this feature to be used in server environments
where no-default-iomight be in effect.
- An internal error would be emitted if a
throw occurred inside a
repeat over current elements.
- A duplicate record declaration now states where the first
declaration occurred.
- In some circumstances, it was possible for a monolithic module to
export an unsatisfied (
elsewhered) definition, which was satisfied in
the importer. This has been disabled.
- It was possible for a
repeat over current elements loop to change
the name of the current element obtained via the name of element
expression.
- A
last content is appearing outside of a parse would cause the
OmniMark run-time to segfault.
- Attempting to use operator
new as the read-only argument to a
function would cause an internal error.
- Catch parameters would not shadow shelves with the same name, leading to correct programs being rejected.
- A number of error messages have been corrected or expanded. This
affects the text of the messages only: error codes are not
affected. In particular, the quality and specificity of the error
messages output for function definitions are improved; however, other
messages were revisited as well.
- An incorrect error message was being issued for
clear sgml-dtds{""}.
- An incorrect error message was being issued for
is specified
applied to a shelf with a key-based indexer.
- The error message output when a type error occurred for the
name of operator has been improved.
- The error message emitted when the
name of operator is applied to
a valuestream argument has been improved.
- An incorrect error message would be emitted when trying to define
a function argument of type
remainder source.
- A shelf subjected to the
has name test was not being flagged as
used, and therefore a spurious warning was being emitted.
translate rules were firing within the scope of markup-comment
rules if they wrote to #error.
- An invalid warning was being emitted for the rule
find any ++ => p lookahead ("Hello, World!" | =|)
- The import order of shared modules was significant, in particular
when one module exported a
record type that the other extended.
- A
dynamic function had to be declared as overloaded as well, if an
overriding was declared in a different module.
- An error in the OmniMark parser was allowing the construct
referent
"..." to be used wherever a stream shelf reference was required.
- A syntax error in a module could lead the OmniMark parser to crash
with a segmentation fault.
-
#current-input was not inherited from the invoking domain to the
input domain when invoking a markup-parser.
- A syntatically-invalid
dynamicfunction declaration could cause an
internal error in the OmniMark parser.
- The introduction of the operator form of
new has led to a number of
issues being fixed in its implementation.
- An internal error would be emitted when a
down-translate was begun
on a truncated input.
- A
repeat over on an empty constant or global shelf would cause an
internal error.
- The performance of the
** pattern operator has been improved.
- A shelf item's key could not be set to itself:
process
local stream s
initial { "Hello, World!" with key "Salut, Monde!" }
set key of s{"Salut, Monde!"} to "Salut, Monde!"
- Code generation of the conditional operator was not being handled
correctly.
- The keyword
value was not being handled correctly when used as a
function argument herald.
- Code generation for modules has been streamlined.
- The assignment of a
stream-returning function to a stream shelf has
been optimized.
- An interaction between
>referents and records would cause a crash at
execution time.
- An internal error would occur during execution if the initializer
for a shelf threw an exception.
- Parentheses were required when using
activate or deactivate on an
expression involving cast.
- An internal error would be emitted if the argument to a
dynamic
function involved the cast operator.
- The
is specified test was not being evaluated correctly in a
well-formed parse.
- An XML parse inside an SGML parse would incorrectly inherit the
case-insensitivity of the SGML parse.
- If a coroutine threw two exceptions simultaneously, an internal error would occur
at execution time.
- The precedence of an output function was being ignored in certain
contexts.
- It is now possible to initiate a markup parse from an input function. This allows the output of one markup parse to feed the input of another
- An internal error when
using a field of a result of a record-returning function has been fixed.
- Overloadings of built-in infix-function names, such as
and, couldn't be exported from modules.
- Key-based access to record field shelves used to evaluate the key before the record expression. The order of evaluation has been reversed.
- Some internal errors triggered by nested heralded function calls have been fixed.
- The non-overridden dynamic functions were not properly inherited in some cases.
- Unparenthesized field access in a function call argument caused an internal error.
- Erroneous overloaded dynamic function definitions on non-record types caused an internal error. A regular compile-time error is reported now.
- The conditional operator didn't properly check if the optional function arguments in its test expression were specified.
- Fetching the
item of a built-in stream shelf like #current-output caused an internal error.
- The compiler did not report the location of any unsatisfied
elsewhere function definition.
- The
with append modifier in some situations didn't work properly on buffers.
- The
repeat over action didn't check if the shelf was an unspecified optional function argument.
- The field access didn't check if the record was an unspecified optional function argument.
- The
copy action didn't check if either of the shelves was an unspecified optional function argument.
- A markup error in a DTD include file referenced by a DTD public identifier could cause another error when attempting to obtain the entity name of the include.
- Exceptions were not handled properly in code blocks containing scanning actions followed by
catch and always.
- The
#current-input appearing after an action containing the drop operator referenced the result of the drop instead of the contextual current input.
- The old-style programs using aided translation types were sometimes buffering the whole
#main-input in memory.
- Attempting to use the (non-existent) key of a scalar constant shelf
would cause a segmentation fault in the compiler.
- Use of conditional operator on the left hand side of field access could cause an internal error in compiler.
- Operator
new applied to a stream shelf literal would cause an
internal error in the compiler.
- A problem with the handling of modules by the OmniMark compiler was
causing syntactically-valid, parenthesized macros to be rejected.
- The OmniMark compiler would crash when attempting to overloaded the
built-in
format function using a different signature.
- The OmniMark compiler would crash if an incorrect herald was used in
an external
source function call.
- A
repeat over or using of a value string argument, using a shelf reference
alias, was not being handled properly by the OmniMark compiler.
- Under certain conditions, it was possible for the OmniMark compiler
to leak the memory allocated for groups.
- Trying to declare a record with a name already in use could lead to
a segmentation fault in the compiler.
- Declaring a record after it had already been used could lead to an
internal error in the OmniMark compiler.
What's fixed in the libraries of OmniMark 8
OCI backend
- Performing a query which returned multiple rows where one of the
columns is of type LOB no longer throws an exception on the second and
subsequent rows when trying to read the LOB
- Calling the
db.discard function on a compiled statement used for a
streaming insert no longer causes a crash
- Very large numbers in some Oracle numeric datatypes could have been
truncated when being queried
ODBC backend
- Performing a streaming insert into MS Access LONG fields now works
- Retrieving datetime fields from MS SQL Server now retrieves the
'seconds' component instead of just returning '00'
- Retrieving datetime fields from MS Access no longer throws an
exception
- Performing an absolute negative move-record of > 10000 rows in a
result set containing more than 10000 rows now works.
|
|