Am 22.07.2018 um 06:03 schrieb J. Gareth Moreton: > Pure functions cannot be > evaluated at compile time if one of the arguments is a variable (or at the > very > least, not deterministic) Do you have an idea how to prove that yet? The way I see it now, this is the only hard issue, every other component is already present somewhere in some form.
> although there > might still be issues in exceptional conditions (e.g. division by zero or > trying > to calculate tan(pi/2), for example). Good point - what should happen in that case? const x = Pi / 0; begin writeln(x); end. That writes "+Inf". > The other point with a "pure" modifier is that, assuming the compiler > determines > that the function is indeed pure, it would permit their assignment to a > constant. So: on processing a call to a pure function, if arguments are constant, emit (interpreted) result of function otherwise, emit regular call ? What would error/warning cases be? I'd want to avoid a situation like that with the insightful, but unfixable and thus spammy "06058_N_Call to subroutine "$1" marked as inline is not inlined" message. > The final issue is that while a function might be pure, you might not want to > inline it because of its complexity, especially if it's called multiple times > with variable arguments. That is very true. Should the "interpretation complexity" be limited, or should the compiler keep going and maybe run into a stack overflow? -- Regards, Martok _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel