- Added option
timeout
to task<exec>
. - Added command-line option
--thread
to override the maximum number of threads to be used by thread-capable tasks. - Added new task
<gecc>
.
- 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
gec
to 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
--catcall
withwarning
to get the previous behavior (warning at compile time and caught at runtime). All applications in the Gobo Eiffel package are compiled using the option--catcall
witherror
to 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
gecc
instead. - Do not check call-on-void-target at runtime in void-safe mode
by default anymore. Use the ECF setting
check_for_void_target
to get this behavior. - Added support for inlining in the generated C code. Can be
configured using the ECF settings
inlining
andinlining_size
. - Changed implementation of built-in function
generating_type
in classTYPE
so 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
--thread
to be-3
instead of0
("number of available CPUs -3" instead of "number of available CPUs").
- Changed the default for the command-line option
--thread
to be-3
instead of0
("number of available CPUs -3" instead of "number of available CPUs").
- Added test cases for SCOOP semantics and validity rules.
- Added command-line option
--progress
to show the names. - Changed the default for the command-line option
--thread
to be-3
instead of0
("number of available CPUs -3" instead of "number of available CPUs").
- Changed the default for the command-line option
--thread
to be-3
instead of0
("number of available CPUs -3" instead of "number of available CPUs").
- Added support for SCOOP.
- Allow
gelint
to 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
--thread
to be-3
instead 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
executable
for 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_variable
to 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#line
now included in the generated C code. - Let the test in
$GOBO/tool/gec/test/tool
rungecop
with thegec
executable 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
MUGC
in 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 steps4
and5
need 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_copy
orANY.standard_is_equal
).
- Made
gecop
multi-threaded. Each thread will run its own set of validation tests independently of the others. - Added command-line option
--tool-executable
to specify the executable filename (optionally with a pathname) of the Eiffel tool to be tested. The default is eithergec
,gelint
,ec
which can be found in thePATH
. - Added test cases for semantics rules
MBAS
,MBRE-1
andMVOL
. Added some comments about issues in the ECMA Eiffel standard (Reattachment Semantics). - Added test cases for semantics rules
MUGC
. - Added test cases for rules
M1EE
andM1IE
exercising the semantics of equality and inequality expressions.
- Added format
descendants
to get the list of descendants classes of a class or of a set of classes.
- Let the test in
$GOBO/tool/gelint/test/tool
rungecop
with thegelint
executable just built (the executable under test).
- Changed exit code to
3
in 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_TYPE
in 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.f
where the type ofx
is a formal generic parameter andf
is 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]
whenB
is expanded andC
andD
are 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
warning
when converting ECF files to newer versions of ECF. - Added support for the notation
@i
to 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
-s
is specified.
- Added support for class mappings
STRING
->STRING_32
andCHARACTER
->CHARACTER_32
when specified that way in the ECF file. The default is still set toSTRING
->STRING_8
andCHARACTER
->CHARACTER_8
in the FreeELKS ECF file. - Added support for new built-in features
generator_8_of_type
andgenerating_type_8_of_type
in classISE_RUNTIME
.
- Added formats
implicit_converts
to show the list of implicit conversions in the Eiffel classes, andexplicit_converts
to 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_8
andSTRING
->STRING_32
.
- Made sure that the library works with both class mappings
STRING
->STRING_8
andSTRING
->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 thatgec
andgelint
do 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 NONE
conforms 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_id
andeif_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
.resx
specified 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|error
for warning optionobsolete_feature
in ECF classes as introduced in ECF 1.21.0. Note thatgec
does not take this option into account. - Added support for stable attributes in void-safe mode.
- Reordered
VFAV
rules to match those of ISE Eiffel. Added a rule for multiple aliases with the same name. - Added classes
ET_AGENT_ERROR_HANDLER
andET_ECF_AGENT_ERROR_HANDLER
to 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 isvalue
and notlocation
. - Fixed ECF pretty-printer when processing files of the form
<redirection>
. It was printing the file it was redirected to.
- Improved
gelex
to generate smaller manifest arrays.
- Added support for manifest immutable strings
{IMMUTABLE_STRING_8} "..."
and{IMMUTABLE_STRING_32} "..."
. More generally,IMMUTABLE_STRING_8
andIMMUTABLE_STRING_32
are considered as as sized variants ofSTRING
(likeSTRING_8
andSTRING_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 > 0
as syntactic sugar foracross list is x all x > 0 end
. - Added support for quantifier expressions of the form
∃ x: list ¦ x > 0
as 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|error
for optionwarning
in ECF classes as introduced in ECF 1.21.0. Note thatgec
does 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
.l
input 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 optionutf8
Unicode 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
.y
input file can contain Unicode characters. Characters in%token
declarations can also be Unicode characters or their escaped versions (e.g%token '\u03B2'
where03B2
is 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_string
andput_substring
in classKI_CHARACTER_OUTPUT_STREAM
and its descendants so that the argument is of typeREADABLE_STRING_8
instead 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.\u03B2
or\x{03B2}
where03B2
is the hexadecimal code for Greek character beta). Surrogate and invalid Unicode characters produce a regular expression syntax error. - Fixed bug in
LX_DFA_REGULAR_EXPRESSION
andLX_DFA_WILDCARD
when 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}
where03B2
is 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_reals
so that the assertions inherited fromCOMPARABLE
do not get violated with NaNs in classesREAL_32
andREAL_64
. - Implemented
ieee_*
built-in routines in classesREAL_32
andREAL_64
.
- Added support for new values
none|feature|all
for settingdead_code_removal
in ECF classes as introduced in ECF 1.20.0. Note thatgec
does not take this setting into account. - Changed default for setting
total_order_on_reals
fromfalse
totrue
in 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 toolgexace
is not supported anymore.
- Fixed name of built-in feature
ISE_RUNTIME.new_special_of_reference_instance_of
in 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
signature
was not considered as optional. - Added support for
"C++ struct ..."
in external routines. - Fixed C compilation errors with
msc
as 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 NONE
is different from typedetachable NONE
in 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
gec
is ECF.
- New tool to validate the conformance of Eiffel tools (typically compilers) to the ECMA Eiffel standard.
- Added tests for the validity rules
VAPE-1
andVAPE-2
. - Do not duplicate expected test results of the validation suite for
gec
andgelint
when they are the same. - Made the validation suite browsable with the GitHub Markdown facilities.
- Added tests for the validity rules
VGFG
andVGGC
. - Added tests for the validity rule
VFAV
. - Added tests for the validity rule
VGMC
.
- The only Eiffel configuration notation now supported by the
gedoc
is ECF.
- Fixed examples in the documentation.
- The only Eiffel configuration notation now supported by the
gelint
is ECF.
- Changed the signature of some
assert_*
routines to be able to compare someseparate
objects 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
gexace
can 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_parameter
which 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_optional
which 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
eol
inKI_TEXT_INPUT_STREAM
andKI_TEXT_OUTPUT_STREAM
so 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
VAVE
so that the loop variant expressions can not only be of typeINTEGER
but also of one of its sized variants. - Fixed bug when the type of the anchor of a qualified anchored type
(e.g.
like {A}.f
orlike a.b
) appearing in the signature of a redeclared feature is itself a qualified anchored type. In some valid cases, a validity errorVDRD-2
was 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.
T
inattached {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 thesupport
capability value when theuse
value 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 T
was consideredattached
even with the optionis_attached_by_default="false"
in the ECF file. - Interoperability with ISE Eiffel: let
like Current
be attached in void-safe mode even with the optionis_attached_by_default="false"
in the ECF file. - Interoperability with ISE Eiffel: do not accept
reference
before 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-4
error 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-1
when the address expression$g
appears in the precondition off
andg
is not exported to all classes to whichf
is exported. - Fixed bug where a
VEEN-2
validity error was erroneously reported when the entityResult
appears in the body of a function inline agent which itself appears in the precondition of a feature. - Report a validity error
VAPE-2
when a creation call with the creation proceduremake
appears in the precondition off
andmake
is not exported for creation to all classes to whichf
is exported. - Report a validity error
VAPE
when an implicit conversion appears in the precondition off
and the associated convert feature is not exported (or exported for creation in case of a convert procedure) to all classes to whichf
is exported. - Fixed bug in void-safety mode when a generic constraint is of the
form
C [G -> H, H -> G]
whereG
was erroneously considered as not conforming toH
. This issue did not exist in non-void-safety mode. - Fixed bug where a formal generic parameter
G
was not assumed to conform todetachable ANY
when 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-4
errors as of version 19.01. - Fixed bug when processing a
Precursor
instruction in a function or aPrecursor
expression 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
target
for the task<ise>
and renamed the optionace
asecf
. - Added options
target
,thread
,new_instance_types
,silent
,verbose
,no_benchmark
,nested_benchmark
,metrics
for the task<gec>
and renamed the optionace
asecf
.
- Renamed command-line option
--new_instance_types
as--new-instance-types
to comply with theargument
library validity constraints. - Added command-line options
--no-benchmark
,--nested-benchmark
and --metrics
. - Improved the way benchmarks, metrics, silent and verbose modes are specified and taken into account.
- Change the command-line option
--cc
to accept the following values:no|script|make|gecc
. - Made
gec
multi-threaded, with the command-line option--thread
. - Added command-line option
--target
to select the name of the target in the ECF file. - Added command-line options
--setting
,--capability
and--variable
to override the corresponding values in the ECF file.
- New tool to compile the C code generated by
gec
in a multi-threaded environment.
- Changed the default value for command-line option
--thread
to 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
--target
to select the name of the target in the ECF file. - Added formats
ecf_pretty_printer
to pretty-print or convert ECF files, andavailable_targets
to 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
,--capability
and--variable
to override the corresponding values in the ECF file. - Removed command-line option
--define
, superseded by--variable
.
- Changed the default value for command-line option
--thread
to 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
--target
to select the name of the target in the ECF file. - Added command-line options
--setting
,--capability
and--variable
to override the corresponding values in the ECF file. - Removed command-line option
--define
, superseded by--variable
.
- Added documentation about
Xace
andgexace
. - 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 = v
are 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 = v
are 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
class
in the postcondition instead ofoption: instance_free
in thenote
clause. - 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_type
when 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
check
instruction with nothen
clause.
- Made sure that
UT_CSV_HANDLER.read_file
can 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
xpath
andxslt
have 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_32
manifest 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
volatile
qualifier in the generated C code when there is a rescue clause. It was declaring a variable pointing to avolatile
object instead of avolatile
variable 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
volatile
in 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
gedoc
multi-threaded. It runs almost 3 times faster on a 4-CPU machine.
- Made
gelint
multi-threaded. It runs almost 3 times faster on a 4-CPU machine.
- Fixed bug in feature
detachable_less_than
in classKL_PART_COMPARATOR
when 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.value
can 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_SYSTEM
toET_SYSTEM_PROCESSOR
to 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_row
when 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.b
orlike {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_stylesheet
which mimics the HTML documentation generated by the filterhtml-stylesheet
of ISE EiffelStudio. - Wrote documentation of
gedoc
.
- Removed command-line option
--qat
. Qualified anchored types (types of the formlike a.b
orlike {A}.b
) are always accepted. - Wrote documentation of
gelint
.
- Added feature
append_pathname_to_string
to classKI_FILE_SYSTEM
. - Added buffered version of output file classes (
KL_BUFFERED_OUTPUT_FILE
and descendants). - Changed feature names and signatures in classes
KL_PART_COMPARATOR
andKL_COMPARATOR
in order to compile in void-safe mode with ISE 17.05.
- Fixed bug when a feature has an
across
construct followed by an object-test with the same local name. The object-test local name was considered as anacross
local 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_flattened
orET_CLASS.reset_after_ancestors_built
. The unfolded form was erroneously discarded.
- Extended the attributes
if
andunless
to accept the values "true" and "false". This can be useful when automatically generating geant build files. See bug#2657770. - Use ISE Eiffel's ec instead of ecb, so output is compatible with estudio; else estudio will complain about a corrupted project.
- Added support to set compilation directory to different directory
than current directory. Define
GOBO_BUILD_PREFIX
and 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_error
to task (true by default). - Added attributes
array_size
andinspect_actions
to task<gelex>
. - Added attribute
array_size
to task<geyacc>
. - Moved the code/doc/examples/tests to
$GOBO/tool/geant
. - Moved the buildfiles to
$GOBO/library/common/config
.geant
will automatically redirect inherited files which were located in$GOBO/misc
to the new location.
- Added option
--gelint
to force the whole content of classes to be checked (even features not reachable from the root creation procedure). - Fixed bug in the generated C code for call agents whose feature was
FUNCTION.item
orROUTINE.call
and 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_string
andreset_with_file
inYY_SCANNER
. - Changed the default maximum size for manifest arrays to be 200.
- Changed the default for semantic actions to use
inspect
instructions instead of binary search withif
instructions. - 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
VTCT
error when the type of a local variable was a generic class type whose base class did not exist. - Report a
VIPR-3
error for inline agent of the once and external forms. This is not in ECMA 367-2, but a restriction in ISE. - Qualified anchored types are now accepted by default.
- 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_suite
in smaller routines in the generated test harness so that the back-end C compiler (in particular MSVC under Windows) can compile the generated C code for this routine in a reasonable amount of time. - Added command-line options to the generated test harness to monitor which of the registered test cases should be executed or ignored.
- Improved command-line processing of the generated test harness.
- Moved the code/doc/examples/tests to
$GOBO/tool/getest
.
- Added option
syntax
to 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
%token
and%type
clauses, 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_TYPE
are replaced by underscores. It is now possible to customize the name of this variable tolast_<alias_name>_value
by declaring%token <EIFFEL_TYPE as alias_name> ...
. See bug#2621302. - Added support for qualified anchored types in
%type
and%token
declarations in.y
files. - Eiffel classes need to be regenerated with
geyacc
from.y
files because of a breaking change to make the internal stacks void-safe compliant. Otherwise this will result in a compilation error. - Removed command-line option
--old_typing
. - In order to be void-safe compliant, the generated token class has been
made deferred (
last_value
attributes may be attached). - Made the generated parsers compilable in void-safe mode with ISE 7.3.
- Added option
--rescue-on-abort
to generate a rescue clause in action routines to catch abort exceptions. Useful when compiling in void-safe mode. - Added option
--array-size
and 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_*_pathnames
to classKI_FILE_SYSTEM
. - Features
test
in classKL_EQUALITY_TESTER
andequal_objects
in classKL_ANY_ROUTINES
now use the new ECMA construct~
instead of the combinationsame_type
and thenis_equal
. - Added feature
is_true
to class KL_AGENT_ROUTINES. - Fixed bug in feature
read_to_string
of file classes where the hash code was not reset properly. - 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_EXPRESSION
wherecompile ("foo\$")
was settinghas_dollar
to True even though the dollar sign was escaped. - Added features
pattern
andis_case_insensitive
in 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
pattern
andis_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
compress
fromDS_SPARSE_CONTAINER
. See bug#2831433. - Relaxed precondition of
put
andput_last
in classesDS_SET
andDS_SPARSE_TABLE
(i.e. the ancestors ofDS_HASH_SET
andDS_HASH_TABLE
) to benot is_full or else has (k)
instead of justnot is_full
. - Added features
do_until
anddo_if_until
toDS_CONTAINER
and its descendants. - Added feature
has_void
toDS_CELL
andDS_PAIR
. - Fixed bug in features
force_last_new
andput_last_new
ofDS_HASH_TABLE
. - Fixed bug in
DS_HASH_TABLE
when the calls tokey_equality_tester
insearch_position
trigger the invariant which internally callssearch_position
. But this routine was not written to be re-entrant. - Added iteration routines to the descendants of
DS_TABLE
so 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
across
Eiffel 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_ROUTINES
to check whether an exception has been raised or not when executing a given agent.
- Added class
DT_STOPWATCH
in 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
note
as 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 FOO
ordetachable BAR
) and for object-tests (e.g.attached {T} exp as x
with{T}
andx
optional). See bug#2682694. - Added the notion of ignored classes. We can programmatically decide to ignore the class from a cluster and take it into account later on after some processing.
- Added support for attribute initialization body.
- Added support for renaming clause in libraries when parsing ECF files.
- Fixed pretty-printer when processing indexing clauses in features. An extra empty line was inserted.
- Added support for
check
instructions with athen
branch. - Added support for
once
keys in once routines. - Improved the way the type of a manifest array is determined in the case where the types of all items conform to one of them. In that case the manifest array will be an array of that type.
- The scope of object-test locals can cover the following assertions
in the same postcondition or invariant clause because it's as if
they were separated by
and then
operators. It was already implemented that way in preconditions. - Support the ECMA syntax for typed manifest strings and typed character constants.
- Accept class text files which start with the byte order mark (BOM). (See http://en.wikipedia.org/wiki/Byte_order_mark.)
- Started checking void-safety validity rules.
- Relaxed the validity rule to prevent cycles in qualified anchored types so that it can accept code appearing in ISE's libraries.
- Added support for
across
instructions/expressions. - 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/xpath
and$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
gcc
as back-end C compiler. See bug#1961462. - Added support for object equality (
~
and/~
). Equality expressions (=
and/=
) now use the semantics of object equality when the operands are dynamically of expanded types. - Added experimental support for Qualified Anchored Types (types of the
form
like a.b
orlike {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
generator
to the generated classes. See feature request bug#1961466. - Provided programmatic access to test results.
- Removed support for config file
getest.se
and option--se
.
- Made sure that several options
override_cluster
can be specified in Xace files. - Fixed bug when generating ECF files from Xace files: the override clusters were not marked as such.
- Removed support for SmartEiffel config files.
- Added
make_from_string_general
andmake_from_substring_general
in 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_key
andfor_all_with_key
to 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
if
andunless
so that an empty right/left side of the equals sign is treated as an empty string which makes comparisons easier. Also leading/trailing white space for the equals sign is not removed anymore to leave control to the script developer. Note that this might cause a problem to scripts which made use of the old behavior. These scripts need to be adapted. - Task
geant
has a new attribute calledexit_code_variable
. It can be used to capture (or ignore) the execution result of a<geant>
call and works exactly as in theexec
task. - 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
twin
anddeep_twin
work correctly. -
Improved CAT-call error reporting, in particular in case of Tuple label assigners.
-
Relaxed the CAT-call rule when calling Agents to be compliant with ISE. ISE Eiffel does not type-check the tuple operand of Agent calls even at execution time. It only checks whether the tuple has enough items and these items are of the expected types, regardless of the type of the tuple itself. For example it is OK to pass a
TUPLE [ANY]
to an Agent which expects 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_twin
when 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
Result
as it was when the recursive call occurred, as specified in ECMA Eiffel. -
The Xace option
garbage_collector
is now taken into account bygec
when set toboehm
. This Xace option can be overridden by the command-line option--gc
when specified. -
When
gec
compiles an application with the Boehm GC, it now generates code that will let the GC trigger the featuredispose
when objects are reclaimed. -
Take better advantage of the Boehm GC, using
GC_malloc_atomic
when possible. -
The implememtation of the rescue mechanism in C uses
setjmp
andlongjmp
. The use of these two C functions requires that any local variable modified between the call tosetjmp
and the call tolongjmp
to be declared asvolatile
, otherwise its value may be lost after callinglongjmp
if 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
VTCT
error,gelint
/gec
were reporting another subsequent error, as shown in bug#1875262. - Made sure that no
VAPE
error is reported when a feature is exported to a class that has a syntax error or for which the ancestors could not be computed. - Added support for the notion of libraries as specified in ECF.
This introduced some breaking changes if you are using the code of
gelint
in your own applications. For example what was known asET_UNIVERSE
is now calledET_SYSTEM
andET_UNIVERSE
is 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_tolerance
andassert_doubles_equal_with_strict_tolerance
toTS_ASSERTION_ROUTINES
. getest
now expects test case classes to declaremake_default
inherited fromTS_TEST_CASE
as 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
--ve
and replaced it by--ge
. - Print the exception trace if available when an exception occurred while running a test case.
- Make sure that the garbage collector is in the same state as before running each test case.
- The option
--system=ise
now generates ECF directly instead of going through Ace which is then converted to ECF by EiffelStudio. This allow Xace to support options that have been introduced in ECF. In order to generate Ace files for ISE, use the new command-line option--format=ace
. - The option
--system=ge
now generates an Xace file instead of an Ace file. This makes it possible for example forgec
to determine whether the Boehm GC should be used through the Xace optiongarbage_collector
. Otherwise, with Ace files, this information has to be passed togec
through 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.txt
for more details. - The default value of these Xace options has been changed to follow
the default value in ECF:
inlining
,inlining_size
,use_cluster_name_as_namespace
,use_full_cluster_name_as_namespace
. See$GOBO/doc/gexace/options.txt
for more details. - Fixed bug#1875809 where libraries were duplicated in the generated output file when appearing twice in the same Xace input file.
- Fixed bug when resuming a parsing that was suspended (with
suspend
). The last action before the call tosuspend
was executed twice.
- Added iterator features (
do_all
,do_if
,for_all
,there_exists
) in classKL_DIRECTORY
. - Added feature
prune_all_trailing
toKL_STRING_ROUTINES
. - Improved class
KL_EXCEPTIONS
to make it clearer what is available for all Eiffel compilers and what is not. - Added
KL_MEMORY
and friends to provide a compiler independent way to access garbage collection facilities. - Upgraded Unicode support to version 5.1.0.
- Fixed bug#1917556 where feature
split
inRX_PCRE_REGULAR_EXPRESSION
was 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_exists
andfor_all
up to classDS_CONTAINER
. - Added features
do_all_with_key
anddo_if_with_key
to classDS_TABLE
. - Added feature
has_void
to 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
trace
option. - The Boehm GC can be plugged using the
--gc
command-line option. - Improved the back-end C compiler config file.
- Improved interoperability with ISE's compiler.
- Support
external "C++"
routines. - Implemented feature
deep_twin
. - Added support for lcc-win32 and MinGW as back-end C compilers.
- 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_equal
directly, 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.589999910
instead 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_SET
andDS_MULTIARRAYED_SPARSE_TABLE
whencapacity
is 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_64
among 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 attributesif
andunless
. - Task
<geant>
now by default spawns a newgeant
process if attributefile
has been specified. It also has a new attribute calledfork
to control whether a new process should be spawned or not. - Added attribute
force
to 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. Howevergec
is not a full-fledged Eiffel compiler yet. See the documentation for more details.
- Added command-line option
--default_test
to specify whether the featuredefault_test
should be included in the generated test cases.
- Has been removed. Use
gexslt
instead.
- New command-line argument parsing library.
-
KL_WINDOWS_FILE_SYSTEM
now accepts both\
and/
as directory separator. This is the default. It can still accept only\
as directory separator if you use themake_backslash_only
creation procedure. -
Change semantics of
KI_FILE_SYSTEM.absolute_parent_pathname
when the argument is both a root directory (i.e. has no parent) and an absolute pathname. In that case return the argument itself instead ofabsolute_root_directory
as before. -
Fixed bug in
KL_(UNIX|WINDOWS)_FILE_SYSTEM.absolute_parent_pathname
. When the result was a root directory it was erroneously returningabsolute_root_directory
. So if you were inC:\gobo
and asked for theabsolute_parent_pathname
ofD:\foo
you were gettingC:\
instead of the expectedD:\
. -
Fixed bug in
KL_WINDOWS_FILE_SYSTEM.canonical_pathname
which for the input\\gobo\foo\..
was returning the invalid pathname\\gobo\
instead of\\gobo\foo
. Likewise forc:\..
, we were gettingc:\..
instead ofc:\
. -
Added
sharename
toKI_PATHNAME
, so that UNC pathnames can be split into\\hostname\sharename
. -
Added classes for determining the class of Unicode characters. Also updated code for conversion to lower and upper case, and added code for conversion to title case. These are generated from the Unicode Character Database. Currently Unicode version 5.0.0 is supported.
-
New features have been added to a new ancestor of ISE's STRING class in order to support the classes
STRING_32
andSTRING_8
which 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
make
toMA_DECIMAL_TEXT_PARSER
andMA_DECIMAL_BCD_PARSER
. - Renamed
MA_DECIMAL_CONSTANTS
asMA_DECIMAL_CONTEXT_CONSTANTS
andMA_DECIMAL_MATH
asMA_DECIMAL_CONSTANTS
. - Added class
MA_SHARED_DECIMAL_CONSTANTS
. - Moved
Maximum_integer_as_decimal
andMinimum_integer_as_decimal
fromMA_DECIMAL_CONTEXT_CONSTANTS
toMA_DECIMAL_CONSTANTS
and renamed them asmaximum_integer
andminimum_integer
. - Moved
default_context
fromMA_DECIMAL_CONTEXT
toMA_SHARED_DECIMAL_CONTEXT
. - Added a comment in
MA_SHARED_DECIMAL_CONTEXT.set_shared_decimal_context
emphasizing the fact that it is best practice to call this routine once and for all at the beginning of the application to avoid unexpected behaviors.
- Added feature
suspend
(and its associated featureis_suspended
) toYY_PARSER
and its descendantYY_PARSER_SKELETON
to be able to suspend the current parsing. The next call toparse
will resume parsing in the state where the parser was when it was suspended. Note that a call toabort
oraccept
will forceparse
to parse from scratch. - Changed implementation of feature
syntax_error
inYY_PARSER_SKELETON
so that it returns false when nothing has been parsed yet.
- Added classes for normalizing Unicode strings.
- Removed useless precondition of feature
make_with_separators
inST_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
obsolete
mechanism. - 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
xsltproc
and pass string parameters to it, you have to surround those parameters with single quotes now. - Task
<ve>
supports VE 5.0 with the attributexace
to specify Xace files. Attributeesd
is still supported when using VE 4.1. - Added built-in variable
verbose
which is set (totrue
) whengeant
is run in verbose mode. - Added attributes
verbose
,abort
,generation
,compilation
andexecution
to task<getest>
.
- Removed support for
hact
. - Added support for VE 5.0:
ve
now generates Xace files for VE 5.0. In order to generate ESD for VE 4.1 useve41
instead.
- Added command-line option
--pragma=[no]line
in order for the code generated for the semantic actions to contain or not indication about the line number where it originally appeared in the input description file. - Fixed bug in
%option line
with the-z
option when two rules were sharing the same semantic actions (with|
separator). - When not appearing in a character class, an unescaped
[
character is now considered to be the open character of a character class and reports an error if there is no matching]
character. It used to be considered as a non-special character when there was no matching]
character.
- Following the changes made in version 3.2,
YY_PARSER_SKELETON
is not a synonym ofYY_OLD_PARSER_SKELETON
anymore 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]line
in order for the code generated for the semantic actions to contain or not indication about the line number where it originally appeared in the input description file. - Added command-line option
--doc=(html|xml)
to generate documentation about the grammar in HTML or XML format.
- Added command-line options
--verbose
and-v
to rungetest
in verbose mode. - In verbose mode
getest
prints the number of test cases that have been generated.
XM_DOCUMENT.process_to_events
makes the tree an event source.- New
XM_XMLNS_GENERATOR
filter injects xmlns declarations in event stream. It can be combined with a print filter. XM_FORMATTER
is now a wrapper for the above and so produces XML compliant output.XM_INDENT_PRETTY_PRINT_FILTER
andXM_WHITESPACE_NORMALIZER
added to allow pretty indented output.XM_NAMESPACE_RESOLVER
has new option to forward xmlns attribute events (forward_xmlns
).XM_DTD_CALLBACKS
:on_doctype
called first;on_dtd_end
,on_dtd_comment
,on_dtd_processing_instruction
added.- New
XM_XMLID_VALIDATOR
validatesxml:id
attributes. - Parser defaults to new STRING-only
latin-1
mode. - Parser correctly outputs
PUBLIC
identifier inDOCTYPE
. - Parser leaves XML resolver in correct state.
XM_PARSER.positions
contains full info to locate errors in external entities.- Eiffel parser accepts UTF8 files that start with a BOM.
- Expat parser accepts genuine
UC_STRING
s as input.
- Fixed bug in
KL_PATHNAME.set_canonical
. - Added bit operation features to
KL_INTEGER_ROUTINES
. - Added features
power
,div
andmod
toKL_INTEGER_ROUTINES
. - Added feature
log2
toKL_DOUBLE_ROUTINES
. - Added feature
truncated_to_integer
toKL_DOUBLE_ROUTINES
because this routine is not supported anymore in SE 2.2b1. - Added class
KL_CLONABLE
. This class should be used whenever the corresponding objects need to be cloned. This is the consequence ofclone
not being supported anymore in SE 2.2b1. If you need to clone strings or arrays, usecloned_string
by inheriting fromKL_IMPORTED_STRING_ROUTINES
andcloned_array
by inheriting fromKL_IMPORTED_ARRAY_ROUTINES
. To a clone a SPECIAL object, just calltwin
on it (does not work with ISE 5.4, but works with ISE 5.5). KL_PLATFORM.Double_bit
s is not supported with SE 2.1 and 2.2b1 anymore. This is a consequence ofDOUBLE
being deprecated in SmartEiffel and hence not supporting the required features.UC_STRING.infix "@"
does not work as expected with SE 2.1. It works well with the SE 2.2b and SE 1.0 though. This is the consequence of the fact 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_CEL
L items for basic types, rather than accepting the_REF
types). 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_URI
path 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_namespaces
allows 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_lower
andas_upper
inKL_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
class
andfeature
to task<getest>
. - The task
<hact>
now takes advantage of Halstenbach incremental compiler. - Added attributes
old_typing
andnew_typing
to task<geyacc>
.
- Made the semantic values more type-safe. Now the parser
skeleton class is not generic anymore, and there is one
different stack generated per declared type in the %type
or
%token
clauses.geyacc
also generates the corresponding attributeslast_<type>_value
instead oflast_value
to be used to set the semantic values of tokens. Transition path: If you still want to use the old typing mechanism (now made obsolete), usegeyacc
with the command-line option--old_typing
or withgeant
's attributeold_typing
in task<geyacc>
. It is also recommended that you replace classYY_PARSER_SKELETON
byYY_OLD_PARSER_SKELETON
in your code. Alternatively you can now switch to the new typing mechanism usinggeyacc
's--new_typing
command-line option or attributenew_typing
in task<geyacc>
ingeant
. In that case you will have to use the non-generic classYY_NEW_PARSER_SKELETON
instead ofYY_PARSER_SKELETON
and replace the calls tolast_value
by the correspondinglast_<type>_value
in your code. In the next releaseYY_PARSER_SKELETON
will stop to be a synonym ofYY_OLD_PARSER_SKELETON
and 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_SKELETON
andYY_NEW_PARSER_SKELETON
will be removed, and you will have to useYY_PARSER_SKELETON
along with thelast_<type>_value
attributes in your code.
- Added command-line options
--class
and--feature
to pass the regexps for tested class names and feature names as argument instead of through theclass
andfeature
fields of the config file (needed by Guy Fokou). - Better formatting of the message when
assert_equal
orassert_not_equal
fail (suggested by Berend de Boer).
- Renamed
convert
asconvert_to_equivalence
in classLX_SYMBOL_CLASS
becauseconvert
is a keyword in ETL3.
- Big chunks have been redesigned. Still under development.
- Eiffel parser now accepts
iso-8859-1
encoding. - Tree formatter now produces valid XML.
- Tree node parent not void (when not the root node) implemented
where missing and creation procedures updated accordingly. Also
for the root element, so that
root_node
returns the real root (XM_DOCUMENT
).XM_NODE.level
consequently offset by1
. XM_COMPOSITE
now a read-only list. Modification routines are inXM_ELEMENT
andXM_DOCUMENT
(typing is used to allow only the correct node types to be added).XM_COMPOSITE
descendants' modification routines remove a node from its previous parent if any. They also havemake_last
creation routines that add the node to the composite.make_last
is faster thanmake
,force_last
.XM_NODE.parent_element
added,root_node
nowXM_DOCUMENT
.XM_NAMESPACE
stricter contracts anduri
invariant,is_default
replaced bynot has_prefix
, removed rather than obsoleted due to SmartEiffel'sANY
using the name.XM_DOCUMENT.set_root_element
now exported toANY
.XM_NAMESPACE_RESOLVER
now issues empty strings (the default namespace) rather than the parent element's namespace foron_attribute
events in the case of unprefixed attributes. (XML Names says unprefixed attributes have no namespace.)XM_ELEMENT.*attribute_by_name
only look for unprefixed attributes, for the same reason as above.- Added
_by_qualified_name
routines to tree nodes. XM_FORMATTER.last_string
replaced by.last_output_stream
.XM_NODE_TYPER.attribute
obsoleted and renamed toxml_attribute
to 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.content
is now of typeKI_CHARACTER_BUFFER
instead 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
close
up toKI_INPUT_STREAM
andKI_OUTPUT_STREAM
and added featureis_closable
(suggested by Franck Arnaud). - Made sure that
hash_code
inUC_STRING
returns the same value whensame_string
returns 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:
namespace
in named nodes is now an object, which contains URI and prefix. It may be shared. - Tree:
*_by_name
routines check the namespace is the same. - Tree:
is_first
andis_last
inXM_COMPOSITE
for checking position within parent. - Tree: added
elements
toXM_COMPOSITE
.
- Added feature
wipe_out
toYY_BUFFER
andYY_FILE_BUFFER
, which is useful in order to avoid invariant violation when reusing the same input buffer for subsequent scanning. (suggested by Emmanuel Stapf) - Options specified on the command-line now override those
specified in the
%option
directives of the input file (reported by Sven Ehrke).
- Added command-line options
-k
and--tokens-file
: name of the file where the tokens class will be written (reported by Sven Ehrke). - Do not generate unused local variables anymore.
- Do not generate unused
$N
type conversion routines, nor conversion routines for the generic parameters of these types. This caused Eiffel compilation errors when the generic parameter was a formal generic parameter (reported by Zoran Simic). - Fixed bug in default rule when the declared type is a basic
expanded type. For example when the declared type in the
%type
section wasINTEGER
, the default rule was trying to set$$
toVoid
instead of0
(reported by Emmanuel Stapf).
- Added command-line options:
-g
for testcase generation only,-c
for testcase compilation only, and-e
for testcase execution only (suggested by Glenn Maughan). - Added assertion routines to compare file contents and filenames.
- Added command-line option
--compile
to pass the Eiffel compilation command-line as argument instead of through thecompile
field of the config file. - Added command-line options
-D
and--define
to define variables which will be passed to the command running the test cases. - The
testgen
directory is now created bygetest
if 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
--lines
and-l
in order to generate empty lines whenever lines are ignored from the input file. That way line numbers are preserved. (suggested by Alexander Kogtenkov)
- 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_path
in the Ace file anymore in order to useKL_STRING_BUFFER_ROUTINES
with ISE Eiffel. Use new routines introduced in classPOINTER
in ISE Eiffel 4.5 instead. - Added cluster
$GOBO/library/kernel/io
with directory, file and file-system functionalities. - Added cluster
$GOBO/library/kernel/misc
with miscellaneous kernel classes. - Added cluster
$GOBO/library/kernel/unicode
with Unicode support classes (based on the work from Majkel Kretschmar).
- Fixed bug in feature
force_last
ofDS_SPARSE_SET
andDS_SPARSE_TABLE
when resizing the container. - Changed postconditions in
DS_LINEAR_CURSOR
andDS_BILINEAR_CURSOR
which prevented descendants to implement partial traversals or different traversal strategies (reported by Berend de Boer and Einar Karttunen). - Fixed bug in
HASH_TABLE
related to the new implementation in ancestor 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
date
andtime
inDATE_TIME
andDATE_TIME_DURATION
(reported by Emmanuel Bouyer). - Added feature
set_storage
toDT_DATE
andDT_TIME
. - Fixed bug in feature
add_minutes
ofDT_DATE_TIME
(reported by Glenn Maughan). - Fixed bug in feature
set_from_epoch_days
ofDT_DATE
when the resulting date in 1 January 1600 (reported by Emmanuel Bouyer). - No need for
include_path
in the Ace file anymore in order to useDT_SYSTEM_CLOCK
with 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/command
cluster to$GOBO/library/pattern/command
and change class name prefix fromUT
toDP
. - Added feature
exit_code
to 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
geant
andgexace
instead ofMakefile
files (which were not portable across platforms).
geyacc
now generates the routinetoken_name
along 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_token
in classesYY_COMPRESSED_SCANNER_SKELETON
,YY_INTERACTIVE_SCANNER_SKELETON
andYY_FULL_SCANNER_SKELETON
. One need to compile the system withdebug ("GELEX")
enabled. The routineprint_last_token
can be redefined in descendant classes to print more debugging information. In particular, the routinetoken_name
generated bygeyacc
can be used to make the debugging output more human-readable. (suggested by Andreas Leitner)
- First release.
- Added argumentless creation routine
make_default
to most containers. In resizable containersmake_default
is equivalent tomake (default_capacity)
wheredefault_capacity
is a constant (10
) defined in classDS_RESIZABLE
(suggested by Franck Arnaud). DS_SORTER
and descendant classes now useDS_COMPARATOR
as comparison criterion (suggested by members of the SmallEiffel mailing list).- Added class
DS_TOPOLOGICAL_SORTER
to sort partially ordered items. - Added
DS_SET
and descendant classes such asDS_HASH_SET
andDS_MULTIARRAYED_HASH_SET
. DS_HASH_TABLE
: added creation routinemake_map
in order to compare keys with=
instead ofequal
.DS_HASH_TABLE
: added featuresremove_found_item
,found_key
andforce_last
.- Added class
DS_MULTIARRAYED_HASH_TABLE
with the same interface asDS_HASH_TABLE
but implemented with a sequence of fixed size arrays instead of a single array. This might be useful for hash tables containing a very large number of items. - Fixed bug in
DS_LINKED_LIST.delete
(reported by Emmanuel Bouyer). - Fixed bug in
QUEUE.{force, put, extend}
: removed erroneous postconditionitem_pushed
(reported by Emmanuel Bouyer). - Moved
$GOBO/library/structure/base
to$GOBO/library/structure/other/EiffelBase
. - Moved cursor classes next to their associated containers
and removed cluster
$GOBO/library/structure/cursor
.
- First release.
- Removed comments in
loadpath.se
files which caused problems on AmigaDOS (suggested by Thomas Aglassinger). - Added
Makefile
files in various directories.
- One can now use manifest strings (e.g.
"<="
or".."
) in place of identifiers (e.g.LE
orDOTDOT
) in grammar rules (suggested by Berend de Boer). - Anchored types are now accepted in
%type
declarations. - Improved format of tokens in verbose file (suggested by Roger Browne).
- Added ISE's language extensions to the Eiffel parser example (suggested by Patrick Flaherty).
- The Eiffel parser example now accepts empty Eiffel source files (suggested by Alexander Kogtenkov).
- Added a few words in the documentation about the Eiffel debug instructions spread out in the parser skeleton class (suggested by Francis Drai).
- Added redefinable routine
default_action
toYY_SCANNER
when default rule is matched (suggested by David Massart). - Added
pre_action
andpost_action
, called when%option pre-action
and%option post-action
are specified (suggested by Alexander Kogtenkov). - Added
pre_eof_action
andpost_eof_action
, called when%option pre-eof-action
and%option post-eof-actio
n are specified. - Added
%option line
to generate code for line and column counting (suggested by Alexander Kogtenkov). - Added
%option position
to generate code for character counting since the beginning of the input source. - Fixed bug when the input buffer contains a null character (reported by Emmanuel Stapf).
- Fixed bug when scanning a token larger than the size of the input buffer (reported by Emmanuel Stapf).
DS_TRAVERSABLE
: removed postcondition from routinevalid_cursor
and madeinternal_cursor
deferred (suggested by Andreas Leitner).DS_SEARCHABLE
: added featuressame_items
andsame_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 featuresput
andforce
(avoid unnecessary resizing).DS_SORTER
: Added featuresreverse_sort
andreverse_sorted
.
- Added class
KL_DIRECTORY
to allow Eiffel compiler portable directory access.
- Fixed bug in feature
append_decimal_integer
from classUT_INTEGER_FORMATTER
when 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
test
directory as a starting point for a test suite. - Added a cluster containing an implementation of the main EiffelBase classes based on the Gobo containers.
- Added support for internal iterations (a la EiffelBase).
Some feature renaming was necessary: routines with an
external cursor as argument, such as
put_right
, have been renamed with the_cursor
suffix, as input_right_cursor
. The original feature names have been reused by the internal traversal interface, e.g.put_right
inserts an item to the right of the internal cursor position. - Cursors are always kept valid. There is no need for
calls to
a_cursor.is_valid
anymore. DS_LINEAR_CURSOR
does not inherit fromDS_INDEXED_CURSOR
anymore.- Added classes
DS_QUEUE
andDS_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
geyacc
when$N
in a semantic action does not match with a symbol in the rule. - Fixed bug in output of
geyacc
verbose mode (option-v
). - Routine
clear_all
fromYY_PARSER_SKELETON
clears internal stacks by default (call toclear_stacks
). - Added two new types in
$GOBO/library/kernel
:STRING_BUFFER
andFIXED_ARRAY
(array with lower bound equal to zero). These two types are used instead ofSTRING
andARRAY
ingelex
andgeyacc
skeleton classes for optimization purposes.STRING_BUFFER
maps 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_string
andappend_text_substring_to_string
toYY_SCANNER
. - Added a precondition to routine
set_start_condition
in classYY_SCANNER
. - Resize input buffer if a call to
unread_character
results in too much text being pushed back (it was raising a run-time error in previous releases). - Added command-line option
-x
togelex
andgeyacc
to allow the generation of semantic actions in separate routines. - Added command-line option
-z
togelex
to force the generated code to use aninspect
instruction to find out which action to execute. The default is to use binary-search implemented withif
instructions. - Fixed operator precedence bug in
$GOBO/example/parse/eiffel/eiffel_parser.y
.
geyacc
has been totally rewritten in Eiffel.- Replaced attribute
output_file
by procedureoutput
in classYY_SCANNER
to avoid unnecessary console creation in Windows mode with Visual Eiffel. - Fixed bug in
gelex
in "equivalence class" mode when dealing with regular expressions of the formx{4}
. - Added warnings in
gelex
when a rule cannot be matched and when the default rule can be matched despite the%option nodefault
or-s
option. - Renamed classes
KL_SHARED_*_ROUTINES
asKL_IMPORTED_*_ROUTINES
. (The old class names are still temporarily valid using the classes in cluster$GOBO/library/kernel/obsolete
.) gepp
now supports#include "filename"
instructions.- The second generic parameter of
DS_HASH_TABLE
is now constrained toHASHABLE
(HASHABLE
was not part of SmallEiffel in previous releases). - Cluster
error
has been added to the Gobo Eiffel Utility Library to support a flexible error reporting mechanism.
- 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.