diff --git a/blender_asset_tracer/blendfile/dna.py b/blender_asset_tracer/blendfile/dna.py index 8b071f0..42070b7 100644 --- a/blender_asset_tracer/blendfile/dna.py +++ b/blender_asset_tracer/blendfile/dna.py @@ -160,9 +160,6 @@ class Struct: raise KeyError('%r has no field %r, only %r' % (self, name, sorted(self._fields_by_name.keys()))) - if name_tail: - return field.dna_type.field_from_path(pointer_size, name_tail) - offset = field.offset if index: if field.name.is_pointer: @@ -174,6 +171,10 @@ class Struct: (path, field.dna_type)) offset += index_offset + if name_tail: + subval, suboff = field.dna_type.field_from_path(pointer_size, name_tail) + return subval, suboff + offset + return field, offset def field_get(self, diff --git a/tests/test_blendfile_dna.py b/tests/test_blendfile_dna.py index fdcb280..e57043d 100644 --- a/tests/test_blendfile_dna.py +++ b/tests/test_blendfile_dna.py @@ -126,7 +126,7 @@ class StructTest(unittest.TestCase): self.assertEqual(self.s.field_from_path(psize, b'path'), (self.f_path, 16)) self.assertEqual(self.s.field_from_path(psize, (b'prev', b'path')), - (self.f_path, 16)) + (self.f_path, 24)) self.assertEqual(self.s.field_from_path(psize, (b'ptr', 2)), (self.f_pointer, 16 + 4096 + 2 * psize)) self.assertEqual(self.s.field_from_path(psize, (b'floaty', 1)),