| 40 | where T: Write + Seek |
| 41 | { |
| 42 | pub fn arg( |
| 43 | &mut self, |
| 44 | s: S, |
| 45 | d: D, |
| 46 | this_id: NodeID, |
| 47 | parent_id: NodeID, |
| 48 | name: &Name, |
| 49 | ) -> io::Result<()> { |
| 50 | let basename = name.basename(); |
| 51 | |
| 52 | if !(s |
| 53 | .proc |
| 54 | .is_some_and(|proc| proc.args.iter().any(|arg| &arg.name == basename)) |
| 55 | || s.func |
| 56 | .is_some_and(|func| func.args.iter().any(|arg| &arg.name == basename))) |
| 57 | { |
| 58 | if basename == "tw_is_compiled" { |
| 59 | return self.arg_impl(this_id, parent_id, "is compiled?", true); |
| 60 | } |
| 61 | if basename == "tw_is_turbowarp" { |
| 62 | return self.arg_impl(this_id, parent_id, "is TurboWarp?", true); |
| 63 | } |
| 64 | if basename == "tw_is_forkphorus" { |
| 65 | return self.arg_impl(this_id, parent_id, "is forkphorus?", true); |
| 66 | } |
| 67 | d.report( |
| 68 | DiagnosticKind::UnrecognizedArgument(basename.clone()), |
| 69 | &name.span(), |
| 70 | ); |
| 71 | return Ok(()); |
| 72 | } |
| 73 | |
| 74 | let qualified_name = match name.fieldname() { |
| 75 | Some(fieldname) => qualify_struct_var_name(fieldname, basename), |
| 76 | None => basename.clone(), |
| 77 | }; |
| 78 | |
| 79 | self.arg_impl(this_id, parent_id, &qualified_name, false) |
| 80 | } |
| 81 | |
| 82 | fn arg_impl( |
| 83 | &mut self, |