--- a/bindings/jsonnet/src/lib.rs +++ b/bindings/jsonnet/src/lib.rs @@ -1,5 +1,3 @@ -#![feature(custom_inner_attributes)] - pub mod import; pub mod interop; pub mod val_extract; --- a/crates/jrsonnet-evaluator/Cargo.toml +++ b/crates/jrsonnet-evaluator/Cargo.toml @@ -20,6 +20,9 @@ # Rustc-like trace visualization explaining-traces = ["annotate-snippets"] +# Unlocks extra features, but works only on unstable +unstable = [] + [dependencies] jrsonnet-parser = { path = "../jrsonnet-parser", version = "1.0.0" } jrsonnet-stdlib = { path = "../jrsonnet-stdlib", version = "1.0.0" } --- a/crates/jrsonnet-evaluator/src/ctx.rs +++ b/crates/jrsonnet-evaluator/src/ctx.rs @@ -2,12 +2,7 @@ error::Error::*, future_wrapper, map::LayeredHashMap, rc_fn_helper, resolved_lazy_val, LazyBinding, LazyVal, ObjValue, Result, Val, }; -use std::{ - cell::RefCell, - collections::HashMap, - fmt::Debug, - rc::{Rc, Weak}, -}; +use std::{cell::RefCell, collections::HashMap, fmt::Debug, rc::Rc}; rc_fn_helper!( ContextCreator, @@ -138,6 +133,7 @@ } Ok(self.extend(new, new_dollar, this, super_obj)) } + #[cfg(feature = "unstable")] pub fn into_weak(self) -> WeakContext { WeakContext(Rc::downgrade(&self.0)) } @@ -155,13 +151,16 @@ } } +#[cfg(feature = "unstable")] #[derive(Debug, Clone)] -pub struct WeakContext(Weak); +pub struct WeakContext(std::rc::Weak); +#[cfg(feature = "unstable")] impl WeakContext { pub fn upgrade(&self) -> Context { Context(self.0.upgrade().expect("context is removed")) } } +#[cfg(feature = "unstable")] impl PartialEq for WeakContext { fn eq(&self, other: &Self) -> bool { self.0.ptr_eq(&other.0) --- a/crates/jrsonnet-evaluator/src/evaluate.rs +++ b/crates/jrsonnet-evaluator/src/evaluate.rs @@ -390,10 +390,16 @@ /// Extracts code block and disables inlining for them /// Fixes WASM to java bytecode compilation failing because of very large method +#[cfg(feature = "unstable")] +macro_rules! noinline { + ($e:expr) => { + (#![inline(never)] move || $e)() + }; +} +#[cfg(not(feature = "unstable"))] macro_rules! noinline { ($e:expr) => { - (#[inline(never)] - move || $e)() + (move || $e)() }; } --- a/crates/jrsonnet-evaluator/src/lib.rs +++ b/crates/jrsonnet-evaluator/src/lib.rs @@ -1,12 +1,6 @@ -#![feature(box_syntax, box_patterns)] -#![feature(type_alias_impl_trait)] -#![feature(debug_non_exhaustive)] -#![feature(test)] -#![feature(stmt_expr_attributes)] +#![cfg_attr(feature = "unstable", feature(stmt_expr_attributes))] #![allow(macro_expanded_macro_exports_accessed_by_absolute_paths)] -extern crate test; - mod builtin; mod ctx; mod dynamic; @@ -820,8 +814,6 @@ "# ); } - - use test::Bencher; // This test is commented out by default, because of huge compilation slowdown // #[bench] @@ -836,6 +828,7 @@ // }) // } + /* #[bench] fn bench_serialize(b: &mut Bencher) { b.iter(|| { @@ -859,6 +852,7 @@ ) }) } + */ #[test] fn equality() { --- a/crates/jrsonnet-evaluator/src/obj.rs +++ b/crates/jrsonnet-evaluator/src/obj.rs @@ -35,7 +35,14 @@ for (name, member) in self.0.this_entries.iter() { debug.field(name, member); } - debug.finish_non_exhaustive() + #[cfg(feature = "unstable")] + { + debug.finish_non_exhaustive() + } + #[cfg(not(feature = "unstable"))] + { + debug.finish() + } } } --- a/crates/jrsonnet-parser/src/lib.rs +++ b/crates/jrsonnet-parser/src/lib.rs @@ -1,8 +1,3 @@ -#![feature(box_syntax)] -#![feature(test)] - -extern crate test; - use peg::parser; use std::{path::PathBuf, rc::Rc}; mod expr; @@ -581,11 +576,11 @@ parse!(jrsonnet_stdlib::STDLIB_STR); } - use test::Bencher; - // From source code + /* #[bench] fn bench_parse_peg(b: &mut Bencher) { b.iter(|| parse!(jrsonnet_stdlib::STDLIB_STR)) } + */ }