difftreelog
refactor(libjsonnet) move to split stdlib
in: master
5 files changed
bindings/jsonnet/Cargo.tomldiffbeforeafterboth--- a/bindings/jsonnet/Cargo.toml
+++ b/bindings/jsonnet/Cargo.toml
@@ -10,6 +10,7 @@
[dependencies]
jrsonnet-evaluator = { path = "../../crates/jrsonnet-evaluator", version = "0.4.2" }
jrsonnet-parser = { path = "../../crates/jrsonnet-parser", version = "0.4.2" }
+jrsonnet-stdlib = { path = "../../crates/jrsonnet-stdlib", version = "0.4.2" }
jrsonnet-gcmodule = { version = "0.3.4" }
[lib]
bindings/jsonnet/src/lib.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/lib.rs
+++ b/bindings/jsonnet/src/lib.rs
@@ -31,8 +31,9 @@
#[no_mangle]
pub extern "C" fn jsonnet_make() -> *mut State {
let state = State::default();
- state.with_stdlib();
state.settings_mut().import_resolver = Box::new(NativeImportResolver::default());
+ state.settings_mut().context_initializer =
+ Box::new(jrsonnet_stdlib::ContextInitializer::new(state.clone()));
Box::into_raw(Box::new(state))
}
@@ -40,7 +41,7 @@
#[no_mangle]
#[allow(clippy::boxed_local)]
pub unsafe extern "C" fn jsonnet_destroy(vm: *mut State) {
- Box::from_raw(vm);
+ drop(Box::from_raw(vm));
}
#[no_mangle]
@@ -92,7 +93,7 @@
#[no_mangle]
#[allow(clippy::boxed_local)]
pub unsafe extern "C" fn jsonnet_json_destroy(_vm: &State, v: *mut Val) {
- Box::from_raw(v);
+ drop(Box::from_raw(v));
}
#[no_mangle]
bindings/jsonnet/src/native.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/native.rs
+++ b/bindings/jsonnet/src/native.rs
@@ -73,12 +73,17 @@
raw_params = raw_params.offset(1);
}
- vm.add_native(
- name,
- #[allow(deprecated)]
- Cc::new(tb!(NativeCallback::new(
- params,
- tb!(JsonnetNativeCallbackHandler { ctx, cb }),
- ))),
- )
+ let any_resolver = vm.context_initializer();
+ any_resolver
+ .as_any()
+ .downcast_ref::<jrsonnet_stdlib::ContextInitializer>()
+ .expect("only stdlib context initializer supported")
+ .add_native(
+ name,
+ #[allow(deprecated)]
+ Cc::new(tb!(NativeCallback::new(
+ params,
+ tb!(JsonnetNativeCallbackHandler { ctx, cb }),
+ ))),
+ )
}
bindings/jsonnet/src/val_extract.rsdiffbeforeafterboth1//! Extract values from VM23use std::{4 ffi::CString,5 os::raw::{c_char, c_double, c_int},6};78use jrsonnet_evaluator::{State, Val};910#[no_mangle]11pub extern "C" fn jsonnet_json_extract_string(_vm: &State, v: &Val) -> *mut c_char {12 match v {13 Val::Str(s) => CString::new(&*s as &str).unwrap().into_raw(),14 _ => std::ptr::null_mut(),15 }16}17#[no_mangle]18pub extern "C" fn jsonnet_json_extract_number(_vm: &State, v: &Val, out: &mut c_double) -> c_int {19 match v {20 Val::Num(n) => {21 *out = *n;22 123 }24 _ => 0,25 }26}27#[no_mangle]28pub extern "C" fn jsonnet_json_extract_bool(_vm: &State, v: &Val) -> c_int {29 match v {30 Val::Bool(false) => 0,31 Val::Bool(true) => 1,32 _ => 2,33 }34}35#[no_mangle]36pub extern "C" fn jsonnet_json_extract_null(_vm: &State, v: &Val) -> c_int {37 match v {38 Val::Null => 1,39 _ => 0,40 }41}1//! Extract values from VM23use std::{4 ffi::CString,5 os::raw::{c_char, c_double, c_int},6};78use jrsonnet_evaluator::{State, Val};910#[no_mangle]11pub extern "C" fn jsonnet_json_extract_string(_vm: &State, v: &Val) -> *mut c_char {12 match v {13 Val::Str(s) => CString::new(s as &str).unwrap().into_raw(),14 _ => std::ptr::null_mut(),15 }16}17#[no_mangle]18pub extern "C" fn jsonnet_json_extract_number(_vm: &State, v: &Val, out: &mut c_double) -> c_int {19 match v {20 Val::Num(n) => {21 *out = *n;22 123 }24 _ => 0,25 }26}27#[no_mangle]28pub extern "C" fn jsonnet_json_extract_bool(_vm: &State, v: &Val) -> c_int {29 match v {30 Val::Bool(false) => 0,31 Val::Bool(true) => 1,32 _ => 2,33 }34}35#[no_mangle]36pub extern "C" fn jsonnet_json_extract_null(_vm: &State, v: &Val) -> c_int {37 match v {38 Val::Null => 1,39 _ => 0,40 }41}bindings/jsonnet/src/vars_tlas.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/vars_tlas.rs
+++ b/bindings/jsonnet/src/vars_tlas.rs
@@ -9,10 +9,16 @@
pub unsafe extern "C" fn jsonnet_ext_var(vm: &State, name: *const c_char, value: *const c_char) {
let name = CStr::from_ptr(name);
let value = CStr::from_ptr(value);
- vm.add_ext_str(
- name.to_str().unwrap().into(),
- value.to_str().unwrap().into(),
- )
+
+ let any_resolver = vm.context_initializer();
+ any_resolver
+ .as_any()
+ .downcast_ref::<jrsonnet_stdlib::ContextInitializer>()
+ .expect("only stdlib context initializer supported")
+ .add_ext_str(
+ name.to_str().unwrap().into(),
+ value.to_str().unwrap().into(),
+ )
}
/// # Safety
@@ -20,7 +26,13 @@
pub unsafe extern "C" fn jsonnet_ext_code(vm: &State, name: *const c_char, value: *const c_char) {
let name = CStr::from_ptr(name);
let value = CStr::from_ptr(value);
- vm.add_ext_code(name.to_str().unwrap(), value.to_str().unwrap().into())
+
+ let any_resolver = vm.context_initializer();
+ any_resolver
+ .as_any()
+ .downcast_ref::<jrsonnet_stdlib::ContextInitializer>()
+ .expect("only stdlib context initializer supported")
+ .add_ext_code(name.to_str().unwrap(), value.to_str().unwrap().into())
.unwrap()
}
/// # Safety