Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revision | bea38726c5d2c27cf3ff1f82ae1c3f8bc1b91534 (tree) |
---|---|
Zeit | 2022-01-31 00:27:51 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
Refactored Rules (etc), by rewriting Mixin_Children_... -- Not longer a subclass of tuple, but using tuple for ._childeren
@@ -35,13 +35,17 @@ | ||
35 | 35 | return self._expr |
36 | 36 | |
37 | 37 | |
38 | -class MixIn_children_as_tuple(tuple, PEG): | |
39 | - """With this MixIn PEG-class can be used a list""" | |
40 | - def __new__(cls, children, **kwargs): | |
41 | - return tuple.__new__(cls, tuple(children)) | |
42 | - def __init__(self, *, children=None, **kwargs): | |
43 | - # children is handled in __new__ (RO!) | |
38 | +class MixIn_children_tuple: | |
39 | + """With this MixIn PEG-class get the ``.children`` property; and sequence-alike methods""" | |
40 | + def __init__(self, *, children, **kwargs): | |
44 | 41 | super().__init__(**kwargs) |
42 | + self._childeren = tuple(children) | |
43 | + | |
44 | + def __len__(self): | |
45 | + return len(self._childeren) | |
46 | + def __getitem__(self, key): | |
47 | + return self._childeren[key] | |
48 | + def __iter__(self): return self._childeren.__iter__() | |
45 | 49 | |
46 | 50 | |
47 | 51 | ## |
@@ -71,7 +75,7 @@ | ||
71 | 75 | self.name = name |
72 | 76 | self.value = value |
73 | 77 | |
74 | -class Settings(MixIn_children_as_tuple, PEG): pass | |
78 | +class Settings(MixIn_children_tuple, PEG): pass | |
75 | 79 | |
76 | 80 | |
77 | 81 | class Rule(NonTerminal): |
@@ -87,7 +91,7 @@ | ||
87 | 91 | self.expr = expr |
88 | 92 | |
89 | 93 | |
90 | -class Rules(MixIn_children_as_tuple, PEG): pass | |
94 | +class Rules(MixIn_children_tuple, PEG): pass | |
91 | 95 | |
92 | 96 | |
93 | 97 | class Grammar(NonTerminal): |