dpscript/ir/validator/checker/
literal.rs

1use super::IRChecker;
2use crate::{IRCheckerContext, IRLiteral, Result, UnsourcedValidatorError};
3
4impl IRChecker for IRLiteral {
5    fn check(&mut self, cx: &mut IRCheckerContext) -> Result<()> {
6        match self {
7            Self::PathOf(it) => {
8                let refs = cx.get_refs();
9
10                if let Some(it) = refs.get(it) {
11                    *self = IRLiteral::String(it.path.clone());
12                } else {
13                    return Err(UnsourcedValidatorError {
14                        err: format!("Cannot find reference: {}", it),
15                    }
16                    .into());
17                }
18
19                Ok(())
20            }
21
22            Self::StoreOf(it) => {
23                let refs = cx.get_refs();
24
25                if let Some(it) = refs.get(it) {
26                    *self = IRLiteral::String(it.store.clone());
27                } else {
28                    return Err(UnsourcedValidatorError {
29                        err: format!("Cannot find reference: {}", it),
30                    }
31                    .into());
32                }
33
34                Ok(())
35            }
36
37            Self::String(_) => Ok(()),
38        }
39    }
40}