git.delta.rocks / jrsonnet / refs/commits / 41db4d558ad2

difftreelog

refactor(libjsonnet) move to split stdlib

Yaroslav Bolyukin2022-07-23parent: #dde7eda.patch.diff
in: master

5 files changed

modifiedbindings/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]
modifiedbindings/jsonnet/src/lib.rsdiffbeforeafterboth
31#[no_mangle]31#[no_mangle]
32pub extern "C" fn jsonnet_make() -> *mut State {32pub extern "C" fn jsonnet_make() -> *mut State {
33 let state = State::default();33 let state = State::default();
34 state.with_stdlib();
35 state.settings_mut().import_resolver = Box::new(NativeImportResolver::default());34 state.settings_mut().import_resolver = Box::new(NativeImportResolver::default());
35 state.settings_mut().context_initializer =
36 Box::new(jrsonnet_stdlib::ContextInitializer::new(state.clone()));
36 Box::into_raw(Box::new(state))37 Box::into_raw(Box::new(state))
37}38}
3839
39/// # Safety40/// # Safety
40#[no_mangle]41#[no_mangle]
41#[allow(clippy::boxed_local)]42#[allow(clippy::boxed_local)]
42pub unsafe extern "C" fn jsonnet_destroy(vm: *mut State) {43pub unsafe extern "C" fn jsonnet_destroy(vm: *mut State) {
43 Box::from_raw(vm);44 drop(Box::from_raw(vm));
44}45}
4546
46#[no_mangle]47#[no_mangle]
92#[no_mangle]93#[no_mangle]
93#[allow(clippy::boxed_local)]94#[allow(clippy::boxed_local)]
94pub unsafe extern "C" fn jsonnet_json_destroy(_vm: &State, v: *mut Val) {95pub unsafe extern "C" fn jsonnet_json_destroy(_vm: &State, v: *mut Val) {
95 Box::from_raw(v);96 drop(Box::from_raw(v));
96}97}
9798
98#[no_mangle]99#[no_mangle]
modifiedbindings/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 }),
+			))),
+		)
 }
modifiedbindings/jsonnet/src/val_extract.rsdiffbeforeafterboth
--- a/bindings/jsonnet/src/val_extract.rs
+++ b/bindings/jsonnet/src/val_extract.rs
@@ -10,7 +10,7 @@
 #[no_mangle]
 pub extern "C" fn jsonnet_json_extract_string(_vm: &State, v: &Val) -> *mut c_char {
 	match v {
-		Val::Str(s) => CString::new(&*s as &str).unwrap().into_raw(),
+		Val::Str(s) => CString::new(s as &str).unwrap().into_raw(),
 		_ => std::ptr::null_mut(),
 	}
 }
modifiedbindings/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