git.delta.rocks / jrsonnet / refs/commits / 0f5b614a0779

difftreelog

refactor drop FuncVal::Thunk

pqmwxknmYaroslav Bolyukin2026-04-04parent: #8a16e5a.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-evaluator/src/function/mod.rsdiffbeforeafterboth
--- a/crates/jrsonnet-evaluator/src/function/mod.rs
+++ b/crates/jrsonnet-evaluator/src/function/mod.rs
@@ -9,11 +9,10 @@
 use self::{
 	builtin::Builtin,
 	parse::{parse_builtin_call, parse_default_function_call, parse_function_call},
-	prepared::{parse_prepared_builtin_call, parse_prepared_function_call, PreparedCall},
+	prepared::{PreparedCall, parse_prepared_builtin_call, parse_prepared_function_call},
 };
 use crate::{
-	bail, error::ErrorKind::*, evaluate, evaluate_trivial, function::builtin::BuiltinFunc, Context,
-	Result, Thunk, Val,
+	Context, Result, Thunk, Val, evaluate, evaluate_trivial, function::builtin::BuiltinFunc,
 };
 
 pub mod builtin;
@@ -99,8 +98,6 @@
 pub enum FuncVal {
 	/// Plain function implemented in jsonnet.
 	Normal(Cc<FuncDesc>),
-	/// Function without arguments works just as a fancy thunk value.
-	Thunk(Thunk<Val>),
 	/// User-provided function.
 	Builtin(BuiltinFunc),
 }
@@ -108,7 +105,6 @@
 impl Debug for FuncVal {
 	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 		match self {
-			Self::Thunk(arg0) => f.debug_tuple("Thunk").field(arg0).finish(),
 			Self::Normal(arg0) => f.debug_tuple("Normal").field(arg0).finish(),
 			Self::Builtin(arg0) => f.debug_tuple("Builtin").field(&arg0.name()).finish(),
 		}
@@ -130,7 +126,6 @@
 		match self {
 			Self::Builtin(i) => i.params(),
 			Self::Normal(p) => p.params.signature.clone(),
-			Self::Thunk(_) => FunctionSignature::empty(),
 		}
 	}
 	/// Amount of non-default required arguments
@@ -142,7 +137,6 @@
 		match self {
 			Self::Normal(normal) => normal.name.clone(),
 			Self::Builtin(builtin) => builtin.name().into(),
-			Self::Thunk(_) => "thunk".into(),
 		}
 	}
 	/// Call function using arguments evaluated in specified `call_ctx` [`Context`].
@@ -160,12 +154,6 @@
 				let body_ctx = func.call_body_context(call_ctx, args, tailstrict)?;
 				evaluate(body_ctx, &func.body)
 			}
-			Self::Thunk(thunk) => {
-				if !args.named.is_empty() || !args.unnamed.is_empty() {
-					bail!(TooManyArgsFunctionHas(0, FunctionSignature::empty()))
-				}
-				thunk.evaluate()
-			}
 			Self::Builtin(b) => {
 				let args = parse_builtin_call(call_ctx, b.params(), args, tailstrict)?;
 				b.call(loc, &args)
@@ -192,7 +180,6 @@
 				)?;
 				evaluate(body_ctx, &func.body)
 			}
-			FuncVal::Thunk(t) => t.evaluate(),
 			FuncVal::Builtin(b) => {
 				let args = parse_prepared_builtin_call(prepared, b.params(), unnamed, named);
 				b.call(loc, &args)
@@ -225,14 +212,13 @@
 				};
 				matches!(&*desc.body, Expr::Var(v) if &**v == id)
 			}
-			Self::Thunk(_) => false,
 		}
 	}
 
 	pub fn evaluate_trivial(&self) -> Option<Val> {
 		match self {
 			Self::Normal(n) => n.evaluate_trivial(),
-			_ => None,
+			Self::Builtin(_) => None,
 		}
 	}
 }
modifiedcrates/jrsonnet-macros/src/typed.rsdiffbeforeafterboth
--- a/crates/jrsonnet-macros/src/typed.rs
+++ b/crates/jrsonnet-macros/src/typed.rs
@@ -1,10 +1,10 @@
 use proc_macro2::TokenStream;
 use quote::quote;
 use syn::{
-	parenthesized,
+	DeriveInput, Error, Ident, LitStr, Result, Token, Type, parenthesized,
 	parse::{Parse, ParseStream},
 	spanned::Spanned as _,
-	token, DeriveInput, Error, Ident, LitStr, Result, Token, Type,
+	token,
 };
 
 use crate::{extract_type_from_option, kw, names::Names, parse_attr, type_is_path};
modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
12pub use encoding::*;12pub use encoding::*;
13pub use hash::*;13pub use hash::*;
14use jrsonnet_evaluator::{14use jrsonnet_evaluator::{
15 ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val,
15 error::Result,16 error::Result,
16 function::{builtin_id, CallLocation, FuncVal},17 function::{CallLocation, FuncVal, builtin_id},
17 tla::TlaArg,18 tla::TlaArg,
18 trace::PathResolver,19 trace::PathResolver,
19 typed::SerializeTypedObj as _,20 typed::SerializeTypedObj as _,
20 val::NumValue,21 val::NumValue,
21 ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val,
22};22};
23use jrsonnet_gcmodule::{Acyclic, Cc, Trace};23use jrsonnet_gcmodule::{Acyclic, Cc, Trace};
24use jrsonnet_ir::Source;24use jrsonnet_ir::Source;