Skip to content

Commit e68ce95

Browse files
authored
Merge pull request bevyengine#32 from robtfm/sub-after-preprocess
substitute after preprocessing
2 parents 8875c76 + eebe5f0 commit e68ce95

File tree

8 files changed

+227
-71
lines changed

8 files changed

+227
-71
lines changed

src/compose/error.rs

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::ops::Range;
1+
use std::{borrow::Cow, collections::HashMap, ops::Range};
22

33
use codespan_reporting::{
44
diagnostic::{Diagnostic, Label},
@@ -8,12 +8,19 @@ use codespan_reporting::{
88
use thiserror::Error;
99
use tracing::trace;
1010

11-
use super::Composer;
11+
use super::{
12+
preprocess::{PreprocessOutput, PreprocessorMetaData},
13+
Composer, ShaderDefValue,
14+
};
1215
use crate::{compose::SPAN_SHIFT, redirect::RedirectError};
1316

1417
#[derive(Debug)]
1518
pub enum ErrSource {
16-
Module(String, usize),
19+
Module {
20+
name: String,
21+
offset: usize,
22+
defs: HashMap<String, ShaderDefValue>,
23+
},
1724
Constructing {
1825
path: String,
1926
source: String,
@@ -24,21 +31,38 @@ pub enum ErrSource {
2431
impl ErrSource {
2532
pub fn path<'a>(&'a self, composer: &'a Composer) -> &'a String {
2633
match self {
27-
ErrSource::Module(c, _) => &composer.module_sets.get(c).unwrap().file_path,
34+
ErrSource::Module { name, .. } => &composer.module_sets.get(name).unwrap().file_path,
2835
ErrSource::Constructing { path, .. } => path,
2936
}
3037
}
3138

32-
pub fn source<'a>(&'a self, composer: &'a Composer) -> &'a String {
39+
pub fn source<'a>(&'a self, composer: &'a Composer) -> Cow<'a, String> {
3340
match self {
34-
ErrSource::Module(c, _) => &composer.module_sets.get(c).unwrap().substituted_source,
35-
ErrSource::Constructing { source, .. } => source,
41+
ErrSource::Module { name, defs, .. } => {
42+
let raw_source = &composer.module_sets.get(name).unwrap().sanitized_source;
43+
let Ok(PreprocessOutput {
44+
preprocessed_source: source,
45+
meta: PreprocessorMetaData { imports, .. },
46+
}) = composer
47+
.preprocessor
48+
.preprocess(raw_source, defs, composer.validate)
49+
else {
50+
return Default::default()
51+
};
52+
53+
let Ok(source) = composer
54+
.substitute_shader_string(&source, &imports)
55+
else { return Default::default() };
56+
57+
Cow::Owned(source)
58+
}
59+
ErrSource::Constructing { source, .. } => Cow::Borrowed(source),
3660
}
3761
}
3862

3963
pub fn offset(&self) -> usize {
4064
match self {
41-
ErrSource::Module(_, offset) | ErrSource::Constructing { offset, .. } => *offset,
65+
ErrSource::Module { offset, .. } | ErrSource::Constructing { offset, .. } => *offset,
4266
}
4367
}
4468
}
@@ -159,7 +183,7 @@ impl ComposerError {
159183
..((rng.end & ((1 << SPAN_SHIFT) - 1)).saturating_sub(source_offset))
160184
};
161185

162-
let files = SimpleFile::new(path, source);
186+
let files = SimpleFile::new(path, source.as_str());
163187
let config = term::Config::default();
164188
#[cfg(test)]
165189
let mut writer = term::termcolor::NoColor::new(Vec::new());

0 commit comments

Comments
 (0)