From 8d32ab513f8f71eaec2d999d2b05dcb19763cb7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 23 Feb 2018 11:42:30 +0100 Subject: [PATCH] Recursively add offsets of Struct.field_from_path() --- blender_asset_tracer/blendfile/dna.py | 7 ++++--- tests/test_blendfile_dna.py | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) 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)),