Change pattern functions to call user function with keyword args (#6772)
* Change pattern functions to call user function with keyword args * Fix KCL code to use unlabeled syntax * Update generated output
This commit is contained in:
@ -18,10 +18,10 @@ screenSketch = startSketchOn(XZ)
|
||||
|> close()
|
||||
|
||||
// Create transform functions for the speaker grid pattern
|
||||
fn transformX(i) {
|
||||
fn transformX(@i) {
|
||||
return { translate = [.125 * i, 0] }
|
||||
}
|
||||
fn transformY(i) {
|
||||
fn transformY(@i) {
|
||||
return { translate = [0, -.125 * i] }
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ shellExtrude = startSketchOn(s, "start")
|
||||
|> close()
|
||||
|> extrude(length = -(height - t))
|
||||
|
||||
fn tr(i) {
|
||||
fn tr(@i) {
|
||||
j = i + 1
|
||||
x = (j/wbumps) * pitch
|
||||
y = (j % wbumps) * pitch
|
||||
|
@ -1324,7 +1324,7 @@ impl Node<CallExpressionKw> {
|
||||
},
|
||||
self.into(),
|
||||
ctx.clone(),
|
||||
exec_state.mod_local.pipe_value.clone().map(|v| Arg::new(v, callsite)),
|
||||
exec_state.pipe_value().map(|v| Arg::new(v.clone(), callsite)),
|
||||
);
|
||||
match ctx.stdlib.get_either(fn_name) {
|
||||
FunctionKind::Core(func) => {
|
||||
@ -2194,7 +2194,7 @@ impl FunctionSource {
|
||||
},
|
||||
callsite,
|
||||
ctx.clone(),
|
||||
exec_state.mod_local.pipe_value.clone().map(|v| Arg::new(v, callsite)),
|
||||
exec_state.pipe_value().map(|v| Arg::new(v.clone(), callsite)),
|
||||
);
|
||||
self.call_kw(fn_name, exec_state, ctx, args, callsite).await
|
||||
} else {
|
||||
|
@ -1741,7 +1741,7 @@ foo
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn test_pattern_transform_function_cannot_access_future_definitions() {
|
||||
let ast = r#"
|
||||
fn transform(replicaId) {
|
||||
fn transform(@replicaId) {
|
||||
// x shouldn't be defined yet.
|
||||
scale = x
|
||||
return {
|
||||
|
@ -283,6 +283,10 @@ impl ExecState {
|
||||
source_ranges: vec![source_range],
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn pipe_value(&self) -> Option<&KclValue> {
|
||||
self.mod_local.pipe_value.as_ref()
|
||||
}
|
||||
}
|
||||
|
||||
impl GlobalState {
|
||||
|
@ -16,7 +16,7 @@ use serde::Serialize;
|
||||
use uuid::Uuid;
|
||||
|
||||
use super::{
|
||||
args::Arg,
|
||||
args::{Arg, KwArgs},
|
||||
utils::{point_3d_to_mm, point_to_mm},
|
||||
};
|
||||
use crate::{
|
||||
@ -427,9 +427,18 @@ async fn make_transform<T: GeometryTrait>(
|
||||
ty: NumericType::count(),
|
||||
meta: vec![source_range.into()],
|
||||
};
|
||||
let transform_fn_args = vec![Arg::synthetic(repetition_num)];
|
||||
let kw_args = KwArgs {
|
||||
unlabeled: Some(Arg::new(repetition_num, source_range)),
|
||||
labeled: Default::default(),
|
||||
};
|
||||
let transform_fn_args = Args::new_kw(
|
||||
kw_args,
|
||||
source_range,
|
||||
ctxt.clone(),
|
||||
exec_state.pipe_value().map(|v| Arg::new(v.clone(), source_range)),
|
||||
);
|
||||
let transform_fn_return = transform
|
||||
.call(None, exec_state, ctxt, transform_fn_args, source_range)
|
||||
.call_kw(None, exec_state, ctxt, transform_fn_args, source_range)
|
||||
.await?;
|
||||
|
||||
// Unpack the returned transform object.
|
||||
|
@ -47,23 +47,23 @@ flowchart LR
|
||||
142[Solid2d]
|
||||
end
|
||||
subgraph path23 [Path]
|
||||
23["Path<br>[998, 1045, 3]"]
|
||||
64["Segment<br>[1051, 1092, 3]"]
|
||||
65["Segment<br>[1098, 1140, 3]"]
|
||||
66["Segment<br>[1146, 1188, 3]"]
|
||||
67["Segment<br>[1194, 1201, 3]"]
|
||||
23["Path<br>[1000, 1047, 3]"]
|
||||
64["Segment<br>[1053, 1094, 3]"]
|
||||
65["Segment<br>[1100, 1142, 3]"]
|
||||
66["Segment<br>[1148, 1190, 3]"]
|
||||
67["Segment<br>[1196, 1203, 3]"]
|
||||
150[Solid2d]
|
||||
end
|
||||
subgraph path24 [Path]
|
||||
24["Path<br>[1459, 1610, 3]"]
|
||||
68["Segment<br>[1616, 1692, 3]"]
|
||||
69["Segment<br>[1698, 1851, 3]"]
|
||||
70["Segment<br>[1857, 1933, 3]"]
|
||||
71["Segment<br>[1939, 2095, 3]"]
|
||||
72["Segment<br>[2101, 2178, 3]"]
|
||||
73["Segment<br>[2184, 2339, 3]"]
|
||||
74["Segment<br>[2345, 2421, 3]"]
|
||||
75["Segment<br>[2427, 2434, 3]"]
|
||||
24["Path<br>[1461, 1612, 3]"]
|
||||
68["Segment<br>[1618, 1694, 3]"]
|
||||
69["Segment<br>[1700, 1853, 3]"]
|
||||
70["Segment<br>[1859, 1935, 3]"]
|
||||
71["Segment<br>[1941, 2097, 3]"]
|
||||
72["Segment<br>[2103, 2180, 3]"]
|
||||
73["Segment<br>[2186, 2341, 3]"]
|
||||
74["Segment<br>[2347, 2423, 3]"]
|
||||
75["Segment<br>[2429, 2436, 3]"]
|
||||
139[Solid2d]
|
||||
end
|
||||
subgraph path25 [Path]
|
||||
@ -181,13 +181,13 @@ flowchart LR
|
||||
end
|
||||
1["Plane<br>[386, 403, 2]"]
|
||||
2["Plane<br>[473, 490, 3]"]
|
||||
3["Plane<br>[975, 992, 3]"]
|
||||
4["Plane<br>[1436, 1453, 3]"]
|
||||
5["Plane<br>[2585, 2602, 3]"]
|
||||
6["Plane<br>[2682, 2699, 3]"]
|
||||
7["Plane<br>[2781, 2798, 3]"]
|
||||
8["Plane<br>[2879, 2896, 3]"]
|
||||
9["Plane<br>[2977, 2994, 3]"]
|
||||
3["Plane<br>[977, 994, 3]"]
|
||||
4["Plane<br>[1438, 1455, 3]"]
|
||||
5["Plane<br>[2587, 2604, 3]"]
|
||||
6["Plane<br>[2684, 2701, 3]"]
|
||||
7["Plane<br>[2783, 2800, 3]"]
|
||||
8["Plane<br>[2881, 2898, 3]"]
|
||||
9["Plane<br>[2979, 2996, 3]"]
|
||||
10["Plane<br>[325, 342, 5]"]
|
||||
11["Plane<br>[553, 592, 5]"]
|
||||
12["Plane<br>[256, 273, 6]"]
|
||||
@ -200,7 +200,7 @@ flowchart LR
|
||||
158["Sweep Extrusion<br>[1767, 1810, 2]"]
|
||||
159["Sweep Extrusion<br>[2169, 2212, 2]"]
|
||||
160["Sweep Extrusion<br>[2464, 2497, 2]"]
|
||||
161["Sweep Extrusion<br>[3035, 3066, 3]"]
|
||||
161["Sweep Extrusion<br>[3037, 3068, 3]"]
|
||||
162["Sweep Loft<br>[932, 975, 5]"]
|
||||
163["Sweep Extrusion<br>[609, 661, 6]"]
|
||||
164["Sweep Revolve<br>[540, 557, 7]"]
|
||||
|
@ -48,6 +48,48 @@ description: Operations executed multi_transform.kcl
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": null,
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": {
|
||||
"value": {
|
||||
"type": "Number",
|
||||
"value": 1.0,
|
||||
"ty": {
|
||||
"type": "Known",
|
||||
"type": "Count"
|
||||
}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"type": "GroupBegin",
|
||||
"group": {
|
||||
"type": "FunctionCall",
|
||||
"name": null,
|
||||
"functionSourceRange": [],
|
||||
"unlabeledArg": {
|
||||
"value": {
|
||||
"type": "Number",
|
||||
"value": 2.0,
|
||||
"ty": {
|
||||
"type": "Known",
|
||||
"type": "Count"
|
||||
}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
"labeledArgs": {}
|
||||
},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"instances": {
|
||||
@ -85,5 +127,11 @@ description: Operations executed multi_transform.kcl
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
},
|
||||
{
|
||||
"type": "GroupEnd"
|
||||
}
|
||||
]
|
||||
|
Reference in New Issue
Block a user