sway_core/language/
asm.rs1use serde::{Deserialize, Serialize};
2use std::hash::{Hash, Hasher};
3use sway_types::{BaseIdent, Ident, Span};
4
5#[derive(Debug, Clone, Eq, Serialize, Deserialize)]
6pub struct AsmOp {
7 pub(crate) op_name: Ident,
8 pub(crate) op_args: Vec<Ident>,
9 pub(crate) span: Span,
10 pub(crate) immediate: Option<Ident>,
11}
12
13impl AsmOp {
14 pub fn retd(ptr: BaseIdent, len: BaseIdent) -> Self {
15 AsmOp {
16 op_name: Ident::new_no_span("retd".to_string()),
17 op_args: vec![ptr, len],
18 span: Span::dummy(),
19 immediate: None,
20 }
21 }
22}
23
24impl Hash for AsmOp {
25 fn hash<H: Hasher>(&self, state: &mut H) {
26 self.op_name.hash(state);
27 self.op_args.hash(state);
28 if let Some(immediate) = self.immediate.clone() {
29 immediate.hash(state);
30 }
31 }
32}
33
34impl PartialEq for AsmOp {
35 fn eq(&self, other: &Self) -> bool {
36 self.op_name == other.op_name
37 && self.op_args == other.op_args
38 && if let (Some(l), Some(r)) = (self.immediate.clone(), other.immediate.clone()) {
39 l == r
40 } else {
41 true
42 }
43 }
44}
45
46#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
47pub struct AsmRegister {
48 pub(crate) name: String,
49}
50
51impl From<AsmRegister> for String {
52 fn from(register: AsmRegister) -> String {
53 register.name
54 }
55}