/*! Frontend for [WGSL][wgsl] (WebGPU Shading Language). [wgsl]: https://gpuweb.github.io/gpuweb/wgsl.html */ mod error; mod index; mod lower; mod parse; #[cfg(test)] mod tests; mod to_wgsl; use crate::front::wgsl::error::Error; use crate::front::wgsl::parse::Parser; use thiserror::Error; pub use crate::front::wgsl::error::ParseError; use crate::front::wgsl::lower::Lowerer; use crate::Scalar; pub struct Frontend { parser: Parser, } impl Frontend { pub const fn new() -> Self { Self { parser: Parser::new(), } } pub fn parse(&mut self, source: &str) -> Result { self.inner(source).map_err(|x| x.as_parse_error(source)) } fn inner<'a>(&mut self, source: &'a str) -> Result> { let tu = self.parser.parse(source)?; let index = index::Index::generate(&tu)?; let module = Lowerer::new(&index).lower(&tu)?; Ok(module) } } pub fn parse_str(source: &str) -> Result { Frontend::new().parse(source) }