Add native support for min/max

This commit is contained in:
Guiguiprim 2023-07-21 16:26:41 +02:00 committed by GitHub
parent cc36915241
commit ef8ddaaa1d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 133 additions and 41 deletions

View file

@ -309,7 +309,7 @@ mod cpp_ast {
}
}
use crate::expression_tree::{BuiltinFunction, EasingCurve};
use crate::expression_tree::{BuiltinFunction, EasingCurve, MinMaxOp};
use crate::langtype::{ElementType, Enumeration, EnumerationValue, NativeClass, Type};
use crate::layout::Orientation;
use crate::llr::{
@ -2776,6 +2776,21 @@ fn compile_expression(expr: &llr::Expression, ctx: &EvaluationContext) -> String
)
}
Expression::MinMax { ty, op, lhs, rhs } => {
let ident = match op {
MinMaxOp::Min => "min",
MinMaxOp::Max => "max",
};
let lhs_code = compile_expression(lhs, ctx);
let rhs_code = compile_expression(rhs, ctx);
format!(
r#"std::{ident}<{ty}>({lhs_code}, {rhs_code})"#,
ty = ty.cpp_type().unwrap_or_default(),
ident = ident,
lhs_code = lhs_code,
rhs_code = rhs_code
)
}
}
}