Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revision | 517c45ea7939e13d06dd9722b8ccda4f4bd60b1f (tree) |
---|---|
Zeit | 2023-01-16 08:23:20 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
ASIS: Busy with move base/Event/Protocol from IPython into ...
@@ -0,0 +1,15 @@ | ||
1 | +# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project | |
2 | + | |
3 | +from typing import TypeAlias | |
4 | +from dataclasses import dataclass | |
5 | + | |
6 | + | |
7 | +fstring: TypeAlias=str # a Fix (sized) string. May be inplemented as a C-string, a Pascal-string, or ... | |
8 | + | |
9 | +class CC_Base: pass | |
10 | + | |
11 | +@dataclass | |
12 | +class CC_TypedParameter: | |
13 | + """This is many a helper class/struct to combine a parameter: a name and an type""" | |
14 | + name: fstring | |
15 | + type: type |
@@ -0,0 +1,16 @@ | ||
1 | +# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project | |
2 | + | |
3 | +from .CCbase import * | |
4 | +from dataclasses import dataclass, KW_ONLY | |
5 | +from collections.abc import Sequence # Use for typing | |
6 | + | |
7 | +@dataclass | |
8 | +class CC_Event: | |
9 | + """An event is like a (remote) function-call | |
10 | + | |
11 | + It has a name, a return-type (can be void), and a sequence of typed parameters.""" | |
12 | + | |
13 | + name: fstring | |
14 | + _: KW_ONLY # The field below must be passed as keywords, when initialising | |
15 | + return_type: type=None | |
16 | + typedParameters: Sequence[CC_TypedParameter]=() ## A tuple `()` is inmutable |
@@ -0,0 +1,2 @@ | ||
1 | +# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project | |
2 | + |
@@ -0,0 +1,2 @@ | ||
1 | +# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project | |
2 | + |
@@ -1,8 +1,8 @@ | ||
1 | 1 | # (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project |
2 | 2 | |
3 | -from . import * | |
3 | +from . import * # CCompare | |
4 | 4 | |
5 | -from castle.writers.CC2Cpy import * | |
5 | +from castle.writers.CC2Cpy.CCbase import * # Some generic types | |
6 | 6 | |
7 | 7 | LOG_ALL=True |
8 | 8 |
@@ -26,3 +26,7 @@ | ||
26 | 26 | assert CCompare(abc,abc, log=True , log_all=False) |
27 | 27 | assert CCompare(abc,abc, log=True, log_all=True) |
28 | 28 | |
29 | +def test_5_base(): | |
30 | + # IMPORT the file will do mostly, but ... | |
31 | + tp = CC_TypedParameter('test', int) | |
32 | + assert tp.type is int |
@@ -0,0 +1,22 @@ | ||
1 | +# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project | |
2 | + | |
3 | +from . import * # CCompare | |
4 | + | |
5 | +from castle.writers.CC2Cpy.Event import * #CC_Event | |
6 | + | |
7 | +def test_0_Event_empty(): | |
8 | + e = CC_Event("leeg_event") | |
9 | + assert e.name == 'leeg_event' | |
10 | + assert e.return_type is None | |
11 | + assert len(e.typedParameters) == 0 | |
12 | + | |
13 | +def test_1_Event_small(): | |
14 | + e = CC_Event("demo_int", typedParameters=[CC_TypedParameter(name='p1', type=float )]) | |
15 | + assert e.return_type is None | |
16 | + assert len(e.typedParameters) == 1 | |
17 | + assert e.typedParameters[0].name == 'p1' | |
18 | + assert e.typedParameters[0].type == float | |
19 | + | |
20 | +def test_1_Event_retunInt(): | |
21 | + e = CC_Event("an_event", return_type=int) | |
22 | + assert e.return_type == int |
@@ -0,0 +1,45 @@ | ||
1 | +# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project | |
2 | + | |
3 | +from . import * # CCompare | |
4 | + | |
5 | +from castle.writers.CC2Cpy.Protocol import * #CC_EventProtocol | |
6 | + | |
7 | +ref_DemoProtocol=""" | |
8 | +struct CC_B_Protocol cc_P_DEMO = { | |
9 | + .name = "DEMO", | |
10 | + .kind = CC_B_ProtocolKindIs_Event, | |
11 | + .inherit_from = &cc_P_Protocol, | |
12 | + .length = 6, | |
13 | + .events = { | |
14 | + { .seqNo = 0, .name = "demoEventA", .part_of = &cc_P_DEMO }, | |
15 | + { .seqNo = 1, .name = "demoEventB", .part_of = &cc_P_DEMO }, | |
16 | + { .seqNo = 2, .name = "demoEventC", .part_of = &cc_P_DEMO }, | |
17 | + { .seqNo = 3, .name = "demoEventD", .part_of = &cc_P_DEMO }, | |
18 | + { .seqNo = 4, .name = "demoEventE", .part_of = &cc_P_DEMO }, | |
19 | + { .seqNo = 5, .name = "demoEventF", .part_of = &cc_P_DEMO }, | |
20 | + } | |
21 | +}; | |
22 | + | |
23 | +#define CC_P_DEMO_demoEventA 0 | |
24 | +#define CC_P_DEMO_demoEventB 1 | |
25 | +#define CC_P_DEMO_demoEventC 2 | |
26 | +#define CC_P_DEMO_demoEventD 3 | |
27 | +#define CC_P_DEMO_demoEventE 4 | |
28 | +#define CC_P_DEMO_demoEventF 5 | |
29 | + | |
30 | +typedef void (*CC_E_DEMO_demoEventA_FT)(CC_selfType, CC_ComponentType, ); | |
31 | +typedef void (*CC_E_DEMO_demoEventB_FT)(CC_selfType, CC_ComponentType, ); | |
32 | +typedef void (*CC_E_DEMO_demoEventC_FT)(CC_selfType, CC_ComponentType, ); | |
33 | +typedef void (*CC_E_DEMO_demoEventD_FT)(CC_selfType, CC_ComponentType, ); | |
34 | +typedef void (*CC_E_DEMO_demoEventE_FT)(CC_selfType, CC_ComponentType, ); | |
35 | +typedef void (*CC_E_DEMO_demoEventF_FT)(CC_selfType, CC_ComponentType, ); | |
36 | +""" | |
37 | + | |
38 | +##qazProtocol = CC_EventProtocol("QAZ", | |
39 | +## events=[ | |
40 | +## CC_Event("qazEventA"), | |
41 | +## CC_Event("qazEventB"), | |
42 | +## CC_Event("qazEventC"), | |
43 | +## CC_Event("qazEventD"), | |
44 | +## CC_Event("qazEventE"), | |
45 | +## CC_Event("qazEventF"), |