Age | Commit message (Collapse) | Author |
|
|
|
The generated code for table constraints has several problems:
* For each object set, a function for getting an encoding or decoding
fun is generated, regardless of whether it is actually used. In many
specifications, the object set actually used is the union of several
other object sets. That means that the code can become a lot bulkier
than it would need to be.
* The funs are not necessary. The funs just add to the code bloat
and generate more unnecessary garbage at run-time. Also, one of
the arguments of the fun is the name of the field in the class which
is known at compile-time, and the fun for decoding has unused arguments.
How to fix the problems:
At each call site where an open type should be encoded/decoded, call a
specific generated function specialized for the actual object set and
the name of the field in the class. When generating the specialized
functions, make sure that we re-use a previously generated function if
possible.
|
|
There are some minor incompatibilities for BIT STRING:
{bit,Position} is now only only supported for a named
BIT STRING type.
Values longer than the maximum size for the BIT STRING type
would be truncated silently - they now cause an exception.
|
|
As a preparation for rewriting handling of table constraints,
we must make sure that code for decoding a SEQUENCE OF / SET OF
can be be contained in a single clause of a function; thus, we
must not output the helper function for decoding of each component
directly following the code that follows it. Use asn1ct_func:call_gen/3
to delay outputting the helper function.
|
|
|
|
Use 'try' instead of 'catch', and don't match anything that
cannot actually be returned from the generated encoding code.
|
|
|
|
|
|
|
|
|
|
|
|
Also extend the test suite with more tests of inlined constructs
in object sets.
|
|
According to the ASN.1 standard, having multiple UNIQUE in class
is allowed. For example:
C ::= CLASS {
&id1 INTEGER UNIQUE,
&id2 INTEGER UNIQUE
}
In practice, no one uses multiple UNIQUE.
The ASN.1 compiler will crash if a class with multiple UNIQUE
is used, but the backends have half-hearted support for multiple
UNIQUE in that they generate helper functions similar to:
getenc_OBJECT_SET(id1, 42) ->
fun enc_XXX/3;
...
Since we have no plans to implement support for multiple UNIQUE
(no one seems to have missed it), simplify the helper functions
like this:
getenc_OBJECT_SET(42) ->
fun enc_XXX/3;
...
|
|
|
|
The smp1/1 test case seems test how well the SMP emulator can
parallelize tasks, not any functionality in the asn1 application
that is not tested in other tests.
|
|
|
|
Break out the code to a separate function to make it more readable.
Also avoid hard-coding the name of the value to use as "Val1" as
it may not be true in the future.
Instead of using a list comprenhension like this:
case [X || X <- [element(5, Val),element(6, Val)],
X =/= asn1_NOVALUE] of
[] -> ...;
_ -> ...
end
use an orelse chain:
case element(5, Val) =/= asn1_NOVALUE orelse
element(5, Val) =/= asn1_NOVALUE of
false -> ...;
true -> ...
end
|
|
To facilitate optimizing PER encoding using an intermediate
format, we must change asn1rtt_real_common:encode_real/1 so that
it only returns the encoded binary.
|
|
|
|
The first clause of gen_enc_line() allows us to pass in [] as
the value for Element; if we modify the only caller that passes
[] to pass an actual expression we can remove the first clause.
Furthermore, since the Pos argument was only used by the first
clause, we can remove the Pos argument.
We can also remove the first clause in gen_enc_component_optional(),
since the code in its body is exactly the same as in the following
clause.
|
|
An field in a class that references an object or object set is not
allowed to be referenced directly from within a SEQUENCE.
|
|
Using a list comprehension will simplify both the code generator
and the generated code. Also, if there is an ObjFun argument in
the host function, the BEAM compiler will make sure it is only
passed to the generated list comprehension function if it is
actually used.
|
|
Break out the the rules for determining whether a string should
be in aligned so that it can be reused for encoding.
|
|
* nox/match-context-return/OTP-11247:
Added primary bootstrap
Forbid returning a match context in beam_validator
|
|
* sze/edlin_understand_keys/OTP-11251:
Added primary bootstrap
erts: fixed documentation regarding tty and arrow keys
make edlin understand a few important control keys
|
|
* alexrp/export_edge/OTP-11266:
Export the edge/0 type from the digraph module
|
|
* epa/add_fd_usage_in_rb/OTP-11252:
kernel: sasl: fixed rb.xml docs
Add Fd usage in rb logging
|
|
* pan/bad_async_thread_distribution/OTP-11243:
Create better distribution of files over async threads
Initialize errno properly in win32 efile_may_openfile
Add debug functionality to retrieve async key
OTP-11243
OTP-11265
|
|
The actual port id is used to create a key from the
pointer value which is the ErlDrvPort. To do this
a new driver api function driver_async_port_key is
added and the driver API minor version is updated.
The documentation is updated and the faulty description of
how to spread ports over async threads is updated to
use the new API.
Testcase also added.
|
|
|
|
|
|
|
|
Conflicts:
lib/inets/doc/src/notes.xml
lib/inets/src/http_lib/http_transport.erl
lib/inets/src/inets_app/inets.appup.src
lib/inets/vsn.mk
lib/ssl/doc/src/notes.xml
lib/ssl/src/ssl.appup.src
lib/ssl/src/ssl.erl
lib/ssl/src/ssl_internal.hrl
lib/ssl/src/tls_connection.erl
lib/ssl/vsn.mk
|
|
* lukas/erts/crash_dump_acul/OTP-11264:
erts: Fix print out of acul option in crash dump
|
|
* lukas/erts/efile_undef_behaviour/OTP-11246:
erts: Fix bug in translating ev macros to functions
|
|
|
|
Note that this is a fake merge. The bug fix changes files that
are no longer present in maint, and the bug will need to be fixed
in a different way.
* maint-r15:
Prepare release
PER, UPER: Fix encoding/decoding of open types greater than 16K
|
|
* jw/fix-httpd-erl-script-nocache/OTP-11260:
inets: added simple testcase for option erl_script_nocache
Fix httpd config option 'erl_script_nocache'
|
|
* hb/stdlib/correct_fread_spec/OTP-11261:
Correct the specifications of io_lib:fread/2,3
|
|
Thanks to Chris King and Kostis Sagonas for pinpointing the bug.
|
|
|
|
* fredrik/inets/ssl/fixup_log_alert_option/OTP-11259:
[inets, ssl]: make log_alert configurable as option in ssl, SSLLogLevel added as option to inets conf file
|
|
Note that this is a fake merge. The bug fix changes files that
are no longer present in maint, and the bug will need to be fixed
in a different way.
* maint-r15:
Prepare release
PER, UPER: Fix encoding/decoding of open types greater than 16K
|
|
|
|
* fh/start-all/OTP-11250:
kernel: fix documentation regarding ensure_all_started endtag
Updated primary bootstrap
Add application:ensure_all_started/1-2
|
|
added as option to inets conf file
|
|
* hb/stdlib/dets_bugfix/OTP-11245:
Fix a Dets bug concerning traversal of tables
|
|
* fredrik/ssh/correct_doc_timeout/OTP-11249:
ssh: clarified timeout options
|
|
* hb/stdlib/erl_lint_fix/OTP-11256:
Fix a bug in the linter regarding the 'fun M:F/A' construct
|
|
* lpg/openssh_zlib/OTP-11256:
ssh: added basic connection testcase for openssh zlib
Add openssh_zlib compression type to ssh_transport
|