def attr(self, obj, field): if obj.__class__ is Var and obj.name in self.bindings: stored = self.bindings[obj.name] stored_class = stored.__class__ if stored_class is Struct: pos = stored.type.field_pos(field) return stored.args[pos] elif stored_class is Slice or stored_class is ArrayView: return getattr(stored, field) return Transform.attr(self, obj, field)