ptx_parser/parser/instruction/
testp.rs1#![allow(unused)]
10
11use crate::lexer::PtxToken;
12use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
13use crate::r#type::common::*;
14
15pub mod section_0 {
16 use super::*;
17 use crate::r#type::instruction::testp::section_0::*;
18
19 impl PtxParser for Op {
24 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
25 {
27 let saved_pos = stream.position();
28 if stream.expect_string(".notanumber").is_ok() {
29 return Ok(Op::Notanumber);
30 }
31 stream.set_position(saved_pos);
32 }
33 let saved_pos = stream.position();
34 {
36 let saved_pos = stream.position();
37 if stream.expect_string(".subnormal").is_ok() {
38 return Ok(Op::Subnormal);
39 }
40 stream.set_position(saved_pos);
41 }
42 stream.set_position(saved_pos);
43 let saved_pos = stream.position();
44 {
46 let saved_pos = stream.position();
47 if stream.expect_string(".infinite").is_ok() {
48 return Ok(Op::Infinite);
49 }
50 stream.set_position(saved_pos);
51 }
52 stream.set_position(saved_pos);
53 let saved_pos = stream.position();
54 {
56 let saved_pos = stream.position();
57 if stream.expect_string(".finite").is_ok() {
58 return Ok(Op::Finite);
59 }
60 stream.set_position(saved_pos);
61 }
62 stream.set_position(saved_pos);
63 let saved_pos = stream.position();
64 {
66 let saved_pos = stream.position();
67 if stream.expect_string(".number").is_ok() {
68 return Ok(Op::Number);
69 }
70 stream.set_position(saved_pos);
71 }
72 stream.set_position(saved_pos);
73 let saved_pos = stream.position();
74 {
76 let saved_pos = stream.position();
77 if stream.expect_string(".normal").is_ok() {
78 return Ok(Op::Normal);
79 }
80 stream.set_position(saved_pos);
81 }
82 stream.set_position(saved_pos);
83 let span = stream
84 .peek()
85 .map(|(_, s)| s.clone())
86 .unwrap_or(Span { start: 0, end: 0 });
87 let expected = &[
88 ".notanumber",
89 ".subnormal",
90 ".infinite",
91 ".finite",
92 ".number",
93 ".normal",
94 ];
95 let found = stream
96 .peek()
97 .map(|(t, _)| format!("{:?}", t))
98 .unwrap_or_else(|_| "<end of input>".to_string());
99 Err(crate::parser::unexpected_value(span, expected, found))
100 }
101 }
102
103 impl PtxParser for Type {
104 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
105 {
107 let saved_pos = stream.position();
108 if stream.expect_string(".f32").is_ok() {
109 return Ok(Type::F32);
110 }
111 stream.set_position(saved_pos);
112 }
113 let saved_pos = stream.position();
114 {
116 let saved_pos = stream.position();
117 if stream.expect_string(".f64").is_ok() {
118 return Ok(Type::F64);
119 }
120 stream.set_position(saved_pos);
121 }
122 stream.set_position(saved_pos);
123 let span = stream
124 .peek()
125 .map(|(_, s)| s.clone())
126 .unwrap_or(Span { start: 0, end: 0 });
127 let expected = &[".f32", ".f64"];
128 let found = stream
129 .peek()
130 .map(|(t, _)| format!("{:?}", t))
131 .unwrap_or_else(|_| "<end of input>".to_string());
132 Err(crate::parser::unexpected_value(span, expected, found))
133 }
134 }
135
136 impl PtxParser for TestpOpType {
137 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
138 stream.expect_string("testp")?;
139 let op = Op::parse(stream)?;
140 stream.expect_complete()?;
141 let type_ = Type::parse(stream)?;
142 stream.expect_complete()?;
143 let p = GeneralOperand::parse(stream)?;
144 stream.expect_complete()?;
145 stream.expect(&PtxToken::Comma)?;
146 let a = GeneralOperand::parse(stream)?;
147 stream.expect_complete()?;
148 stream.expect_complete()?;
149 stream.expect(&PtxToken::Semicolon)?;
150 Ok(TestpOpType { op, type_, p, a })
151 }
152 }
153}