Version 3.10 - ? geant: * Extended the attributes 'if' and 'unless' to accept the values "true" and "false". This can be useful when automatically generating geant build files. See bug#2657770. * Use ISE Eiffel's ec instead of ecb, so output is compatible with estudio; else estudio will complain about a corrupted project. gec: * Added option --gelint to force the whole content of classes to be checked (even features not reachable from the root creation procedure). * Fixed bug in the generated C code for call agents whose feature was FUNCTION.item or ROUTINE.call and whose closed argument was a manifest tuple. See bug#2997112. * Fixed implementation of class IDENTIFIED_ROUTINES. Object addresses were casted to INTEGER_32, which causes loss of information when compiled on a 64-bit computer. See bug#2999209. * Fixed type system bug when processing constant attributes in inspect instructions. See bug#3238111. * Fixed bug when an inspect instruction had no else-branch. No exception was raised. * Fixed bug when running 'gec --gelint ...'. Validity errors were reported twice. * Qualified anchored types are now accepted by default. gelint: * Fixed bug where it was reporting an internal error instead of a VTCT error when the type of a local variable was a generic class type whose base class did not exist. * Report a VIPR-3 error for inline agent of the once and external forms. This is not in ECMA 367-2, but a restriction in ISE. * Qualified anchored types are now accepted by default. getest: * Set exit code to 4 when at least one of the test cases has been aborted. * Split the feature `build_suite' in smaller routines in the generated test harness so that the back-end C compiler (in particular MSVC under Windows) can compile the generated C code for this routine in a reasonable amount of time. * Added command-line options to the generated test harness to monitor which of the registered test cases should be executed or ignored. * Improved command-line processing of the generated test harness. gexace: * Added option "syntax" to support the corresponding option in ECF. * Added documentation explaining how to add a new option in Xace. geyacc: * When specifying Eiffel types in the %token and %type clauses, in addition to what was accepted so far, it is now possible to use 'like Current', labeled tuples (e.g. 'TUPLE [i, j: INTEGER; s: STRING]') and type marks such as 'expanded', 'reference', 'separate', 'attached', 'detachable', '!' and '?'. See bug#2618271. * When declaring '%token ...', the generated parser expects to find token values in the variable `last__value', where all non-alphanumeric characters in the type name EIFFEL_TYPE are replaced by underscores. It is now possible to customize the name of this variable to `last__value' by declaring '%token ...'. See bug#2621302. * Added support for qualified anchored types in %type and %token declarations in .y files. * Eiffel classes need to be regenerated with geyacc from .y files because of a breaking change to make the internal stacks void-safe compliant. Otherwise this will result in a compilation error. Gobo Eiffel Kernel Library: * Added features `same_*_pathnames' to class KI_FILE_SYSTEM. * Features `test' in class KL_EQUALITY_TESTER and `equal_objects' in class KL_ANY_ROUTINES now use the new ECMA construct '~' instead of the combination `same_type' and then `is_equal'. * Added feature `is_true' to class KL_AGENT_ROUTINES. * Fixed bug in feature `read_to_string' of file classes where the hash code was not reset properly. Gobo Eiffel Lexical Library: * Fixed bug in LX_DFA_REGULAR_EXPRESSION where `compile ("foo\$")' was setting `has_dollar' to True even though the dollar sign was escaped. * Added features `pattern' and `is_case_insensitive' in class LX_PATTERN_MATCHER. Gobo Eiffel Regexp Library: * The pattern being matched and the case-sensitiveness are now available using queries `pattern' and `is_case_insensitive'. Gobo Eiffel String Library: * Fixed bug in the string formatter where the flags '+' and space where not taken into account. See bug#2768748. Gobo Eiffel Structure Library: * Fixed assertion violation in feature `compress' from DS_SPARSE_CONTAINER. See bug#2831433. * Relaxed precondition of `put' and `put_last' in classes DS_SET and DS_SPARSE_TABLE (i.e. the ancestors of DS_HASH_SET and DS_HASH_TABLE) to be "not is_full or else has (k)" instead of just "not is_full". * Added features `do_until' and `do_if_until' to DS_CONTAINER and its descendants. * Added feature `has_void' to DS_CELL and DS_PAIR. Gobo Eiffel Time Library: * Added class DT_STOPWATCH in cluster 'stopwatch'. Gobo Eiffel Tools Library: * Added support for keyword 'note' as a replacement of 'indexing'. See bug#2499770. * Fixed bug where object-test local was not recognized as such when appearing as target of an agent declaration. * Fixed bug where the type of an agent was not correctly determined when the result type of the corresponding function contained a formal generic parameter. It ended up being 'FUNCTION [ANY, TUPLE, BOOLEAN]' instead of 'PREDICATE [ANY, TUPLE]'. See bug#2667604. * Only pre-ECMA formats were supported for integer manifest constants. Now all formats (decimal, hexadecimal, octal and binary) are supported to be compliant with ECMA and ISE. See bug#2682414. * Support the new syntax, using keywords, for attached and detachable types (e.g. 'attached FOO' or 'detachable BAR') and for object-tests (e.g. 'attached {T} exp as x' with '{T}' and 'x' optional). See bug#2682694. * Added the notion of ignored classes. We can programmatically decide to ignore the class from a cluster and take it into account later on after some processing. * Added support for attribute initialization body. * Added support for renaming clause in libraries when parsing ECF files. * Fixed pretty-printer when processing indexing clauses in features. An extra empty line was inserted. * Added support for check instructions with a then-branch. * Added support for once keys in once routines. * Improved the way the type of a manifest array is determined in the case where the types of all items conform to one of them. In that case the manifest array will be an array of that type. * The scope of object-test locals can cover the following assertions in the same postcondition or invariant clause because it's as if they were separated by "and then" operators. It was already implemented that way in preconditions. * Support the ECMA syntax for typed manifest strings and typed character constants. * Accept class text files which start with the byte order mark (BOM). (See http://en.wikipedia.org/wiki/Byte_order_mark.) * Started checking void-safety validity rules. * Relaxed the validity rule to prevent cycles in qualified anchored types so that it can accept code appearing in ISE's libraries. * Added support for across instructions/expressions. Gobo Eiffel XML Library: * Added option to let the XML pretty printer use empty element tags instead of . Miscellaneous: * Removed classes and features that had been marked as obsolete in 2004 or before. * Removed warnings when compiling with ISE 6.6. Version 3.9 - 20 November 2008 geant: * Removed support for SmartEiffel task . gec: * Fixed some C compilation warnings when using gcc as back-end C compiler. See bug#1961462. * Added support for object equality ('~' and '/~'). Equality expressions ('=' and '/=') now use the semantics of object equality when the operands are dynamically of expanded types. * Added experimental support for Qualified Anchored Types (types of the form 'like a.b' or 'like {A}.b). gelint: * Fixed bug where no validity error was reported when a creation procedure of a creation instruction did not exist in the base class of the creation type. getest: * Added an indexing clause "generator" to the generated classes. See feature request bug#1961466. * Provided programmatic access to test results. * Removed support for config file 'getest.se' and option --se. gexace: * Made sure that several options 'override_cluster' can be specified in Xace files. * Fixed bug when generating ECF files from Xace files: the override clusters were not marked as such. * Removed support for SmartEiffel config files. Gobo Eiffel Kernel Library: * Added `make_from_string_general' and `make_from_substring_general' in class UC_STRING. Gobo Eiffel Structure Library: * Added set and table classes using binary search tree, AVL tree, red-black tree and left-leaning red-black tree algorithms. * Added features `there_exists_with_key' and `for_all_with_key' to class DS_TABLE. Gobo Eiffel Tools Library: * Added minimal support for ECF files. * Improved Eiffel pretty-printer. Miscellaneous: * Removed the emulations of EiffelBase and EiffelTime in library/other. They had not been maintained for years, and it became a pain to use them after the move from Ace files to ECF files in EiffelStudio. Version 3.8 - 11 May 2008 geant: * Changed the evaluation of attributes 'if' and 'unless' so that an empty right/left side of the equals sign is treated as an empty string which makes comparisons easier. Also leading/trailing white space for the equals sign is not removed anymore to leave control to the script developer. Note that this might cause a problem to scripts which made use of the old behavior. These scripts need to be adapted. * Task 'geant' has a new attribute called 'exit_code_variable'. It can be used to capture (or ignore) the execution result of a '' call and works exactly as in the 'exec' task. * Introduced notion of locals, and globals. You can now declare ''. * Added support for '' element. * Fixed various issue with '' task. gec: * Generate prototypes for external routines when no header file has been specified. * Changed the generated C code for Agent objects so that `twin' and `deep_twin' work correctly. * Improved CAT-call error reporting, in particular in case of Tuple label assigners. * Relaxed the CAT-call rule when calling Agents to be compliant with ISE. ISE Eiffel does not type-check the tuple operand of Agent calls even at execution time. It only checks whether the tuple has enough items and these items are of the expected types, regardless of the type of the tuple itself. For example it is OK to pass a "TUPLE [ANY]" to an Agent which expects a "TUPLE [STRING]" provided that the dynamic type of the item of this tuple conforms to type STRING. * Made sure that no-more-memory exceptions are raised when needed. * Made sure that expanded items are initialized when creating objects of type SPECIAL. * Fixed bug (read/write to non-allocated memory) in implementation of `deep_twin' when traversing objects of type SPECIAL. * Fixed bug when both the expanded and reference versions of a non-generic type were used in the system. The generated C code considered that they were either both expanded or both reference. * Fixed bug in recursive once-functions. The second call was returning the default value of the result type instead of the value of 'Result' as it was when the recursive call occurred, as specified in ECMA Eiffel. * The Xace option 'garbage_collector' is now taken into account by gec when set to "boehm". This Xace option can be overridden by the command-line option --gc when specified. * When gec compiles an application with the Boehm GC, it now generates code that will let the GC trigger the feature `dispose' when objects are reclaimed. * Take better advantage of the Boehm GC, using 'GC_malloc_atomic' when possible. * The implememtation of the rescue mechanism in C uses 'setjmp' and 'longjmp'. The use of these two C functions requires that any local variable modified between the call to 'setjmp' and the call to 'longjmp' to be declared as 'volatile', otherwise its value may be lost after calling 'longjmp' if the C optimizer decided to implement it with 'register'. For more details, see: http://www.programmersheaven.com/articles/pathak/article1.htm http://www.freetype.org/david/reliable-c.html#annex-A http://msdn2.microsoft.com/en-us/library/xe7acxfb(VS.80).aspx The generated C code has been adapted accordingly. gelint: * Fixed bug in the flat Degree 3 mode where the precursor features corresponding to precursor expressions or instructions were not checked. * Fixed bug when the type in a manifest type is based on an unknown class. Instead of reporting a VTCT error, gelint/gec were reporting another subsequent error, as shown in bug#1875262. * Made sure that no VAPE error is reported when a feature is exported to a class that has a syntax error or for which the ancestors could not be computed. * Added support for the notion of libraries as specified in ECF. This introduced some breaking changes if you are using the code of gelint in your own applications. For example what was known as ET_UNIVERSE is now called ET_SYSTEM and ET_UNIVERSE is now an ancestor of this class (and of the new class ET_LIBRARY). * Added type-marks '!' and '?' (part of void-safety mechanism) in the parser. But do not check validity rules yet. * Implemented Object-Test as specified in ECMA 367-2. * Do not accept the obsolete syntax for Agents using '~'. ECMA Eiffel uses the operator for object equality, and this new construct is now implemented in ISE 6.2. getest: * Added features `assert_doubles_equal_with_tolerance' and `assert_doubles_equal_with_strict_tolerance' to TS_ASSERTION_ROUTINES. * getest now expects test case classes to declare `make_default' inherited from TS_TEST_CASE as creation procedure. That way there is no need to generate intermediary classes (e.g. classes of the form XTEST_... inheriting from TEST_...) anymore, and hence it is easier to call test cases outside of the test framework. * Removed the command-line option --ve and replaced it by --ge. * Print the exception trace if available when an exception occurred while running a test case. * Make sure that the garbage collector is in the same state as before running each test case. gexace: * The option '--system=ise' now generates ECF directly instead of going through Ace which is then converted to ECF by EiffelStudio. This allow Xace to support options that have been introduced in ECF. In order to generate Ace files for ISE, use the new command-line option '--format=ace'. * The option '--system=ge' now generates an Xace file instead of an Ace file. This makes it possible for example for 'gec' to determine whether the Boehm GC should be used through the Xace option 'garbage_collector'. Otherwise, with Ace files, this information has to be passed to 'gec' through the command-line option '--gc=boehm'. In order to generate Ace files for 'gec', use the new command-line option '--format=ace'. * These ECF options have been added to Xace: supplier_precondition, automatic_backup, check_generic_creation_constraint, ecf_library, enforce_unique_class_names, external_runtime, force_32bits, full_class_checking, msil_classes_per_module, msil_culture, msil_key_file_name, msil_use_optimized_precompile, namespace, old_verbatim_strings. See $GOBO/doc/gexace/options.txt for more details. * The default value of these Xace options has been changed to follow the default value in ECF: inlining, inlining_size, use_cluster_name_as_namespace, use_full_cluster_name_as_namespace. See $GOBO/doc/gexace/options.txt for more details. * Fixed bug#1875809 where libraries were duplicated in the generated output file when appearing twice in the same Xace input file. geyacc: * Fixed bug when resuming a parsing that was suspended (with `suspend'). The last action before the call to `suspend' was executed twice. Gobo Eiffel Kernel Library: * Added iterator features (`do_all', `do_if', `for_all', `there_exists') in class KL_DIRECTORY. * Added feature `prune_all_trailing' to KL_STRING_ROUTINES. * Improved class KL_EXCEPTIONS to make it clearer what is available for all Eiffel compilers and what is not. * Added KL_MEMORY and friends to provide a compiler independent way to access garbage collection facilities. * Upgraded Unicode support to version 5.1.0. Gobo Eiffel Regexp Library: * Fixed bug#1917556 where feature `split' in RX_PCRE_REGULAR_EXPRESSION was not behaving correctly when the regexp could match empty strings. Gobo Eiffel String Library: * Added full Unicode case-mapping routines. * Upgraded Unicode support to version 5.1.0. * Added support for formatting dates and times according using the picture strings from the XSLT functions format-date(), format-time() and format-date-time(). Gobo Eiffel Structure Library: * Moved features `do_all', `do_if', `there_exists' and `for_all' up to class DS_CONTAINER. * Added features `do_all_with_key' and `do_if_with_key' to class DS_TABLE. * Added feature `has_void' to class DS_SEARCHABLE. Gobo Eiffel XML Library: * Re-implemented XPath fn:collection() for file URIs (incompatibly, but as the previous implementation was not documented, it almost certainly is not used). Wrote documentation. * Added additional XSLT system-properties, and the ability to register additional system properties. Documented this. * Added facility to pass XPath values as global XSLT parameter values. Version 3.7 - 5 November 2007 gec: * Can generate console and Windows applications. * Implemented once manifest strings. * Report CAT-call errors and call-on-void-target errors at run-time. * Support the Ace/Xace/ECF 'trace' option. * The Boehm GC can be plugged using the --gc command-line option. * Improved the back-end C compiler config file. * Improved interoperability with ISE's compiler. * Support 'external "C++"' routines. * Implemented feature `deep_twin'. * Added support for lcc-win32 and MinGW as back-end C compilers. gelint: * Fixed bug when determining the type of a call to a Tuple label when appearing in a generic class. * Added support for some incrementality when used within the same session. Gobo Eiffel Argument Library: * Added the possibility to specify a maximum number of options. * Added the possibility to make option arguments optional for options that only have a long form. * The contracts now certify that the setup of arguments are unambiguous. Gobo Eiffel Kernel Library: * Removed possible CAT-call when using KL_EQUALITY_TESTER. It does not use `is_equal' directly, but a protected version of it which is preceded by a call to `same_type'. Gobo Eiffel XML Library: * Made the XSLT serializer a reusable component for any XML programs. * Added an example of using the XSLT serializer. * Added documentation on XML serializers, including the reusable XSLT serializer. Version 3.6 - 14 June 2007 gec: * Implemented inline agents. Gobo Eiffel String Library: * Fixed a bug in string formatter where format("$11.9f",941.65899999999817) would return 942.589999910 instead of 941.659000000. Regression tests have been added, and this fix also pointed out a bug in one of the test cases. Gobo Eiffel Structure Library: * Added iterator features (`do_all', `do_all_with_index', `do_if', `do_if_with_index', `there_exists') to relevant classes. * Fixed bug in invariant of DS_MULTIARRAYED_SPARSE_SET and DS_MULTIARRAYED_SPARSE_TABLE when `capacity' is zero. Miscellaneous: * Now uses the MIT License, which is an OSI Approved License and a GPL-Compatible Free Software License. * Bugs can now be reported on SourceForge bug tracker. * Does not support Visual Eifel compiler anymore. Indeed Visual Eiffel does not support Agents, Tuples, INTEGER_64 among other things. The Gobo project tried not to use these constructs so far, but this is becoming too constraining. Version 3.5 - 23 January 2007 geant: * Fixed bugs which prevented that possible arguments of a target to be taken into account during evaluation of ${somevar} references. This was especially the case for the attributes 'if' and 'unless'. * Task now by default spawns a new geant process if attribute 'file' has been specified. It also has a new attribute called 'fork' to control whether a new process should be spawned or not. * Added attribute 'force' to task . Use this attribute to generate output that already exists and is newer than the input. * Added task to get input values. * Added task to replace tokens or patterns in a file. gec: * First version of the Gobo Eiffel Compiler (gec) that is able to compile everything in the Gobo package. However gec is not a full-fledged Eiffel compiler yet. See the documentation for more details. getest: * Added command-line option --default_test to specify whether the feature `default_test' should be included in the generated test cases. gexmlsplit: * Has been removed. Use gexslt instead. Gobo Eiffel Argument Library: * New command-line argument parsing library. Gobo Eiffel Kernel Library: * KL_WINDOWS_FILE_SYSTEM now accepts both \ and / as directory separator. This is the default. It can still accept only \ as directory separator if you use the `make_backslash_only' creation procedure. * Change semantics of KI_FILE_SYSTEM.absolute_parent_pathname when the argument is both a root directory (i.e. has no parent) and an absolute pathname. In that case return the argument itself instead of `absolute_root_directory' as before. * Fixed bug in KL_(UNIX|WINDOWS)_FILE_SYSTEM.absolute_parent_pathname. When the result was a root directory it was erroneously returning `absolute_root_directory'. So if you were in 'C:\gobo' and asked for the `absolute_parent_pathname' of 'D:\foo' you were getting 'C:\' instead of the expected 'D:\'. * Fixed bug in KL_WINDOWS_FILE_SYSTEM.canonical_pathname which for the input '\\gobo\foo\..' was returning the invalid pathname '\\gobo\' instead of '\\gobo\foo'. Likewise for 'c:\..', we were getting 'c:\..' instead of 'c:\'. * Added `sharename' to KI_PATHNAME, so that UNC pathnames can be split into '\\hostname\sharename'. * Added classes for determining the class of Unicode characters. Also updated code for conversion to lower and upper case, and added code for conversion to title case. These are generated from the Unicode Character Database. Currently Unicode version 5.0.0 is supported. * New features have been added to a new ancestor of ISE's STRING class in order to support the classes STRING_32 and STRING_8 which have been introduced at ECMA. As a consequence, the following features had to be renamed in class UC_STRING: put_code -> put_item_code append_code -> append_item_code has_code -> has_item_code index_of_code -> index_of_item_code The new names are not great, but they match the feature `item_code'. Gobo Eiffel Math/Decimal Library: * Added creation procedure `make' to MA_DECIMAL_TEXT_PARSER and MA_DECIMAL_BCD_PARSER. * Renamed MA_DECIMAL_CONSTANTS as MA_DECIMAL_CONTEXT_CONSTANTS and MA_DECIMAL_MATH as MA_DECIMAL_CONSTANTS. * Added class MA_SHARED_DECIMAL_CONSTANTS. * Moved `Maximum_integer_as_decimal' and `Minimum_integer_as_decimal' from MA_DECIMAL_CONTEXT_CONSTANTS to MA_DECIMAL_CONSTANTS and renamed them as `maximum_integer' and `minimum_integer'. * Moved `default_context' from MA_DECIMAL_CONTEXT to MA_SHARED_DECIMAL_CONTEXT. * Added a comment in MA_SHARED_DECIMAL_CONTEXT.set_shared_decimal_context emphasizing the fact that it is best practice to call this routine once and for all at the beginning of the application to avoid unexpected behaviors. Gobo Eiffel Parse Library: * Added feature `suspend' (and its associated feature `is_suspended') to YY_PARSER and its descendant YY_PARSER_SKELETON to be able to suspend the current parsing. The next call to `parse' will resume parsing in the state where the parser was when it was suspended. Note that a call to `abort' or `accept' will force `parse' to parse from scratch. * Changed implementation of feature `syntax_error' in YY_PARSER_SKELETON so that it returns false when nothing has been parsed yet. Gobo Eiffel String Library: * Added classes for normalizing Unicode strings. * Removed useless precondition of feature `make_with_separators' in ST_SPLITTER. Gobo Eiffel Time Library: * Added classes to parse and format XML Schema date, time and date-time datatypes. Gobo Eiffel XML Library: * XSLT and XPointer are now sufficiently stable and mature to be considered supported. XPath is supported for its use with XSLT and XPointer as host languages, but a general interface for host languages is not yet supported. Version 3.4 - 10 July 2005 geant: * Task supports writing message to a file. * Targets support argument handling. Tasks and have been modified so that they are able to pass these arguments. * Targets support 'obsolete' mechanism. * Tasks , , , support capturing the return code of the called process. * Task supports checking for availablity of directories. * If you use xsltproc and pass string parameters to it, you have to surround those parameters with single quotes now. * Task supports VE 5.0 with the attribute 'xace' to specify Xace files. Attribute 'esd' is still supported when using VE 4.1. * Added built-in variable 'verbose' which is set (to 'true') when geant is run in verbose mode. * Added attributes 'verbose', 'abort', 'generation', 'compilation' and 'execution' to task . gexace: * Removed support for 'hact'. * Added support for VE 5.0: 've' now generates Xace files for VE 5.0. In order to generate ESD for VE 4.1 use 've41' instead. gelex: * Added command-line option '--pragma=[no]line' in order for the code generated for the semantic actions to contain or not indication about the line number where it originally appeared in the input description file. * Fixed bug in '%option line' with the -z option when two rules were sharing the same semantic actions (with | separator). * When not appearing in a character class, an unescaped [ character is now considered to be the open character of a character class and reports an error if there is no matching ] character. It used to be considered as a non-special character when there was no matching ] character. geyacc: * Following the changes made in version 3.2, YY_PARSER_SKELETON is not a synonym of YY_OLD_PARSER_SKELETON anymore and can now be used as a replacement of YY_NEW_PARSER_SKELETON. Also the default command-line option is now '--new_typing'. * Added command-line option '--pragma=[no]line' in order for the code generated for the semantic actions to contain or not indication about the line number where it originally appeared in the input description file. * Added command-line option '--doc=(html|xml)' to generate documentation about the grammar in HTML or XML format. getest: * Added command-line options '--verbose' and '-v' to run getest in verbose mode. * In verbose mode getest prints the number of test cases that have been generated. Gobo Eiffel XML Library: * XM_DOCUMENT.process_to_events makes the tree an event source. * New XM_XMLNS_GENERATOR filter injects xmlns declarations in event stream. It can be combined with a print filter. * XM_FORMATTER is now a wrapper for the above and so produces XML compliant output. * XM_INDENT_PRETTY_PRINT_FILTER and XM_WHITESPACE_NORMALIZER added to allow pretty indented output. * XM_NAMESPACE_RESOLVER has new option to forward xmlns attribute events (forward_xmlns). * XM_DTD_CALLBACKS: `on_doctype' called first; `on_dtd_end', `on_dtd_comment', `on_dtd_processing_instruction' added. * New XM_XMLID_VALIDATOR validates xml:id attributes. * Parser defaults to new STRING-only latin-1 mode. * Parser correctly outputs PUBLIC identifier in DOCTYPE. * Parser leaves XML resolver in correct state. * XM_PARSER.positions contains full info to locate errors in external entities. * Eiffel parser accepts UTF8 files that start with a BOM. * Expat parser accepts genuine UC_STRINGs as input. Gobo Eiffel Kernel Library: * Fixed bug in KL_PATHNAME.set_canonical. * Added bit operation features to KL_INTEGER_ROUTINES. * Added features `power', `div' and `mod' to KL_INTEGER_ROUTINES. * Added feature `log2' to KL_DOUBLE_ROUTINES. * Added feature `truncated_to_integer' to KL_DOUBLE_ROUTINES because this routine is not supported anymore in SE 2.2b1. * Added class KL_CLONABLE. This class should be used whenever the corresponding objects need to be cloned. This is the consequence of `clone' not being supported anymore in SE 2.2b1. If you need to clone strings or arrays, use `cloned_string' by inheriting from KL_IMPORTED_STRING_ROUTINES and `cloned_array' by inheriting from KL_IMPORTED_ARRAY_ROUTINES. To a clone a SPECIAL object, just call `twin' on it (does not work with ISE 5.4, but works with ISE 5.5). * KL_PLATFORM.Double_bits is not supported with SE 2.1 and 2.2b1 anymore. This is a consequence of DOUBLE being deprecated in SmartEiffel and hence not supporting the required features. * UC_STRING.infix "@" does not work as expected with SE 2.1. It works well with the SE 2.2b and SE 1.0 though. This is the consequence of the fact that STRING.infix "@" as been marked as frozen in SE 2.2b1. Gobo Eiffel Math/Decimal Library: * New library, incorporated from the SAFE project (http://safe.sf.net). * Contains MA_DECIMAL, which provides Decimal floating-point arithmetic, with unrounded and integer arithmetic as a subset (IEEE 754R + IEEE 854 + ANSI X3.274 + ECMA 334). Gobo Eiffel String Library: * New library. * Contains the Formatter Library (note that unlike the imported library, the array-based formatter requires DS_CELL items for basic types, rather than accepting the _REF types). * ST_SPLITTER: parse a string to and from lists of tokens. Gobo Eiffel Time Library: * Support clocks with precision to the millisecond. However note that with SmartEiffel under Windows the millisecond part may be stuck to zero. * Better support for days of the week. * Added support of week number of dates. Gobo Eiffel Utility Library: * UT_URI path is parsed into components: `path_items'. * UT_HOST_PORT: new class for TCP hostname and port number. Version 3.3 - 2 November 2003 geant: * Fixed bug in task occurring when a nested element defined in the new format was specified. Gobo Eiffel XML Library: * XM_EIFFEL_PARSER.disable_namespaces allows multiple colons in names (strict XML compliance). Gobo Eiffel Kernel Library: * Removed usage of 'like argument' (will be removed from the Eiffel language because it was a disguised way of providing overloading in Eiffel) in features `substring', `to_lower', `to_upper', `as_lower' and `as_upper' in KL_STRING_ROUTINES. Version 3.2 - 29 June 2003 geant: * Element uses a new format. The old format is still working but an obsolete-message will be shown when applied. * Added optional attribute 'export' which takes a comma separated list of project names to which the given target is exported. * Added new command-line option -t (--targets) to list targets and their descriptions. * Added new task . * Added subelement to task . * Added attributes 'class' and 'feature' to task . * The task now takes advantage of Halstenbach incremental compiler. * Added attributes 'old_typing' and 'new_typing' to task . geyacc: * Made the semantic values more type-safe. Now the parser skeleton class is not generic anymore, and there is one different stack generated per declared type in the %type or %token clauses. Geyacc also generates the corresponding attributes `last__value' instead of `last_value' to be used to set the semantic values of tokens. Transition path: If you still want to use the old typing mechanism (now made obsolete), use geyacc with the command- line option --old_typing or with geant's attribute 'old_typing' in task . It is also recommended that you replace class YY_PARSER_SKELETON by YY_OLD_PARSER_SKELETON in your code. Alternatively you can now switch to the new typing mechanism using geyacc's --new_typing command-line option or attribute 'new_typing' in task in geant. In that case you will have to use the non-generic class YY_NEW_PARSER_SKELETON instead of YY_PARSER_SKELETON and replace the calls to `last_value' by the corresponding `last__value' in your code. In the next release YY_PARSER_SKELETON will stop to be a synonym of YY_OLD_PARSER_SKELETON and will be used as a replacement of YY_NEW_PARSER_SKELETON. In the release after, the old typing mechanism will not be supported anymore, classes YY_OLD_PARSER_SKELETON and YY_NEW_PARSER_SKELETON will be removed, and you will have to use YY_PARSER_SKELETON along with the `last__value' attributes in your code. getest: * Added command-line options --class and --feature to pass the regexps for tested class names and feature names as argument instead of through the 'class' and 'feature' fields of the config file (needed by Guy Fokou). * Better formatting of the message when `assert_equal' or `assert_not_equal' fail (suggested by Berend de Boer). Gobo Eiffel Lexical Library: * Renamed `convert' as `convert_to_equivalence' in class LX_SYMBOL_CLASS because 'convert' is a keyword in ETL3. Gobo Eiffel Tools Library: * Big chunks have been redesigned. Still under development. Gobo Eiffel XML Library: * Eiffel parser now accepts 'iso-8859-1' encoding. * Tree formatter now produces valid XML. * Tree node parent not void (when not the root node) implemented where missing and creation procedures updated accordingly. Also for the root element, so that `root_node' returns the real root (XM_DOCUMENT). XM_NODE.level consequently offset by 1. * XM_COMPOSITE now a read-only list. Modification routines are in XM_ELEMENT and XM_DOCUMENT (typing is used to allow only the correct node types to be added). * XM_COMPOSITE descendants' modification routines remove a node from its previous parent if any. They also have `make_last' creation routines that add the node to the composite. `make_last' is faster than `make', `force_last'. * XM_NODE.parent_element added, root_node now XM_DOCUMENT. * XM_NAMESPACE stricter contracts and uri invariant, `is_default' replaced by `not has_prefix', removed rather than obsoleted due to SmartEiffel's ANY using the name. * XM_DOCUMENT.set_root_element now exported to ANY. * XM_NAMESPACE_RESOLVER now issues empty strings (the default namespace) rather than the parent element's namespace for on_attribute events in the case of unprefixed attributes. (XML Names says unprefixed attributes have no namespace.) * XM_ELEMENT.*attribute_by_name only look for unprefixed attributes, for the same reason as above. * Added _by_qualified_name routines to tree nodes. * XM_FORMATTER.last_string replaced by .last_output stream. * XM_NODE_TYPER.attribute obsoleted and renamed to `xml_attribute' to avoid future keyword collision. Miscellaneous: * Now uses the Eiffel Forum License version 2, which is an OSI Approved License and a GPL-Compatible, Free Software License. * Does not support Halstenbach compiler anymore. Indeed Halstenbach does not seem to maintain/release their Eiffel compiler on their Web site anymore and a poll among the Gobo users has shown that it was not worth the effort to continue supporting this out-of-date compiler in Gobo. Version 3.1 - 18 December 2002 gelex: * Feature YY_BUFFER.content is now of type KI_CHARACTER_BUFFER instead of KL_CHARACTER_BUFFER (Berend de Boer). geant: * The task now takes advantage of ISE Eiffel incremental compiler. getest: * Fixed bug: only the first cluster listed in the config file was taken into account (reported by Guy Fokou). Gobo Eiffel Kernel Library: * Moved feature `close' up to KI_INPUT_STREAM and KI_OUTPUT_STREAM and added feature `is_closable' (suggested by Franck Arnaud). * Made sure that `hash_code' in UC_STRING returns the same value when `same_string' returns true. Gobo Eiffel Lexical Library: * LX_NFA: Renamed `infix "|{n,}|"' as `infix "|{*}|" and `infix "|{n}|"' as `infix "|{}|"' because the former free operator is not valid in ETL3 anymore (and SE 1.0b6 already supports the new syntax). All the free operators of this class have been made obsolete. Gobo Eiffel Time Library: * DT_DATE: Renamed `infix "&d"' as `infix "&@" because the former free operator is not valid in ETL3 anymore (and SE 1.0b6 already supports the new syntax). * DT_TIME: Renamed `infix "&t"' as `infix "&|" because the former free operator is not valid in ETL3 anymore (and SE 1.0b6 already supports the new syntax). Gobo Eiffel XML Library: * Tree: `namespace' in named nodes is now an object, which contains URI and prefix. It may be shared. * Tree: `*_by_name' routines check the namespace is the same. * Tree: `is_first' and `is_last' in XM_COMPOSITE for checking position within parent. * Tree: added `elements' to XM_COMPOSITE. Version 3.0 - 1 September 2002 gelex: * Added feature `wipe_out' to YY_BUFFER and YY_FILE_BUFFER, which is useful in order to avoid invariant violation when reusing the same input buffer for subsequent scanning. (suggested by Emmanuel Stapf) * Options specified on the command-line now override those specified in the %option directives of the input file (reported by Sven Ehrke). geyacc: * Added command-line options '-k' and '--tokens-file': name of the file where the tokens class will be written (reported by Sven Ehrke). * Do not generate unused local variables anymore. * Do not generate unused $N type conversion routines, nor conversion routines for the generic parameters of these types. This caused Eiffel compilation errors when the generic parameter was a formal generic parameter (reported by Zoran Simic). * Fixed bug in default rule when the declared type is a basic expanded type. For example when the declared type in the %type section was INTEGER, the default rule was trying to set $$ to Void instead of 0 (reported by Emmanuel Stapf). getest: * Added command-line options: -g for testcase generation only, -c for testcase compilation only, and -e for testcase execution only (suggested by Glenn Maughan). * Added assertion routines to compare file contents and filenames. * Added command-line option --compile to pass the Eiffel compilation command-line as argument instead of through the 'compile' field of the config file. * Added command-line options -D and --define to define variables which will be passed to the command running the test cases. * The 'testgen' directory is now created by 'getest' if it does not exist yet. * Do not try to run the test anymore when the command specified for the Eiffel compilation exists with a status code other than zero. gepp: * Added command-line options --lines and -l in order to generate empty lines whenever lines are ignored from the input file. That way line numbers are preserved. (suggested by Alexander Kogtenkov) geant: * First release (contributed by Sven Ehrke). gexace: * First release (contributed by Andreas Leitner, currently maintained by Eric Bezault). gexmlsplit: * First release (contributed by Andreas Leitner). Gobo Eiffel Kernel Library: * No need for 'include_path' in the Ace file anymore in order to use KL_STRING_BUFFER_ROUTINES with ISE Eiffel. Use new routines introduced in class POINTER in ISE Eiffel 4.5 instead. * Added cluster $GOBO/library/kernel/io with directory, file and file-system functionalities. * Added cluster $GOBO/library/kernel/misc with miscellaneous kernel classes. * Added cluster $GOBO/library/kernel/unicode with Unicode support classes (based on the work from Majkel Kretschmar). Gobo Eiffel Structure Library: * Fixed bug in feature `force_last' of DS_SPARSE_SET and DS_SPARSE_TABLE when resizing the container. * Changed postconditions in DS_LINEAR_CURSOR and DS_BILINEAR_CURSOR which prevented descendants to implement partial traversals or different traversal strategies (reported by Berend de Boer and Einar Karttunen). * Fixed bug in HASH_TABLE related to the new implementation in ancestor class DS_SPARSE_TABLE (reported by Emmanuel Bouyer). * Fixed bug in LINKED_LIST.cursor_back (reported by Paul Ford). Gobo Eiffel Time Library: * Fixed bug related to the implementation of features `date' and `time' in DATE_TIME and DATE_TIME_DURATION (reported by Emmanuel Bouyer). * Added feature `set_storage' to DT_DATE and DT_TIME. * Fixed bug in feature `add_minutes' of DT_DATE_TIME (reported by Glenn Maughan). * Fixed bug in feature `set_from_epoch_days' of DT_DATE when the resulting date in 1 January 1600 (reported by Emmanuel Bouyer). * No need for 'include_path' in the Ace file anymore in order to use DT_SYSTEM_CLOCK with ISE Eiffel. * Added class DT_UTC_SYSTEM_CLOCK. * Added creation routine DT_DATE_TIME.make_from_epoch. Gobo Eiffel Pattern Library: * New library with design pattern classes. * Moved $GOBO/library/utility/command cluster to $GOBO/library/pattern/command and change class name prefix from UT to DP. * Added feature `exit_code' to class DP_SHELL_COMMAND. Gobo Eiffel Regexp Library * New library for regular expression handling. Contains a implementation based on the PCRE package (contributed by Harald Erdbruegger based on his ePCRE library). Gobo Eiffel XML Library * New library for XML parsing and XML tree handling (contributed by Andreas Leitner based on his eXML library, and by Franck Arnaud based on his NenieXML parser. The library has been redesigned and is currently maintained by Franck Arnaud). Miscellaneous: * The Gobo project is now taking full advantage of 'geant' and 'gexace' instead of Makefiles (which were not portable across platforms). Version 2.0 - 29 April 2001 geyacc: * Geyacc now generates the routine `token_name' along with the token codes to make the debugging messages more human-readable (suggested by Andreas Leitner). gelex: * Added debugging instructions at the end of routine `read_token' in classes YY_COMPRESSED_SCANNER_SKELETON, YY_INTERACTIVE_SCANNER_SKELETON and YY_FULL_SCANNER_SKELETON. One need to compile the system with 'debug ("GELEX")' enabled. The routine `print_last_token' can be redefined in descendant classes to print more debugging information. In particular, the routine `token_name' generated by geyacc can be used to make the debugging output more human-readable. (suggested by Andreas Leitner) getest: * First release. Gobo Eiffel Structure Library: * Added argumentless creation routine `make_default' to most containers. In resizable containers `make_default' is equivalent to `make (default_capacity)' where `default_capacity' is a constant (10) defined in class DS_RESIZABLE (suggested by Franck Arnaud). * DS_SORTER and descendant classes now use DS_COMPARATOR as comparison criterion (suggested by members of the SmallEiffel mailing list). * Added class DS_TOPOLOGICAL_SORTER to sort partially ordered items. * Added DS_SET and descendant classes such as DS_HASH_SET and DS_MULTIARRAYED_HASH_SET. * DS_HASH_TABLE: added creation routine `make_map' in order to compare keys with '=' instead of `equal'. * DS_HASH_TABLE: added features `remove_found_item', `found_key' and `force_last'. * Added class DS_MULTIARRAYED_HASH_TABLE with the same interface as DS_HASH_TABLE but implemented with a sequence of fixed size arrays instead of a single array. This might be useful for hash tables containing a very large number of items. * Fixed bug in DS_LINKED_LIST.delete (reported by Emmanuel Bouyer). * Fixed bug in QUEUE.{force, put, extend}: removed erroneous postcondition "item_pushed" (reported by Emmanuel Bouyer). * Moved $GOBO/library/structure/base to $GOBO/library/ structure/other/EiffelBase. * Moved cursor classes next to their associated containers and removed cluster $GOBO/library/structure/cursor. Gobo Eiffel Time Library: * First release. Miscellaneous: * Removed comments in 'loadpath.se' files which caused problems on AmigaDOS (suggested by Thomas Aglassinger). * Added Makefiles in various directories. Version 1.6 - 20 August 2000 geyacc: * One can now use manifest strings (e.g. "<=" or "..") in place of identifiers (e.g. LE or DOTDOT) in grammar rules (suggested by Berend de Boer). * Anchored types are now accepted in %type declarations. * Improved format of tokens in verbose file (suggested by Roger Browne). * Added ISE's language extensions to the Eiffel parser example (suggested by Patrick Flaherty). * The Eiffel parser example now accepts empty Eiffel source files (suggested by Alexander Kogtenkov). * Added a few words in the documentation about the Eiffel debug instructions spread out in the parser skeleton class (suggested by Francis Drai). gelex: * Added redefinable routine `default_action' to YY_SCANNER when default rule is matched (suggested by David Massart). * Added `pre_action' and `post_action', called when %option pre-action and %option post-action are specified (suggested by Alexander Kogtenkov). * Added `pre_eof_action' and `post_eof_action', called when %option pre-eof-action and %option post-eof-action are specified. * Added '%option line' to generate code for line and column counting (suggested by Alexander Kogtenkov). * Added '%option position' to generate code for character counting since the beginning of the input source. * Fixed bug when the input buffer contains a null character (reported by Emmanuel Stapf). * Fixed bug when scanning a token larger than the size of the input buffer (reported by Emmanuel Stapf). Gobo Eiffel Structure Library: * DS_TRAVERSABLE: removed postcondition from routine `valid_cursor' and made `internal_cursor' deferred (suggested by Andreas Leitner). * DS_SEARCHABLE: added features `same_items' and `same_equality_tester'. * DS_ARRAYED_LIST, DS_ARRAYED_STACK: got rid of garbage (i.e. old items at indexes count+1..capacity) in removal features. * DS_TABLE, DS_SPARSE_TABLE, DS_HASH_TABLE: added feature `put_new'. * DS_SPARSE_TABLE, DS_HASH_TABLE: added feature `replace_found_item'. * DS_SPARSE_TABLE, DS_HASH_TABLE: new optimized implementation (requested by Jacques Bouchard). * DS_SPARSE_TABLE: added feature `key'; optimization of feature `force' (avoid unnecessary resizing). * HASH_TABLE: optimization of features `put' and `force' (avoid unnecessary resizing). * DS_SORTER: Added features `reverse_sort' and `reverse_sorted'. Gobo Eiffel Kernel Library: * Added class KL_DIRECTORY to allow Eiffel compiler portable directory access. Gobo Eiffel Utility Library: * Fixed bug in feature `append_decimal_integer' from class UT_INTEGER_FORMATTER when dealing with negative values. Version 1.5 - 2 October 1999 geyacc: * Fixed bug in verbose mode: the useless rules and nonterminals were not displayed properly (reported by Berend de Boer). * Fixed bug when dealing with two consecutive semantic actions in a rule (reported by Alexander Kogtenkov). * Fixed bug whereby the end-of-file was not recognized properly (reported by Patrick Doyle). * Updated documentation to state that the Eiffel type for the semantic of a mid-rule action is the same type as declared for the full grouping (reported by Andreas Auras). Gobo Eiffel Structure Library: * The documentation has been greatly improved. * Added a `test' directory as a starting point for a test suite. * Added a cluster containing an implementation of the main EiffelBase classes based on the Gobo containers. * Added support for internal iterations (a la EiffelBase). Some feature renaming was necessary: routines with an external cursor as argument, such as `put_right', have been renamed with the `_cursor' suffix, as in `put_right_cursor'. The original feature names have been reused by the internal traversal interface, e.g. `put_right' inserts an item to the right of the internal cursor position. * Cursors are always kept valid. There is no need for calls to `a_cursor.is_valid' anymore. * DS_LINEAR_CURSOR does not inherit from DS_INDEXED_CURSOR anymore. * Added classes DS_QUEUE and DS_LINKED_QUEUE. Version 1.4 - 14 April 1999 * Multiple types for semantic values now supported in geyacc. * In geyacc, $$ entities are now initialized to their default Eiffel values at the beginning of semantic actions and the default for missing actions is "{}" (it used to be "{$$ := $1}" as in yacc and Bison). * Added warning/error in geyacc when $N in a semantic action does not match with a symbol in the rule. * Fixed bug in output of geyacc verbose mode (option -v). * Routine `clear_all' from YY_PARSER_SKELETON clears internal stacks by default (call to `clear_stacks'). * Added two new types in $GOBO\library\kernel: STRING_BUFFER and FIXED_ARRAY (array with lower bound equal to zero). These two types are used instead of STRING and ARRAY in gelex and geyacc skeleton classes for optimization purposes. STRING_BUFFER maps either to SPECIAL [CHARACTER] or STRING, and FIXED_ARRAY [G] maps either to SPECIAL [G] or ARRAY [G] depending on the Eiffel compiler used. Only ISE Eiffel port has been optimized so far. SmallEiffel port can be optimized as well using FAST_ARRAY [G] or NATIVE_ARRAY [G]. * Added features `Empty_buffer', `append_text_to_string' and `append_text_substring_to_string' to YY_SCANNER. * Added a precondition to routine `set_start_condition' in class YY_SCANNER. * Resize input buffer if a call to `unread_character' results in too much text being pushed back (it was raising a run-time error in previous releases). * Added command-line option -x to gelex and geyacc to allow the generation of semantic actions in separate routines. * Added command-line option -z to gelex to force the generated code to use an "inspect" instruction to find out which action to execute. The default is to use binary-search implemented with "if" instructions. * Fixed operator precedence bug in "$GOBO\example\ parse\eiffel\eiffel_parser.y". Version 1.3 - 15 August 1998 * Geyacc has been totally rewritten in Eiffel. * Replaced attribute `output_file' by procedure `output' in class YY_SCANNER to avoid unnecessary console creation in Windows mode with Visual Eiffel. * Fixed bug in gelex in "equivalence class" mode when dealing with regular expressions of the form x{4}. * Added warnings in gelex when a rule cannot be matched and when the default rule can be matched despite the %option nodefault or -s option. * Renamed classes KL_SHARED_*_ROUTINES as KL_IMPORTED_*_ROUTINES. (The old class names are still temporarily valid using the classes in cluster "$GOBO\library\kernel\obsolete".) * Gepp now supports #include "filename" instructions. * The second generic parameter of DS_HASH_TABLE is now constrained to HASHABLE (HASHABLE was not part of SmallEiffel in previous releases). * Cluster `error' has been added to the Gobo Eiffel Utility Library to support a flexible error reporting mechanism. Version 1.2 - 17 December 1997 * New implementation for variable trailing context in gelex, with warnings for dangerous trailing contexts of form such as x*/xz*. * Improved documentation. Version 1.1 - 29 October 1997 * Bug fixed wrt variable trailing context in gelex. Version 1.0 - 14 October 1997 * First public release. * Gold Award at the Eiffel Class Struggle '97.