Age | Commit message (Collapse) | Author |
|
|
|
Those asn1 functions are no longer needed because they all have
better alternatives.
|
|
* bjorn/asn1/cleanup/OTP-11727:
asn1ct_check: Use a return value to silence a dialyzer warning
asn1ct_check: Remove useless call to check_integer/3
asn1ct_check: Correct error handling for illegal OCTET STRING values
asn1ct: Silence dialyzer warnings for unmatched returns
asn1ct_table: Remove unused flexibility in table creation
asn1ct_table: Silence a dialyzer warning for unmatched return
asn1ct_gen: Silence dialyzer warnings for unmatched returns
asn1ct_value: Silence a dialyzer warning for unmatched return
asn1ct_tok: Check return value from file:close/1
|
|
Attempting to subtype an extensible ENUMERATED like this:
BaseType ::= { foo, bar, ... }
SubType ::= BaseType ( foo )
would fail to compile with a message that 'foo' was undefined.
Reported-by: Morten Nygaard Åsnes
|
|
Unfortunately the code in question is not covered by our test
suites, but it should be correct to do the same thing as in
the clause above.
|
|
check_integer/3 can check nothing for an INTEGER without any named
values. Remove the useless call to silence a dialyzer warning for
unmatched return.
|
|
The value for an OCTET STRING must be specified as either a bstring
or an hstring. Everything else (including character strings) is
illegal.
This correction also removes the offending code that caused an
unmatched return warning from dialyzer.
|
|
|
|
Unused flexibility complicates the code and can hide bugs.
new/1 is never called with a table name that already exists, so
we should remove the code that allows for that. That will increase
the coverage of asn1ct_table to 100%.
Also remove the new/2 and new_reuse/2 functions which are never
called externally.
|
|
Change the code so that delete/1 always returns 'true'.
While at it, also remove the TODO comment and explain in a comment
why we want to keep the delete/1 function.
|
|
|
|
|
|
This will silence a dialyzer warning for unmatched return.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I forgot to remove the skipping when I added support for fragmented
strings in PER.
|
|
complete/1 is used when encoding open types (as well as in the
encode/2 function in a generated module).
The use of complete/1 for encoding open types used to be optimized
in two different places.
One place was in the alignment optimization pass, where we attempted
to replace the call to complete/1 with a call to iolist_to_binary/1.
That optimization was taken out in a previous commit that introduced
the {list,_,_} intermediate instruction.
The other place was when creating the intermediate representation
for the encoding of the open type. When attempting to wrap primitive
types in an open type, we would attempt to optimize the encoding of
the length decscriptor. We will remove that optimization in this
commit.
Since the previous two optimizations did not optimize encoding of
open types as much as we would want, we will introduce a new
optimization in a separate pass that will go further than the
previous optimizations.
|
|
The {list,List,Dst} instruction gives us as general way to
capture the building of something into a variable. That will make
inlining of intermediate code much easier.
It also allows us to eliminate the versions of the apply, call_gen,
and cond instructions that takes a target variable.
Also remove the optimization in the alignment optimization pass
that attempts to replace calls to complete/1 with calls to
iolist_to_binary/1. That optimization will not work anymore without
rewriting, so we will remove it in this commit and introcude a
more powerful optimization in a future commit.
|
|
Instead of generating:
{assign,Dst,"element(2, Val)"}
generate:
{call,erlang,element,[2,{var,"Val"}],Dst}
The latter expression is easier to understand since there is no
need to parse a string which may contain an arbitrary expression.
While at it, also discontinue the practice to treat "naked"
atoms as variables. A variable must always be given as {var,String}.
|
|
The {assign,Dst,Src} instruction is difficult to cope with when
doing advanced optimizations, since its source argument is a string
which may contain any expression.
Instead of changing how {assign,_,_} works, we will introduce new
instructions that can be used instead of {assign,_}, and remove
{assign,_,_} in a later commit when it is no longer used.
The first new instruction we will introduce is:
{set,{var,Src},{var,Dst}}
It is useful for common sub-expression elemination among other things.
For the moment, we will only allow a variable as a source argument,
but we could extend it in the future to allow constants as well.
|
|
To facilitate inlining of apply calls in the intermediate format.
|
|
It will greatly facilitate further optimizations if we include the
intermediate code (if available) in the call_gen tuple.
|
|
|
|
|
|
|
|
Make sure that we don't construct:
{cons,{integer,I},{cons,{binary,B},T}} - OR -
{cons,{binary,B},{cons,{integer,I},T}}
but:
{cons,{binary,[{put_bits,I,8,[1]}|B]},T} - OR -
{cons,{binary,B++[{put_bits,I,8,[1]}]},T}
|
|
The function name could contain hyphens or other characters not
allowed in non-quoted function names.
|
|
|
|
The R16B03 release
Conflicts:
lib/sasl/vsn.mk
|
|
|
|
* maint:
PER/UPER: Handle a range in the extension part of the constraint
|
|
* bjorn/asn1/fix-integer-constraint/OTP-11504:
PER/UPER: Handle a range in the extension part of the constraint
|
|
Constraints such as:
INTEGER (1..10, ..., 11..20)
would fail to compile. Make sure it is properly ignored.
|
|
* maint:
Fix complicated union of INTEGER constraints
|
|
* bjorn/asn1/fix-union-bug/OTP-11411:
Fix complicated union of INTEGER constraints
|
|
* maint:
PER/UPER: Correct encoding for single-value extensible constraints
asn1ct_value: Handle named INTEGERs with constraints
|
|
* bjorn/asn1/fix-extensible-single-values/OTP-11415:
PER/UPER: Correct encoding for single-value extensible constraints
asn1ct_value: Handle named INTEGERs with constraints
|
|
* maint:
Fix broken handling of default values for BIT STRINGs
|
|
* bjorn/asn1/fix-default-values/OTP-11319:
Fix broken handling of default values for BIT STRINGs
|
|
* maint:
Cope with .erlang files that print to stdout
|
|
A constraint that was an union of integer ranges:
Type ::= INTEGER (lb1..ub1 | ... | lbN..ubN)
would sometimes (depending on the values) not all always be properly
combined to a single effective range, but would become:
Type ::= INTEGER (lb2..ub2) (lb3..ub3)
If that type was used in a SEQUENCE:
S ::= SEQUENCE {
v Type
}
the constraint would be simplified, taking the intersection of the
ranges.
|
|
For DER/PER/UPER, a value equal to the DEFAULT is not supposed to
be encoded.
BIT STRINGs values can be represented as Erlang terms in four
different ways: as an integer, as a list of zeroes and ones,
as a {Unused,Binary} tuple, or as an Erlang bitstring.
When encoding a BIT STRING, only certain representations of
BIT STRINGs values were recognized. All representations must
be recognized.
When decoding a DEFAULT value for a BIT STRING, the actual value
given in the decoding would be either an integer or a list
of zeroes and one (depending on how the literal was written in
the specification). We expect that the default value should be
in the same representation as any other BIT STRING value (i.e.
by default an Erlang bitstring, or a list if the 'legacy_bitstring'
option has been given, or as compact bitstring if 'compact_bitstring'
has been given).
|
|
Don't redirect standard output when auto-generating the asn1ct_rtt.erl
and asn1ct_eval*.erl source files, because anything printed form
.erlang will end up in them, probably causing a compilation error.
|
|
An extensible constraint which is a union of single values, such as:
INTEGER (1|17, ...)
would be incorrectly encoded.
|
|
The asn1ct:value/2 function would crash for name INTEGERs with
constraints, such as INTEGER {a(2),b(3),z(17)} (2|3|17, ...).
|
|
* maint:
Teach the ASN.1 compiler the no_ok_wrapper option
Optimize the generated decode/2 function
|