• R/O
  • SSH

Commit

Tags
No Tags

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

Revisión8847252156b40ae8b09903f574f7e49ebb899020 (tree)
Tiempo2023-02-09 04:19:39
AutorAlbert Mietus < albert AT mietus DOT nl >
CommiterAlbert Mietus < albert AT mietus DOT nl >

Log Message

asis

Cambiar Resumen

Diferencia incremental

diff -r ab66032315c1 -r 8847252156b4 castle/writers/CC2Cpy/Component.py
--- a/castle/writers/CC2Cpy/Component.py Wed Feb 08 19:57:09 2023 +0100
+++ b/castle/writers/CC2Cpy/Component.py Wed Feb 08 20:19:39 2023 +0100
@@ -1,6 +1,6 @@
11 # (C) Albert Mietus, 2022, 2023. Part of Castle/CCastle project
22
3-__all__ = ['CC_B_ComponentInterface', 'CC_Port', 'CC_PortDirection']
3+__all__ = ['CC_B_ComponentInterface', 'CC_Port', 'CC_PortDirection', 'CC_B_ComponentClass']
44
55 from enum import Enum
66
@@ -60,10 +60,10 @@
6060 count += len(self.ports)
6161 return count
6262
63- def render(self, prepend:str="", indent=" ") ->str:
63+ def render(self, prepend:str="", indent:str=" ") ->str:
6464 return self.render_struct(prepend=prepend, indent=indent)
6565
66- def render_struct(self, prepend:str="", indent=" ") ->str: ## struct CC_B_ComponentInterface cc_CI_${name} ...
66+ def render_struct(self, prepend:str="", indent:str=" ") ->str: ## struct CC_B_ComponentInterface cc_CI_${name} ...
6767 name = f'cc_CI_{self.name}'
6868 based_on_link = f'&cc_CI_{self.based_on[0].name}' if self.based_on else "NULL"
6969
@@ -85,3 +85,32 @@
8585 retval.append(f'{prepend}}} ;') # end of struct
8686
8787 return '\n'.join(retval)+"\n"
88+
89+
90+
91+@dataclass
92+class CC_B_ComponentClass(CC_Base):
93+ """XXX
94+ XXX IS IT USED IN HANDCOMPILED CODE -- as the .methods field is wrongly filled ...
95+ XXX"""
96+ interface: CC_B_ComponentInterface
97+ metaclass="NULL" # //NULL for now, later: meta-class
98+
99+ def render(self, prepend:str="", indent:str=" ") ->str:
100+ return self.render_struct(prepend=prepend, indent=indent)
101+
102+ def render_struct(self, prepend:str="", indent:str=" ") ->str: ## struct CC_B_ComponentClass cc_C_<name> {...}
103+ name = self.interface.name
104+ interface_name = f'cc_CI_{name}'
105+ comp_TypeName = f'CC_C_{name}'
106+ methods_name = f'cc_B_{name}_methods'
107+
108+ retval = []
109+ retval.append(f'{prepend}struct CC_B_ComponentClass cc_C_{self.interface.name} = {{')
110+ retval.append(f'{prepend}{indent}.isa = {self.metaclass},')
111+ retval.append(f'{prepend}{indent}.interface = &{interface_name},')
112+ retval.append(f'{prepend}{indent}.instance_size = sizeof({comp_TypeName}),')
113+ retval.append(f'{prepend}{indent}.methods = {methods_name},')
114+ retval.append(f'{prepend}}};')
115+
116+ return '\n'.join(retval)+"\n"
diff -r ab66032315c1 -r 8847252156b4 pytst/writers/CC2Cpy/test_3c_CompClass.py
--- a/pytst/writers/CC2Cpy/test_3c_CompClass.py Wed Feb 08 19:57:09 2023 +0100
+++ b/pytst/writers/CC2Cpy/test_3c_CompClass.py Wed Feb 08 20:19:39 2023 +0100
@@ -6,6 +6,20 @@
66
77 from castle.writers.CC2Cpy.Component import * # CC_B_ComponentClass
88
9+from .test_3b_CompInterface import emptyComp
10+
11+ref_emptyClass="""\
12+struct CC_B_ComponentClass cc_C_empty = {
13+ .isa = NULL,
14+ .interface = &cc_CI_empty,
15+ .instance_size = sizeof(CC_C_empty),
16+ .methods = cc_B_empty_methods,
17+};
18+"""
19+
20+def test_0(emptyComp):
21+ emptyClass = CC_B_ComponentClass(emptyComp)
22+ assert CCompare(ref_emptyClass, emptyClass.render())
923
1024
1125