ptx_parser/parser/instruction/
mapa.rs1#![allow(unused)]
16
17use crate::lexer::PtxToken;
18use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
19use crate::r#type::common::*;
20
21pub mod section_0 {
22 use super::*;
23 use crate::r#type::instruction::mapa::section_0::*;
24
25 impl PtxParser for Space {
30 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
31 {
33 let saved_pos = stream.position();
34 if stream.expect_string(".shared::cluster").is_ok() {
35 return Ok(Space::SharedCluster);
36 }
37 stream.set_position(saved_pos);
38 }
39 let span = stream
40 .peek()
41 .map(|(_, s)| s.clone())
42 .unwrap_or(Span { start: 0, end: 0 });
43 let expected = &[".shared::cluster"];
44 let found = stream
45 .peek()
46 .map(|(t, _)| format!("{:?}", t))
47 .unwrap_or_else(|_| "<end of input>".to_string());
48 Err(crate::parser::unexpected_value(span, expected, found))
49 }
50 }
51
52 impl PtxParser for Type {
53 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
54 {
56 let saved_pos = stream.position();
57 if stream.expect_string(".u32").is_ok() {
58 return Ok(Type::U32);
59 }
60 stream.set_position(saved_pos);
61 }
62 let saved_pos = stream.position();
63 {
65 let saved_pos = stream.position();
66 if stream.expect_string(".u64").is_ok() {
67 return Ok(Type::U64);
68 }
69 stream.set_position(saved_pos);
70 }
71 stream.set_position(saved_pos);
72 let span = stream
73 .peek()
74 .map(|(_, s)| s.clone())
75 .unwrap_or(Span { start: 0, end: 0 });
76 let expected = &[".u32", ".u64"];
77 let found = stream
78 .peek()
79 .map(|(t, _)| format!("{:?}", t))
80 .unwrap_or_else(|_| "<end of input>".to_string());
81 Err(crate::parser::unexpected_value(span, expected, found))
82 }
83 }
84
85 impl PtxParser for MapaSpaceType {
86 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
87 stream.expect_string("mapa")?;
88 let saved_pos = stream.position();
89 let space = match Space::parse(stream) {
90 Ok(val) => Some(val),
91 Err(_) => {
92 stream.set_position(saved_pos);
93 None
94 }
95 };
96 stream.expect_complete()?;
97 let type_ = Type::parse(stream)?;
98 stream.expect_complete()?;
99 let d = GeneralOperand::parse(stream)?;
100 stream.expect_complete()?;
101 stream.expect(&PtxToken::Comma)?;
102 let a = GeneralOperand::parse(stream)?;
103 stream.expect_complete()?;
104 stream.expect(&PtxToken::Comma)?;
105 let b = GeneralOperand::parse(stream)?;
106 stream.expect_complete()?;
107 stream.expect_complete()?;
108 stream.expect(&PtxToken::Semicolon)?;
109 Ok(MapaSpaceType {
110 space,
111 type_,
112 d,
113 a,
114 b,
115 })
116 }
117 }
118}