diff --git a/src/back/spv/instructions.rs b/src/back/spv/instructions.rs index ec4a2935a4..7984bbc3e8 100644 --- a/src/back/spv/instructions.rs +++ b/src/back/spv/instructions.rs @@ -27,6 +27,14 @@ pub(super) fn instruction_name(target_id: Word, name: &str) -> Instruction { instruction } +pub(super) fn instruction_member_name(target_id: Word, member: Word, name: &str) -> Instruction { + let mut instruction = Instruction::new(Op::MemberName); + instruction.add_operand(target_id); + instruction.add_operand(member); + instruction.add_operands(helpers::string_to_words(name)); + instruction +} + // // Annotation Instructions // diff --git a/src/back/spv/writer.rs b/src/back/spv/writer.rs index 6c56d0b1bf..1099df5919 100644 --- a/src/back/spv/writer.rs +++ b/src/back/spv/writer.rs @@ -374,6 +374,13 @@ impl Writer { for (handle, variable) in ir_function.local_variables.iter() { let id = self.generate_id(); + if self.flags.contains(WriterFlags::DEBUG) { + if let Some(ref name) = variable.name { + self.debugs + .push(super::instructions::instruction_name(id, name)); + } + } + let init_word = variable .init .map(|constant| self.get_constant_id(constant, ir_module)) @@ -589,6 +596,13 @@ impl Writer { let ty = &arena[handle]; let id = self.generate_id(); + if self.flags.contains(WriterFlags::DEBUG) { + if let Some(ref name) = ty.name { + self.debugs + .push(super::instructions::instruction_name(id, name)); + } + } + let instruction = match ty.inner { crate::TypeInner::Scalar { kind, width } => { self.lookup_type @@ -714,6 +728,17 @@ impl Writer { None => layout.size, }; + if self.flags.contains(WriterFlags::DEBUG) { + if let Some(ref name) = member.name { + self.debugs + .push(super::instructions::instruction_member_name( + id, + index as u32, + name, + )); + } + } + if let crate::TypeInner::Matrix { columns, rows: _, @@ -886,7 +911,7 @@ impl Writer { if self.flags.contains(WriterFlags::DEBUG) { if let Some(ref name) = global_variable.name { self.debugs - .push(super::instructions::instruction_name(id, name.as_str())); + .push(super::instructions::instruction_name(id, name)); } }