ptx_parser/parser/instruction/
suq.rs1#![allow(unused)]
9
10use crate::lexer::PtxToken;
11use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
12use crate::r#type::common::*;
13
14pub mod section_0 {
15 use super::*;
16 use crate::r#type::instruction::suq::section_0::*;
17
18 impl PtxParser for Query {
23 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
24 {
26 let saved_pos = stream.position();
27 if stream.expect_string(".channel_data_type").is_ok() {
28 return Ok(Query::ChannelDataType);
29 }
30 stream.set_position(saved_pos);
31 }
32 let saved_pos = stream.position();
33 {
35 let saved_pos = stream.position();
36 if stream.expect_string(".channel_order").is_ok() {
37 return Ok(Query::ChannelOrder);
38 }
39 stream.set_position(saved_pos);
40 }
41 stream.set_position(saved_pos);
42 let saved_pos = stream.position();
43 {
45 let saved_pos = stream.position();
46 if stream.expect_string(".memory_layout").is_ok() {
47 return Ok(Query::MemoryLayout);
48 }
49 stream.set_position(saved_pos);
50 }
51 stream.set_position(saved_pos);
52 let saved_pos = stream.position();
53 {
55 let saved_pos = stream.position();
56 if stream.expect_string(".array_size").is_ok() {
57 return Ok(Query::ArraySize);
58 }
59 stream.set_position(saved_pos);
60 }
61 stream.set_position(saved_pos);
62 let saved_pos = stream.position();
63 {
65 let saved_pos = stream.position();
66 if stream.expect_string(".height").is_ok() {
67 return Ok(Query::Height);
68 }
69 stream.set_position(saved_pos);
70 }
71 stream.set_position(saved_pos);
72 let saved_pos = stream.position();
73 {
75 let saved_pos = stream.position();
76 if stream.expect_string(".width").is_ok() {
77 return Ok(Query::Width);
78 }
79 stream.set_position(saved_pos);
80 }
81 stream.set_position(saved_pos);
82 let saved_pos = stream.position();
83 {
85 let saved_pos = stream.position();
86 if stream.expect_string(".depth").is_ok() {
87 return Ok(Query::Depth);
88 }
89 stream.set_position(saved_pos);
90 }
91 stream.set_position(saved_pos);
92 let span = stream.peek().map(|(_, s)| s.clone()).unwrap_or(Span { start: 0, end: 0 });
93 let expected = &[".channel_data_type", ".channel_order", ".memory_layout", ".array_size", ".height", ".width", ".depth"];
94 let found = stream.peek().map(|(t, _)| format!("{:?}", t)).unwrap_or_else(|_| "<end of input>".to_string());
95 Err(crate::parser::unexpected_value(span, expected, found))
96 }
97 }
98
99 impl PtxParser for SuqQueryB32 {
100 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
101 stream.expect_string("suq")?;
102 let query = Query::parse(stream)?;
103 stream.expect_complete()?;
104 stream.expect_string(".b32")?;
105 let b32 = ();
106 stream.expect_complete()?;
107 let d = GeneralOperand::parse(stream)?;
108 stream.expect_complete()?;
109 stream.expect(&PtxToken::Comma)?;
110 let a = AddressOperand::parse(stream)?;
111 stream.expect_complete()?;
112 stream.expect_complete()?;
113 stream.expect(&PtxToken::Semicolon)?;
114 Ok(SuqQueryB32 {
115 query,
116 b32,
117 d,
118 a,
119 })
120 }
121 }
122
123
124}
125