Marco van de Voort schrieb:
> On 2007-02-19, Richard Engebretson <eng@[EMAIL PROTECTED]
> wrote:
>>> I didn't look at fpc - but Turbo Pascal does the following when foo is
>>> called:
>>> - it pushes the number to the stack
>>> - it pushes the address of the string (so, you're right, it is passed
by
>>> reference; also in case a). BUT the foo procedure itself then does a
>>> "sub sp, sizeof(str)" and copies the string. But that is just an
>>> internal detail, I don't know if FPC does it the same way.
>
> This is normal. This is because "by value" (without const/var/out) means
> that the procedure can modify, but that the modications shouldn't
propagate
> back.
Of course. Wouldn't it be possible to push the whole string on the stack
before doing the call instead of pu****ng the address and letting the
called function copy the string? That was my point!
> Due to the fact that implementations of units can be compiled
separately,
> the caller can't know if e.g. a procedure won't modify it.
I don't understand what you're saying here. The caller needs to know if
it is a var, const or (none) parameter. Think of an integer. If it is
foo(i:integer), the value is pushed. If it is foo(var i:integer), the
address is pushed (of course). So it must be possible to do this for
strings!
So what is the problem? Is it open strings? Or performance issues?
Wolf


|