dpscript/ir/validator/checker/
arg.rs1use super::IRChecker;
2use crate::{IRArgumentOperation, IRCheckerContext, IRNode, Result, UnsourcedValidatorError};
3
4impl IRChecker for IRArgumentOperation {
5 fn check(&mut self, cx: &mut IRCheckerContext) -> Result<()> {
6 match self {
7 Self::Set(it) => match *it.value.clone() {
8 IRNode::Literal(_) => Ok(()),
9
10 IRNode::Reference(it) => {
11 let refs = cx.get_refs();
12
13 if !refs.contains_key(&it) {
14 return Err(UnsourcedValidatorError {
15 err: format!("Cannot find reference: {}", it),
16 }
17 .into());
18 }
19
20 Ok(())
21 }
22
23 other => Err(UnsourcedValidatorError {
24 err: format!("Cannot set a {} as an argument value!", other),
25 }
26 .into()),
27 },
28
29 Self::Get(it) => {
30 let refs = cx.get_refs();
31
32 if !refs.contains_key(&it.var) {
33 return Err(UnsourcedValidatorError {
34 err: format!("Cannot find reference: {}", it.var),
35 }
36 .into());
37 }
38
39 Ok(())
40 }
41
42 Self::Clear => Ok(()),
43 }
44 }
45}