<div dir="auto"><div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Bo Berglund via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>> schrieb am Mi., 12. Apr. 2023, 21:17:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Now my question:<br>
----------------<br>
Since I am modifying the WArgs variable inside the BuildArgumentsArray function<br>
and using its new content afterwards in the WriteItem function I assumed that I<br>
had to use var as shown above, but I am not certain this is the case...<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">If you modify the length or the contents of a dynamic array parameter then you need to use "var" or "out" modifiers (the later only if you don't need the data passed in). </div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
It seems like it works also if I do not use the vars specification...<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">It should not. If it does it will likely be an implementation detail and you shall not rely on it. Do you have an explicit example for this behavior? </div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">And if so, what is the rule for *when* to use var in function call argument<br>
lists for items that will be changed inside the called function and used<br>
afterwards<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">The rule is simple: if you need to modify the parameter value itself (e.g. changing a primitive type, changing a field in a record, changing an array's length or data, changing the value of a class instance - but not its fields!) you need to pass it as "var". If it's a write only parameter you can even use "out". </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven </div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>