From 0f5b614a0779896acefb9a413c365af980fac78a Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sat, 04 Apr 2026 22:24:53 +0000 Subject: [PATCH] refactor: drop FuncVal::Thunk --- --- 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), - /// Function without arguments works just as a fancy thunk value. - Thunk(Thunk), /// 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 { match self { Self::Normal(n) => n.evaluate_trivial(), - _ => None, + Self::Builtin(_) => None, } } } --- 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}; --- a/crates/jrsonnet-stdlib/src/lib.rs +++ b/crates/jrsonnet-stdlib/src/lib.rs @@ -12,13 +12,13 @@ pub use encoding::*; pub use hash::*; use jrsonnet_evaluator::{ + ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val, error::Result, - function::{builtin_id, CallLocation, FuncVal}, + function::{CallLocation, FuncVal, builtin_id}, tla::TlaArg, trace::PathResolver, typed::SerializeTypedObj as _, val::NumValue, - ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val, }; use jrsonnet_gcmodule::{Acyclic, Cc, Trace}; use jrsonnet_ir::Source; -- gitstuff