Skip to content

Commit

Permalink
refactor(eval): use EvalOutput::Value for EvalInput::Value
Browse files Browse the repository at this point in the history
  • Loading branch information
eduardosm committed Nov 1, 2024
1 parent 2138fd1 commit b858f04
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
2 changes: 1 addition & 1 deletion rsjsonnet-lang/src/program/eval/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ impl<'a> Evaluator<'a> {

match input {
EvalInput::Value(thunk) => {
this.state_stack.push(State::DiscardValue);
this.state_stack.push(State::OutputValue);
this.state_stack.push(State::DeepValue);
this.state_stack.push(State::DoThunk(thunk));
}
Expand Down
14 changes: 9 additions & 5 deletions rsjsonnet-lang/src/program/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -468,15 +468,19 @@ impl Program {
eval::EvalInput::Value(thunk.data.clone()),
)
.map_err(|e| *e)?;
assert!(matches!(output, eval::EvalOutput::Nothing));
Ok(Value::from_thunk(&thunk.data))
let eval::EvalOutput::Value(value) = output else {
unreachable!();
};
Ok(Value::from_value(value))
}

fn eval_value_internal(&mut self, thunk: &Thunk) -> Result<(), EvalError> {
fn eval_value_internal(&mut self, thunk: &Thunk) -> Result<ValueData, EvalError> {
let output = eval::Evaluator::eval(self, None, eval::EvalInput::Value(thunk.data.clone()))
.map_err(|e| *e)?;
assert!(matches!(output, eval::EvalOutput::Nothing));
Ok(())
let eval::EvalOutput::Value(value) = output else {
unreachable!();
};
Ok(value)
}

/// Evaluates a function call.
Expand Down
12 changes: 6 additions & 6 deletions rsjsonnet-lang/src/program/stdlib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ use std::cell::OnceCell;
use std::rc::Rc;

use super::{
ir, BuiltInFunc, FuncData, FuncKind, ObjectData, ObjectField, Program, ThunkData, ThunkState,
ValueData,
ir, BuiltInFunc, FuncData, FuncKind, ObjectData, ObjectField, Program, ThunkData, ValueData,
};
use crate::gc::Gc;
use crate::interner::InternedStr;
Expand All @@ -19,13 +18,14 @@ impl Program {
let stdlib_thunk = self
.load_source(span_ctx, stdlib_data, false, "std.jsonnet")
.expect("failed to load stdlib");
self.eval_value_internal(&stdlib_thunk)
let stdlib_value = self
.eval_value_internal(&stdlib_thunk)
.expect("failed to evaluate stdlib");

let stdlib_obj = match *stdlib_thunk.data.state() {
ThunkState::Done(ValueData::Object(ref obj)) => obj.view(),
_ => panic!("stdlib is not an object"),
let ValueData::Object(stdlib_obj) = stdlib_value else {
panic!("stdlib is not an object");
};
let stdlib_obj = stdlib_obj.view();
let stdlib_extra_obj = self.build_stdlib_extra();

let ext_stdlib_obj = self.extend_object(&stdlib_obj, &stdlib_extra_obj);
Expand Down

0 comments on commit b858f04

Please sign in to comment.