diff --git a/src/protocol/eval/executor.rs b/src/protocol/eval/executor.rs index 8ea043156fec0af942858ff46cb79ce861946c6a..130de897237dfa1854d68ef1225d452e527db3b2 100644 --- a/src/protocol/eval/executor.rs +++ b/src/protocol/eval/executor.rs @@ -488,12 +488,18 @@ impl Prompt { let (deallocate_heap_pos, value_to_push) = match subject { Value::Ref(value_ref) => { let subject = self.store.read_ref(value_ref); - let subject_heap_pos = subject.as_struct(); + let subject_heap_pos = match expr.kind { + SelectKind::StructField(_) => subject.as_struct(), + SelectKind::TupleMember(_) => subject.as_tuple(), + }; (None, Value::Ref(ValueId::Heap(subject_heap_pos, field_idx))) }, _ => { - let subject_heap_pos = subject.as_struct(); + let subject_heap_pos = match expr.kind { + SelectKind::StructField(_) => subject.as_struct(), + SelectKind::TupleMember(_) => subject.as_tuple(), + }; let subject_indexed = Value::Ref(ValueId::Heap(subject_heap_pos, field_idx)); (Some(subject_heap_pos), self.store.clone_value(subject_indexed)) },