Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
修訂 | 2f2ee2f28a8e65eca88b5ba513bb28745a00bac6 (tree) |
---|---|
時間 | 2023-02-22 01:03:52 |
作者 | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
asis
@@ -17,3 +17,4 @@ | ||
17 | 17 | castle/writers/CC2Cpy/_ComponentClass.c |
18 | 18 | castle/writers/CC2Cpy/_SIEVE.c |
19 | 19 | castle/writers/CC2Cpy/jinja_hack.py |
20 | +.mypy_cache |
@@ -63,8 +63,6 @@ | ||
63 | 63 | PYTHONPATH=`pwd` pytest ${PYTEST_OPTONS} ${TODO_TESTS} |
64 | 64 | current-ds current-sd: |
65 | 65 | PYTHONPATH=`pwd` pytest ${PYTEST_OPTONS} --log-cli-level=DEBUG -s ${CURRENT_TESTS} |
66 | - | |
67 | - | |
68 | 66 | demo: pytest-demo python-demo |
69 | 67 | |
70 | 68 | python-demo: |
@@ -30,8 +30,8 @@ | ||
30 | 30 | count += len(self.ports) |
31 | 31 | return count |
32 | 32 | |
33 | - def find_port_by_name(self,name:str) -> CC_Port: | |
34 | - return next(p for p in self.ports if p.name=='try') | |
33 | + def find_port_by_name(self, name:str) -> CC_Port: | |
34 | + return next(p for p in self.ports if p.name==name) | |
35 | 35 | |
36 | 36 | def render(self, prepend:str="", indent:str=" ") ->str: |
37 | 37 | return ( |
@@ -138,17 +138,26 @@ | ||
138 | 138 | Those functions are collected in CC_B_methodHandler-array and CC_B_eventHandler-arrays (aka dispatch-tables). |
139 | 139 | those are NOW generated here*/""" |
140 | 140 | |
141 | + | |
142 | + | |
143 | + | |
144 | + | |
145 | + | |
141 | 146 | def render_Fill_MethodHandlers(self, prepend:str="", indent:str=" ") ->str: |
142 | 147 | retval = [] |
143 | - retval.append(f'CC_B_methodHandler cc_S_Sieve_methods[] = {{') | |
148 | + retval.append(f'{prepend}CC_B_methodHandler cc_S_{self._name()}_methods[] = {{') | |
149 | + ### XXX TODO:: loop over base_classes | |
144 | 150 | |
145 | - retval.append("""/* TODO: render_Fill_MethodHandlers | |
146 | - the local/internal functions & methods | |
147 | - Note: cc_S_Sieve_methods is hardcoded | |
148 | - */""") | |
151 | + for m in self.methods: | |
152 | + retval.append(f'{prepend}{indent}(CC_B_methodHandler)CC_Mi_{self._name()}__{m.name},') | |
153 | + | |
149 | 154 | retval.append(f'}};') |
150 | 155 | return '\n'.join(retval)+"\n" |
151 | 156 | |
157 | + | |
158 | + | |
159 | + | |
160 | + | |
152 | 161 | def render_Fill_PortHandlers(self, port, prepend:str="", indent:str=" ") ->str: |
153 | 162 | retval = [] |
154 | 163 |
@@ -16,6 +16,11 @@ | ||
16 | 16 | (CC_B_methodHandler)CC_Mi_Sieve__init, |
17 | 17 | }; |
18 | 18 | """ |
19 | +ref_sieveMethods="""\ | |
20 | +CC_B_methodHandler cc_S_Sieve_methods[] = { | |
21 | + (CC_B_methodHandler)CC_Mi_Sieve__init, | |
22 | +}; | |
23 | +""" | |
19 | 24 | |
20 | 25 | ref_TryPort="""\ |
21 | 26 | CC_B_eventHandler cc_S_Sieve_try[] = { |
@@ -38,7 +43,7 @@ | ||
38 | 43 | assert CCompare(ref_sieveMethods,dispatch_table, log_all=True) |
39 | 44 | |
40 | 45 | TRY="fill_in_later" |
41 | -#@pytest.mark.skip | |
46 | +@pytest.mark.skip | |
42 | 47 | def test_TryPortHandlers(sieveClass): |
43 | 48 | dispatch_table= sieveClass.render_Fill_PortHandlers(TRY) |
44 | 49 | logger.debug("\n%s\n", dispatch_table) |
@@ -40,7 +40,7 @@ | ||
40 | 40 | f.write(sieveInterface.render()) |
41 | 41 | verify_it_compiles(f.name, tmp_path) |
42 | 42 | |
43 | -#@pytest.mark.skip(reason="sieveClass refer to ``cc_B_Sieve_methods`` and ``CC_C_Sieve`` which aren't renderable yet. See test-4") | |
43 | +@pytest.mark.skip(reason="sieveClass refer to ``cc_B_Sieve_methods`` and ``CC_C_Sieve`` which aren't renderable yet. See test-4") | |
44 | 44 | def test_1b_ProtoInterClass(simpleSieveProto, sieveInterface, sieveClass, tmp_path): |
45 | 45 | FILE="sieve-ProtoInterClass.c" |
46 | 46 | with open(tmp_path/FILE, 'w') as f: |