Skip to content

Commit 00d4ac2

Browse files
committed
1 parent c377ab1 commit 00d4ac2

File tree

12 files changed

+36
-18
lines changed

12 files changed

+36
-18
lines changed

BackendAst/DAstACN.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,7 +1077,7 @@ let createAcnStringFunction (r:Asn1AcnAst.AstRoot) (deps:Asn1AcnAst.AcnInsertedF
10771077
let str_VarSize = lm.uper.str_VarSize
10781078
let initExpr =
10791079
match codec, lm.lg.decodingKind with
1080-
| Decode, Copy -> Some (lm.lg.initializeString (int o.maxSize.uper))
1080+
| Decode, Copy -> Some (lm.lg.initializeString None (int o.maxSize.uper))
10811081
| _ -> None
10821082
let pp, resultExpr = joinedOrAsIdentifier lm codec p
10831083
let nBits = GetNumberOfBitsForNonNegativeInteger (BigInteger (o.uperCharSet.Length-1))
@@ -1438,7 +1438,7 @@ let initExpr (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (m:Asn1AcnAst.Asn1Module
14381438
| AcnInteger int -> lm.lg.asn1SccIntValueToString 0I int.isUnsigned
14391439
| AcnNullType _ -> lm.lg.asn1SccIntValueToString 0I true
14401440
| AcnBoolean _ -> lm.lg.FalseLiteral
1441-
| AcnReferenceToIA5String s -> lm.lg.initializeString (int s.str.maxSize.uper)
1441+
| AcnReferenceToIA5String s -> lm.lg.initializeString None (int s.str.maxSize.uper)
14421442
| AcnReferenceToEnumerated e ->
14431443
lm.lg.getNamedItemBackendName (Some (defOrRef r m e)) e.enumerated.items.Head
14441444

BackendAst/DAstConstruction.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ let private createAcnChild (r:Asn1AcnAst.AstRoot) (icdStgFileName:string) (deps:
7979
| Asn1AcnAst.AcnReferenceToEnumerated e ->
8080
lm.lg.getNamedItemBackendName (Some (defOrRef r m e)) e.enumerated.items.Head
8181
| Asn1AcnAst.AcnReferenceToIA5String s ->
82-
lm.lg.initializeString (int (s.str.maxSize.acn + 1I))
82+
lm.lg.initializeString None (int (s.str.maxSize.acn + 1I))
8383

8484
let rec dealiasDeps (dep: Asn1AcnAst.AcnDependency): Asn1AcnAst.AcnDependency =
8585
match dep.dependencyKind with

BackendAst/DAstInitialize.fs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -336,14 +336,21 @@ let createIA5StringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1A
336336
//let i = sprintf "i%d" ii
337337
let bAlpha = o.uperCharSet.Length < 128
338338
let arrAsciiCodes = o.uperCharSet |> Array.map(fun x -> BigInteger (System.Convert.ToInt32 x))
339+
let firstPrintableAsciiCode =
340+
arrAsciiCodes
341+
|> Array.tryFind(fun x -> x >= 32I && x <= 126I)
342+
let sFirstNonNullChar =
343+
match firstPrintableAsciiCode with
344+
| Some c -> sprintf "'%c'" (char (int c))
345+
| None -> "'\0'"
339346
let testCaseFuncs =
340347
let seqOfCase (nSize:BigInteger) =
341348
let initTestCaseFunc (p:CodegenScope) =
342349
let ii = p.accessPath.SequenceOfLevel + 1
343350
let i = sprintf "i%d" ii
344351
let resVar = p.accessPath.asIdentifier
345352
let td = strTypeDef.longTypedefName2 (lm.lg.hasModules) (ToC p.modName)
346-
let funcBody = initTestCaseIA5String (p.accessPath.joinedUnchecked lm.lg FullAccess) (lm.lg.getAccess p.accessPath) (nSize) ((o.maxSize.uper+1I)) i td bAlpha arrAsciiCodes (BigInteger arrAsciiCodes.Length) false resVar
353+
let funcBody = initTestCaseIA5String (p.accessPath.joinedUnchecked lm.lg FullAccess) (lm.lg.getAccess p.accessPath) (nSize) ((o.maxSize.uper+1I)) i td bAlpha arrAsciiCodes (BigInteger arrAsciiCodes.Length) false resVar sFirstNonNullChar
347354
{InitFunctionResult.funcBody = funcBody; resultVar = resVar; localVariables=[SequenceOfIndex (ii, None)]}
348355
{AutomaticTestCase.initTestCaseFunc = initTestCaseFunc; testCaseTypeIDsMap = Map.ofList [(t.id, TcvSizeableTypeValue nSize)] }
349356
seq {
@@ -362,11 +369,11 @@ let createIA5StringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1A
362369
let i = sprintf "i%d" ii
363370
let resVar = p.accessPath.asIdentifier
364371
let td = strTypeDef.longTypedefName2 (lm.lg.hasModules) (ToC p.modName)
365-
let funcBody = initTestCaseIA5String (p.accessPath.joined lm.lg) (lm.lg.getAccess p.accessPath) ( (o.maxSize.uper+1I)) ( (o.maxSize.uper+1I)) i td bAlpha arrAsciiCodes (BigInteger arrAsciiCodes.Length) false resVar
372+
let funcBody = initTestCaseIA5String (p.accessPath.joined lm.lg) (lm.lg.getAccess p.accessPath) (o.maxSize.uper) (o.maxSize.uper+1I) i td bAlpha arrAsciiCodes (BigInteger arrAsciiCodes.Length) true resVar sFirstNonNullChar
366373
let lvars = lm.lg.init.zeroIA5String_localVars ii
367374
let resVar = p.accessPath.asIdentifier
368375
{InitFunctionResult.funcBody = funcBody; resultVar = resVar; localVariables=lvars}
369-
let constantInitExpression () = lm.lg.initializeString (int o.maxSize.uper)
376+
let constantInitExpression () = lm.lg.initializeString firstPrintableAsciiCode (int o.maxSize.uper)
370377
createInitFunctionCommon r lm t typeDefinition funcBody zero testCaseFuncs constantInitExpression constantInitExpression [] [] []
371378

372379
let createOctetStringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.Asn1Type) (o :Asn1AcnAst.OctetString ) (typeDefinition:TypeDefinitionOrReference) (isValidFunction:IsValidFunction option) =

BackendAst/DAstUPer.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ let createIA5StringFunction (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (codec:Co
458458
let nSizeInBits = GetNumberOfBitsForNonNegativeInteger ( (o.maxSize.uper - o.minSize.uper))
459459
let initExpr =
460460
match codec, lm.lg.decodingKind with
461-
| Decode, Copy -> Some (lm.lg.initializeString (int o.maxSize.uper))
461+
| Decode, Copy -> Some (lm.lg.initializeString None (int o.maxSize.uper))
462462
| _ -> None
463463
let pp, resultExpr = joinedOrAsIdentifier lm codec p
464464

CommonTypes/AbstractMacros.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ Generated by the C stg macros with the following command
257257
abstract member initIA5String : sPtr:string -> sValue:string -> bIsOptional:bool -> sResVar:string -> string;
258258
abstract member initEnumerated : sVal:string -> sValue:string -> sTypeDefName:string -> bIsOptional:bool -> sResVar:string -> string;
259259
abstract member initNull : sVal:string -> bIsOptional:bool -> sResVar:string -> string;
260-
abstract member initTestCaseIA5String : p:string -> sAcc:string -> nSize:BigInteger -> nMaxSizePlusOne:BigInteger -> i:string -> td:FE_StringTypeDefinition -> bAlpha:bool -> arrnAlphabetAsciiCodes:seq<BigInteger> -> nAlphabetLength:BigInteger -> bZero:bool -> sResVar:string -> string;
260+
abstract member initTestCaseIA5String : p:string -> sAcc:string -> nSize:BigInteger -> nMaxSizePlusOne:BigInteger -> i:string -> td:FE_StringTypeDefinition -> bAlpha:bool -> arrnAlphabetAsciiCodes:seq<BigInteger> -> nAlphabetLength:BigInteger -> bZero:bool -> sResVar:string -> sInitChar:string -> string;
261261
abstract member initBitOrOctStringFromCompoundLiteral : p:string -> sCompLiteral:string -> string;
262262
abstract member initFixSizeBitOrOctString_bytei : p:string -> sAcc:string -> sI:string -> sByteHexVal:string -> string;
263263
abstract member initFixSizeBitOrOctString : p:string -> sAcc:string -> arrsBytes:seq<string> -> string;

FrontEndAst/Language.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ type ILangGeneric () =
226226
abstract member asn1SccIntValueToString : BigInteger -> unsigned: bool -> string;
227227
abstract member intValueToString : BigInteger -> Asn1AcnAst.IntegerClass -> string;
228228
abstract member doubleValueToString : double -> string
229-
abstract member initializeString : int -> string
229+
abstract member initializeString :BigInteger option -> int -> string //the ascii code to use for initialization, and the length of the string
230230
abstract member supportsInitExpressions : bool
231231
abstract member setNamedItemBackendName0 : Asn1Ast.NamedItem -> string -> Asn1Ast.NamedItem
232232
abstract member getNamedItemBackendName0 : Asn1Ast.NamedItem -> string

StgAda/LangGeneric_a.fs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,10 @@ type LangGeneric_a() =
130130
v.ToString(FsUtils.doubleParseString, System.Globalization.NumberFormatInfo.InvariantInfo)
131131
override _.intValueToString (i:BigInteger) _ = i.ToString()
132132
override _.asn1SccIntValueToString (i: BigInteger) _ = i.ToString()
133-
override _.initializeString (_) = "(others => adaasn1rtl.NUL)"
133+
override _.initializeString (asciiCode:BigInteger option) stringSize =
134+
match asciiCode with
135+
| Some ac -> sprintf "(1 .. %d => '%c', %d => adaasn1rtl.NUL)" (stringSize) (char (int ac)) (stringSize+1)
136+
| None -> sprintf "(others => adaasn1rtl.NUL)"
134137

135138
override _.supportsInitExpressions = true
136139

StgAda/init_a.stg

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,17 @@ initEnumerated(sVal, sValue, sTypeDefName, bIsOptional, sResVar) ::= "<sVal> :=
3232
initNull(sVal, bIsOptional, sResVar) ::= "<sVal> := 0;"
3333

3434

35-
initTestCaseIA5String(p, sAcc, nSize, nMaxSizePlusOne, i, td/*:FE_StringTypeDefinition*/, bAlpha, arrnAlphabetAsciiCodes, nAlphabetLength, bZero, sResVar) ::= <<
35+
initTestCaseIA5String(p, sAcc, nSize, nMaxSizePlusOne, i, td/*:FE_StringTypeDefinition*/, bAlpha, arrnAlphabetAsciiCodes, nAlphabetLength, bZero, sResVar, sInitChar) ::= <<
3636
<i> := 1;
3737
while <i>\<= <nMaxSizePlusOne> loop
3838
-- commented because it casues this warning
3939
-- warning: condition can only be False if invalid values present
4040
pragma Loop_Invariant (<i> >=1 and <i>\<=<nMaxSizePlusOne>);
4141
<if(bZero)>
42-
<p>(<i>) := <rtlModuleName()>.NUL;
42+
if <i> \<= <nSize> then
43+
<p>(<i>) := <sInitChar>;
44+
else
45+
<p>(<i>) := <rtlModuleName()>.NUL;
4346

4447
<else>
4548
if <i> \<= <nSize> then

StgC/LangGeneric_c.fs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,10 @@ type LangGeneric_c() =
9393
override _.doubleValueToString (v:double) =
9494
v.ToString(FsUtils.doubleParseString, System.Globalization.NumberFormatInfo.InvariantInfo)
9595

96-
override _.initializeString stringSize = sprintf "{ [0 ... %d] = 0x0 }" stringSize
96+
override _.initializeString (asciiCode:BigInteger option) stringSize =
97+
match asciiCode with
98+
| Some ac -> sprintf "{ [0 ... %d] = 0x%X, [%d] = 0x0}" (stringSize-1) (int ac) stringSize
99+
| None -> sprintf "{ [0 ... %d] = 0x0 }" stringSize
97100

98101
override _.supportsInitExpressions = false
99102
override _.requiresHandlingOfEmptySequences = true
@@ -305,7 +308,7 @@ type LangGeneric_c() =
305308
}
306309
override this.init =
307310
{
308-
Initialize_parts.zeroIA5String_localVars = fun ii -> [SequenceOfIndex (ii, None)]
311+
Initialize_parts.zeroIA5String_localVars = fun _ -> []
309312
zeroOctetString_localVars = fun _ -> []
310313
zeroBitString_localVars = fun _ -> []
311314
choiceComponentTempInit = false

StgC/init_c.stg

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,10 @@ initIA5String(sPtr, sValue, bIsOptional, sResVar) ::= "strcpy(<sPtr>,<sValue>);"
8484
initEnumerated(sVal, sValue, sTypeDefName, bIsOptional, sResVar) ::= "<sVal> = <sValue>;"
8585
initNull(sVal, bIsOptional, sResVar) ::= "<sVal> = 0;"
8686

87-
initTestCaseIA5String(p, sAcc, nSize, nMaxSizePlusOne, i, td/*:FE_StringTypeDefinition*/, bAlpha, arrnAlphabetAsciiCodes, nAlphabetLength, bZero, sResVar) ::= <<
87+
initTestCaseIA5String(p, sAcc, nSize, nMaxSizePlusOne, i, td/*:FE_StringTypeDefinition*/, bAlpha, arrnAlphabetAsciiCodes, nAlphabetLength, bZero, sResVar, sInitChar) ::= <<
8888
<if(bZero)>
89-
memset(<p>, 0x0, <nMaxSizePlusOne>);
89+
memset(<p>, <sInitChar>, <nSize>);
90+
<p>[<nSize>] = 0;
9091

9192
<else>
9293
<i> = 0;

0 commit comments

Comments
 (0)