- Added option to ignore validity errors in classes which are not reachable from the root class.
- Avoid reporting validity errors which are the consequence of other errors in previous Degrees.
- Indicate
*UNKNOWN*instead of a wrong type when hoverring the mouse over the text of a class which contains errors. - Stop reporting validity errors in a class whose file has just been deleted.
- Added option to ignore unused local variable warnings.
- Fixed some issues that prevented the GC from collecting a SCOOP region (and stopping its thread) when no objects in this region were referenced from other regions anymore.
- Made sure to properly synchronize with already locked regions in case of multiple separate arguments. The new implementation ensures that the already locked regions are ready to execute upcoming separate calls on their processors before synchronizing.
- Improved the way SCOOP passive regions are handled at run time.
- Fixed bug (infinite loop) during Degree 3 when incrementally recompiling a class declaring two features with the same name, even though this validity error was previously reported during Degree 4.
- Fixed C code generation when calling a
precursorwhich is a once-per-object routine. - Fixed runtime C code when compiling with gcc 15.2.0 on Ubuntu 26.04.
- Avoid possible infinite loops when inheritance cycles or type anchor cycles have been detected during a previous Degree but the compiler proceeds further in fault tolerant mode.
- Optimized semi-strict boolean infix expressions so that assertions
of the form
elks_checking implies f (old twin)do not trigger a call totwinon routine entry whenelks_checkingis a constant attribute of valueFalse. - Upgraded Zig toolchain to version 0.17.0.
- Added the generation of the contract-view of classes
when using the format
html-stylesheet.
- Added pre- and postconditions to the feature signature in the tooltip shown when mouse hovering over a feature name.
- Added support for contract-view (or short form) and flat-contract-view (or flat short form) of a class, where internal implementation details are hidden, keeping only an interface representation.
- Correctly point to the formal argument
awhen hoverring the mouse over the anchor of a type of the formlike a(it was trying to find a featurea).
- Exit with code
1when a test case class contains a syntax error.
- Made implementation of
ISE_SCOOP_RUNTIME.region_idmore robust: it does not return auint16-truncated address anymore but a realuint16id. As a consequence an exception is raised when the number of SCOOP regions is greater than 65535. - Synchronized with version in EiffelStudio 26.09.9.9100.
- Added
match_limit/set_match_limitto limit the number of internal steps when calling one of thematchroutines. The default is0, which means no limit. When exceeding this limit, the match fails (i.e.has_matchedis set to False) andmatch_limit_exceededis set to True.
- Upgraded ISE Eiffel to version 26.09.9.9100.
- Made sure that
default_createis called when initializing expanded objects. - When generating a new ECF file, turn on the preconditions.
- Implemented SCOOP wait conditions.
- Improved the way multiple SCOOP separate arguments are handled at run time.
- Added semantics tests for
VOIT(Iteration rule). - Added validation tests for
VTEC-2(Expanded Type rule).
- When generating a new ECF file, turn on the preconditions.
- Added formats
contract_viewandflat_contract_viewto generate the contract-view (or short form) and flat-contract-view (or flat short form) of a class or of a set of classes, where internal implementation details are hidden, keeping only an interface representation. - Added the generation of the flat-contract-view of classes
when using the format
html-stylesheet.
- Fixed tooltip for the feature names of qualified calls when the target types are generic.
- Improved detection of non-initialialized attributes of attached types when the initialization occurs in a once-routine.
- Added validity checks for expanded types. Validity rules
VTEC-2.
- Added validation tests for
VYCP(Conversion Procedure rule) andVYCQ(Conversion Query rule). - Added validation tests for
VHPR-2(Parent rule). - Added validation tests for
VGFG-3G(Formal Generic rule). - Added validation tests for
VKCC-4andVKCC-6G(Creation Clause rule). - Added validation tests for
VKIN-6G(Creation Instruction rule). - Added validation tests for
VKEX-5G(Creation Expression rule). - Added semantics tests for
MKIN(Creation Instruction semantics). - Added semantics tests for
VOMB(Multi-branch rule). - Added semantics tests for
VOIN(Interval rule). - Added semantics tests for
MOMB(Multi-Branch semantics).
- Added validity checks for convert clauses. Validity rules
VYCPandVYCQ. - Added support for once classes (not in the ECMA standard, but supported by ISE Eiffel).
- Added validity checks for inspect instructions/expressions.
Validity rules
VOMBandVOIN. - Added support for inspect instructions/expressions on
STRINGandTYPEexpressions.
- Upgraded Zig toolchain to version 0.16.0.
- Upgraded Boehm GC to version 8.2.12.
- Added command-line option
--initto create ECF and Eiffel root class files if missing. - Added command-line option
--compileto compile the Eiffel system. This is the default unless--initor--runis specified. - Added command-line option
--runto run Eiffel system. Do not compile unless the executable is not found. - If the input filename has no extension, the extension
.ecfis assumed.
- Fixed bug in fault tolerant Eiffel parser when processing binary
expressions with
@operator symbol.
- Added validation tests for
VEVI("Variable Initialization rule").
- Click on a keyword to highlight all keywords of the enclosing Eiffel construct.
- Type
Shift+Alt+RightArrowto expand the selection to the enclosing Eiffel construct (andShift+Alt+LeftArrowto shrink the selection). This operation can be repeated several times.
- Added support for
textDocument/documentHighlightrequest. - Added support for
textDocument/selectionRangerequest.
- Fixed validity checking of
oldexpressions. The following code snippetsattached exp as e and then old e.fandacross exp as i all i.f endwere accepted even thougheandiare out of scope when evaluating theoldexpressions on entry of the enclosing feature. - Check that attributes declared as attached are not used before
being initialized, and are initialized at the end of creation
procedures. Validity error
VEVI.
- Implemented
Call Hierarchymenu/panel with callers and callees in case of features, and with clients and suppliers in case of classes. - Implemented
Type Hierarchymenu/panel with ancestor and descendant classes. - Class analysis is now fault tolerant, which allows class texts to be fully browsable even when they contain syntax or compilation errors.
- Do not request restarting the Eiffel server more than once to avoid ending up with several servers running.
- Added completion snippets.
- Added support for
textDocument/prepareCallHierarchy,callHierarchy/incomingCallsandcallHierarchy/outgoingCallsrequests. - Added support for
textDocument/prepareTypeHierarchy,typeHierarchy/supertypesandtypeHierarchy/subtypesrequests.
- Fixed processing of pre- and postconditions in inlined agents.
- Implemented fault tolerant Eiffel parser and improved syntax error messages.
- Added option to make Degree 4 and 3 fault tolerant: classes are checked (although without reporting errors) even when errors have been detected in one of the previous Degrees. Useful in order to decorate the AST with useful information such as the seed of the feature in call instructions.
- Keep as many components as possible in the AST in case of syntax error.
- Report unused local variables.
<copy file="..." to_file="..."/>now creates missing directories in the destination path.
- Fixed bug when inlining code in inherited assertions (preconditions, postconditions and invariants).
- Stop at the end of Degree 3 when there is no root class specified and CAT-call error reporting is turned off.
- Fixed bug where overriding library options were not taken into account in ECF files.
- Fixed bug in C code generated for iteration items and object-test locals in inherited pre- and postconditions.
- Fixed bug in C code generated for pre- and postconditions of external
inline Croutines. - Fixed bug in C code generated for
oldexpressions which are the expanded targets of qualified calls. - Fixed computation of the dynamic type sets of the arguments of feature
ROUTINE.set_rout_disp_final. - Made sure that invariants are not checked when calling
disposefrom the GC. - Made the implementation of
ANY.standard_is_equalatomic when the target and the argument are the same object so that we don't getreflexive_equality: standard_is_equal (Current)invariant violations in multi-threaded mode. - Improved C code generation for inherited pre- and postconditions to avoid checking twice the same assertion.
- Fixed bug in C code generated for exception trace in empty routines when assertions are monitored.
- Fixed implementation of built-in feature
SPECIAL.standard_is_equal:capacityshould not be taken into account. - Fixed computation of dynamic type sets in assertions of agent
routines (
FUNCTION.itemandPROCEDURE.call). - Fixed computation of dynamic type sets when raising assertions in once routines.
- Skip types which are not in the system (type id = 0) when generating ancestors information in the generated C code.
- Fixed computation of the dynamic type sets of the arguments of routines whose addresses are passed to C and then called back from C.
- Fixed implementation of
eif_adopt/eif_access/eif_weanwhen the Eiffel objects are not visible from the Boehm GC's roots (e.g. when using the EiffelVision GTK binding). - Eiffel objects passed as arguments to
external "C"routines areeif_protected behind the scene (interoperability with ISE Eiffel). - Added comments in the generated C code to pinpoint preconditions, postconditions and invariants.
- The default value for the setting
exception_tracein ECF files is nowFalsein finalize mode, andTrueotherwise (for a better interoperability with ISE Eiffel).
- Added command-line option
--libraryto specify the names of libraries whose classes will be processed. Accept wildcards such as--library= str*orlibrary=@(structure|string). This option can be used several times to specify several library names. - Updated output of format
html_ise_stylesheetto match the stylesheet used in documentation generated by recent versions of EiffelStudio (25.02). - Modified output of format
html_ise_stylesheetto display all subclusters, even when the root cluster is declared as recursive. - Added command-line option
--no-forceto indicate that existing files should not be overwritten. Nothing shoud be done, silently without asking. - Added format
unused_classto get the list of unused classes, and/or delete them.
- Implemented
Go To Type Definitionnavigation (in the contextual menu). - Implemented completion (
Ctrl+Spaceor as you type), with snippet for the arguments of feature calls and the generic parameters of a class type. - Implemented
Go To Feature Implementationsnavigation (Ctrl+F12or in the contextual menu). - Send custom notifications to VS Code to let it know when a restart of the Eiffel language server is needed.
- Send custom notifications to VS Code to let it know when the Eiffel language server is busy analyzing the whole Eiffel project from scratch.
- Implemented workspace symbol search (
Ctrl+T) to go to classes and their features by name. - Take into account modifications of the workspace ECF file and target settings.
KI_FILE.copy_fileandKI_FILE_SYSTEM.copy_filenow create missing directories in the destination path.- Fixed postcondition of
KL_ARGUMENTS.to_array.
- Added support for
textDocument/declarationrequests. - Added support for
textDocument/typeDefinitionrequests. - Added support for
textDocument/implementationrequests. - Added support for
textDocument/completionandcompletionItem/resolverequests. - Added support for custom notifications.
- Added support for
workspace/symbolandworkspaceSymbol/resolverequests. - Added support for
workspace/didChangeConfigurationnotifications.
- Implemented CAP (Certified Attachment Pattern) for inline separate
arguments (e.g.
sepatate exp as x do if x /= Void then x.f end end). - Fixed bugs during incremental compilations (used a lot from VS Code to report errors as you type).
- Fixed bug where some formal arguments were wrongly assumed to be attached.
- Report correct error messages in case of name mismatches involving
arguments of inline separate instructions (e.g.
sepatate exp1 as x do across exp2 as x loop x.f end end). - Fixed interoperability issue with ISE Eiffel: in ISE Eiffel it is
allowed to have a binary expression where the left-hand-side
expression is converted to the type of the right-hand-side
expression even if there is no such binary operator defined in the
type of the left-hand-side expression. This violates ECMA rule
DWTC("Definition: Target-converted form of a binary expression"). - Avoid infinite loop when computing dynamic type sets involing
TYPE(e.g.TYPE [TYPE [TYPE [... TYPE [FOO] ...]]]) by considering that the type of aTYPEobject isTYPE [NONE]and notTYPE [TYPE [...]]. - Implemented built-in features from class
IDENTIFIED_CONTROLLER. - Fixed regular expressions to check the validity of special characters and manifest strings.
- Fixed several assertions and assertion violations.
- Initial implementation of a language server for the Eiffel language. Used from the Gobo Eiffel VS Code Extension.
- Use the ECF specified in the workspace settings, otherwise use the last ECF file (in alphabetic order) found at the root of the workspace folder, otherwise use the default ECF file (using Gobo Eiffel libraries and recursive clusters from the root of the workspace folder). Then use the ECF target specified in the workspace settings, otherwise use the last target in the ECF file.
- Display Eiffel syntax and validity errors on the fly (in the Problems panel and with error squiggles).
- Update displayed information on the fly when Eiffel classes are modified.
- Implemented tooltips with signatures and header comments.
- Implemented
Go To Definitionnavigation (in the contextual menu). - Implemented feature and feature clause navigation (in the Outline panel).
- Restart Eiffel language server after a given number Eiffel compilations to reclaim memory and avoid potential incremental compilation issues.
- Initial implementation of a language server SDK in Eiffel.
- Added support for text document synchronization.
- Added support for
textDocument/hoverrequests. - Added support for
workspace/didChangeWatchedFilesnotifications. - Added support for
textDocument/definitionrequests. - Added support for
textDocument/documentSymbolrequests. - Added support for
workspace/configurationrequests. - Added support for
textDocument/publishDiagnosticsrequests.
- Added new AST processor to find browsable items (i.e. Eiffel text for which we can get additional information) at a given text position.
- Allow read-only universes to be preparsed again when
preparse_readonly_modeis True. - Made it possible to handle class texts currently being modified in a text editor but not saved in files yet.
- Fixed and improved Eiffel error messages so that they can be captured in the Gobo Eiffel VS Code Extension.
- Added format
executable_nameto get the name of the executable to be compiled using a given ECF file. - Let the
ecf_pretty_printformat generate a new ECF file when provided with an Eiffel file instead of an ECF file as input.
- Released a VS Code extension for the Eiffel language using Gobo Eiffel. See description in Marketplace and code in GitHub repository.
- Added option
timeoutto task<exec>. - Added command-line option
--threadto override the maximum number of threads to be used by thread-capable tasks. - Added new task
<gecc>.
- Added support for
STORABLE(independent store format only). Does not support classesMISMATCH_CORRECTOR,CLASS_NAME_TRANSLATIONS, nor the note tag"storable_version"yet. - Added support for SED classes.
- Added support for assertion monitoring.
- Added support for signals.
- Added support for SCOOP. Using preconditions as wait conditions is not supported yet.
- Do not generate the SCOOP overhead when there is no separate creation in the program.
- Generate intermediary files in a subfolder
.gobo. - Use the Boehm GC by default (included in the Git repository and bundled into the delivery package).
- Use Zig toolchain as default backend C compiler (bundled into the delivery package).
- Allow
gecto accept an Eiffel file as argument instead of an ECF file. An internal ECF template will be used in that case. - CAT-calls are now ignored at compile time (they will be caught
at runtime). Use the command-line option
--catcallwithwarningto get the previous behavior (warning at compile time and caught at runtime). All applications in the Gobo Eiffel package are compiled using the option--catcallwitherrorto guarantee at compile time that they don't contain any CAT-calls. - Build dynamic type sets of external C functions (assuming that the C code does not set an attribute of the resulting objects with an object whose dynamic type is not already part of the dynamic type set of this attribute as inferred from the Eiffel code).
- Allow the C files included in the ISE EiffelVision2 library to be compiled correctly using the Gobo Eiffel runtime.
- Allow the C files included in the ISE EiffelCurl library to be compiled correctly using the Gobo Eiffel runtime.
- Allow the C files included in the ISE EiffelNet library to be compiled correctly using the Gobo Eiffel runtime.
- Fixed implementation of
PLATFORM.is_64_bits. - Accept the following external C syntaxes:
C [macro <ev_gtk.h>] | "eif_argv.h"andC Macro use <ev_gtk.h>used in ISE EiffelVision2. - Do not generate Makefiles anymore under Linux/MacOS. Rely on
geccinstead. - Do not check call-on-void-target at runtime in void-safe mode
by default anymore. Use the ECF setting
check_for_void_targetto get this behavior. - Added support for inlining in the generated C code. Can be
configured using the ECF settings
inliningandinlining_size. - Changed implementation of built-in function
generating_typein classTYPEso that it returns an object of typeTYPE [NONE]instead ofTYPE [detachable TYPE [G]]. This is to avoid an infinite loop when computing the set of dynamic types at compile time. - Changed the default for the command-line option
--threadto be-3instead of0("number of available CPUs -3" instead of "number of available CPUs").
- Changed the default for the command-line option
--threadto be-3instead of0("number of available CPUs -3" instead of "number of available CPUs").
- Added validation tests for
VSCI,VSRPandVSRT. - Added validation tests for
VSCN("Class Name rule"). - Added validation tests for
S7SC("Semicolon Optionality rule"). - Added validation tests for
M7CI("Case Insensitivity principle"). - Added test cases for SCOOP semantics and validity rules.
- Added command-line option
--progressto show the names. - Changed the default for the command-line option
--threadto be-3instead of0("number of available CPUs -3" instead of "number of available CPUs").
- Changed the default for the command-line option
--threadto be-3instead of0("number of available CPUs -3" instead of "number of available CPUs").
- Added support for SCOOP.
- Allow
gelintto accept an Eiffel file as argument instead of an ECF file. An internal ECF template will be used in that case. - Changed the default for the command-line option
--threadto be-3instead of0("number of available CPUs -3" instead of "number of available CPUs").
- Added support for SCOOP.
- Added support for ECF version 1.23.0.
- Avoid reporting errors which are the consequence of other errors already reported.
- The Gobo Eiffel delivery package can be unzipped and used without the need for any configuration. No need to set environment variables or create an ECF file to compile your first "Hello World" program in Eiffel.
- Added nightly builds in GitHub repository.
- Added option
executablefor the tasks<gec>and<ise>to be able specify the filename (optionally with a pathname) of the Eiffel compiler executable. The default is the executable which can be found in thePATH. - Added option
exit_code_variableto the task<getest>. - Added task
<cat>, which is similar to<echo>except that it writes the content of a file instead of a message. - Display Eiffel compilation error message when an error occurred during
the compilation of the test harness in task
<getest>.
- Added runtime support for attributes with self-initializing code.
- Added support for the ECF setting
line_generation, with preprocessor statements#linenow included in the generated C code. - Let the test in
$GOBO/tool/gec/test/toolrungecopwith thegecexecutable just built (the executable under test). - Added support for once-per-object.
- Fixed C code generation for creation instruction when the target is declared of reference type and the creation type is expanded.
- Fixed C code generation of creation expressions.
- Fixed C code generation when extracting agent arguments from polymorphic tuple.
- Improved interoperability with ISE Eiffel when calling routines: for
each actual argument in the order listed, first it is evaluated, then
converted if needed, and finally if the resulting object has copy
semantics it is cloned. This is different from what is specified in
MUGCin the ECMA Eiffel standard where the actual arguments are first evaluated and converted (first traversal in step4) and then cloned (second traversal in step5). So the two traversals in steps4and5need to be merged into a single traversal. - Fixed C code generation when an external routine is of the form
external "C : int | <file.h>"with no argument types in the signature. - Implemented copy semantics (reference entities attached to objects of
expanded types) in attachments (e.g. assignment and argument passing)
and comparisons (
=,/=,~and/~) as well as in Kernel built-in features (e.g.ANY.standard_copyorANY.standard_is_equal).
- Made
gecopmulti-threaded. Each thread will run its own set of validation tests independently of the others. - Added command-line option
--tool-executableto specify the executable filename (optionally with a pathname) of the Eiffel tool to be tested. The default is eithergec,gelint,ecwhich can be found in thePATH. - Added test cases for semantics rules
MBAS,MBRE-1andMVOL. Added some comments about issues in the ECMA Eiffel standard (Reattachment Semantics). - Added test cases for semantics rules
MUGC. - Added test cases for rules
M1EEandM1IEexercising the semantics of equality and inequality expressions.
- Added format
descendantsto get the list of descendants classes of a class or of a set of classes.
- Let the test in
$GOBO/tool/gelint/test/toolrungecopwith thegelintexecutable just built (the executable under test).
- Changed exit code to
3in case of an Eiffel compilation error when compiling the test harness.
- Added support for multi-threading where running tests with the
class
TS_MULTITHREADED_TEST_SUITE.
- Improved processing of conversion expressions.
- Fixed textual representation of
ET_TUPLE_TYPEin case of labeled tuples: should use;instead of,as separator for actual generic parameters (e.g."TUPLE [a: A; b: B]"and not"TUPLE [a: A, b: B]"). - Fixed the fact that it is valid to have
x.fwhere the type ofxis a formal generic parameter andfis a tuple label declared in several constraintsG -> {TUPLE [f: INTEGER], TUPLE [f: INTEGER]}because the two constraints have the same base type and the labels are at the same position. - Disallowed conformance of
B [C]toB [D]whenBis expanded andCandDare not the same type. This is to avoid polymorphism when the type of an entity is expanded, as implicitly implied in the rest of the Eiffel language definition. - Added support for ECF 1.22.0 and its new option
is_obsolete_iteration. - Fixed default value for ECF option
warningwhen converting ECF files to newer versions of ECF. - Added support for the notation
@ito access the iteration cursor of an iteration whose iteration item isi, e.g.∀ i: list ¦ i = @i.index(1 is at the first position, 2 at the second position, etc.).
- Added test execution in GitHub Actions and Azure DevOps.
- Upgraded all ECF files to ECF 1.22.0.
- Display more progress information when installing the Gobo Eiffel package
unless the option
-sis specified.
- Added support for class mappings
STRING->STRING_32andCHARACTER->CHARACTER_32when specified that way in the ECF file. The default is still set toSTRING->STRING_8andCHARACTER->CHARACTER_8in the FreeELKS ECF file. - Added support for new built-in features
generator_8_of_typeandgenerating_type_8_of_typein classISE_RUNTIME.
- Added formats
implicit_convertsto show the list of implicit conversions in the Eiffel classes, andexplicit_convertsto make them explicit in the class text.
- New tool which is able to embed an image into an Eiffel class
which can then be used in applications using
EiffelVision2.
- Made sure that the library works with both class mappings
STRING->STRING_8andSTRING->STRING_32.
- Made sure that the library works with both class mappings
STRING->STRING_8andSTRING->STRING_32.
- Changed the implementation of class mappings in ECF
(
<mapping old_name="..." new_name="..."/>) so that its behavior matches what is implemented in ISE Eiffel. Note thatgecandgelintdo not support class mappings at the cluster level, only at the target level. - Improved interoperability with ISE Eiffel by making sure that in
void-safe mode the type
attached NONEconforms to all other types, even expanded types. - Fixed bug when looking for duplicates in multiple aliases
(e.g.
alias "+" alias "+"). - Added support for new symbolic forms of boolean operators
(
∧,∨,¬,⇒,⊻,∧…,∨…).
- Added support for new routines in class
IDENTIFIED_ROUTINES:eif_current_object_idandeif_is_object_id_of_current.
- Made sure that alias names with invalid free operators are rejected.
- Accept the special symbols
∀,∃,⟳,⟲and¦(used in symbolic forms of across loops) in free operators made up of two or more symbols. - Added support for multi-branch expressions (of the form
inspect x when 1, 2 then "foo" when 3..5 then "bar" else "gobo" end).
- Added test execution in GitLab CI/CD.
- Fixed bugs when generating code for
external "C++"routines. - Do not take into account resource files with extension
.resxspecified in ECF with<external_resource>when compiling in non .NET.
- Fixed bug in Eiffel pretty-printer. The symbol
∃was printed instead of~. - Added support for new values
none|current|errorfor warning optionobsolete_featurein ECF classes as introduced in ECF 1.21.0. Note thatgecdoes not take this option into account. - Added support for stable attributes in void-safe mode.
- Reordered
VFAVrules to match those of ISE Eiffel. Added a rule for multiple aliases with the same name. - Added classes
ET_AGENT_ERROR_HANDLERandET_ECF_AGENT_ERROR_HANDLERto be able to customize error reporting with agents (i.e. displaying validity error messages on a GUI window instead of on the console).
- Fixed ECF pretty-printer when printing
<external_linker>. The attribute name isvalueand notlocation. - Fixed ECF pretty-printer when processing files of the form
<redirection>. It was printing the file it was redirected to.
- Improved
gelexto generate smaller manifest arrays.
- Added support for manifest immutable strings
{IMMUTABLE_STRING_8} "..."and{IMMUTABLE_STRING_32} "...". More generally,IMMUTABLE_STRING_8andIMMUTABLE_STRING_32are considered as as sized variants ofSTRING(likeSTRING_8andSTRING_32). - Removed support for
infix "..."andprefix "..."syntax notations. We should usealias "..."instead, as described in the ECMA standard. - Added support for multiple aliases (e.g.
f alias "[]" alias "@" (i: INTEGER): T). - Added support for quantifier expressions of the form
∀ x: list ¦ x > 0as syntactic sugar foracross list is x all x > 0 end. - Added support for quantifier expressions of the form
∃ x: list ¦ x > 0as syntactic sugar foracross list is x some x > 0 end. - Added support for repeat instructions of the form
⟳ x: list ¦ x.do_something ⟲as syntactic sugar foracross list is x loop x.do_something end. - Relaxed the implementation of export status of inherited features in order to be compliant with the ECMA standard.
- Refined the way dynamic type sets for tuple items are computed.
- Added support for new values
none|warning|errorfor optionwarningin ECF classes as introduced in ECF 1.21.0. Note thatgecdoes not take this option into account.
- Fixed bug when computing equivalence classes. The generated arrays should be slightly smaller.
- Added support for Unicode. Regular expressions and embedded Eiffel code in
the
.linput file can contain Unicode characters. Unicode is supported natively by default, with no increase in size and execution time when the regular expressions only contain 8-bit characters. Alternatively, with the optionutf8Unicode characters are internally converted to their UTF-8 byte sequence in the generated scanner. This can be useful when the file to scan is already encoded with UTF-8, although the generated scanner will be larger and not necessarily faster. - Added support for addition and subtraction of character classes.
- Fixed bug when an Eiffel verbatim string in a semantic action contains a
closing brace
}, which was wrongly interpreted as the end of the Eiffel code for this semantic action. - Updated the documentation.
- Added support for Unicode. Embedded Eiffel code in the
.yinput file can contain Unicode characters. Characters in%tokendeclarations can also be Unicode characters or their escaped versions (e.g%token '\u03B2'where03B2is the hexadecimal code for Greek character beta). - Removed command-line option
--new_typing. - Fixed bug when an Eiffel verbatim string in a semantic action contains a
closing brace
}, which was wrongly interpreted as the end of the Eiffel code for this semantic action. - Updated the documentation.
- Changed the signature of features
put_stringandput_substringin classKI_CHARACTER_OUTPUT_STREAMand its descendants so that the argument is of typeREADABLE_STRING_8instead ofSTRING_8. This is to follow the same change in classIO_MEDIUM.
- Added support for Unicode. Does not support properties yet (e.g.
\p{L}). Unicode is supported natively, there is no internal conversion to UTF-8. Unicode characters can be entered verbatim in the string (STRING_32) or with their escaped form (e.g.\u03B2or\x{03B2}where03B2is the hexadecimal code for Greek character beta). Surrogate and invalid Unicode characters produce a regular expression syntax error. - Fixed bug in
LX_DFA_REGULAR_EXPRESSIONandLX_DFA_WILDCARDwhen the string to be matched contains a null character. - Added support for addition and subtraction of character classes.
- Removed obsolete class
YY_NEW_PARSER_SKELETON.
- Added support for Unicode. Does not support properties yet (e.g.
\p{L}). POSIX character set names (e.g[:alpha:]) recognize only ASCII characters (code less than 128). Unicode is supported natively, there is no internal conversion to UTF-8. Unicode characters can be entered verbatim in the string (STRING_32) or with their escaped form (e.g.\u{03B2}or\x{03B2}where03B2is the hexadecimal code for Greek character beta). Surrogate and invalid Unicode characters produce a regular expression syntax error.
- Added support for
across ... is .... - Fixed bug in ECF printer when converting files between different ECF versions.
- Added support for
total_order_on_realsso that the assertions inherited fromCOMPARABLEdo not get violated with NaNs in classesREAL_32andREAL_64. - Implemented
ieee_*built-in routines in classesREAL_32andREAL_64.
- Added support for new values
none|feature|allfor settingdead_code_removalin ECF classes as introduced in ECF 1.20.0. Note thatgecdoes not take this setting into account. - Changed default for setting
total_order_on_realsfromfalsetotruein ECF classes as per ECF 1.20.0. - Added support for bracket expressions whose target is itself a bracket expression
(e.g.
f [i][j]) in order to be compatible with ISE Eiffel's parser. - Fixed bug in the Tuple-argument-unfolding mechanism when the formal argument with a Tuple type was not at the last position. The routine was erroneously considered as not being a single-tuple routine.
- Added support for hidden clusters, as defined in ECF.
- Added support for hexadecimal, octal and binary character codes in manifest strings and character constants.
- Added support for Unicode (UTF-8) when reading Eiffel class files. These files are expected to be encoded in UTF-8 if they start with the corresponding BOM (Byte Order Mark), or ISO 8859-1 otherwise.
- Removed task
<gexace>, because the toolgexaceis not supported anymore.
- Fixed name of built-in feature
ISE_RUNTIME.new_special_of_reference_instance_ofin generated C code. - Added header files to the C runtime to allow compilation of the ISE Eiffel compiler.
- Fixed bug in generated C code of inline agent where its result was wrongly stored in the placeholder in place of the result of its enclosing once function.
- Fixed bug when parsing the language string in external routines. The arguments
part in
signaturewas not considered as optional. - Added support for
"C++ struct ..."in external routines. - Fixed C compilation errors with
mscas back-end C compiler when compiling ISE EiffelTime. See here for details. - Adapted generated C code so that the FreeELKS introspection classes work in void-safe mode.
- Improved interoperability with ISE Eiffel by making sure that type
attached NONEis different from typedetachable NONEin void-safe mode. - Added option
--ise=major[.minor[.revision[.build]]]to specify the version of ISE Eiffel whose semantics should be used during compilation. - The only Eiffel configuration notation now supported by the
gecis ECF.
- New tool to validate the conformance of Eiffel tools (typically compilers) to the ECMA Eiffel standard.
- Added tests for the validity rules
VAPE-1andVAPE-2. - Do not duplicate expected test results of the validation suite for
gecandgelintwhen they are the same. - Made the validation suite browsable with the GitHub Markdown facilities.
- Added tests for the validity rules
VGFGandVGGC. - Added tests for the validity rule
VFAV. - Added tests for the validity rule
VGMC.
- The only Eiffel configuration notation now supported by the
gedocis ECF.
- Fixed examples in the documentation.
- The only Eiffel configuration notation now supported by the
gelintis ECF.
- Changed the signature of some
assert_*routines to be able to compare someseparateobjects in SCOOP mode.
- This tool is not supported anymore and has been removed. The only
Eiffel configuration notation supported by the Gobo project is ECF.
The source code of
gexacecan still be found in$GOBO/library/tools/src/xace, but the classes have been marked as obsolete.
- In class
AP_OPTION_WITH_PARAMETER, made the difference betweenset_default_parameterwhich provides a default parameter value be used when the current option is not specified on the command-line (when the option is not mandatory), andset_parameter_optionalwhich makes it possible to specify the current option on the command-line with no parameter (the parameter is optional, even when the option is mandatory).
- Unmarked as instance-free the feature
eolinKI_TEXT_INPUT_STREAMandKI_TEXT_OUTPUT_STREAMso that it can be implemented using the bridge pattern in descendant classes.
- Made sure that validity error
VHPR-2(conforming inheritance from a frozen class) is reported correctly. - Do not report a syntax error for manifest characters of the form
'''. Apparently it is allowed by the ECMA standard. - Relaxed the validity rule where the result type of once functions cannot contain anchored types to just unqualified anchored types. This is to be compatible with ISE Eiffel.
- Relaxed validity rule
VAVEso that the loop variant expressions can not only be of typeINTEGERbut also of one of its sized variants. - Fixed bug when the type of the anchor of a qualified anchored type
(e.g.
like {A}.forlike a.b) appearing in the signature of a redeclared feature is itself a qualified anchored type. In some valid cases, a validity errorVDRD-2was emitted, indicating that the signature of the redeclared feature did not conform to the one in the parent. - Fixed bug in the dynamic type set builder where types in object-tests
(e.g.
Tinattached {T} x) were marked as alive (types with possible direct instances) as if they were creation types. This caused internal errors during the C code generation for the types whose base class was deferred. - Fixed bug when processing ECF files where conditions
<concurrency>and<void_safety>were not taking into account thesupportcapability value when theusevalue was not specified. - Made sure that all targets in the ECF file are affected when overriding
the setting
library_root. - Fixed bug when processing ECF files where conditions were not taking into account the setting and capability values of the parent target when not specified in the current target.
- Fixed bug where
separate Twas consideredattachedeven with the optionis_attached_by_default="false"in the ECF file. - Interoperability with ISE Eiffel: let
like Currentbe attached in void-safe mode even with the optionis_attached_by_default="false"in the ECF file. - Interoperability with ISE Eiffel: do not accept
referencebefore class types anymore (e.g.reference INTEGER), only before the declaration of a formal generic parameter (e.g.class C [reference G]). - Improved the way some kernel types and their implicit attachment marks are processed in void-safe mode.
- Improved the way dynamic type sets and their attachment marks are processed in void-safe mode.
- Improved speed when computing dynamic type sets.
- Made sure that no
VDRS-4error is reported when two features are inherited under the same name (after possible renaming) from the same parent and one is deferred and not the other. - Report a validity error
VAPE-1when the address expression$gappears in the precondition offandgis not exported to all classes to whichfis exported. - Fixed bug where a
VEEN-2validity error was erroneously reported when the entityResultappears in the body of a function inline agent which itself appears in the precondition of a feature. - Report a validity error
VAPE-2when a creation call with the creation proceduremakeappears in the precondition offandmakeis not exported for creation to all classes to whichfis exported. - Report a validity error
VAPEwhen an implicit conversion appears in the precondition offand the associated convert feature is not exported (or exported for creation in case of a convert procedure) to all classes to whichfis exported. - Fixed bug in void-safety mode when a generic constraint is of the
form
C [G -> H, H -> G]whereGwas erroneously considered as not conforming toH. This issue did not exist in non-void-safety mode. - Fixed bug where a formal generic parameter
Gwas not assumed to conform todetachable ANYwhen there was a cycle in the generic constraints (e.g.[G -> H, H -> G]). - Took into account the fact that ISE Eiffel now reports
VDRS-4errors as of version 19.01. - Fixed bug when processing a
Precursorinstruction in a function or aPrecursorexpression in a procedure. An internal error was reported. - Check validity of actual arguments in a call even when it was not possible to determine the feature of the call.
- Added support for multiple generic constraints.
- The only Eiffel configuration notation now supported by the Gobo project is ECF. The classes for the Ace and Xace notations have been marked as obsolete.
- Made unit tests compilable in void-safe mode.
- Made unit tests compilable in void-safe mode.
- All Gobo ECF files are now SCOOP capable. It does not mean that the code in Gobo takes advantage of the SCOOP model, but rather that its classes can be used in a SCOOP application.
- New version number format:
year.month.day.number_of_commits_on_that_day.
- Added option
targetfor the task<ise>and renamed the optionaceasecf. - Added options
target,thread,new_instance_types,silent,verbose,no_benchmark,nested_benchmark,metricsfor the task<gec>and renamed the optionaceasecf.
- Renamed command-line option
--new_instance_typesas--new-instance-typesto comply with theargumentlibrary validity constraints. - Added command-line options
--no-benchmark,--nested-benchmarkand --metrics. - Improved the way benchmarks, metrics, silent and verbose modes are specified and taken into account.
- Change the command-line option
--ccto accept the following values:no|script|make|gecc. - Made
gecmulti-threaded, with the command-line option--thread. - Added command-line option
--targetto select the name of the target in the ECF file. - Added command-line options
--setting,--capabilityand--variableto override the corresponding values in the ECF file.
- New tool to compile the C code generated by
gecin a multi-threaded environment.
- Changed the default value for command-line option
--threadto be the number of CPUs available on the machine. - Improved the way benchmarks, metrics, silent and verbose modes are specified and taken into account.
- Added command-line option
--targetto select the name of the target in the ECF file. - Added formats
ecf_pretty_printerto pretty-print or convert ECF files, andavailable_targetsto get the list of targets in an ECF file and to figure out whether a given target exists or not. - Added command-line options
--setting,--capabilityand--variableto override the corresponding values in the ECF file. - Removed command-line option
--define, superseded by--variable.
- Changed the default value for command-line option
--threadto be the number of CPUs available on the machine. - Improved the way benchmarks, metrics, silent and verbose modes are specified and taken into account.
- Added command-line option
--targetto select the name of the target in the ECF file. - Added command-line options
--setting,--capabilityand--variableto override the corresponding values in the ECF file. - Removed command-line option
--define, superseded by--variable.
- Added documentation about
Xaceandgexace. - Removed support for Ace files.
- Removed support for ISE Eiffel 16.05.
- Marked some routines as instance-free.
- Made sure that postconditions of the form
item = vare not violated when dealing with NaNs.
- Marked some routines as instance-free.
- Marked some routines as instance-free.
- Marked some routines as instance-free.
- Made sure that postconditions of the form
item = vare not violated when dealing with NaNs.
- Marked some routines as instance-free.
- Changed the way the type of conditional expressions is computed to match ISE Eiffel 17.11.
- Fixed bug in the computation of the dynamic type set of conditional expressions.
- Added support for typed manifest arrays as described here.
- Implemented new semantics for untyped manifest arrays as described here.
- Fixed bug where a VFFD-5 error was wrongly reported when the result type of a once-per-object function contains an anchored type or a formal generic parameter.
- Avoid reporting that an object-test local is used outside of its scope when there is an error in the expression of the corresponding object-test.
- Added support for instance-free features (which can be used in
Non-object-calls of the form
{T}.f). - Added support for class routines, similar to instance-free features
above, except that they are declared with
classin the postcondition instead ofoption: instance_freein thenoteclause. - Improved support for ECF, including capabilities and redirection. Even if not all ECF options are supported by the Gobo tools, it is now possible to read an ECF file, make some modifications and write it back.
- Fixed data race in
ET_CLASS.formal_parameter_typewhen executed in multi-threaded mode. - Added support for ECF 1.18.0.
- Marked some routines as instance-free.
- Added support for ECF setting
library_root. - Made sure that variables defined in the ECF file are taken into account when processing location attributes of clusters or libraries.
- Added support for ECF 1.19.0.
- Fixed bug in void-safety CAP after a
checkinstruction with nothenclause.
- Made sure that
UT_CSV_HANDLER.read_filecan handle newlines embedded in a cell surrounded by double-quotes. - Marked some routines as instance-free.
- All Gobo tools now compile in void-safe mode.
- Nearly all examples and tests now compile in void-safe mode.
Only the unit tests for
xpathandxslthave not been converted yet. - Replaced the usage of Xace files by ECF files throughout the entire Gobo package.
- Made sure that manifest strings are created with the right
type (in particular for
STRING_32manifest strings). - Made explicit the dependencies between C files in the runtime.
- Made the runtime C files thread-safe.
- Made once-per-process thread-safe.
- Added support for once-per-thread.
- Added support for multi-threading.
- Fixed misused of
volatilequalifier in the generated C code when there is a rescue clause. It was declaring a variable pointing to avolatileobject instead of avolatilevariable pointing to an object. - Fixed bug when a routine had a local variable which was both
written and read in its rescue clause and more than one exception
was raised in this routine. In some cases the local variable
was not declared as
volatilein the generated C code. - Implemented proper support for exceptions in once routines as specified in ECMA-2, section 8.23.22.2, p.124: "Semantics: Once Routine Execution Semantics".
- Fixed bug in the html format when the target of an assignment is a local variable. It was sometimes shown as a feature name.
- Made
gedocmulti-threaded. It runs almost 3 times faster on a 4-CPU machine.
- Made
gelintmulti-threaded. It runs almost 3 times faster on a 4-CPU machine.
- Fixed bug in feature
detachable_less_thanin classKL_PART_COMPARATORwhen comparing a non-void with a void. - Got rid of the remaining .ge files. The only supported Eiffel compilers are Gobo Eiffel and ISE Eiffel, and they both use the same kernel library (the FreeELKS library).
DS_HASH_TABLE.valuecan now be used in a multi-threaded environment when no items are added or removed. Contrary toitem, there is no internal caching invalue.
- Simplified the way built-in features are supported.
- Moved some code from
ET_SYSTEMtoET_SYSTEM_PROCESSORto allow several system processor objects to work together when analyzing the classes of an Eiffel system in a multi-threaded environment. - Added support for conditional expressions
(e.g.
if b then exp1 else exp2 end) - Interoperability with ISE Eiffel: local variables (including 'Result') are considered as 'detachable' (even when the 'attached' keyword is explicitly specified).
- Fixed bug in
UT_CSV_HANDLER.read_rowwhen a cell contains an empty string between double-quotes: ""
- Fixed bug when calling constant attributes of type STRING in a
Non-object call (of the form
{FOO}.string_constant). A new string object was created at each call, instead of returning the same string object. - Removed command-line option
--qat. Qualified anchored types (types of the formlike a.borlike {A}.b) are always accepted.
- New tool which is able to generate documentation from Eiffel classes or Eiffel libraries. This first version pretty-prints Eiffel classes.
- Added format
html_ise_stylesheetwhich mimics the HTML documentation generated by the filterhtml-stylesheetof ISE EiffelStudio. - Wrote documentation of
gedoc.
- Removed command-line option
--qat. Qualified anchored types (types of the formlike a.borlike {A}.b) are always accepted. - Wrote documentation of
gelint.
- Added feature
append_pathname_to_stringto classKI_FILE_SYSTEM. - Added buffered version of output file classes (
KL_BUFFERED_OUTPUT_FILEand descendants). - Changed feature names and signatures in classes
KL_PART_COMPARATORandKL_COMPARATORin order to compile in void-safe mode with ISE 17.05.
- Fixed bug when a feature has an
acrossconstruct followed by an object-test with the same local name. The object-test local name was considered as anacrosslocal name. - Fixed bug in Tuple-argument-unfolding mechanism after calling
ET_CLASS.reset_after_interface_checked. The original arguments were not reset correctly. - Fixed bug in Tuple-type-unfolding mechanism after calling
ET_CLASS.reset_after_features_flattenedorET_CLASS.reset_after_ancestors_built. The unfolded form was erroneously discarded.
- Extended the attributes
ifandunlessto 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.
- Added support to set compilation directory to different directory
than current directory. Define
GOBO_BUILD_PREFIXand ISE compiler will now compile to that directory. This allows you to compile to a fast SSD or memdisk. Not yet supported for the Gobo compiler. - Dropped support for the EIFGEN directory in task
<ise>. - Relative pathnames in the
<inherit>clause are now relative to the directory containing the current eant file (and not relative to the working directory where geant is currently running). - Added optional attribute
fail_on_errorto task<delete>(true by default). - Added attributes
array_sizeandinspect_actionsto task<gelex>. - Added attribute
array_sizeto task<geyacc>. - Moved the code/doc/examples/tests to
$GOBO/tool/geant. - Moved the buildfiles to
$GOBO/library/common/config.geantwill automatically redirect inherited files which were located in$GOBO/miscto the new location.
- Added option
--gelintto 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.itemorROUTINE.calland whose closed argument was a manifest tuple. See bug#2997112. - Fixed implementation of class
IDENTIFIED_ROUTINES. Object addresses were casted toINTEGER_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.
- Implemented support for exceptions as objects.
- Moved the code/doc/examples/tests to
$GOBO/tool/gec.
- Made the generated scanners compilable in void-safe mode with ISE 7.3.
- Added support for pushing and popping start conditions.
- Added
reset_with_stringandreset_with_fileinYY_SCANNER. - Changed the default maximum size for manifest arrays to be 200.
- Changed the default for semantic actions to use
inspectinstructions instead of binary search withifinstructions. - Updated the documentation for the command-line options.
- Fixed generation of manifest arrays when the size of the generated table is a multiple of the maximum array size.
- Moved the code/doc/examples/tests to
$GOBO/tool/gelex.
- Fixed bug where it was reporting an internal error instead of a
VTCTerror when the type of a local variable was a generic class type whose base class did not exist. - Report a
VIPR-3error 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.
- Moved the code/doc/examples/tests to
$GOBO/tool/gelint.
- Moved the code/doc/examples/tests to
$GOBO/tool/gepp.
- Set exit code to 4 when at least one of the test cases has been aborted.
- Split the feature
build_suitein 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.
- Moved the code/doc/examples/tests to
$GOBO/tool/getest.
- Added option
syntaxto support the corresponding option in ECF. - Added documentation explaining how to add a new option in Xace.
- Moved the code/doc/examples/tests to
$GOBO/tool/gexace.
- Moved the code/doc/examples/tests to
$GOBO/tool/gexslt.
- When specifying Eiffel types in the
%tokenand%typeclauses, in addition to what was accepted so far, it is now possible to uselike Current, labeled tuples (e.g.TUPLE [i, j: INTEGER; s: STRING]) and type marks such asexpanded,reference,separate,attached,detachable,!and?. See bug#2618271. - When declaring
%token <EIFFEL_TYPE> ..., the generated parser expects to find token values in the variablelast_<eiffel_type>_value, where all non-alphanumeric characters in the type nameEIFFEL_TYPEare replaced by underscores. It is now possible to customize the name of this variable tolast_<alias_name>_valueby declaring%token <EIFFEL_TYPE as alias_name> .... See bug#2621302. - Added support for qualified anchored types in
%typeand%tokendeclarations in.yfiles. - Eiffel classes need to be regenerated with
geyaccfrom.yfiles because of a breaking change to make the internal stacks void-safe compliant. Otherwise this will result in a compilation error. - Removed command-line option
--old_typing. - In order to be void-safe compliant, the generated token class has been
made deferred (
last_valueattributes may be attached). - Made the generated parsers compilable in void-safe mode with ISE 7.3.
- Added option
--rescue-on-abortto generate a rescue clause in action routines to catch abort exceptions. Useful when compiling in void-safe mode. - Added option
--array-sizeand changed the default maximum size for manifest arrays to be 200. - Fixed generation of manifest arrays when the size of the generated table is a multiple of the maximum array size.
- Moved the code/doc/examples/tests to
$GOBO/tool/geyacc.
- Made it compilable in void-safe mode with ISE 13.11.
- Made the parameter of boolean options possibly optional.
- Moved the doc/examples/tests to
$GOBO/library/argument.
- Added features
same_*_pathnamesto classKI_FILE_SYSTEM. - Features
testin classKL_EQUALITY_TESTERandequal_objectsin classKL_ANY_ROUTINESnow use the new ECMA construct~instead of the combinationsame_typeand thenis_equal. - Added feature
is_trueto class KL_AGENT_ROUTINES. - Fixed bug in feature
read_to_stringof file classes where the hash code was not reset properly. - Made it compilable in void-safe mode with ISE 7.3.
KL_FILE.copy_file: now uses 8192 blocks, instead of 512.- Fixed bug in
UC_STRING.replace_substring_all. - Moved the doc/examples/tests to
$GOBO/library/kernel.
- Fixed bug in
LX_DFA_REGULAR_EXPRESSIONwherecompile ("foo\$")was settinghas_dollarto True even though the dollar sign was escaped. - Added features
patternandis_case_insensitivein classLX_PATTERN_MATCHER. - Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/lexical.
- Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/math.
- Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/parse.
- Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/pattern.
- The pattern being matched and the case-sensitiveness are now
available using queries
patternandis_case_insensitive. - Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/regexp.
- Fixed bug in the string formatter where the flags
+and space where not taken into account. See bug#2768748. - Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/string.
- Fixed assertion violation in feature
compressfromDS_SPARSE_CONTAINER. See bug#2831433. - Relaxed precondition of
putandput_lastin classesDS_SETandDS_SPARSE_TABLE(i.e. the ancestors ofDS_HASH_SETandDS_HASH_TABLE) to benot is_full or else has (k)instead of justnot is_full. - Added features
do_untilanddo_if_untiltoDS_CONTAINERand its descendants. - Added feature
has_voidtoDS_CELLandDS_PAIR. - Fixed bug in features
force_last_newandput_last_newofDS_HASH_TABLE. - Fixed bug in
DS_HASH_TABLEwhen the calls tokey_equality_testerinsearch_positiontrigger the invariant which internally callssearch_position. But this routine was not written to be re-entrant. - Added iteration routines to the descendants of
DS_TABLEso that the key can be passed first and then the item to the agents. - Made it compilable in void-safe mode with ISE 7.3.
- Added support for the
acrossEiffel construct. - Moved the doc/examples/tests to
$GOBO/library/structure.
- Made it compilable in void-safe mode with ISE 15.01.
- Moved the doc/examples/tests to
$GOBO/library/test. - Added test case assertion routines in
TS_ASSERTION_ROUTINESto check whether an exception has been raised or not when executing a given agent.
- Added class
DT_STOPWATCHin clusterstopwatch. - Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/time.
- Added support for keyword
noteas a replacement ofindexing. 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 ofPREDICATE [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 FOOordetachable BAR) and for object-tests (e.g.attached {T} exp as xwith{T}andxoptional). 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
checkinstructions with athenbranch. - Added support for
oncekeys 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 thenoperators. 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
acrossinstructions/expressions. - Added support for
alias "()". - Added support for
$(ECF_CONFIG_PATH)in ECF files. - Made it compilable in void-safe mode with ISE 15.01.
- Moved the doc/examples/tests to
$GOBO/library/tools.
- Made it compilable in void-safe mode with ISE 7.3.
- Moved the doc/examples/tests to
$GOBO/library/utility.
- Added option to let the XML pretty printer use empty element tags
<tag/>instead of<tag><tag/>. - Made it compilable in void-safe mode with ISE 15.01.
- Splitted the library in three:
$GOBO/library/xml,$GOBO/library/xpathand$GOBO/library/xslt - Moved the doc/examples/tests to their new library folders.
- Removed classes and features that had been marked as obsolete in 2004 or before.
- Removed warnings when compiling with ISE 6.6.
- Removed warnings when compiling with ISE 17.01.
- Converted Readme files to Markdown to be Github-friendly.
- Removed support for SmartEiffel task
<se>.
- Fixed some C compilation warnings when using
gccas 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.borlike {A}.b).
- 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.
- Added an indexing clause
generatorto the generated classes. See feature request bug#1961466. - Provided programmatic access to test results.
- Removed support for config file
getest.seand option--se.
- Made sure that several options
override_clustercan 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.
- Added
make_from_string_generalandmake_from_substring_generalin classUC_STRING.
- 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_keyandfor_all_with_keyto classDS_TABLE.
- Added minimal support for ECF files.
- Improved Eiffel pretty-printer.
- 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.
- Changed the evaluation of attributes
ifandunlessso 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
geanthas a new attribute calledexit_code_variable. It can be used to capture (or ignore) the execution result of a<geant>call and works exactly as in theexectask. - Introduced notion of locals, and globals. You can now declare
<local name="varname"/>. - Added support for
<group>element. - Fixed various issue with
<replace>task.
-
Generate prototypes for external routines when no header file has been specified.
-
Changed the generated C code for Agent objects so that
twinanddeep_twinwork 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 aTUPLE [STRING]provided that the dynamic type of the item of this tuple conforms to typeSTRING. -
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_twinwhen traversing objects of typeSPECIAL. -
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
Resultas it was when the recursive call occurred, as specified in ECMA Eiffel. -
The Xace option
garbage_collectoris now taken into account bygecwhen set toboehm. This Xace option can be overridden by the command-line option--gcwhen specified. -
When
geccompiles an application with the Boehm GC, it now generates code that will let the GC trigger the featuredisposewhen objects are reclaimed. -
Take better advantage of the Boehm GC, using
GC_malloc_atomicwhen possible. -
The implememtation of the rescue mechanism in C uses
setjmpandlongjmp. The use of these two C functions requires that any local variable modified between the call tosetjmpand the call tolongjmpto be declared asvolatile, otherwise its value may be lost after callinglongjmpif the C optimizer decided to implement it withregister. For more details, see:-
http://www.programmersheaven.com/articles/pathak/article1.htm
-
http://msdn2.microsoft.com/en-us/library/xe7acxfb(VS.80).aspx
The generated C code has been adapted accordingly.
-
- 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
VTCTerror,gelint/gecwere reporting another subsequent error, as shown in bug#1875262. - Made sure that no
VAPEerror 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
gelintin your own applications. For example what was known asET_UNIVERSEis now calledET_SYSTEMandET_UNIVERSEis now an ancestor of this class (and of the new classET_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.
- Added features
assert_doubles_equal_with_toleranceandassert_doubles_equal_with_strict_tolerancetoTS_ASSERTION_ROUTINES. getestnow expects test case classes to declaremake_defaultinherited fromTS_TEST_CASEas creation procedure. That way there is no need to generate intermediary classes (e.g. classes of the formXTEST_...inheriting fromTEST_...) anymore, and hence it is easier to call test cases outside of the test framework.- Removed the command-line option
--veand 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.
- The option
--system=isenow 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=genow generates an Xace file instead of an Ace file. This makes it possible for example forgecto determine whether the Boehm GC should be used through the Xace optiongarbage_collector. Otherwise, with Ace files, this information has to be passed togecthrough the command-line option--gc=boehm. In order to generate Ace files forgec, 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.txtfor 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.txtfor more details. - Fixed bug#1875809 where libraries were duplicated in the generated output file when appearing twice in the same Xace input file.
- Fixed bug when resuming a parsing that was suspended (with
suspend). The last action before the call tosuspendwas executed twice.
- Added iterator features (
do_all,do_if,for_all,there_exists) in classKL_DIRECTORY. - Added feature
prune_all_trailingtoKL_STRING_ROUTINES. - Improved class
KL_EXCEPTIONSto make it clearer what is available for all Eiffel compilers and what is not. - Added
KL_MEMORYand friends to provide a compiler independent way to access garbage collection facilities. - Upgraded Unicode support to version 5.1.0.
- Fixed bug#1917556 where feature
splitinRX_PCRE_REGULAR_EXPRESSIONwas not behaving correctly when the regexp could match empty strings.
- 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()andformat-date-time().
- Moved features
do_all,do_if,there_existsandfor_allup to classDS_CONTAINER. - Added features
do_all_with_keyanddo_if_with_keyto classDS_TABLE. - Added feature
has_voidto classDS_SEARCHABLE.
- 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.
- 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
traceoption. - The Boehm GC can be plugged using the
--gccommand-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.
- 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.
- 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.
- Removed possible CAT-call when using
KL_EQUALITY_TESTER. It does not useis_equaldirectly, but a protected version of it which is preceded by a call tosame_type.
- 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.
- Implemented inline agents.
- Fixed a bug in string formatter where
format ("$11.9f", 941.65899999999817)would return942.589999910instead of941.659000000. Regression tests have been added, and this fix also pointed out a bug in one of the test cases.
- 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_SETandDS_MULTIARRAYED_SPARSE_TABLEwhencapacityis zero.
- 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 Eiffel compiler anymore. Indeed Visual Eiffel
does not support Agents, Tuples,
INTEGER_64among other things. The Gobo project tried not to use these constructs so far, but this is becoming too constraining.
- 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 attributesifandunless. - Task
<geant>now by default spawns a newgeantprocess if attributefilehas been specified. It also has a new attribute calledforkto control whether a new process should be spawned or not. - Added attribute
forceto task<xslt>. Use this attribute to generate output that already exists and is newer than the input. - Added task
<input>to get input values. - Added task
<replace>to replace tokens or patterns in a file.
- First version of the Gobo Eiffel Compiler (
gec) that is able to compile everything in the Gobo package. Howevergecis not a full-fledged Eiffel compiler yet. See the documentation for more details.
- Added command-line option
--default_testto specify whether the featuredefault_testshould be included in the generated test cases.
- Has been removed. Use
gexsltinstead.
- New command-line argument parsing library.
-
KL_WINDOWS_FILE_SYSTEMnow accepts both\and/as directory separator. This is the default. It can still accept only\as directory separator if you use themake_backslash_onlycreation procedure. -
Change semantics of
KI_FILE_SYSTEM.absolute_parent_pathnamewhen the argument is both a root directory (i.e. has no parent) and an absolute pathname. In that case return the argument itself instead ofabsolute_root_directoryas before. -
Fixed bug in
KL_(UNIX|WINDOWS)_FILE_SYSTEM.absolute_parent_pathname. When the result was a root directory it was erroneously returningabsolute_root_directory. So if you were inC:\goboand asked for theabsolute_parent_pathnameofD:\fooyou were gettingC:\instead of the expectedD:\. -
Fixed bug in
KL_WINDOWS_FILE_SYSTEM.canonical_pathnamewhich for the input\\gobo\foo\..was returning the invalid pathname\\gobo\instead of\\gobo\foo. Likewise forc:\.., we were gettingc:\..instead ofc:\. -
Added
sharenametoKI_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_32andSTRING_8which have been introduced at ECMA. As a consequence, the following features had to be renamed in classUC_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.
-
- Added creation procedure
maketoMA_DECIMAL_TEXT_PARSERandMA_DECIMAL_BCD_PARSER. - Renamed
MA_DECIMAL_CONSTANTSasMA_DECIMAL_CONTEXT_CONSTANTSandMA_DECIMAL_MATHasMA_DECIMAL_CONSTANTS. - Added class
MA_SHARED_DECIMAL_CONSTANTS. - Moved
Maximum_integer_as_decimalandMinimum_integer_as_decimalfromMA_DECIMAL_CONTEXT_CONSTANTStoMA_DECIMAL_CONSTANTSand renamed them asmaximum_integerandminimum_integer. - Moved
default_contextfromMA_DECIMAL_CONTEXTtoMA_SHARED_DECIMAL_CONTEXT. - Added a comment in
MA_SHARED_DECIMAL_CONTEXT.set_shared_decimal_contextemphasizing 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.
- Added feature
suspend(and its associated featureis_suspended) toYY_PARSERand its descendantYY_PARSER_SKELETONto be able to suspend the current parsing. The next call toparsewill resume parsing in the state where the parser was when it was suspended. Note that a call toabortoracceptwill forceparseto parse from scratch. - Changed implementation of feature
syntax_errorinYY_PARSER_SKELETONso that it returns false when nothing has been parsed yet.
- Added classes for normalizing Unicode strings.
- Removed useless precondition of feature
make_with_separatorsinST_SPLITTER.
- Added classes to parse and format XML Schema date, time and date-time datatypes.
- 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.
- Task
<echo>supports writing message to a file. - Targets support argument handling. Tasks
<geant>and<precursor>have been modified so that they are able to pass these arguments. - Targets support
obsoletemechanism. - Tasks
<exit>,<ise>,<se>,<ve>support capturing the return code of the called process. - Task
<available>supports checking for availablity of directories. - If you use
xsltprocand pass string parameters to it, you have to surround those parameters with single quotes now. - Task
<ve>supports VE 5.0 with the attributexaceto specify Xace files. Attributeesdis still supported when using VE 4.1. - Added built-in variable
verbosewhich is set (totrue) whengeantis run in verbose mode. - Added attributes
verbose,abort,generation,compilationandexecutionto task<getest>.
- Removed support for
hact. - Added support for VE 5.0:
venow generates Xace files for VE 5.0. In order to generate ESD for VE 4.1 useve41instead.
- Added command-line option
--pragma=[no]linein 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 linewith the-zoption 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.
- Following the changes made in version 3.2,
YY_PARSER_SKELETONis not a synonym ofYY_OLD_PARSER_SKELETONanymore and can now be used as a replacement ofYY_NEW_PARSER_SKELETON. Also the default command-line option is now--new_typing. - Added command-line option
--pragma=[no]linein 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.
- Added command-line options
--verboseand-vto rungetestin verbose mode. - In verbose mode
getestprints the number of test cases that have been generated.
XM_DOCUMENT.process_to_eventsmakes the tree an event source.- New
XM_XMLNS_GENERATORfilter injects xmlns declarations in event stream. It can be combined with a print filter. XM_FORMATTERis now a wrapper for the above and so produces XML compliant output.XM_INDENT_PRETTY_PRINT_FILTERandXM_WHITESPACE_NORMALIZERadded to allow pretty indented output.XM_NAMESPACE_RESOLVERhas new option to forward xmlns attribute events (forward_xmlns).XM_DTD_CALLBACKS:on_doctypecalled first;on_dtd_end,on_dtd_comment,on_dtd_processing_instructionadded.- New
XM_XMLID_VALIDATORvalidatesxml:idattributes. - Parser defaults to new STRING-only
latin-1mode. - Parser correctly outputs
PUBLICidentifier inDOCTYPE. - Parser leaves XML resolver in correct state.
XM_PARSER.positionscontains 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.
- Fixed bug in
KL_PATHNAME.set_canonical. - Added bit operation features to
KL_INTEGER_ROUTINES. - Added features
power,divandmodtoKL_INTEGER_ROUTINES. - Added feature
log2toKL_DOUBLE_ROUTINES. - Added feature
truncated_to_integertoKL_DOUBLE_ROUTINESbecause 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 ofclonenot being supported anymore in SE 2.2b1. If you need to clone strings or arrays, usecloned_stringby inheriting fromKL_IMPORTED_STRING_ROUTINESandcloned_arrayby inheriting fromKL_IMPORTED_ARRAY_ROUTINES. To a clone a SPECIAL object, just calltwinon 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 ofDOUBLEbeing 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 thatSTRING.infix "@"as been marked as frozen in SE 2.2b1.
- 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).
- 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_REFtypes). ST_SPLITTER: parse a string to and from lists of tokens.
- 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.
UT_URIpath is parsed into components:path_items.UT_HOST_PORT: new class for TCP hostname and port number.
- Fixed bug in task
<gepp>occurring when a nested<fileset>element defined in the new format was specified.
XM_EIFFEL_PARSER.disable_namespacesallows multiple colons in names (strict XML compliance).
- Removed usage of
like argument(will be removed from the Eiffel language because it was a disguised way of providing overloading in Eiffel) in featuressubstring,to_lower,to_upper,as_lowerandas_upperinKL_STRING_ROUTINES.
- Element
<fileset>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
<available>. - Added subelement
<directoryset>to task<delete>. - Added attributes
classandfeatureto task<getest>. - The task
<hact>now takes advantage of Halstenbach incremental compiler. - Added attributes
old_typingandnew_typingto 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
%tokenclauses.geyaccalso generates the corresponding attributeslast_<type>_valueinstead oflast_valueto be used to set the semantic values of tokens. Transition path: If you still want to use the old typing mechanism (now made obsolete), usegeyaccwith the command-line option--old_typingor withgeant's attributeold_typingin task<geyacc>. It is also recommended that you replace classYY_PARSER_SKELETONbyYY_OLD_PARSER_SKELETONin your code. Alternatively you can now switch to the new typing mechanism usinggeyacc's--new_typingcommand-line option or attributenew_typingin task<geyacc>ingeant. In that case you will have to use the non-generic classYY_NEW_PARSER_SKELETONinstead ofYY_PARSER_SKELETONand replace the calls tolast_valueby the correspondinglast_<type>_valuein your code. In the next releaseYY_PARSER_SKELETONwill stop to be a synonym ofYY_OLD_PARSER_SKELETONand will be used as a replacement ofYY_NEW_PARSER_SKELETON. In the release after, the old typing mechanism will not be supported anymore, classesYY_OLD_PARSER_SKELETONandYY_NEW_PARSER_SKELETONwill be removed, and you will have to useYY_PARSER_SKELETONalong with thelast_<type>_valueattributes in your code.
- Added command-line options
--classand--featureto pass the regexps for tested class names and feature names as argument instead of through theclassandfeaturefields of the config file (needed by Guy Fokou). - Better formatting of the message when
assert_equalorassert_not_equalfail (suggested by Berend de Boer).
- Renamed
convertasconvert_to_equivalencein classLX_SYMBOL_CLASSbecauseconvertis a keyword in ETL3.
- Big chunks have been redesigned. Still under development.
- Eiffel parser now accepts
iso-8859-1encoding. - 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_nodereturns the real root (XM_DOCUMENT).XM_NODE.levelconsequently offset by1. XM_COMPOSITEnow a read-only list. Modification routines are inXM_ELEMENTandXM_DOCUMENT(typing is used to allow only the correct node types to be added).XM_COMPOSITEdescendants' modification routines remove a node from its previous parent if any. They also havemake_lastcreation routines that add the node to the composite.make_lastis faster thanmake,force_last.XM_NODE.parent_elementadded,root_nodenowXM_DOCUMENT.XM_NAMESPACEstricter contracts anduriinvariant,is_defaultreplaced bynot has_prefix, removed rather than obsoleted due to SmartEiffel'sANYusing the name.XM_DOCUMENT.set_root_elementnow exported toANY.XM_NAMESPACE_RESOLVERnow issues empty strings (the default namespace) rather than the parent element's namespace foron_attributeevents in the case of unprefixed attributes. (XML Names says unprefixed attributes have no namespace.)XM_ELEMENT.*attribute_by_nameonly look for unprefixed attributes, for the same reason as above.- Added
_by_qualified_nameroutines to tree nodes. XM_FORMATTER.last_stringreplaced by.last_output_stream.XM_NODE_TYPER.attributeobsoleted and renamed toxml_attributeto avoid future keyword collision.
- 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.
- Feature
YY_BUFFER.contentis now of typeKI_CHARACTER_BUFFERinstead ofKL_CHARACTER_BUFFER(Berend de Boer).
- The task
<ise>now takes advantage of ISE Eiffel incremental compiler.
- Fixed bug: only the first cluster listed in the config file was taken into account (reported by Guy Fokou).
- Moved feature
closeup toKI_INPUT_STREAMandKI_OUTPUT_STREAMand added featureis_closable(suggested by Franck Arnaud). - Made sure that
hash_codeinUC_STRINGreturns the same value whensame_stringreturns true.
LX_NFA: Renamedinfix "|{n,}|"asinfix "|{*}|"andinfix "|{n}|"asinfix "|{}|"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.
DT_DATE: Renamedinfix "&d"asinfix "&@"because the former free operator is not valid in ETL3 anymore (and SE 1.0b6 already supports the new syntax).DT_TIME: Renamedinfix "&t"asinfix "&|"because the former free operator is not valid in ETL3 anymore (and SE 1.0b6 already supports the new syntax).
- Tree:
namespacein named nodes is now an object, which contains URI and prefix. It may be shared. - Tree:
*_by_nameroutines check the namespace is the same. - Tree:
is_firstandis_lastinXM_COMPOSITEfor checking position within parent. - Tree: added
elementstoXM_COMPOSITE.
- Added feature
wipe_outtoYY_BUFFERandYY_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
%optiondirectives of the input file (reported by Sven Ehrke).
- Added command-line options
-kand--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
$Ntype 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
%typesection wasINTEGER, the default rule was trying to set$$toVoidinstead of0(reported by Emmanuel Stapf).
- Added command-line options:
-gfor testcase generation only,-cfor testcase compilation only, and-efor testcase execution only (suggested by Glenn Maughan). - Added assertion routines to compare file contents and filenames.
- Added command-line option
--compileto pass the Eiffel compilation command-line as argument instead of through thecompilefield of the config file. - Added command-line options
-Dand--defineto define variables which will be passed to the command running the test cases. - The
testgendirectory is now created bygetestif it does not exist yet. - Do not try to run the test anymore when the command specified for the Eiffel compilation exits with a status code other than zero.
- Added command-line options
--linesand-lin order to generate empty lines whenever lines are ignored from the input file. That way line numbers are preserved. (suggested by Alexander Kogtenkov)
- First release (contributed by Sven Ehrke).
- First release (contributed by Andreas Leitner, currently maintained by Eric Bezault).
- First release (contributed by Andreas Leitner).
- No need for
include_pathin the Ace file anymore in order to useKL_STRING_BUFFER_ROUTINESwith ISE Eiffel. Use new routines introduced in classPOINTERin ISE Eiffel 4.5 instead. - Added cluster
$GOBO/library/kernel/iowith directory, file and file-system functionalities. - Added cluster
$GOBO/library/kernel/miscwith miscellaneous kernel classes. - Added cluster
$GOBO/library/kernel/unicodewith Unicode support classes (based on the work from Majkel Kretschmar).
- Fixed bug in feature
force_lastofDS_SPARSE_SETandDS_SPARSE_TABLEwhen resizing the container. - Changed postconditions in
DS_LINEAR_CURSORandDS_BILINEAR_CURSORwhich prevented descendants to implement partial traversals or different traversal strategies (reported by Berend de Boer and Einar Karttunen). - Fixed bug in
HASH_TABLErelated to the new implementation in ancestor classDS_SPARSE_TABLE(reported by Emmanuel Bouyer). - Fixed bug in
LINKED_LIST.cursor_back(reported by Paul Ford).
- Fixed bug related to the implementation of features
dateandtimeinDATE_TIMEandDATE_TIME_DURATION(reported by Emmanuel Bouyer). - Added feature
set_storagetoDT_DATEandDT_TIME. - Fixed bug in feature
add_minutesofDT_DATE_TIME(reported by Glenn Maughan). - Fixed bug in feature
set_from_epoch_daysofDT_DATEwhen the resulting date in 1 January 1600 (reported by Emmanuel Bouyer). - No need for
include_pathin the Ace file anymore in order to useDT_SYSTEM_CLOCKwith ISE Eiffel. - Added class
DT_UTC_SYSTEM_CLOCK. - Added creation routine
DT_DATE_TIME.make_from_epoch.
- New library with design pattern classes.
- Moved
$GOBO/library/utility/commandcluster to$GOBO/library/pattern/commandand change class name prefix fromUTtoDP. - Added feature
exit_codeto classDP_SHELL_COMMAND.
- New library for regular expression handling. Contains a implementation based on the PCRE package (contributed by Harald Erdbruegger based on his ePCRE 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).
- The Gobo project is now taking full advantage of
geantandgexaceinstead ofMakefilefiles (which were not portable across platforms).
geyaccnow generates the routinetoken_namealong with the token codes to make the debugging messages more human-readable (suggested by Andreas Leitner).
- Added debugging instructions at the end of routine
read_tokenin classesYY_COMPRESSED_SCANNER_SKELETON,YY_INTERACTIVE_SCANNER_SKELETONandYY_FULL_SCANNER_SKELETON. One need to compile the system withdebug ("GELEX")enabled. The routineprint_last_tokencan be redefined in descendant classes to print more debugging information. In particular, the routinetoken_namegenerated bygeyacccan be used to make the debugging output more human-readable. (suggested by Andreas Leitner)
- First release.
- Added argumentless creation routine
make_defaultto most containers. In resizable containersmake_defaultis equivalent tomake (default_capacity)wheredefault_capacityis a constant (10) defined in classDS_RESIZABLE(suggested by Franck Arnaud). DS_SORTERand descendant classes now useDS_COMPARATORas comparison criterion (suggested by members of the SmallEiffel mailing list).- Added class
DS_TOPOLOGICAL_SORTERto sort partially ordered items. - Added
DS_SETand descendant classes such asDS_HASH_SETandDS_MULTIARRAYED_HASH_SET. DS_HASH_TABLE: added creation routinemake_mapin order to compare keys with=instead ofequal.DS_HASH_TABLE: added featuresremove_found_item,found_keyandforce_last.- Added class
DS_MULTIARRAYED_HASH_TABLEwith the same interface asDS_HASH_TABLEbut 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 postconditionitem_pushed(reported by Emmanuel Bouyer). - Moved
$GOBO/library/structure/baseto$GOBO/library/structure/other/EiffelBase. - Moved cursor classes next to their associated containers
and removed cluster
$GOBO/library/structure/cursor.
- First release.
- Removed comments in
loadpath.sefiles which caused problems on AmigaDOS (suggested by Thomas Aglassinger). - Added
Makefilefiles in various directories.
- One can now use manifest strings (e.g.
"<="or"..") in place of identifiers (e.g.LEorDOTDOT) in grammar rules (suggested by Berend de Boer). - Anchored types are now accepted in
%typedeclarations. - 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).
- Added redefinable routine
default_actiontoYY_SCANNERwhen default rule is matched (suggested by David Massart). - Added
pre_actionandpost_action, called when%option pre-actionand%option post-actionare specified (suggested by Alexander Kogtenkov). - Added
pre_eof_actionandpost_eof_action, called when%option pre-eof-actionand%option post-eof-action are specified. - Added
%option lineto generate code for line and column counting (suggested by Alexander Kogtenkov). - Added
%option positionto 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).
DS_TRAVERSABLE: removed postcondition from routinevalid_cursorand madeinternal_cursordeferred (suggested by Andreas Leitner).DS_SEARCHABLE: added featuressame_itemsandsame_equality_tester.DS_ARRAYED_LIST,DS_ARRAYED_STACK: got rid of garbage (i.e. old items at indexescount+1..capacity) in removal features.DS_TABLE,DS_SPARSE_TABLE,DS_HASH_TABLE: added featureput_new.DS_SPARSE_TABLE,DS_HASH_TABLE: added featurereplace_found_item.DS_SPARSE_TABLE,DS_HASH_TABLE: new optimized implementation (requested by Jacques Bouchard).DS_SPARSE_TABLE: added featurekey; optimization of featureforce(avoid unnecessary resizing).HASH_TABLE: optimization of featuresputandforce(avoid unnecessary resizing).DS_SORTER: Added featuresreverse_sortandreverse_sorted.
- Added class
KL_DIRECTORYto allow Eiffel compiler portable directory access.
- Fixed bug in feature
append_decimal_integerfrom classUT_INTEGER_FORMATTERwhen dealing with negative values.
- 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).
- The documentation has been greatly improved.
- Added a
testdirectory 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_cursorsuffix, as input_right_cursor. The original feature names have been reused by the internal traversal interface, e.g.put_rightinserts 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_validanymore. DS_LINEAR_CURSORdoes not inherit fromDS_INDEXED_CURSORanymore.- Added classes
DS_QUEUEandDS_LINKED_QUEUE.
- 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
geyaccwhen$Nin a semantic action does not match with a symbol in the rule. - Fixed bug in output of
geyaccverbose mode (option-v). - Routine
clear_allfromYY_PARSER_SKELETONclears internal stacks by default (call toclear_stacks). - Added two new types in
$GOBO/library/kernel:STRING_BUFFERandFIXED_ARRAY(array with lower bound equal to zero). These two types are used instead ofSTRINGandARRAYingelexandgeyaccskeleton classes for optimization purposes.STRING_BUFFERmaps either toSPECIAL [CHARACTER]orSTRING, andFIXED_ARRAY [G]maps either toSPECIAL [G]orARRAY [G]depending on the Eiffel compiler used. Only ISE Eiffel port has been optimized so far. SmallEiffel port can be optimized as well usingFAST_ARRAY [G]orNATIVE_ARRAY [G]. - Added features
Empty_buffer,append_text_to_stringandappend_text_substring_to_stringtoYY_SCANNER. - Added a precondition to routine
set_start_conditionin classYY_SCANNER. - Resize input buffer if a call to
unread_characterresults in too much text being pushed back (it was raising a run-time error in previous releases). - Added command-line option
-xtogelexandgeyaccto allow the generation of semantic actions in separate routines. - Added command-line option
-ztogelexto force the generated code to use aninspectinstruction to find out which action to execute. The default is to use binary-search implemented withifinstructions. - Fixed operator precedence bug in
$GOBO/example/parse/eiffel/eiffel_parser.y.
geyacchas been totally rewritten in Eiffel.- Replaced attribute
output_fileby procedureoutputin classYY_SCANNERto avoid unnecessary console creation in Windows mode with Visual Eiffel. - Fixed bug in
gelexin "equivalence class" mode when dealing with regular expressions of the formx{4}. - Added warnings in
gelexwhen a rule cannot be matched and when the default rule can be matched despite the%option nodefaultor-soption. - Renamed classes
KL_SHARED_*_ROUTINESasKL_IMPORTED_*_ROUTINES. (The old class names are still temporarily valid using the classes in cluster$GOBO/library/kernel/obsolete.) geppnow supports#include "filename"instructions.- The second generic parameter of
DS_HASH_TABLEis now constrained toHASHABLE(HASHABLEwas not part of SmallEiffel in previous releases). - Cluster
errorhas been added to the Gobo Eiffel Utility Library to support a flexible error reporting mechanism.
- New implementation for variable trailing context
in
gelex, with warnings for dangerous trailing contexts of form such asx*/xz*. - Improved documentation.
- Bug fixed wrt variable trailing context in
gelex.
- First public release.
- Gold Award at the Eiffel Class Struggle '97.
Copyright (c) 1997-2025, Eric Bezault and others
mailto:ericb@gobosoft.com
https://www.gobosoft.com