<div dir="auto">Wouldn't you need a frame pointer to implement it? The current compiler does not need one, since the stack frame size is know at compile time, adding this feature would break this invariant. Am I missing something?<div dir="auto"><br></div><div dir="auto"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Oct 12, 2017 05:45, "Andreas Pirklbauer" <<a href="mailto:andreas_pirklbauer@yahoo.com">andreas_pirklbauer@yahoo.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span style="font-family:monospace;white-space:pre-wrap">> </span><span style="white-space:pre-wrap;font-family:monospace">We support an extension in the Astrobe for ARM Cortex-M compilers that</span><div><span style="white-space:pre-wrap;font-family:monospace">> allows </span><span style="font-family:monospace;white-space:pre-wrap">single-dimensional dynamic local array variables. This was originally</span></div><div><span style="font-family:monospace;white-space:pre-wrap">> implemented in Wirth's earlier ARM Oberon compiler but not in his RISC5 compiler.</span></div><div><span style="font-family:monospace;white-space:pre-wrap">> The NEW command in this case allocates space on the stack (not the heap) for</span></div><div><span style="font-family:monospace;white-space:pre-wrap">> the local array. This is elegant because it doesn't require any corresponding</span></div><div><span style="font-family:monospace;white-space:pre-wrap">> DISPOSE or garbage collection - the space is automatically reclaimed when</span></div><div><span style="font-family:monospace;white-space:pre-wrap">> the procedure is exited. </span><span style="white-space:pre-wrap;font-family:monospace">The example above then becomes: </span><div><div><font face="monospace"><span style="white-space:pre-wrap">> 
> PROCEDURE P(s: ARRAY OF CHAR); 
>   VAR local: ARRAY OF CHAR; 
> BEGIN 
>   NEW(local, LEN(s)); 
>   local := s; 
>   ...</span></font></div></div></div><div><font face="monospace"><span style="white-space:pre-wrap"><br></span></font></div><div><font face="monospace"><span style="white-space:pre-wrap">That’s a great idea!! So NEW(a, size) only touches the stack but not the heap,</span></font></div><div><font face="monospace"><span style="white-space:pre-wrap">making both allocation and </span></font><span style="font-family:monospace;white-space:pre-wrap">reclamation (which is of course implicit on procedure</span></div><div><span style="font-family:monospace;white-space:pre-wrap">exit by simply adjust the stack pointer) super-fast.</span></div><div><span style="white-space:pre-wrap;font-family:monospace"><br></span></div><div><span style="white-space:pre-wrap;font-family:monospace">I will consider adding that to my version of the compiler!</span></div><div><span style="white-space:pre-wrap;font-family:monospace"><br></span></div><div><span style="white-space:pre-wrap;font-family:monospace">-AP</span></div><div><span style="white-space:pre-wrap;font-family:monospace"><br></span></div></div><br>--<br>
<a href="mailto:Oberon@lists.inf.ethz.ch">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems<br>
<a href="https://lists.inf.ethz.ch/">https://lists.inf.ethz.ch/</a><wbr>mailman/listinfo/oberon<br>
<br></blockquote></div></div>