dpscript/ir/validator/checker/
literal.rs1use 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}