--- a/crates/jrsonnet-evaluator/src/lib.rs +++ b/crates/jrsonnet-evaluator/src/lib.rs @@ -64,10 +64,11 @@ pub(crate) fn parse_jsonnet(code: &str, source: Source) -> Result { #[cfg(feature = "peg-parser")] { + use std::sync::LazyLock; static USE_LEGACY_PARSER: LazyLock = LazyLock::new(|| std::env::var_os("JRSONNET_LEGACY_PARSER").is_some()); - if USE_LEGACY_PARSER { + if *USE_LEGACY_PARSER { return parse_peg(code, source); } } --- a/crates/jrsonnet-peg-parser/src/lib.rs +++ b/crates/jrsonnet-peg-parser/src/lib.rs @@ -100,7 +100,7 @@ ) {(rest, end)} / comma()? {(None, Vec::new())} ) _ "]" {? - #[cfg(feature = "exp-destruct")] return Ok(expr::Destruct::Array { + #[cfg(feature = "exp-destruct")] return Ok(Destruct::Array { start, rest: rest.0, end: rest.1, @@ -109,13 +109,13 @@ } pub rule destruct_object(s: &ParserSettings) -> Destruct = "{" _ - fields:(name:id() into:(_ ":" _ into:destruct(s) {into})? default:(_ "=" _ v:expr(s) {v})? {(name, into, default.map(Rc::new))})**comma() + fields:(name:id() into:(_ ":" _ into:destruct(s) {into})? default:(_ "=" _ v:spanned(, s) {v})? {(name, into, default.map(Rc::new))})**comma() rest:( comma() rest:destruct_rest()? {rest} / comma()? {None} ) _ "}" {? - #[cfg(feature = "exp-destruct")] return Ok(expr::Destruct::Object { + #[cfg(feature = "exp-destruct")] return Ok(Destruct::Object { fields, rest, }); @@ -124,7 +124,7 @@ pub rule destruct(s: &ParserSettings) -> Destruct = v:id() {Destruct::Full(v)} / "?" {? - #[cfg(feature = "exp-destruct")] return Ok(expr::Destruct::Skip); + #[cfg(feature = "exp-destruct")] return Ok(Destruct::Skip); #[cfg(not(feature = "exp-destruct"))] Err("!!!experimental destructuring was not enabled") } / arr:destruct_array(s) {arr}