difftreelog
refactor drop FuncVal::Thunk
in: master
3 files changed
crates/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,
}
}
}
crates/jrsonnet-macros/src/typed.rsdiffbeforeafterboth1use proc_macro2::TokenStream;1use proc_macro2::TokenStream;2use quote::quote;2use quote::quote;3use syn::{3use syn::{4 parenthesized,4 DeriveInput, Error, Ident, LitStr, Result, Token, Type, parenthesized,5 parse::{Parse, ParseStream},5 parse::{Parse, ParseStream},6 spanned::Spanned as _,6 spanned::Spanned as _,7 token, DeriveInput, Error, Ident, LitStr, Result, Token, Type,7 token,8};8};9910use crate::{extract_type_from_option, kw, names::Names, parse_attr, type_is_path};10use crate::{extract_type_from_option, kw, names::Names, parse_attr, type_is_path};crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth--- 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;