ptx_parser/parser/instruction/
call.rs1#![allow(unused)]
17
18use crate::lexer::PtxToken;
19use crate::parser::{PtxParseError, PtxParser, PtxTokenStream, Span};
20use crate::r#type::common::*;
21
22pub mod section_0 {
23 use super::*;
24 use crate::r#type::instruction::call::section_0::*;
25
26 impl PtxParser for CallUni {
27 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
28 stream.expect_string("call")?;
29 let saved_pos = stream.position();
30 let uni = stream.expect_string(".uni").is_ok();
31 if !uni {
32 stream.set_position(saved_pos);
33 }
34 stream.expect_complete()?;
35 stream.expect(&PtxToken::LParen)?;
36 let ret_param = GeneralOperand::parse(stream)?;
37 stream.expect(&PtxToken::RParen)?;
38 stream.expect_complete()?;
39 stream.expect(&PtxToken::Comma)?;
40 let func = GeneralOperand::parse(stream)?;
41 stream.expect_complete()?;
42 stream.expect(&PtxToken::Comma)?;
43 stream.expect(&PtxToken::LParen)?;
44 let mut param_list = Vec::new();
45 loop {
47 let saved_pos = stream.position();
49 match GeneralOperand::parse(stream) {
50 Ok(operand) => {
51 param_list.push(operand);
52 if stream.expect(&PtxToken::Comma).is_err() {
54 break;
55 }
56 }
57 Err(_) => {
58 stream.set_position(saved_pos);
59 break;
60 }
61 }
62 }
63 stream.expect(&PtxToken::RParen)?;
64 stream.expect_complete()?;
65 stream.expect_complete()?;
66 stream.expect(&PtxToken::Semicolon)?;
67 Ok(CallUni {
68 uni,
69 ret_param,
70 func,
71 param_list,
72 })
73 }
74 }
75
76 impl PtxParser for CallUni1 {
77 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
78 stream.expect_string("call")?;
79 let saved_pos = stream.position();
80 let uni = stream.expect_string(".uni").is_ok();
81 if !uni {
82 stream.set_position(saved_pos);
83 }
84 stream.expect_complete()?;
85 let func = GeneralOperand::parse(stream)?;
86 stream.expect_complete()?;
87 stream.expect(&PtxToken::Comma)?;
88 stream.expect(&PtxToken::LParen)?;
89 let mut param_list = Vec::new();
90 loop {
92 let saved_pos = stream.position();
94 match GeneralOperand::parse(stream) {
95 Ok(operand) => {
96 param_list.push(operand);
97 if stream.expect(&PtxToken::Comma).is_err() {
99 break;
100 }
101 }
102 Err(_) => {
103 stream.set_position(saved_pos);
104 break;
105 }
106 }
107 }
108 stream.expect(&PtxToken::RParen)?;
109 stream.expect_complete()?;
110 stream.expect_complete()?;
111 stream.expect(&PtxToken::Semicolon)?;
112 Ok(CallUni1 {
113 uni,
114 func,
115 param_list,
116 })
117 }
118 }
119
120 impl PtxParser for CallUni2 {
121 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
122 stream.expect_string("call")?;
123 let saved_pos = stream.position();
124 let uni = stream.expect_string(".uni").is_ok();
125 if !uni {
126 stream.set_position(saved_pos);
127 }
128 stream.expect_complete()?;
129 let func = GeneralOperand::parse(stream)?;
130 stream.expect_complete()?;
131 stream.expect_complete()?;
132 stream.expect(&PtxToken::Semicolon)?;
133 Ok(CallUni2 { uni, func })
134 }
135 }
136
137 impl PtxParser for CallUni3 {
138 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
139 stream.expect_string("call")?;
140 let saved_pos = stream.position();
141 let uni = stream.expect_string(".uni").is_ok();
142 if !uni {
143 stream.set_position(saved_pos);
144 }
145 stream.expect_complete()?;
146 stream.expect(&PtxToken::LParen)?;
147 let ret_param = GeneralOperand::parse(stream)?;
148 stream.expect(&PtxToken::RParen)?;
149 stream.expect_complete()?;
150 stream.expect(&PtxToken::Comma)?;
151 let fptr = GeneralOperand::parse(stream)?;
152 stream.expect_complete()?;
153 stream.expect(&PtxToken::Comma)?;
154 stream.expect(&PtxToken::LParen)?;
155 let mut param_list = Vec::new();
156 loop {
158 let saved_pos = stream.position();
160 match GeneralOperand::parse(stream) {
161 Ok(operand) => {
162 param_list.push(operand);
163 if stream.expect(&PtxToken::Comma).is_err() {
165 break;
166 }
167 }
168 Err(_) => {
169 stream.set_position(saved_pos);
170 break;
171 }
172 }
173 }
174 stream.expect(&PtxToken::RParen)?;
175 stream.expect_complete()?;
176 stream.expect(&PtxToken::Comma)?;
177 let flist = GeneralOperand::parse(stream)?;
178 stream.expect_complete()?;
179 stream.expect_complete()?;
180 stream.expect(&PtxToken::Semicolon)?;
181 Ok(CallUni3 {
182 uni,
183 ret_param,
184 fptr,
185 param_list,
186 flist,
187 })
188 }
189 }
190
191 impl PtxParser for CallUni4 {
192 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
193 stream.expect_string("call")?;
194 let saved_pos = stream.position();
195 let uni = stream.expect_string(".uni").is_ok();
196 if !uni {
197 stream.set_position(saved_pos);
198 }
199 stream.expect_complete()?;
200 let fptr = GeneralOperand::parse(stream)?;
201 stream.expect_complete()?;
202 stream.expect(&PtxToken::Comma)?;
203 stream.expect(&PtxToken::LParen)?;
204 let mut param_list = Vec::new();
205 loop {
207 let saved_pos = stream.position();
209 match GeneralOperand::parse(stream) {
210 Ok(operand) => {
211 param_list.push(operand);
212 if stream.expect(&PtxToken::Comma).is_err() {
214 break;
215 }
216 }
217 Err(_) => {
218 stream.set_position(saved_pos);
219 break;
220 }
221 }
222 }
223 stream.expect(&PtxToken::RParen)?;
224 stream.expect_complete()?;
225 stream.expect(&PtxToken::Comma)?;
226 let flist = GeneralOperand::parse(stream)?;
227 stream.expect_complete()?;
228 stream.expect_complete()?;
229 stream.expect(&PtxToken::Semicolon)?;
230 Ok(CallUni4 {
231 uni,
232 fptr,
233 param_list,
234 flist,
235 })
236 }
237 }
238
239 impl PtxParser for CallUni5 {
240 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
241 stream.expect_string("call")?;
242 let saved_pos = stream.position();
243 let uni = stream.expect_string(".uni").is_ok();
244 if !uni {
245 stream.set_position(saved_pos);
246 }
247 stream.expect_complete()?;
248 let fptr = GeneralOperand::parse(stream)?;
249 stream.expect_complete()?;
250 stream.expect(&PtxToken::Comma)?;
251 let flist = GeneralOperand::parse(stream)?;
252 stream.expect_complete()?;
253 stream.expect_complete()?;
254 stream.expect(&PtxToken::Semicolon)?;
255 Ok(CallUni5 { uni, fptr, flist })
256 }
257 }
258
259 impl PtxParser for CallUni6 {
260 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
261 stream.expect_string("call")?;
262 let saved_pos = stream.position();
263 let uni = stream.expect_string(".uni").is_ok();
264 if !uni {
265 stream.set_position(saved_pos);
266 }
267 stream.expect_complete()?;
268 stream.expect(&PtxToken::LParen)?;
269 let ret_param = GeneralOperand::parse(stream)?;
270 stream.expect(&PtxToken::RParen)?;
271 stream.expect_complete()?;
272 stream.expect(&PtxToken::Comma)?;
273 let fptr = GeneralOperand::parse(stream)?;
274 stream.expect_complete()?;
275 stream.expect(&PtxToken::Comma)?;
276 stream.expect(&PtxToken::LParen)?;
277 let mut param_list = Vec::new();
278 loop {
280 let saved_pos = stream.position();
282 match GeneralOperand::parse(stream) {
283 Ok(operand) => {
284 param_list.push(operand);
285 if stream.expect(&PtxToken::Comma).is_err() {
287 break;
288 }
289 }
290 Err(_) => {
291 stream.set_position(saved_pos);
292 break;
293 }
294 }
295 }
296 stream.expect(&PtxToken::RParen)?;
297 stream.expect_complete()?;
298 stream.expect(&PtxToken::Comma)?;
299 let fproto = GeneralOperand::parse(stream)?;
300 stream.expect_complete()?;
301 stream.expect_complete()?;
302 stream.expect(&PtxToken::Semicolon)?;
303 Ok(CallUni6 {
304 uni,
305 ret_param,
306 fptr,
307 param_list,
308 fproto,
309 })
310 }
311 }
312
313 impl PtxParser for CallUni7 {
314 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
315 stream.expect_string("call")?;
316 let saved_pos = stream.position();
317 let uni = stream.expect_string(".uni").is_ok();
318 if !uni {
319 stream.set_position(saved_pos);
320 }
321 stream.expect_complete()?;
322 let fptr = GeneralOperand::parse(stream)?;
323 stream.expect_complete()?;
324 stream.expect(&PtxToken::Comma)?;
325 stream.expect(&PtxToken::LParen)?;
326 let mut param_list = Vec::new();
327 loop {
329 let saved_pos = stream.position();
331 match GeneralOperand::parse(stream) {
332 Ok(operand) => {
333 param_list.push(operand);
334 if stream.expect(&PtxToken::Comma).is_err() {
336 break;
337 }
338 }
339 Err(_) => {
340 stream.set_position(saved_pos);
341 break;
342 }
343 }
344 }
345 stream.expect(&PtxToken::RParen)?;
346 stream.expect_complete()?;
347 stream.expect(&PtxToken::Comma)?;
348 let fproto = GeneralOperand::parse(stream)?;
349 stream.expect_complete()?;
350 stream.expect_complete()?;
351 stream.expect(&PtxToken::Semicolon)?;
352 Ok(CallUni7 {
353 uni,
354 fptr,
355 param_list,
356 fproto,
357 })
358 }
359 }
360
361 impl PtxParser for CallUni8 {
362 fn parse(stream: &mut PtxTokenStream) -> Result<Self, PtxParseError> {
363 stream.expect_string("call")?;
364 let saved_pos = stream.position();
365 let uni = stream.expect_string(".uni").is_ok();
366 if !uni {
367 stream.set_position(saved_pos);
368 }
369 stream.expect_complete()?;
370 let fptr = GeneralOperand::parse(stream)?;
371 stream.expect_complete()?;
372 stream.expect(&PtxToken::Comma)?;
373 let fproto = GeneralOperand::parse(stream)?;
374 stream.expect_complete()?;
375 stream.expect_complete()?;
376 stream.expect(&PtxToken::Semicolon)?;
377 Ok(CallUni8 { uni, fptr, fproto })
378 }
379 }
380}