Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
171 changes: 95 additions & 76 deletions BackendAst/DAstACN.fs

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions BackendAst/DAstConstruction.fs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ let private mapAcnParameter (r:Asn1AcnAst.AstRoot) (deps:Asn1AcnAst.AcnInsertedF
}, ns1

let private createAcnChild (r:Asn1AcnAst.AstRoot) (icdStgFileName:string) (deps:Asn1AcnAst.AcnInsertedFieldDependencies) (lm:LanguageMacros) (m:Asn1AcnAst.Asn1Module) (ch:Asn1AcnAst.AcnChild) (us:State) =


let tdBodyWithinSeq = DAstACN.getDeterminantTypeDefinitionBodyWithinSeq r lm (Asn1AcnAst.AcnChildDeterminant ch)
let acnAlignment =
match ch.Type with
| Asn1AcnAst.AcnInteger a -> a.acnAlignment
Expand All @@ -46,15 +47,15 @@ let private createAcnChild (r:Asn1AcnAst.AstRoot) (icdStgFileName:string) (deps:

let funcBodyEncode, ns1=
match ch.Type with
| Asn1AcnAst.AcnInteger a -> DAstACN.createAcnIntegerFunction r deps lm Codec.Encode ch.id a us
| Asn1AcnAst.AcnInteger a -> DAstACN.createAcnIntegerFunction r deps lm Codec.Encode ch.id a tdBodyWithinSeq us
| Asn1AcnAst.AcnBoolean a -> DAstACN.createAcnBooleanFunction r deps lm Codec.Encode ch.id a us
| Asn1AcnAst.AcnNullType a -> DAstACN.createAcnNullTypeFunction r deps lm Codec.Encode ch.id a us
| Asn1AcnAst.AcnReferenceToEnumerated a -> DAstACN.createAcnEnumeratedFunction r deps icdStgFileName lm Codec.Encode ch.id a (defOrRef r m a) us
| Asn1AcnAst.AcnReferenceToIA5String a -> DAstACN.createAcnStringFunction r deps lm Codec.Encode ch.id a us

let funcBodyDecode, ns2 =
match ch.Type with
| Asn1AcnAst.AcnInteger a -> DAstACN.createAcnIntegerFunction r deps lm Codec.Decode ch.id a ns1
| Asn1AcnAst.AcnInteger a -> DAstACN.createAcnIntegerFunction r deps lm Codec.Decode ch.id a tdBodyWithinSeq ns1
| Asn1AcnAst.AcnBoolean a -> DAstACN.createAcnBooleanFunction r deps lm Codec.Decode ch.id a ns1
| Asn1AcnAst.AcnNullType a -> DAstACN.createAcnNullTypeFunction r deps lm Codec.Decode ch.id a ns1
| Asn1AcnAst.AcnReferenceToEnumerated a -> DAstACN.createAcnEnumeratedFunction r deps icdStgFileName lm Codec.Decode ch.id a (defOrRef r m a) ns1
Expand All @@ -70,7 +71,6 @@ let private createAcnChild (r:Asn1AcnAst.AstRoot) (icdStgFileName:string) (deps:
let retFunc = DAstACN.handleSavePosition funBodyWithState ch.Type.savePosition (ToC ch.Name.Value) lvName ch.id lm codec
retFunc emptyState {ErrorCode.errCodeName = ""; ErrorCode.errCodeValue=0; comment=None} prms nestingScope p |> fst

let tdBodyWithinSeq = DAstACN.getDeterminantTypeDefinitionBodyWithinSeq r lm (Asn1AcnAst.AcnChildDeterminant ch)
let initExpression =
match ch.Type with
| Asn1AcnAst.AcnInteger _ -> "0"
Expand All @@ -79,7 +79,7 @@ let private createAcnChild (r:Asn1AcnAst.AstRoot) (icdStgFileName:string) (deps:
| Asn1AcnAst.AcnReferenceToEnumerated e ->
lm.lg.getNamedItemBackendName (Some (defOrRef r m e)) e.enumerated.items.Head
| Asn1AcnAst.AcnReferenceToIA5String s ->
lm.lg.initializeString (int (s.str.maxSize.acn + 1I))
lm.lg.initializeString None (int (s.str.maxSize.acn + 1I))

let rec dealiasDeps (dep: Asn1AcnAst.AcnDependency): Asn1AcnAst.AcnDependency =
match dep.dependencyKind with
Expand Down
17 changes: 12 additions & 5 deletions BackendAst/DAstInitialize.fs
Original file line number Diff line number Diff line change
Expand Up @@ -336,14 +336,21 @@ let createIA5StringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1A
//let i = sprintf "i%d" ii
let bAlpha = o.uperCharSet.Length < 128
let arrAsciiCodes = o.uperCharSet |> Array.map(fun x -> BigInteger (System.Convert.ToInt32 x))
let firstPrintableAsciiCode =
arrAsciiCodes
|> Array.tryFind(fun x -> x >= 32I && x <= 126I)
let sFirstNonNullChar =
match firstPrintableAsciiCode with
| Some c -> sprintf "'%c'" (char (int c))
| None -> "'\0'"
let testCaseFuncs =
let seqOfCase (nSize:BigInteger) =
let initTestCaseFunc (p:CodegenScope) =
let ii = p.accessPath.SequenceOfLevel + 1
let i = sprintf "i%d" ii
let resVar = p.accessPath.asIdentifier
let td = strTypeDef.longTypedefName2 (lm.lg.hasModules) (ToC p.modName)
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
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
{InitFunctionResult.funcBody = funcBody; resultVar = resVar; localVariables=[SequenceOfIndex (ii, None)]}
{AutomaticTestCase.initTestCaseFunc = initTestCaseFunc; testCaseTypeIDsMap = Map.ofList [(t.id, TcvSizeableTypeValue nSize)] }
seq {
Expand All @@ -362,11 +369,11 @@ let createIA5StringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1A
let i = sprintf "i%d" ii
let resVar = p.accessPath.asIdentifier
let td = strTypeDef.longTypedefName2 (lm.lg.hasModules) (ToC p.modName)
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) true resVar
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
let lvars = lm.lg.init.zeroIA5String_localVars ii
let resVar = p.accessPath.asIdentifier
{InitFunctionResult.funcBody = funcBody; resultVar = resVar; localVariables=lvars}
let constantInitExpression () = lm.lg.initializeString (int o.maxSize.uper)
let constantInitExpression () = lm.lg.initializeString firstPrintableAsciiCode (int o.maxSize.uper)
createInitFunctionCommon r lm t typeDefinition funcBody zero testCaseFuncs constantInitExpression constantInitExpression [] [] []

let createOctetStringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1AcnAst.Asn1Type) (o :Asn1AcnAst.OctetString ) (typeDefinition:TypeDefinitionOrReference) (isValidFunction:IsValidFunction option) =
Expand Down Expand Up @@ -434,7 +441,7 @@ let createOctetStringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn
let ii = p.accessPath.SequenceOfLevel + 1
let i = sprintf "i%d" ii
let funcBody = initTestCaseOctetString (p.accessPath.joined lm.lg) (lm.lg.getAccess p.accessPath) tdName o.maxSize.uper i (isFixedSize) true o.minSize.uper (o.maxSize.uper = 0I) resVar
let lvars = lm.lg.init.zeroIA5String_localVars ii
let lvars = lm.lg.init.zeroOctetString_localVars ii
{InitFunctionResult.funcBody = funcBody; resultVar = resVar; localVariables=lvars}

testCaseFuncs, zero
Expand Down Expand Up @@ -536,7 +543,7 @@ let createBitStringInitFunc (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1Ac
| _ -> raise(BugErrorException "UnexpectedType")

let funcBody = initTestCaseBitString (p.accessPath.joined lm.lg) (lm.lg.getAccess p.accessPath) tdName nSize (nSizeCeiled) i (isFixedSize) true o.minSize.uper p.accessPath.isOptional resVar
let lvars = lm.lg.init.zeroIA5String_localVars ii
let lvars = lm.lg.init.zeroBitString_localVars ii
{InitFunctionResult.funcBody = funcBody; resultVar = resVar; localVariables=lvars}
testCaseFuncs, zero
| _ ->
Expand Down
2 changes: 1 addition & 1 deletion BackendAst/DAstUPer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ let createIA5StringFunction (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (codec:Co
let nSizeInBits = GetNumberOfBitsForNonNegativeInteger ( (o.maxSize.uper - o.minSize.uper))
let initExpr =
match codec, lm.lg.decodingKind with
| Decode, Copy -> Some (lm.lg.initializeString (int o.maxSize.uper))
| Decode, Copy -> Some (lm.lg.initializeString None (int o.maxSize.uper))
| _ -> None
let pp, resultExpr = joinedOrAsIdentifier lm codec p

Expand Down
6 changes: 3 additions & 3 deletions BackendAst/EncodeDecodeTestCase.fs
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,8 @@ let _createAcnEncDecFunction (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1A
let sStar = lm.lg.getStar p.accessPath
let sAmberDecode = getAmberDecode t
let sAmberIsValid = getAmberDecode t

match hasAcnEncodeFunction encFunc t.acnParameters t.id.tasInfo with
let bHasAcnEncodeFunction = hasAcnEncodeFunction encFunc t.acnParameters t.id.tasInfo
match bHasAcnEncodeFunction with
| false -> None, us
| true ->
match funcName with
Expand Down Expand Up @@ -189,7 +189,7 @@ let _createAcnEncDecFunction (r:Asn1AcnAst.AstRoot) (lm:LanguageMacros) (t:Asn1A
}
joinItems (content.orElse "") sNestedContent

match hasAcnEncodeFunction encFunc t.acnParameters t.id.tasInfo with
match bHasAcnEncodeFunction with
| true ->
let sNestedStatements =
let rec printStatements statements : string option =
Expand Down
10 changes: 9 additions & 1 deletion BackendAst/GenerateFiles.fs
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,7 @@ let private printUnit (r:DAst.AstRoot) (lm:LanguageMacros) (encodings: CommonTy
(t.Type.acnEncFunction |> Option.toList |> List.collect (fun x -> (x.func |> Option.toList) @ x.auxiliaries)) @
(t.Type.acnDecFunction |> Option.toList |> List.collect (fun x -> (x.func |> Option.toList) @ x.auxiliaries))
else []

let allProcs =
(privateDefinition |> Option.toList) @
eqFuncs @ isValidFuncs @ special_init_funcs @
Expand All @@ -286,11 +287,18 @@ let private printUnit (r:DAst.AstRoot) (lm:LanguageMacros) (encodings: CommonTy
[], []
let rtlFiles = lm.lg.getRtlFiles r.args.encodings arrsTypeAssignments
let arrsImportedFiles = [email protected]@pu.importedProgramUnits |> List.distinct
let arrsUserDefinedFunctions =
tases |> List.collect(fun t ->
(t.Type.acnEncFunction |> Option.toList |> List.collect (fun x -> x.userDefinedFunctions )) @
(t.Type.acnDecFunction |> Option.toList |> List.collect (fun x -> x.userDefinedFunctions )) ) |>
List.map(fun f -> f.functionProtype.Trim()) |>
List.filter (fun s -> s <> "") |>
List.distinct
let puCorrName =
match r.lang with
| CommonTypes.ProgrammingLanguage.Scala -> ToC (pu.name)
| _ -> pu.name
let srcBody = lm.src.printSourceFile puCorrName arrsImportedFiles pu.importedTypes (arrsValueAssignments@arrsSourceAnonymousValues@arrsTypeAssignments)
let srcBody = lm.src.printSourceFile puCorrName arrsImportedFiles pu.importedTypes arrsUserDefinedFunctions (arrsValueAssignments@arrsSourceAnonymousValues@arrsTypeAssignments)

let eqContntent =
match lm.lg.allowsSrcFilesWithNoFunctions with
Expand Down
7 changes: 5 additions & 2 deletions CommonTypes/AbstractMacros.fs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ Generated by the C stg macros with the following command
[<AbstractClass>]
type ISrcBody () =
abstract member rtlModuleName : unit -> string;
abstract member printSourceFile : sFileNameWithoutExtension:string -> arrsIncludedFiles:seq<string> -> arrsAdaUseTypes:seq<string> -> arrsValueAndTypeAssignments:seq<string> -> string;
abstract member printSourceFile : sFileNameWithoutExtension:string -> arrsIncludedFiles:seq<string> -> arrsAdaUseTypes:seq<string> -> arrsUserDefinedFunctions:seq<string> -> arrsValueAndTypeAssignments:seq<string> -> string;
abstract member printTass : arrsAllProcs:seq<string> -> string;


Expand Down Expand Up @@ -257,7 +257,7 @@ Generated by the C stg macros with the following command
abstract member initIA5String : sPtr:string -> sValue:string -> bIsOptional:bool -> sResVar:string -> string;
abstract member initEnumerated : sVal:string -> sValue:string -> sTypeDefName:string -> bIsOptional:bool -> sResVar:string -> string;
abstract member initNull : sVal:string -> bIsOptional:bool -> sResVar:string -> string;
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;
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;
abstract member initBitOrOctStringFromCompoundLiteral : p:string -> sCompLiteral:string -> string;
abstract member initFixSizeBitOrOctString_bytei : p:string -> sAcc:string -> sI:string -> sByteHexVal:string -> string;
abstract member initFixSizeBitOrOctString : p:string -> sAcc:string -> arrsBytes:seq<string> -> string;
Expand Down Expand Up @@ -369,6 +369,7 @@ Generated by the C stg macros with the following command
abstract member EmitEncodingSizeConstants : sTypeDefName:string -> nMaxBytesInACN:BigInteger -> nMaxBitsInACN:BigInteger -> string;
abstract member EmitTypeAssignment_primitive_def : sVarName:string -> sStar:string -> sFuncName:string -> sTypeDefName:string -> arrsErrcodes:seq<string> -> bEmptyEncodingSpace:bool -> nMaxBytesInACN:BigInteger -> nMaxBitsInACN:BigInteger -> arrsAcnPrms:seq<string> -> soSparkAnnotations:string option -> codec:Codec -> string;
abstract member EmitTypeAssignment_primitive : sVarName:string -> sStar:string -> sFuncName:string -> soIValidFuncName:string option -> sTypeDefName:string -> arrsLocalVariables:seq<string> -> sContent:string -> soSparkAnnotations:string option -> sInitialExp:string -> arrsAcnPrms:seq<string> -> arrsAcnParamNames:seq<string> -> bEmptyEncodingSpace:bool -> bBsIsUnreferenced:bool -> bVarNameIsUnreferenced:bool -> soInitFuncName:string option -> arrsAnnots:seq<string> -> arrsPrecond:seq<string> -> soPostcond:string option -> codec:Codec -> string;
abstract member MappingFunctionDeclaration : sTypeName:string -> sMF:string -> codec:Codec -> string;
abstract member alignToNext : sMainBody:string -> sAlignmentValue:string -> nAlignmentValue:BigInteger -> nAbsOffset:BigInteger -> nRemainingMinBits:BigInteger -> nLevel:BigInteger -> nIx:BigInteger -> nOffset:BigInteger -> codec:Codec -> string;
abstract member PositiveInteger_ConstSize : p:string -> sSsuffix:string -> sErrCode:string -> nFixedSize:BigInteger -> soMF:string option -> soMFM:string option -> nUperMin:BigInteger -> nUperMax:BigInteger -> codec:Codec -> string;
abstract member PositiveInteger_ConstSize_8 : p:string -> sSsuffix:string -> sErrCode:string -> soMF:string option -> soMFM:string option -> nUperMin:BigInteger -> nUperMax:BigInteger -> codec:Codec -> string;
Expand Down Expand Up @@ -442,6 +443,8 @@ Generated by the C stg macros with the following command
abstract member sequence_default_child : p:string -> sAcc:string -> sChName:string -> sChildContent:string -> sInitWithDefaultValue:string -> soExistVar:string option -> soChildExpr:string option -> sChildTypedef:string -> soSaveBitStrmPosStatement:string option -> codec:Codec -> string;
abstract member sequence_call_post_encoding_function : p:string -> sFncName:string -> sBitStreamStartPos:string -> sBitStreamPositionsNullPos:string -> string;
abstract member sequence_call_post_decoding_validator : p:string -> sFncName:string -> sBitStreamStartPos:string -> sBitStreamPositionsNullPos:string -> string;
abstract member sequence_call_post_encoding_function_prototype : sTypedefName:string -> sFncName:string -> sExtFuncsPositionsTypeName:string -> string;
abstract member sequence_call_post_decoding_validator_prototype : sTypedefName:string -> sFncName:string -> sExtFuncsPositionsTypeName:string -> string;
abstract member ChoiceChildAlwaysAbsent : p:string -> sAcc:string -> sChildID:string -> nChildIndex:BigInteger -> sErrorCodeName:string -> codec:Codec -> string;
abstract member ChoiceChild : p:string -> sAcc:string -> sChildID:string -> nChildIndex:BigInteger -> nIndexSizeInBits:BigInteger -> nLastItemIndex:BigInteger -> sChildContent:string -> sChildName:string -> sChildTypeDef:string -> sChoiceTypeName:string -> sChildInitExpr:string -> codec:Codec -> string;
abstract member Choice : p:string -> sAcc:string -> arrsChildren:seq<string> -> nLastItemIndex:BigInteger -> sChoiceIndexName:string -> td:FE_ChoiceTypeDefinition -> nIndexSizeInBits:BigInteger -> sErrCode:string -> codec:Codec -> string;
Expand Down
10 changes: 10 additions & 0 deletions CommonTypes/AcnGenericTypes.fs
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,16 @@ type PostEncodingFunction =
type PreDecodingFunction =
| PreDecodingFunction of (StringLoc option)*StringLoc

type UserDefinedFunction =
| UserMappingFunction of string
| UserPostEncodingFunction of string
| UserPreDecodingFunction of string
with
member this.functionProtype =
match this with
| UserMappingFunction fn
| UserPostEncodingFunction fn
| UserPreDecodingFunction fn -> fn

type IntegerAcnProperties = {
encodingProp : AcnIntEncoding option
Expand Down
3 changes: 3 additions & 0 deletions FrontEndAst/DAst.fs
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,7 @@ type AcnFuncBodyResult = {
resultExpr : string option
auxiliaries : string list
icdResult : IcdArgAux option
userDefinedFunctions : UserDefinedFunction list //a list of user defined functions prototypes used in this function body. Emitted at the begining of the source file
}

type XERFuncBodyResult = {
Expand Down Expand Up @@ -529,6 +530,7 @@ type AcnFunction = {
funcBody : AcnFuncBody
funcBodyAsSeqComp : AcnFuncBodySeqComp
isTestVaseValid : AutomaticTestCase -> bool
userDefinedFunctions : UserDefinedFunction list //a list of user defined functions prototypes used in this function body. Emitted at the begining of the source file
icdTas : IcdTypeAss option (* always present in Encode, always None in Decode *)
}

Expand Down Expand Up @@ -998,6 +1000,7 @@ and AcnChildUpdateResult = {
testCaseFnc : AutomaticTestCase -> TestCaseValue option
errCodes : ErrorCode list
localVariables : LocalVariable list
//userDefinedFunctions : UserDefinedFunction list //a list of user defined functions prototypes used in this function body. Emitted at the begining of the source file
}

and DastAcnParameter = {
Expand Down
4 changes: 3 additions & 1 deletion FrontEndAst/Language.fs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ type Acn_parts = {
}
type Initialize_parts = {
zeroIA5String_localVars : int -> LocalVariable list
zeroOctetString_localVars : int -> LocalVariable list
zeroBitString_localVars : int -> LocalVariable list
choiceComponentTempInit : bool
initMethSuffix : Asn1TypeKind -> string // TODO REMOVE?
}
Expand Down Expand Up @@ -224,7 +226,7 @@ type ILangGeneric () =
abstract member asn1SccIntValueToString : BigInteger -> unsigned: bool -> string;
abstract member intValueToString : BigInteger -> Asn1AcnAst.IntegerClass -> string;
abstract member doubleValueToString : double -> string
abstract member initializeString : int -> string
abstract member initializeString :BigInteger option -> int -> string //the ascii code to use for initialization, and the length of the string
abstract member supportsInitExpressions : bool
abstract member setNamedItemBackendName0 : Asn1Ast.NamedItem -> string -> Asn1Ast.NamedItem
abstract member getNamedItemBackendName0 : Asn1Ast.NamedItem -> string
Expand Down
Loading