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
93 .peek()
94 .map(|(_, s)| s.clone())
95 .unwrap_or(Span { start: 0, end: 0 });
96 let expected = &[
97 ".channel_data_type",
98 ".channel_order",
99 ".memory_layout",
100 ".array_size",
101 ".height",
102 ".width",
103 ".depth",
104 ];
105 let found = stream
106 .peek()
107 .map(|(t, _)| format!("{:?}", t))
108 .unwrap_or_else(|_| "<end of input>".to_string());
109 Err(crate::parser::unexpected_value(span, expected, found))
110 }
111 }
112
113 impl PtxParser for SuqQueryB32 {
114 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
115 stream.expect_string("suq")?;
116 let query = Query::parse(stream)?;
117 stream.expect_complete()?;
118 stream.expect_string(".b32")?;
119 let b32 = ();
120 stream.expect_complete()?;
121 let d = GeneralOperand::parse(stream)?;
122 stream.expect_complete()?;
123 stream.expect(&PtxToken::Comma)?;
124 let a = AddressOperand::parse(stream)?;
125 stream.expect_complete()?;
126 stream.expect_complete()?;
127 stream.expect(&PtxToken::Semicolon)?;
128 Ok(SuqQueryB32 { query, b32, d, a })
129 }
130 }
131}