ptx_parser/parser/instruction/
vote_sync.rs1#![allow(unused)]
8
9use crate::lexer::PtxToken;
10use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
11use crate::r#type::common::*;
12
13pub mod section_0 {
14 use super::*;
15 use crate::r#type::instruction::vote_sync::section_0::*;
16
17 impl PtxParser for Mode {
22 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
23 {
25 let saved_pos = stream.position();
26 if stream.expect_string(".all").is_ok() {
27 return Ok(Mode::All);
28 }
29 stream.set_position(saved_pos);
30 }
31 let saved_pos = stream.position();
32 {
34 let saved_pos = stream.position();
35 if stream.expect_string(".any").is_ok() {
36 return Ok(Mode::Any);
37 }
38 stream.set_position(saved_pos);
39 }
40 stream.set_position(saved_pos);
41 let saved_pos = stream.position();
42 {
44 let saved_pos = stream.position();
45 if stream.expect_string(".uni").is_ok() {
46 return Ok(Mode::Uni);
47 }
48 stream.set_position(saved_pos);
49 }
50 stream.set_position(saved_pos);
51 let span = stream
52 .peek()
53 .map(|(_, s)| s.clone())
54 .unwrap_or(Span { start: 0, end: 0 });
55 let expected = &[".all", ".any", ".uni"];
56 let found = stream
57 .peek()
58 .map(|(t, _)| format!("{:?}", t))
59 .unwrap_or_else(|_| "<end of input>".to_string());
60 Err(crate::parser::unexpected_value(span, expected, found))
61 }
62 }
63
64 impl PtxParser for VoteSyncModePred {
65 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
66 stream.expect_string("vote")?;
67 stream.expect_string(".sync")?;
68 let sync = ();
69 stream.expect_complete()?;
70 let mode = Mode::parse(stream)?;
71 stream.expect_complete()?;
72 stream.expect_string(".pred")?;
73 let pred = ();
74 stream.expect_complete()?;
75 let d = GeneralOperand::parse(stream)?;
76 stream.expect_complete()?;
77 stream.expect(&PtxToken::Comma)?;
78 let a_op = stream
79 .consume_if(|t| matches!(t, PtxToken::Exclaim))
80 .is_some();
81 let a = GeneralOperand::parse(stream)?;
82 stream.expect_complete()?;
83 stream.expect(&PtxToken::Comma)?;
84 let membermask = GeneralOperand::parse(stream)?;
85 stream.expect_complete()?;
86 stream.expect_complete()?;
87 stream.expect(&PtxToken::Semicolon)?;
88 Ok(VoteSyncModePred {
89 sync,
90 mode,
91 pred,
92 d,
93 a_op,
94 a,
95 membermask,
96 })
97 }
98 }
99
100 impl PtxParser for VoteSyncBallotB32 {
101 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
102 stream.expect_string("vote")?;
103 stream.expect_string(".sync")?;
104 let sync = ();
105 stream.expect_complete()?;
106 stream.expect_string(".ballot")?;
107 let ballot = ();
108 stream.expect_complete()?;
109 stream.expect_string(".b32")?;
110 let b32 = ();
111 stream.expect_complete()?;
112 let d = GeneralOperand::parse(stream)?;
113 stream.expect_complete()?;
114 stream.expect(&PtxToken::Comma)?;
115 let a_op = stream
116 .consume_if(|t| matches!(t, PtxToken::Exclaim))
117 .is_some();
118 let a = GeneralOperand::parse(stream)?;
119 stream.expect_complete()?;
120 stream.expect(&PtxToken::Comma)?;
121 let membermask = GeneralOperand::parse(stream)?;
122 stream.expect_complete()?;
123 stream.expect_complete()?;
124 stream.expect(&PtxToken::Semicolon)?;
125 Ok(VoteSyncBallotB32 {
126 sync,
127 ballot,
128 b32,
129 d,
130 a_op,
131 a,
132 membermask,
133 })
134 }
135 }
136}