@@ -177,7 +177,7 @@ let createString (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.Asn1T
177177 let td = lm.lg.getStrTypeDefinition o.typeDef
178178 match td.kind with
179179 | NonPrimitiveNewTypeDefinition ->
180- let completeDefinition = define_ new_ ia5string td ( o.minSize.uper) ( o.maxSize.uper) (( o.maxSize.uper + 1 I) ) arrnAlphaChars
180+ let completeDefinition = define_ new_ ia5string td o.minSize.uper o.maxSize.uper ( o.maxSize.uper + 1 I) arrnAlphaChars
181181 Some completeDefinition
182182 | NonPrimitiveNewSubTypeDefinition subDef ->
183183 let otherProgramUnit = if td.programUnit = subDef.programUnit then None else ( Some subDef.programUnit)
@@ -190,10 +190,11 @@ let createOctetString (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.
190190 let define_new_octet_string = lm.typeDef.Define_ new_ octet_ string
191191 let define_subType_octet_string = lm.typeDef.Define_ subType_ octet_ string
192192 match td.kind with
193- | NonPrimitiveNewTypeDefinition ->
194- let completeDefinition = define_ new_ octet_ string td ( o.minSize.uper) ( o.maxSize.uper) ( o.minSize.uper = o.maxSize.uper)
193+ | NonPrimitiveNewTypeDefinition ->
194+ let invariants = lm.lg.generateOctetStringInvariants t o
195+ let completeDefinition = define_ new_ octet_ string td o.minSize.uper o.maxSize.uper ( o.minSize.uper = o.maxSize.uper) invariants
195196 Some completeDefinition
196- | NonPrimitiveNewSubTypeDefinition subDef ->
197+ | NonPrimitiveNewSubTypeDefinition subDef ->
197198 let otherProgramUnit = if td.programUnit = subDef.programUnit then None else ( Some subDef.programUnit)
198199 let completeDefinition = define_ subType_ octet_ string td subDef otherProgramUnit ( o.minSize.uper = o.maxSize.uper)
199200 Some completeDefinition
@@ -220,7 +221,8 @@ let createBitString (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.As
220221 let sComment = sprintf " (1 << %A )" nb.resolvedValue
221222 define_ named_ bit td ( ToC ( nb.Name.Value.ToUpper())) hexValue sComment
222223 )
223- let completeDefinition = define_ new_ bit_ string td ( o.minSize.uper) ( o.maxSize.uper) ( o.minSize.uper = o.maxSize.uper) ( BigInteger o.MaxOctets) nblist
224+ let invariants = lm.lg.generateBitStringInvariants t o
225+ let completeDefinition = define_ new_ bit_ string td o.minSize.uper o.maxSize.uper ( o.minSize.uper = o.maxSize.uper) ( BigInteger o.MaxOctets) nblist invariants
224226 Some completeDefinition
225227 | NonPrimitiveNewSubTypeDefinition subDef ->
226228 let otherProgramUnit = if td.programUnit = subDef.programUnit then None else ( Some subDef.programUnit)
@@ -248,7 +250,7 @@ let createEnumerated (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.A
248250 match td.kind with
249251 | NonPrimitiveNewTypeDefinition ->
250252 let completeDefinition = define_ new_ enumerated td arrsEnumNames arrsEnumNamesAndValues nIndexMax macros
251- let privateDefinition =
253+ let privateDefinition =
252254 match r.args.isEnumEfficientEnabled o.items.Length with
253255 | false -> None
254256 | true ->
@@ -261,7 +263,7 @@ let createEnumerated (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.A
261263 | NonPrimitiveNewSubTypeDefinition subDef ->
262264 let otherProgramUnit = if td.programUnit = subDef.programUnit then None else ( Some subDef.programUnit)
263265 let completeDefinition = define_ subType_ enumerated td subDef otherProgramUnit
264- let privateDefinition =
266+ let privateDefinition =
265267 match r.args.isEnumEfficientEnabled o.items.Length with
266268 | false -> None
267269 | true ->
@@ -278,32 +280,34 @@ let internal getChildDefinition (childDefinition:TypeDefinitionOrReference) =
278280 | ReferenceToExistingDefinition ref -> None
279281
280282
281- let createSequenceOf ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.SequenceOf ) ( childDefinition : TypeDefinitionOrReference ) ( us : State ) =
283+ let createSequenceOf ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.SequenceOf ) ( childType : DAst.Asn1Type ) ( us : State ) =
282284 let define_new_sequence_of = lm.typeDef.Define_ new_ sequence_ of
283285 let define_subType_sequence_of = lm.typeDef.Define_ subType_ sequence_ of
284286 let td = lm.lg.getSizeableTypeDefinition o.typeDef
285287
286288 match td.kind with
287- | NonPrimitiveNewTypeDefinition ->
288- let completeDefinition = define_ new_ sequence_ of td ( o.minSize.uper) ( o.maxSize.uper) ( o.minSize.uper = o.maxSize.uper) ( childDefinition.longTypedefName2 lm.lg.hasModules) ( getChildDefinition childDefinition)
289- let privateDefinition =
290- match childDefinition with
289+ | NonPrimitiveNewTypeDefinition ->
290+ let invariants = lm.lg.generateSequenceOfInvariants t o childType.Kind
291+ let sizeClsDefinitions , sizeObjDefinitions = lm.lg.generateSequenceOfSizeDefinitions t o childType
292+ let completeDefinition = define_ new_ sequence_ of td o.minSize.uper o.maxSize.uper ( o.minSize.uper = o.maxSize.uper) ( childType.typeDefinitionOrReference.longTypedefName2 lm.lg.hasModules) ( getChildDefinition childType.typeDefinitionOrReference) sizeClsDefinitions sizeObjDefinitions invariants
293+ let privateDefinition =
294+ match childType.typeDefinitionOrReference with
291295 | TypeDefinition td -> td.privateTypeDefinition
292296 | ReferenceToExistingDefinition ref -> None
293297 Some ( completeDefinition, privateDefinition)
294- | NonPrimitiveNewSubTypeDefinition subDef ->
298+ | NonPrimitiveNewSubTypeDefinition subDef ->
295299 let otherProgramUnit = if td.programUnit = subDef.programUnit then None else ( Some subDef.programUnit)
296- let completeDefinition = define_ subType_ sequence_ of td subDef otherProgramUnit ( o.minSize.uper = o.maxSize.uper) ( getChildDefinition childDefinition )
297- let privateDefinition =
298- match childDefinition with
300+ let completeDefinition = define_ subType_ sequence_ of td subDef otherProgramUnit ( o.minSize.uper = o.maxSize.uper) ( getChildDefinition childType.typeDefinitionOrReference )
301+ let privateDefinition =
302+ match childType.typeDefinitionOrReference with
299303 | TypeDefinition td -> td.privateTypeDefinition
300304 | ReferenceToExistingDefinition ref -> None
301305 Some ( completeDefinition, privateDefinition)
302- | NonPrimitiveReference2OtherType -> None
306+ | NonPrimitiveReference2OtherType -> None
303307
304308
305309
306- let createSequence ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.Sequence ) ( allchildren : SeqChildInfo list ) ( us : State ) =
310+ let createSequence ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.Sequence ) ( allchildren : SeqChildInfo list ) ( us : State ) =
307311 let define_new_sequence = lm.typeDef.Define_ new_ sequence
308312 let define_new_sequence_child = lm.typeDef.Define_ new_ sequence_ child
309313 let define_new_sequence_child_bit = lm.typeDef.Define_ new_ sequence_ child_ bit
@@ -336,48 +340,49 @@ let createSequence (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.Asn1
336340 | false -> children |> List.map ( fun o -> define_ new_ sequence_ child ( lm.lg.getAsn1ChildBackendName o) ( o.Type.typeDefinitionOrReference.longTypedefName2 lm.lg.hasModules) o.Optionality.IsSome)
337341
338342 let childrenPrivatePart =
339- children |>
343+ children |>
340344 List.choose ( fun o ->
341345 match o.Type.typeDefinitionOrReference with
342346 | TypeDefinition td -> td.privateTypeDefinition
343347 | ReferenceToExistingDefinition ref -> None)
344348
345-
346349 let arrsOptionalChildren = optionalChildren |> List.map( fun c -> define_ new_ sequence_ child_ bit ( lm.lg.getAsn1ChildBackendName c))
347350
348-
349351 match td.kind with
350- | NonPrimitiveNewTypeDefinition ->
351- let completeDefinition = define_ new_ sequence td arrsChildren arrsOptionalChildren childrenCompleteDefinitions arrsNullFieldsSavePos
352- let privateDef =
352+ | NonPrimitiveNewTypeDefinition ->
353+ let invariants = lm.lg.generateSequenceInvariants t o allchildren
354+ let sizeDefinitions = lm.lg.generateSequenceSizeDefinitions t o allchildren
355+ let completeDefinition = define_ new_ sequence td arrsChildren arrsOptionalChildren childrenCompleteDefinitions arrsNullFieldsSavePos sizeDefinitions invariants
356+ let privateDef =
353357 match childrenPrivatePart with
354358 | [] -> None
355359 | _ -> Some ( childrenPrivatePart |> Seq.StrJoin " \n " )
356360 Some ( completeDefinition, privateDef)
357- | NonPrimitiveNewSubTypeDefinition subDef ->
361+ | NonPrimitiveNewSubTypeDefinition subDef ->
358362 let otherProgramUnit = if td.programUnit = subDef.programUnit then None else ( Some subDef.programUnit)
359- let completeDefinition = define_ subType_ sequence td subDef otherProgramUnit arrsOptionalChildren
363+ let extraDefs = lm.lg.generateSequenceSubtypeDefinitions subDef.typeName t o children
364+ let completeDefinition = define_ subType_ sequence td subDef otherProgramUnit arrsOptionalChildren extraDefs
360365 Some ( completeDefinition, None)
361- | NonPrimitiveReference2OtherType -> None
366+ | NonPrimitiveReference2OtherType -> None
362367
363368
364369
365370
366- let createChoice ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.Choice ) ( children : ChChildInfo list ) ( us : State ) =
371+ let createChoice ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.Choice ) ( children : ChChildInfo list ) ( us : State ) =
367372 let define_new_choice = lm.typeDef.Define_ new_ choice
368373 let define_new_choice_child = lm.typeDef.Define_ new_ choice_ child
369374 let define_subType_choice = lm.typeDef.Define_ subType_ choice
370375
371376
372377 let td = lm.lg.getChoiceTypeDefinition o.typeDef
373- let childldrenCompleteDefinitions = children |> List.choose ( fun c -> getChildDefinition c.chType.typeDefinitionOrReference)
378+ let childrenCompleteDefinitions = children |> List.choose ( fun c -> getChildDefinition c.chType.typeDefinitionOrReference)
374379 let arrsPresent = children |> List.map( fun c -> lm.lg.presentWhenName None c)
375- let arrsChildren = children |> List.map ( fun o -> define_ new_ choice_ child ( lm.lg.getAsn1ChChildBackendName o) ( o.chType.typeDefinitionOrReference.longTypedefName2 lm.lg.hasModules) ( lm.lg.presentWhenName None o))
380+ let arrsChildren = children |> List.map ( fun o -> define_ new_ choice_ child ( lm.lg.getAsn1ChChildBackendName o) ( o.chType.typeDefinitionOrReference.longTypedefName2 lm.lg.hasModules) ( lm.lg.presentWhenName None o))
376381 let arrsCombined = List.map2 ( fun x y -> x + " (" + y + " )" ) arrsPresent arrsChildren
377382 let nIndexMax = BigInteger (( Seq.length children)- 1 )
378383
379384 let privatePart =
380- let childPrivateParts = children |>
385+ let childPrivateParts = children |>
381386 List.choose( fun o ->
382387 match o.chType.typeDefinitionOrReference with
383388 | TypeDefinition td -> td.privateTypeDefinition
@@ -388,14 +393,15 @@ let createChoice (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.Asn1Ty
388393
389394
390395 match td.kind with
391- | NonPrimitiveNewTypeDefinition ->
392- let completeDefinition = define_ new_ choice td ( lm.lg.choiceIDForNone us.typeIdsSet t.id) ( lm.lg.presentWhenName None children.Head) arrsChildren arrsPresent arrsCombined nIndexMax childldrenCompleteDefinitions
396+ | NonPrimitiveNewTypeDefinition ->
397+ let sizeDefinitions = lm.lg.generateChoiceSizeDefinitions t o children
398+ let completeDefinition = define_ new_ choice td ( lm.lg.choiceIDForNone us.typeIdsSet t.id) ( lm.lg.presentWhenName None children.Head) arrsChildren arrsPresent arrsCombined nIndexMax childrenCompleteDefinitions sizeDefinitions
393399 Some ( completeDefinition, privatePart)
394- | NonPrimitiveNewSubTypeDefinition subDef ->
400+ | NonPrimitiveNewSubTypeDefinition subDef ->
395401 let otherProgramUnit = if td.programUnit = subDef.programUnit then None else ( Some subDef.programUnit)
396402 let completeDefinition = define_ subType_ choice td subDef otherProgramUnit
397403 Some ( completeDefinition, None)
398- | NonPrimitiveReference2OtherType -> None
404+ | NonPrimitiveReference2OtherType -> None
399405
400406
401407////////////////////////////////
@@ -536,7 +542,7 @@ let createString_u (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.Asn
536542
537543
538544let createEnumerated_u ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.Enumerated ) ( us : State ) =
539- let ( aaa , priv ) =
545+ let ( aaa , priv ) =
540546 match createEnumerated r lm t o us with
541547 | Some ( a, b) -> Some a, b
542548 | None -> None, None
@@ -552,9 +558,9 @@ let createEnumerated_u (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst
552558 ReferenceToExistingDefinition { ReferenceToExistingDefinition.programUnit = ( if td.programUnit = programUnit then None else Some td.programUnit); typedefName= td.typeName; definedInRtl = false }
553559
554560
555- let createSequenceOf_u ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.SequenceOf ) ( childDefinition : TypeDefinitionOrReference ) ( us : State ) =
556- let aaa , privateDef =
557- match createSequenceOf r lm t o childDefinition us with
561+ let createSequenceOf_u ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.SequenceOf ) ( childType : DAst.Asn1Type ) ( us : State ) =
562+ let aaa , privateDef =
563+ match createSequenceOf r lm t o childType us with
558564 | Some ( a, b) -> Some a, b
559565 | None -> None, None
560566 let programUnit = ToC t.id.ModName
@@ -570,7 +576,7 @@ let createSequenceOf_u (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst
570576
571577
572578let createSequence_u ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.Sequence ) ( children : SeqChildInfo list ) ( us : State ) =
573- let aaa , private_ part =
579+ let aaa , private_ part =
574580 match createSequence r lm t o children us with
575581 | Some ( a, b) -> Some a, b
576582 | None -> None, None
@@ -586,7 +592,7 @@ let createSequence_u (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.A
586592 ReferenceToExistingDefinition { ReferenceToExistingDefinition.programUnit = ( if td.programUnit = programUnit then None else Some td.programUnit); typedefName= td.typeName; definedInRtl = false }
587593
588594let createChoice_u ( r : Asn1AcnAst.AstRoot ) ( lm : LanguageMacros ) ( t : Asn1AcnAst.Asn1Type ) ( o : Asn1AcnAst.Choice ) ( children : ChChildInfo list ) ( us : State ) =
589- let aaa , private_ part =
595+ let aaa , private_ part =
590596 match createChoice r lm t o children us with
591597 | Some ( a, b) -> Some a, b
592598 | None -> None, None
@@ -606,5 +612,3 @@ let createReferenceType_u (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnA
606612 match o.encodingOptions with
607613 | None -> baseType.typeDefinitionOrReference
608614 | Some _ -> baseType.typeDefinitionOrReference
609-
610-
0 commit comments