Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/lib.rs')
-rw-r--r--crates/hir/src/lib.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs
index 81d6466c2f..3b8b901fa1 100644
--- a/crates/hir/src/lib.rs
+++ b/crates/hir/src/lib.rs
@@ -43,7 +43,7 @@ use hir_def::{
body::{BodyDiagnostic, SyntheticSyntax},
data::adt::VariantData,
generics::{LifetimeParamData, TypeOrConstParamData, TypeParamProvenance},
- hir::{BindingAnnotation, BindingId, ExprOrPatId, LabelId, Pat},
+ hir::{BindingAnnotation, BindingId, ExprId, ExprOrPatId, LabelId, Pat},
item_tree::{AttrOwner, FieldParent, ItemTreeFieldId, ItemTreeNode},
lang_item::LangItemTarget,
layout::{self, ReprOptions, TargetDataLayout},
@@ -5246,6 +5246,26 @@ impl Type {
}
}
+#[derive(Debug, PartialEq, Eq, Copy, Clone, Hash)]
+pub struct InlineAsmOperand {
+ owner: DefWithBodyId,
+ expr: ExprId,
+ index: usize,
+}
+
+impl InlineAsmOperand {
+ pub fn parent(self, _db: &dyn HirDatabase) -> DefWithBody {
+ self.owner.into()
+ }
+
+ pub fn name(&self, db: &dyn HirDatabase) -> Option<Name> {
+ match &db.body(self.owner)[self.expr] {
+ hir_def::hir::Expr::InlineAsm(e) => e.operands.get(self.index)?.0.clone(),
+ _ => None,
+ }
+ }
+}
+
// FIXME: Document this
#[derive(Debug)]
pub struct Callable {