about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFlorent Monjalet <florent.monjalet@gmail.com>2015-12-21 11:29:37 +0100
committerFlorent Monjalet <florent.monjalet@gmail.com>2016-01-18 14:02:32 +0100
commite6ec6f9d800584234301733340b171092aac3f9a (patch)
tree71958d2d3a778303b27a34cbfdeeae50f3993755
parentf5f920ce597d0c4e03d0b79aa9b20a70e325cef9 (diff)
downloadmiasm-e6ec6f9d800584234301733340b171092aac3f9a.tar.gz
miasm-e6ec6f9d800584234301733340b171092aac3f9a.zip
Types: typo, MemStruct.get_offset should be a classmethod
Also added tests and MemArray.get_offset
-rw-r--r--miasm2/core/types.py10
-rw-r--r--test/core/types.py11
2 files changed, 19 insertions, 2 deletions
diff --git a/miasm2/core/types.py b/miasm2/core/types.py
index b6eaf0e4..bb7536e5 100644
--- a/miasm2/core/types.py
+++ b/miasm2/core/types.py
@@ -1362,9 +1362,10 @@ class MemStruct(MemType):
             offset = 0
         return self._addr + offset
 
-    def get_offset(self, field_name):
+    @classmethod
+    def get_offset(cls, field_name):
         """Shorthand for self.get_type().get_offset(field_name)."""
-        return self._type.get_offset(field_name)
+        return cls.get_type().get_offset(field_name)
 
     def get_field(self, name):
         """Get a field value by name.
@@ -1575,6 +1576,11 @@ class MemArray(MemType):
     def get_addr(self, idx=0):
         return self._addr + self.get_type().get_offset(idx)
 
+    @classmethod
+    def get_offset(cls, idx):
+        """Shorthand for self.get_type().get_offset(idx)."""
+        return cls.get_type().get_offset(idx)
+
     def __getitem__(self, idx):
         return self.get_type().get_item(self._vm, self._addr, idx)
 
diff --git a/test/core/types.py b/test/core/types.py
index 7ad8ad13..bb1d5da1 100644
--- a/test/core/types.py
+++ b/test/core/types.py
@@ -518,6 +518,17 @@ assert anon.c1 == 0x55
 assert anon.c2 == 0x77
 assert anon.d == 0x33
 
+# get_offset
+for field, off in (("a", 0), ("b1", 1), ("b2", 1), ("c1", 3), ("c2", 4),
+                   ("d", 5)):
+    assert Anon.get_offset(field) == Anon.get_type().get_offset(field)
+    assert Anon.get_offset(field) == off
+
+arr_t = Array(Num("H"))
+for idx, off in ((0, 0), (1, 2), (30, 60)):
+    assert arr_t.get_offset(idx) == arr_t.lval.get_offset(idx)
+    assert arr_t.get_offset(idx) == off
+
 
 # Repr tests