• R/O
  • SSH

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2


Commit MetaInfo

修訂7666fcbc367fa041d4db1c3bd2052b94ef8651c1 (tree)
時間2023-02-21 07:28:50
作者Albert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Log Message

asis

Change Summary

差異

diff -r 9dc4234ea760 -r 7666fcbc367f Makefile
--- a/Makefile Fri Feb 17 15:09:29 2023 +0100
+++ b/Makefile Mon Feb 20 23:28:50 2023 +0100
@@ -10,7 +10,7 @@
1010 pytst/writers/CC2Cpy/test_3c_CompClass.py \
1111 #
1212 CURRENT_TESTS = \
13- pytst/writers/CC2Cpy/test_3d_CompStruct.py \
13+ pytst/writers/CC2Cpy/test_4a_HandlerTables.py \
1414 pytst/writers/CC2Cpy/test_9_genSieve.py \
1515 #
1616 TODO_TESTS = \
diff -r 9dc4234ea760 -r 7666fcbc367f castle/writers/CC2Cpy/Component.py
--- a/castle/writers/CC2Cpy/Component.py Fri Feb 17 15:09:29 2023 +0100
+++ b/castle/writers/CC2Cpy/Component.py Mon Feb 20 23:28:50 2023 +0100
@@ -64,9 +64,6 @@
6464 ########################################################################################################################
6565 ##################################### BUSY ### XXX ### BUZY ############################################################
6666 ########################################################################################################################
67-
68-
69-
7067 @dataclass
7168 class CC_B_ComponentClass(CC_Base):
7269 metaclass="NULL" # //NULL for now, later: meta-class
@@ -88,10 +85,7 @@
8885 we need to call render_Typedef_CompName first!"""
8986 return ( "\n"+
9087 self.render_Typedef_CompName(prepend=prepend, indent=indent) + "\n" +
91- self.render_handlers(prepend=prepend, indent=indent) + "\n" +
92- self.render_methods(prepend=prepend, indent=indent) + "\n" +
93- self.render_(prepend=prepend, indent=indent) + "\n" +
94-
88+ self.render_callables(prepend=prepend, indent=indent) + "\n" + # handlers & methods (implementation) XXX TODO
9589 self.render_Fill_ComponentClass(prepend=prepend, indent=indent) + "\n" +
9690 "\n" )
9791
@@ -125,6 +119,44 @@
125119
126120 return '\n'.join(retval)+"\n"
127121
122+
123+ def render_callables(self, prepend:str="", indent:str=" ") ->str:
124+ return """\
125+/** TODO: render_callables::
126+ all Event/Data/Stream-handlers and local ("internal") methods/functions.
127+
128+ This are a lot of (tobe static) C-function implementations, like
129+ * CC_C_Sieve* CC_Mi_Sieve__init(CC_C_Sieve* self, int prime) ...
130+ * CC_C_Sieve* CC_E_Sieve__SimpleSieve_input__try(CC_C_Sieve* self, CC_OutPortType sender, int try) ...
131+ * etc (one for every event in every input-port, plus the local ones
132+
133+ Those functions are collected in CC_B_methodHandler-array and CC_B_eventHandler-arrays (aka dispatch-tables).
134+ those are NOW generated here*/"""
135+
136+ def render_Fill_MethodHandlers(self, prepend:str="", indent:str=" ") ->str:
137+ retval = []
138+ retval.append(f'CC_B_methodHandler cc_S_Sieve_methods[] = {{')
139+
140+ retval.append("""/* TODO: render_Fill_MethodHandlers
141+ the local/internal functions & methods */
142+ Note: cc_S_Sieve_methods is hardcoded""")
143+ retval.append(f'}};')
144+ return '\n'.join(retval)+"\n"
145+
146+ def render_Fill_PortHandlers(self, port, prepend:str="", indent:str=" ") ->str:
147+ retval = []
148+
149+ retval.append(f'CC_B_methodHandler cc_S_Sieve_try[] = {{')
150+
151+ retval.append("""/* TODO: ``render_Fill_PortHandlers(port)``
152+ the local/internal functions & methods
153+ Note: `cc_S_Sieve_try` is hardcoded""")
154+ retval.append(f'}};')
155+ return '\n'.join(retval)+"\n"
156+
157+
158+
159+
128160 def _bases_classes(self) ->Sequence: #XXX
129161 return () #XXX WRONG
130162
diff -r 9dc4234ea760 -r 7666fcbc367f pytst/writers/CC2Cpy/test_2a_groundwork.py
--- a/pytst/writers/CC2Cpy/test_2a_groundwork.py Fri Feb 17 15:09:29 2023 +0100
+++ b/pytst/writers/CC2Cpy/test_2a_groundwork.py Mon Feb 20 23:28:50 2023 +0100
@@ -37,3 +37,11 @@
3737 assert p1.name == 'aName'
3838 assert p1.kind == CC_ProtocolKind.Unknown
3939 assert p1.based_on is baseProtocol
40+
41+
42+import dataclasses
43+
44+def test_3_dataclasses_are_dataclasses():
45+ assert dataclasses.is_dataclass(CC_RootProtocol)
46+ assert dataclasses.is_dataclass(baseProtocol)
47+
diff -r 9dc4234ea760 -r 7666fcbc367f pytst/writers/CC2Cpy/test_3d_CompStruct.py
--- a/pytst/writers/CC2Cpy/test_3d_CompStruct.py Fri Feb 17 15:09:29 2023 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
1-# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project
2-
3-import logging; logger = logging.getLogger(__name__)
4-import pytest
5-from . import * # CCompare
6-
7-from castle.writers.CC2Cpy.Component import *
8-
9-
10-
11-
12-
13-@pytest.mark.skip(reason="More CompStruct-tests are needed")
14-def test_more(): pass
diff -r 9dc4234ea760 -r 7666fcbc367f pytst/writers/CC2Cpy/test_4a_HandlerTables.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pytst/writers/CC2Cpy/test_4a_HandlerTables.py Mon Feb 20 23:28:50 2023 +0100
@@ -0,0 +1,49 @@
1+# (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project
2+
3+import logging; logger = logging.getLogger(__name__)
4+import pytest
5+from . import * # CCompare
6+
7+from castle.writers.CC2Cpy.Component import * # CC_B_ComponentClass
8+
9+
10+ref_sieveMethods="""\
11+CC_B_methodHandler cc_S_Sieve_methods[] = {
12+ (CC_B_methodHandler)CC_Mi_error,
13+ (CC_B_methodHandler)CC_Mc_New,
14+ (CC_B_methodHandler)CC_Mi_error,
15+ (CC_B_methodHandler)CC_Mi_Sieve__init,
16+};
17+"""
18+
19+ref_TryPort="""\
20+CC_B_eventHandler cc_S_Sieve_try[] = {
21+ (CC_B_eventHandler)CC_Mi_error,
22+ (CC_B_eventHandler)CC_Mi_error,
23+ (CC_B_eventHandler)CC_Mi_error,
24+ (CC_B_eventHandler)CC_Mi_error,
25+ (CC_B_eventHandler)CC_Mi_error,
26+ (CC_B_eventHandler)CC_Mi_error,
27+ (CC_B_eventHandler)CC_E_Sieve__SimpleSieve_input__try,
28+};
29+"""
30+
31+#XXX move to common?
32+from .test_9_genSieve import *
33+
34+@pytest.mark.skip
35+def test_SieveMethods(sieveClass):
36+ dispatch_table= sieveClass.render_Fill_MethodHandlers()
37+ logger.debug("\n%s\n", dispatch_table)
38+ assert CCompare(ref_sieveMethods,dispatch_table, log_all=True)
39+
40+TRY="fill_in_later"
41+@pytest.mark.skip
42+def test_TryPortHandlers(sieveClass):
43+ dispatch_table= sieveClass.render_Fill_PortHandlers(TRY)
44+ logger.debug("\n%s\n", dispatch_table)
45+ assert CCompare(ref_TryPorr, dispatch_table, log_all=True)
46+
47+
48+@pytest.mark.skip(reason="More CompStruct-tests are needed")
49+def test_more(): pass
diff -r 9dc4234ea760 -r 7666fcbc367f pytst/writers/CC2Cpy/test_9_genSieve.py
--- a/pytst/writers/CC2Cpy/test_9_genSieve.py Fri Feb 17 15:09:29 2023 +0100
+++ b/pytst/writers/CC2Cpy/test_9_genSieve.py Mon Feb 20 23:28:50 2023 +0100
@@ -73,7 +73,7 @@
7373 f.write(sieveInterface.render())
7474 verify_it_compiles(f.name, tmp_path)
7575
76-@pytest.mark.skip(reason="sieveClass refer to ``cc_B_Sieve_methods`` and ``CC_C_Sieve`` which aren't renderable yet")
76+@pytest.mark.skip(reason="sieveClass refer to ``cc_B_Sieve_methods`` and ``CC_C_Sieve`` which aren't renderable yet. See test-4")
7777 def test_1b_ProtoInterClass(simpleSieveProto, sieveInterface, sieveClass, tmp_path):
7878 FILE="sieve-ProtoInterClass.c"
7979 with open(tmp_path/FILE, 'w') as f: