refactor(tvix/eval): Box the inside of Value::Json

serde_json::Value is pretty large, and is contributing (albeit not
exclusively) to the large size of the Value repr. Putting it in a box
is *especially* cheap (since it's rarely used) and allows us
to (eventually) cut down on the size of Value.

Change-Id: I005a802d8527b639beb4e938e3320b11ffa1ef23
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10795
Reviewed-by: sterni <sternenseemann@systemli.org>
Autosubmit: aspen <root@gws.fyi>
Tested-by: BuildkiteCI
This commit is contained in:
Aspen Smith 2024-02-10 12:21:06 -05:00 committed by clbot
parent 7b1632ec71
commit 5d2ae840f1
3 changed files with 3 additions and 3 deletions

View file

@ -111,7 +111,7 @@ impl Value {
pub(crate) async fn into_json_generator(self, co: GenCo) -> Result<Value, ErrorKind> {
match self.into_json(&co).await? {
Err(cek) => Ok(Value::Catchable(cek)),
Ok(json) => Ok(Value::Json(json)),
Ok(json) => Ok(Value::Json(Box::new(json))),
}
}
}

View file

@ -78,7 +78,7 @@ pub enum Value {
#[serde(skip)]
UnresolvedPath(Box<Path>),
#[serde(skip)]
Json(serde_json::Value),
Json(Box<serde_json::Value>),
#[serde(skip)]
FinaliseRequest(bool),

View file

@ -775,7 +775,7 @@ pub(crate) async fn request_to_json(
value: Value,
) -> Result<serde_json::Value, CatchableErrorKind> {
match co.yield_(VMRequest::ToJson(value)).await {
VMResponse::Value(Value::Json(json)) => Ok(json),
VMResponse::Value(Value::Json(json)) => Ok(*json),
VMResponse::Value(Value::Catchable(cek)) => Err(cek),
msg => panic!(
"Tvix bug: VM responded with incorrect generator message: {}",