@@ -2165,15 +2165,23 @@ enum RegIntrinsic {
21652165 MathCeil,
21662166 MathClamp,
21672167 MathClampFloat,
2168+ MathCos,
2169+ MathExp,
2170+ MathExp2,
21682171 MathFloor,
2172+ MathLog,
2173+ MathLog2,
21692174 MathMax,
21702175 MathMaxFloat,
21712176 MathMin,
21722177 MathMinFloat,
21732178 MathPow,
21742179 MathPowFloat,
21752180 MathRound,
2181+ MathSin,
21762182 MathSqrt,
2183+ MathTanh,
2184+ MathTruncFloat,
21772185 JsonArray,
21782186 JsonArrayBools,
21792187 JsonArrayContainsPrefix,
@@ -4251,15 +4259,23 @@ impl RegLowerer<'_> {
42514259 ("Math", "ceil") => RegIntrinsic::MathCeil,
42524260 ("Math", "clamp") => RegIntrinsic::MathClamp,
42534261 ("Math", "clamp_float") => RegIntrinsic::MathClampFloat,
4262+ ("Math", "cos") => RegIntrinsic::MathCos,
4263+ ("Math", "exp") => RegIntrinsic::MathExp,
4264+ ("Math", "exp2") => RegIntrinsic::MathExp2,
42544265 ("Math", "floor") => RegIntrinsic::MathFloor,
4266+ ("Math", "log") => RegIntrinsic::MathLog,
4267+ ("Math", "log2") => RegIntrinsic::MathLog2,
42554268 ("Math", "max") => RegIntrinsic::MathMax,
42564269 ("Math", "max_float") => RegIntrinsic::MathMaxFloat,
42574270 ("Math", "min") => RegIntrinsic::MathMin,
42584271 ("Math", "min_float") => RegIntrinsic::MathMinFloat,
42594272 ("Math", "pow") => RegIntrinsic::MathPow,
42604273 ("Math", "pow_float") => RegIntrinsic::MathPowFloat,
42614274 ("Math", "round") => RegIntrinsic::MathRound,
4275+ ("Math", "sin") => RegIntrinsic::MathSin,
42624276 ("Math", "sqrt") => RegIntrinsic::MathSqrt,
4277+ ("Math", "tanh") => RegIntrinsic::MathTanh,
4278+ ("Math", "trunc_float") => RegIntrinsic::MathTruncFloat,
42634279 ("Json", "array") => RegIntrinsic::JsonArray,
42644280 ("Json", "array_bools") => RegIntrinsic::JsonArrayBools,
42654281 ("Json", "array_contains_prefix") => RegIntrinsic::JsonArrayContainsPrefix,
@@ -9970,9 +9986,24 @@ impl RegVm {
99709986 }
99719987 Ok(VmValue::Float(value.clamp(min, max)))
99729988 }
9989+ RegIntrinsic::MathCos => Ok(VmValue::Float(
9990+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.cos(),
9991+ )),
9992+ RegIntrinsic::MathExp => Ok(VmValue::Float(
9993+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.exp(),
9994+ )),
9995+ RegIntrinsic::MathExp2 => Ok(VmValue::Float(
9996+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.exp2(),
9997+ )),
99739998 RegIntrinsic::MathFloor => Ok(VmValue::Int(
99749999 expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.floor() as i64,
997510000 )),
10001+ RegIntrinsic::MathLog => Ok(VmValue::Float(
10002+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.ln(),
10003+ )),
10004+ RegIntrinsic::MathLog2 => Ok(VmValue::Float(
10005+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.log2(),
10006+ )),
997610007 RegIntrinsic::MathMax => {
997710008 let left = expect_int_ref(intrinsic_arg(&self.stack, base, args, 0)?)?;
997810009 let right = expect_int_ref(intrinsic_arg(&self.stack, base, args, 1)?)?;
@@ -10013,9 +10044,18 @@ impl RegVm {
1001310044 RegIntrinsic::MathRound => Ok(VmValue::Int(
1001410045 expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.round() as i64,
1001510046 )),
10047+ RegIntrinsic::MathSin => Ok(VmValue::Float(
10048+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.sin(),
10049+ )),
1001610050 RegIntrinsic::MathSqrt => Ok(VmValue::Float(
1001710051 expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.sqrt(),
1001810052 )),
10053+ RegIntrinsic::MathTanh => Ok(VmValue::Float(
10054+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.tanh(),
10055+ )),
10056+ RegIntrinsic::MathTruncFloat => Ok(VmValue::Float(
10057+ expect_float_ref(intrinsic_arg(&self.stack, base, args, 0)?)?.trunc(),
10058+ )),
1001910059 RegIntrinsic::JsonArray => {
1002010060 let items = expect_string_list_ref(intrinsic_arg(&self.stack, base, args, 0)?)?;
1002110061 Ok(VmValue::string(format!("[{}]", items.join(","))))
0 commit comments