[fpc-devel] Pure function development

Florian Klämpfl florian at freepascal.org
Sat May 2 19:51:17 CEST 2020

Am 01.05.20 um 11:41 schrieb J. Gareth Moreton:
> I'm still learning these things - bear with me!  I'll get one set up 
> when I have something preliminary working.
> At the moment I haven't been able to unite the constant propagation code 
> with my pure functions because they work in fundamentally different ways 
> - for inline functions constant propagation makes a copy of a node tree 
> then transmorphs them as it propagates the constants, while my code just 
> takes the node tree and steps through it without modifying it. 

I see no sense in doing so. It adds another method to do constant 
folding which needs to be maintained.

There needs to be a procedure/approach to check if a function can be 
pure. That's it. Rest can be done using the currently available constant 
folding/propagation code.

> I guess 
> there's merits for both approaches, but because of pure functions' 
> ability to be recursive, I'm worried about malicious functions causing a 
> massive ballooning of nodes and memory issues before the compiler 
> detects an infinite loop (or one that is simply too long) before 
> destroying all of the nodes again, throwing a warning and keeping the 
> original call node.  Also, there are places where nodes can't actually 
> be used, like in the definition of constants, and they simply have to 
> have their results calculated.

More information about the fpc-devel mailing list