diff --git a/src/resolver.rs b/src/resolver.rs index e9178e1fefd..37f19c4db04 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -298,8 +298,8 @@ impl TypeAnnotator<'_> { )) } + /// annotates the arguments of a call, the arguments must be resolved already pub fn annotate_arguments(&mut self, operator: &AstNode, arguments_node: &AstNode, ctx: &VisitorContext) { - self.visit_statement(ctx, arguments_node); let arguments = flatten_expression_list(arguments_node); let pou_name = { diff --git a/tests/lit/single/functions/deeply_nested_calls.st b/tests/lit/single/functions/deeply_nested_calls.st new file mode 100644 index 00000000000..dcd147c50c1 --- /dev/null +++ b/tests/lit/single/functions/deeply_nested_calls.st @@ -0,0 +1,20 @@ +// RUN: %COMPILE %s && %RUN | %CHECK %s +// Deeply nested calls compile in time linear to their depth + +FUNCTION increment : DINT + VAR_INPUT + value : DINT; + END_VAR + + increment := value + 1; +END_FUNCTION + +FUNCTION main + VAR + x : DINT := 0; + END_VAR + + x := increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(increment(x)))))))))))))))))))))))))))))); + printf('%d$N', x); // CHECK: 30 + +END_FUNCTION