fix DataType.copy for nested types

all nested types need a specific copy method, as some information
of EnumType (its name) and TextType are not visible in the
exported form

Change-Id: I3ef765ca35cda11b10798c68a3e2115502554c2e
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21441
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
2019-10-18 16:32:12 +02:00
parent 536c798699
commit 0700ddc455
2 changed files with 22 additions and 0 deletions

View File

@ -604,6 +604,10 @@ class ArrayOf(DataType):
self.members = members
self.set_properties(minlen=minlen, maxlen=maxlen)
def copy(self):
"""DataType.copy does not work when members are enums"""
return ArrayOf(self.members.copy(), self.minlen, self.maxlen)
def checkProperties(self):
self.default = [self.members.default] * self.minlen
super().checkProperties()
@ -679,6 +683,10 @@ class TupleOf(DataType):
self.members = members
self.default = tuple(el.default for el in members)
def copy(self):
"""DataType.copy does not work when members contain enums"""
return TupleOf(*(m.copy() for m in self.members))
def export_datatype(self):
return dict(type='tuple', members=[subtype.export_datatype() for subtype in self.members])
@ -739,6 +747,10 @@ class StructOf(DataType):
'Only members of StructOf may be declared as optional!')
self.default = dict((k,el.default) for k, el in members.items())
def copy(self):
"""DataType.copy does not work when members contain enums"""
return StructOf(self.optional, **{k: v.copy() for k,v in self.members.items()})
def export_datatype(self):
res = dict(type='struct', members=dict((n, s.export_datatype())
for n, s in list(self.members.items())))