EiffelStudio 18.01 Releases

Below are not the release notes of EiffelStudio. It is the change log of EiffelStudio intermediate releases and the most important changes are highlighted in green or in red (for breaking changes). The release notes of EiffelStudio can be found at the following URL. You can also download the latest revision here. Information about other version can be found under Category:Releases.

EiffelStudio 18.01.x Releases

Beta download: https://ftp.eiffel.com/pub/beta/18.01/ (February 17th 2018)


  • library (Base): Supported Unicode file names in {STORABLE}.retrieve_by_name and {STORABLE}.store_by_name.

Bug fixes

  • EiffelStudio: Fixed a few dialogs to display correctly in Dark theme environment.
  • library (EiffelNet): Corrected invariant `timeout_set` on NETWORK_SOCKET (and related)
  • runtime: Fixed run-time to avoid link errors when a project is compiled with an option "Dynamic run-time" on Windows.

New features

  • EiffelStudio: Added commands (available in the IDE as menu entries and toolbar buttons) to launch code analysis on a class in the current editor window, on a previously analyzed item, on a parent cluster of a selected item, on a currently selected target. The results of the analysis go to the error list similar to compilation results.
  • compiler: Supported typed manifest arrays of the form {ARRAY [FOO]} <<bar, qux>> that allow for explicit specification on the array type (see more at eiffel.org).
  • compiler: Changed how a type of a manifest array is computed when no explicit type is specified, it no longer depends on the type of the target of a reattachment where the array is used as a source (see more at eiffel.org).
  • new "JSON Web Token" library contrib/library/web/authentication/jwt
  • Added experimental command line tool eiffel used to build and launch an Eiffel project directly using the project.ecf file .
  • Supported class postconditions and instance-free features. A class postcondition consists of a single keyword class (with an optional leading tag). A feature with a class postcondition is known as a class feature and can be used in non-object calls of the form {MY_CLASS_TYPE}.my_feature. The restriction is that a class feature cannot access Current, a variable attribute, a non-qualified agent or make calls to non-instance-free features. Instance-free features include constant attributes, external and class features.


  • EiffelStudio: Used colored background in error list to distinguish between different kinds of messages: error, warning, hint, success. The color can be set in the preferences.
  • EiffelStudio: Moved error code in the error list to a dedicated column.
  • EiffelStudio: Supported filtering of error messages by free text.
  • library (Base): Updated CHARACTER_PROPERTIES to use Unicode 10.0.0 instead of 6.2.0.
  • compiler: test#bench021 - Optimized code generation for old expressions when they are known to not raise an exception.
  • compiler: test#unicode007 - Supported Unicode white space characters in source code as token delimiters. This might be useful when copying code from the internet where some servers/browsers replace ASCII white space and tab characters with no-break spaces.
  • compiler: Provided precise location in error messages for VPIR(1), VRLE(1), VREG, VRFA.
  • compiler, EiffelStudio: Used the preferences of the code analyzer to control when obsolete feature calls are reported by the compiler as warnings that can be suppressed, when as warnings that cannot be suppressed, and when as errors.
  • EiffelStudio: Improved style of the documentation generated with a filter for HTML with stylesheets.
  • library(uri): Improved URI building by handling query name, query value and path segment encoding rules.
  • library(wikitext): Improved the support of mediawiki syntax. Improved the TOC generation.
  • EiffelStudio: Added auto-completion support for manifest values in parenthesis.
  • library(EiffelWeb websocket): Added `on_timer` callback event so that server can check regularly external state.
  • library(EiffelWeb): Introduced the new WSF_COMPRESSION and WSF_*_WITH_COMPRESSION interfaces.
  • library(EiffelWeb): Added routing condition mapping (in addition to uri, uri-template, starts-with, ...).
  • library(EiffelWeb): Added a handler to execute CGI scripts (useful mainly when using standalone connector).
  • library(EiffelWeb): Added support for security protection against XSS injection or other similar threats (see new library wsf_security.ecf).
  • library(EiffelNet): Adopt `nanosecond` as timeout unit precision in EiffelNet (previous `second` unit precision feature are available as obsolete features).
  • library(HAL): Added support for embedded resources, reference fields (among other improvements).
  • library(Patterns): Merge framework patterns into library patterns.
  • library(EiffelNetSSL): Updated to use the new OpenSSL Eiffel Library Wrapper.
  • library(OpenSSL): Added new OpenSSL Eiffel wrapper.
  • library (C_library/cURL): Updated cURL library to support static linking of cURL C library. Allow at compile time to choose between using the shared library version (default so far) or using the static library version (not provided).
  • library (C_library/cURL): Updated cURL library to version 7_56_1.
  • library (C_library/cURL): Updated CURL library to get a human-readable error string from a given Curl code number.
  • library (C_library/cURL): Updated CURL library to support SMTP to send emails.
  • library (C_library/OpenSSL): Updated OpenSSL library to version 1.1.0f.

Feature removed

Bug fixes

  • compiler: test#exec091 - Fixed code generation and run-time to make sure class invariant checks on expanded objects are done only after creation procedure is executed and only once.
  • compiler: test#exec370 - Fixed a bug that might cause a crash of a program because of incorrect code generation for conditional expressions involving values of reference and expanded types (e.g., if foo then "bar" else 5 end).
  • library (Base): test#lib046 - Fixed an bug when argument 0 (program name) returned by ARGUMENTS_32 started with a white space.
  • EiffelStudio: Changed sorting of error messages by position to use ordering by number values rather than by their textual representation.
  • EiffelStudio: test#codeanalysis026 - avoided spurious code analyzer message CA050 when a local is used only to initialize Result, but the local type is different from the type of Result: if the types are different (modulo attachment marks), the issue is not reported.
  • compiler: bug#15822 (test#valid252), test#valid294, test#valid295 - Fixed bugs when the name of an existing entity could be used in a nested scope for an inline separate local, an object test local, an iteration cursor, an inline agent argument or an inline agent local.
  • library, EiffelStudio: bug#19373 - Fixed a bug that might cause an integer division by zero in {EV_GRID_IMP}.recompute_vertical_scroll_bar.
  • library (Vision): bug#19388 - Fixed a bug that prevented caching images by EV_SCALED_PIXMAP_FACTORY and increased the number of such images up to 200.
  • library (Vision): Fixed bugs in EV_POSTSCRIPT_DRAWABLE_IMP that caused generation of invalid postscript: font names are normalized by removing any white space characters, an excessive parenthesis is not generated after the command "show".
  • EiffelStudio: Fixed a bug that did not allow for pick&drop on non-ASCII alias feature names.
  • EiffelStudio: Fixed a bug that caused identifiers with non-ASCII characters to be displayed incorrectly (with null/empty characters) in a basic text view of the feature tool.
  • EiffelStudio: Used inherited class source code to position a cursor in the editor when navigating to an error reported for the inherited code.
  • EiffelStudio: Avoided copying a feature clause comment from the previous feature clause in the features tool if the comment is absent in the current feature clause.
  • library (crypto): Fixed and improved BASE32 and BASE64 implementation. Added HMAC.base64_digest function.
  • library (http_client): Fixed and improved query and form data encoding (corrected handling of '+', '%20').
  • library (http_client): Fixed file uploading (various issue in libcurl, and net implementation).
  • library (http_client): Fixed form multipart encoding by using correctly the boundary. Added support for multiple file in form data.
  • library (HAL): support unicode name and values in HAL document.
  • library (xml parser): Improved handling of end of input cases, and avoid calling rewind_character when end of input is reached.
  • EiffelStudio: Fixed debugger information persistence for ecf file without any UUID.
  • library (http_client): Fixed support for relative url (from used by `Location: `) and absolute url from `HTTP_REQUEST_SESSION`.
  • compiler: Fixed support of target settings overwrite (see `-config_option`).
  • library (json): Unescape escaped unicode in unescape_to_string_8 when it represents a valid CHARACTER_8 value.
  • library (EiffelNet): Made EMAIL supporting multiple recipients from `add_*_address` argument.
  • library (eel): Fixed reset implementation of HMAC, SHA1, SHA256 and MD5.
  • compiler: Fixed ECF redirection with location using variable when it is referenced as a library location from another ECF file.
  • library (json): Properly encode null character as \u0000 .
  • compiler: test#runtime021 - Fixed a bug in code generation that might lead to invalid memory access or incorrect assignment result when retrieving an expanded object referenced by an attribute of a reference type combined with a garbage collection cycle.
  • runtime: Fixed exported symbols to avoid link errors when using run-time in DLL.
  • documentation: bug#19418 - Updated ECF schema to match the one used by the compiler.
  • compiler: test#expanded011 - Fixed a bug that might lead to memory corruption when the only instruction in a function of an expanded type is a call on Result.

User changes

  • compiler: Changed an algorithm to compute a type of a conditional expression, now it does not depend on the order of expressions used in the branches, and always exists, i.e. there is no VWCE error anymore (more details are available at eiffel.org).
  • compiler: Added a warning reported when a manifest array type is computed using a target type of the reattachment the array is involved in as a source. The warning can be disabled in the project settings during the first year after the release, cannot be disabled afterwards, and becomes an error after 1.5 year after the release.
  • EiffelStudio: Disallowed application of automatic fixes to modified classes (changed either by external tools or in the editor). The project needs to be recompiled to apply the fixes. Application of several fixes to the same class is possible in one go.

Developer changes

  • library(EiffelNet): now `set_timeout(0)` really sets the timeout to 0 and not to the default timeout (20 seconds).