diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl index 8b7144b5f993..b69f58ad92a6 100644 --- a/lib/asn1/src/asn1ct_check.erl +++ b/lib/asn1/src/asn1ct_check.erl @@ -3556,8 +3556,32 @@ range_union_1([]) -> %%% {'SingleValue',[integer()]} | {'ValueRange',Lb,Ub} %%% -finish_constraints(Cs) -> - finish_constraints_1(Cs, fun smart_collapse/1). +finish_constraints(Cs0) -> + {Cs1,Ext} = blurf(Cs0, none, []), + Cs = finish_constraints_1(Cs1, fun smart_collapse/1), + case Ext of + none -> Cs; + _ -> blarf(Cs, Ext) + end. + +blurf([{element_set,{'SizeConstraint',_}=Root,{set,Set}}|Cs], _Ext, Acc) -> + blurf(Cs, Set, [{element_set,Root,none}|Acc]); +blurf([C|Cs], Ext, Acc) -> + blurf(Cs, Ext, [C|Acc]); +blurf([], Ext, Acc) -> + {lists:reverse(Acc),Ext}. + +blarf([{'SizeConstraint'=Tag,C}|Cs], Ext) -> + case Ext of + none -> + [{Tag,C}|blarf(Cs, Ext)]; + _ -> + [{Tag,{C,Ext}}|blarf(Cs, Ext)] + end; +blarf([C|Cs], Ext) -> + [C|blarf(Cs, Ext)]; +blarf([], _Ext) -> + []. finish_constraints_1([{element_set,{Tag,{element_set,_,_}=Set0},none}|T], Collapse0) -> diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl index 26c19c80064c..52e34ca2b721 100644 --- a/lib/asn1/src/asn1ct_constructed_per.erl +++ b/lib/asn1/src/asn1ct_constructed_per.erl @@ -731,6 +731,10 @@ gen_decode_sof(Erules, Typename, SeqOrSetOf, #type{}=D) -> emit([".",nl,nl]). do_gen_decode_sof(Erules, TypeName, SeqOrSetOf, D) -> + %% io:format("~p\n", [D]), + %% io:format("~p\n", [D#type.constraint]), + %% io:format("~p\n", [asn1ct_imm:effective_constraint(bitstring, D#type.constraint)]), + %% io:nl(), case asn1ct_imm:effective_constraint(bitstring, D#type.constraint) of no -> %% Could be fragmented.