Skip to content

Commit ad55073

Browse files
committed
Merge branch 'ateleris-master'
2 parents 1b8341c + e259d50 commit ad55073

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+9224
-2898
lines changed

BackendAst/DAstACN.fs

Lines changed: 317 additions & 352 deletions
Large diffs are not rendered by default.

BackendAst/DAstConstruction.fs

Lines changed: 55 additions & 47 deletions
Large diffs are not rendered by default.

BackendAst/DAstInitialize.fs

Lines changed: 153 additions & 99 deletions
Large diffs are not rendered by default.

BackendAst/DAstTypeDefinition.fs

Lines changed: 47 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -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 + 1I)) arrnAlphaChars
180+
let completeDefinition = define_new_ia5string td o.minSize.uper o.maxSize.uper (o.maxSize.uper + 1I) 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

538544
let 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

572578
let 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

588594
let 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

Comments
 (0)