Skip to content

Commit

Permalink
Fix contracts of abstract primitives
Browse files Browse the repository at this point in the history
Ref. #1030
  • Loading branch information
treiher committed May 18, 2022
1 parent aeaaf56 commit 016b925
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 51 deletions.
21 changes: 5 additions & 16 deletions rflx/generator/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
Case,
CaseStatement,
ChoiceList,
ClassPostcondition,
ClassPrecondition,
CommentStatement,
Component,
Expand Down Expand Up @@ -616,20 +615,9 @@ def _create_abstract_function(
ID(function.identifier),
procedure_parameters,
),
[
ClassPrecondition(
And(
Call("Initialized", [Variable("Ctx")]),
*(
[Not(Constrained("RFLX_Result"))]
if isinstance(function.type_, rty.Enumeration)
and function.type_.always_valid
else []
),
)
),
ClassPostcondition(Call("Initialized", [Variable("Ctx")])),
],
[ClassPrecondition(Not(Constrained("RFLX_Result")))]
if isinstance(function.type_, rty.Enumeration) and function.type_.always_valid
else [],
abstract=True,
)
]
Expand Down Expand Up @@ -2809,7 +2797,8 @@ def _assign_to_call( # pylint: disable = too-many-locals

for i, (a, t) in enumerate(zip(call_expr.args, call_expr.argument_types)):
if not isinstance(
a, (expr.Number, expr.Variable, expr.Selected, expr.Size, expr.String)
a,
(expr.Number, expr.Variable, expr.Selected, expr.Size, expr.String, expr.Aggregate),
) and not (
isinstance(a, expr.Opaque)
and isinstance(a.prefix, expr.Variable)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,11 @@ is

procedure Get_Message_Type (Ctx : in out Context; RFLX_Result : out RFLX.Universal.Option_Type) is abstract with
Pre'Class =>
Initialized (Ctx)
and not RFLX_Result'Constrained,
Post'Class =>
Initialized (Ctx);
not RFLX_Result'Constrained;

procedure Create_Message (Ctx : in out Context; Message_Type : RFLX.Universal.Option_Type; Length : RFLX.Test.Length; Data : RFLX_Types.Bytes; RFLX_Result : out RFLX.Test.Definite_Message.Structure) is abstract with
Pre'Class =>
Initialized (Ctx),
Post'Class =>
Initialized (Ctx);
procedure Create_Message (Ctx : in out Context; Message_Type : RFLX.Universal.Option_Type; Length : RFLX.Test.Length; Data : RFLX_Types.Bytes; RFLX_Result : out RFLX.Test.Definite_Message.Structure) is abstract;

procedure Valid_Message (Ctx : in out Context; Message_Type : RFLX.Universal.Option_Type; Strict : Boolean; RFLX_Result : out RFLX.Test.Result) is abstract with
Pre'Class =>
Initialized (Ctx),
Post'Class =>
Initialized (Ctx);
procedure Valid_Message (Ctx : in out Context; Message_Type : RFLX.Universal.Option_Type; Strict : Boolean; RFLX_Result : out RFLX.Test.Result) is abstract;

function Uninitialized (Ctx : Context'Class) return Boolean;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,7 @@ is
P : Private_Context;
end record;

procedure Check_Size (Ctx : in out Context; Size : RFLX.Test.Size; Data : RFLX_Types.Bytes; RFLX_Result : out Boolean) is abstract with
Pre'Class =>
Initialized (Ctx),
Post'Class =>
Initialized (Ctx);
procedure Check_Size (Ctx : in out Context; Size : RFLX.Test.Size; Data : RFLX_Types.Bytes; RFLX_Result : out Boolean) is abstract;

function Uninitialized (Unused_Ctx : Context'Class) return Boolean;

Expand Down
16 changes: 0 additions & 16 deletions tests/unit/generator_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,14 +309,6 @@ def test_prefixed_type_identifier() -> None:
ada.OutParameter(["RFLX_Result"], "Boolean"),
],
),
aspects=[
ada.ClassPrecondition(
ada.And(
ada.Call("Initialized", [ada.Variable("Ctx")]),
)
),
ada.ClassPostcondition(ada.Call("Initialized", [ada.Variable("Ctx")])),
],
abstract=True,
),
],
Expand Down Expand Up @@ -348,14 +340,6 @@ def test_prefixed_type_identifier() -> None:
ada.OutParameter(["RFLX_Result"], "T.Structure"),
],
),
aspects=[
ada.ClassPrecondition(
ada.And(
ada.Call("Initialized", [ada.Variable("Ctx")]),
)
),
ada.ClassPostcondition(ada.Call("Initialized", [ada.Variable("Ctx")])),
],
abstract=True,
),
],
Expand Down

0 comments on commit 016b925

Please sign in to comment.