Age | Commit message (Collapse) | Author |
|
Libraries or applications that support more than one major
release of OTP may need to use conditional compilation of
Erlang source code. Here are few examples where it would be
necessary or desirable:
* To support a new data type or language feature only available
in the latest major release (real-world examples: maps and the
stacktrace syntax).
* To avoid warnings for deprecated functions.
* To avoid dialyzer warnings.
Previously, to do conditional compilation, one would have to
use a parse transform or some external tool such as 'autoconf'.
To simplify conditional compilation, introduce the -if and -elif
preprocessor directives, to allow code like this to be written:
-if(?OTP_RELEASE =:= 21).
%% Code that will only work in OTP 21.
-else.
%% Fallback code.
-endif.
What kind of expressions should be allowed after an -if?
We certainly don't want to allow anything with a side effect,
such as a '!' or a 'receive'. We also don't want it to be
possible to call erlang:system_info/1, as that could make the
code depedent on features of the run-time system that could
change very easily (such as the number of schedulers).
Requiring the expression to be a guard expression makes most
sense. It is to explain in the documentation and easy for users
to understand. For simplicity of implementation, only a single
guard expression will be supported; that is, the ',' and ';' syntax
for guards is not supported.
To allow some useful conditions to be written, there is a special
built-in function:
defined(Symbol) tests whether the preprocessor symbol is defined,
just like -ifdef. The reason for having this defined/1 is that
the defined test can be combined with other tests, for example:
'defined(SOME_NAME) andalso ?OTP_RELEASE > 21'.
|
|
Add a new pre-defined macro called OTP_RELEASE that will expand
to an integer being the OTP version. Thus, in OTP 19 the value will
be the integer 19.
The OTP_RELEASE macro is particularly useful in order to have
different source code depending on new language features or new
features in the type specification syntax. Those features are only
introduced in major versions of OTP.
To be truly useful, the -if preprocessor directive need to be
implemented. That is the purpose of the next commit.
Code that will need to work in both OTP 18 and OTP 19 can be
structured in the following way:
-ifdef(OTP_RELEASE).
%% Code that only works in OTP 19 and later.
-else.
%% Code that will work in OTP 18.
-endif.
|
|
* hans/ssh/rekey_limit/OTP-15069:
ssh: Extend rekey_limit to also take an optional time
|
|
|
|
|
|
Move erl_types test into a common_test suite
|
|
* bjorn/fix-typer-link:
Fix the missing link to typer in an installed system
|
|
* john/kernel/add-file_int-to-release:
Add file_int.hrl to release target
|
|
* john/erts/fix-windows-symlinks/OTP-15062/ERL-615:
Stop assuming that all NTFS reparse points are links
|
|
This fixes a crash that would occur when using file:read_file_info/1
on a file with a non-link reparse point, which are commonly seen in
RSS and OneDrive folders.
|
|
* ingela/ssl/testcuddling:
ssl: Exclude DTLS tests for one more OpenSSL version for now
ssl: Use sane input data
ssl: Make sure help function works from all parts of test suite
|
|
* lukas/kernel/logger-docs:
Add xmllint to travis build
kernel: Use formatter in simple logger example
|
|
|
|
* maint:
Updated OTP version
Update release notes
Update version numbers
ssl: Prepare for release
ssl: Proper handling of clients that choose to send an empty answer to a certificate request
heart: Use ntohs instead of manual conversion
|
|
* maint-20:
Updated OTP version
Update release notes
Update version numbers
ssl: Prepare for release
ssl: Proper handling of clients that choose to send an empty answer to a certificate request
heart: Use ntohs instead of manual conversion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* ingela/ssl/client-has-no-cert/ERL-599/OTP-15050:
ssl: Prepare for release
ssl: Proper handling of clients that choose to send an empty answer to a certificate request
|
|
into maint-20
* john/erts/fix-heart-command-overflow/OTP-15034/ERIERL-166:
heart: Use ntohs instead of manual conversion
# Conflicts:
# lib/kernel/test/heart_SUITE.erl
|
|
Depending on context trap_exit flag may be set or not.
So always set trap_exit and consume the EXIT signal and then set it back.
|
|
This reverts commit a0d7ce6d3613d9e031b674a6ba3dbb474c89b639.
|
|
This reverts commit 202bb737e3deabfebee683266f4b7c42781eb521.
|
|
This reverts commit 345f7f527a4c26ef49cef0d81e2c8b71bf01ebc3.
|
|
|
|
|
|
|
|
|
|
* ingela/ssl/do-not-hardcode-cipher-suites:
ssl: Fix ECDSA key decode clause
ssl: Avoid hardcoding of cipher suites and fix ECDH suite handling
ssl: Run all test case combinations
ssl: Update tests to reflect sslv3 is not supported by default
|
|
|
|
ECDH suite handling did not use the EC parameters form the certs
as expected.
|
|
Fix test case code to use keyAgreement for ECDH_ECDSA
|
|
|
|
* peterdmv/inets/prepare_for_release:
inets: Correct runtime_dependencies before release
Change-Id: I6d5bcfd870c072944df79a2f36ac69d8f88499d0
|
|
Change-Id: Ia53fb6bbf0822608ce9f7afe9b905d3bb1ce0b11
|
|
* sverker/lc-thread-exit-free-fix:
erts: Fix memory leak in lock checker at thread exit
|
|
* rickard/process_info/OTP-14966:
Fix scheduled process_info() 'status' request
Fix handling of process-info requests in receive
|
|
|
|
* ingela/dtls/abbreviated:
dtls: Trigger resend in abbreviated handshake if change_cipher_spec is received to early.
|
|
is received to early.
|
|
|
|
* bjorn/compiler/yreg-init:
beam_validator: Verify Y registers in exception-causing instructions
Correct beam_utils:is_killed/3 (again)
|
|
* lars/crypto/test-suite-problem:
[crypto] Skip test cases for specific ssl version on old machine
|
|
Skip the test cases in the engine_SUITE on a specific ssl version
used on one test machine.
|
|
* lars/remove-corba-applications/OTP-14283:
Move the corba applcations to separate repository
|