git.delta.rocks / jrsonnet / refs/commits / 1b7abe84e611

difftreelog

perf faster format

Лач2020-07-20parent: #9d883c6.patch.diff
in: master

6 files changed

modifiedcrates/jrsonnet-evaluator/build.rsdiffbeforeafterboth
39 if **name == *"join" || **name == *"manifestJsonEx" ||39 if **name == *"join" || **name == *"manifestJsonEx" ||
40 **name == *"escapeStringJson" || **name == *"equals" ||40 **name == *"escapeStringJson" || **name == *"equals" ||
41 **name == *"base64" || **name == *"foldl" || **name == *"foldr" ||41 **name == *"base64" || **name == *"foldl" || **name == *"foldr" ||
42 **name == *"sortImpl" || **name == *"range"42 **name == *"sortImpl" || **name == *"format" || **name == *"range"
43 )43 )
44 })44 })
45 .collect(),45 .collect(),
addedcrates/jrsonnet-evaluator/src/builtin/format.rsdiffbeforeafterboth

no changes

modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
1pub mod stdlib;1pub mod stdlib;
2pub use stdlib::*;2pub use stdlib::*;
3
4pub mod format;
35
modifiedcrates/jrsonnet-evaluator/src/error.rsdiffbeforeafterboth
60 StringManifestOutputIsNotAString,60 StringManifestOutputIsNotAString,
6161
62 ImportCallbackError(String),62 ImportCallbackError(String),
63 InvalidUnicodeCodepointGot(u32),
63}64}
6465
65#[derive(Clone, Debug)]66#[derive(Clone, Debug)]
modifiedcrates/jrsonnet-evaluator/src/evaluate.rsdiffbeforeafterboth
1use crate::{1use crate::{
2 builtin::format::{format_arr, format_obj},
2 context_creator, create_error, create_error_result, equals, escape_string_json, future_wrapper,3 context_creator, create_error, create_error_result, equals, escape_string_json, future_wrapper,
3 lazy_val, manifest_json_ex, parse_args, primitive_equals, push, with_state, Context,4 lazy_val, manifest_json_ex, parse_args, primitive_equals, push, with_state, Context,
4 ContextCreator, Error, FuncDesc, LazyBinding, LazyVal, ObjMember, ObjValue, Result, Val,5 ContextCreator, Error, FuncDesc, LazyBinding, LazyVal, ObjMember, ObjValue, Result, Val,
633 }634 }
634 Ok(Val::Arr(Rc::new(new_arr)))635 Ok(Val::Arr(Rc::new(new_arr)))
635 }))?,636 }))?,
637 // faster
638 ("std", "format") => parse_args!(context, "std.format", args, 2, [
639 0, str: [Val::Str]!!Val::Str, vec![ValType::Str];
640 1, vals: [Val::Arr|Val::Obj], vec![ValType::Arr, ValType::Obj];
641 ], {
642 match vals {
643 Val::Arr(vals) => Val::Str(format_arr(&str, &vals).unwrap().into()),
644 Val::Obj(obj) => Val::Str(format_obj(&str, &obj).unwrap().into()),
645 _ => unreachable!()
646 }
647 }),
636 // faster648 // faster
637 ("std", "range") => parse_args!(context, "std.range", args, 2, [649 ("std", "range") => parse_args!(context, "std.range", args, 2, [
638 0, from: [Val::Num]!!Val::Num, vec![ValType::Num];650 0, from: [Val::Num]!!Val::Num, vec![ValType::Num];
648 0, n: [Val::Num]!!Val::Num, vec![ValType::Num];660 0, n: [Val::Num]!!Val::Num, vec![ValType::Num];
649 ], {661 ], {
650 let mut out = String::new();662 let mut out = String::new();
651 out.push(std::char::from_u32(n as u32).unwrap());663 out.push(std::char::from_u32(n as u32).ok_or_else(||
664 create_error(crate::error::Error::InvalidUnicodeCodepointGot(n as u32))
665 )?);
652 Val::Str(out.into())666 Ok(Val::Str(out.into()))
653 }),667 })?,
654 ("std", "encodeUTF8") => parse_args!(context, "std.encodeUtf8", args, 1, [668 ("std", "encodeUTF8") => parse_args!(context, "std.encodeUtf8", args, 1, [
655 0, str: [Val::Str]!!Val::Str, vec![ValType::Str];669 0, str: [Val::Str]!!Val::Str, vec![ValType::Str];
656 ], {670 ], {
modifiedcrates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth
405 out405 out
406}406}
407
408pub fn to_string(val: &Val) -> Result<Rc<str>> {
409 Ok(match val {
410 Val::Bool(true) => "true".into(),
411 Val::Null => "null".into(),
412 Val::Str(s) => s.clone(),
413 v => v.clone().into_json(0)?,
414 })
415}
407416
408#[test]417#[test]
409fn json_test() {418fn json_test() {