[fpc-pascal] About FPC calling register like Delphi
ck at carlo-kok.com
Sat Jan 1 05:03:41 CET 2005
Michael Van Canneyt wrote:
> On Thu, 25 Jan 2007, Alexandre Leclerc wrote:
>> 2007/1/25, Felipe Monteiro de Carvalho <felipemonteiro.carvalho at gmail.com>:
>>> On 1/25/07, Alexandre Leclerc <alexandre.leclerc at gmail.com> wrote:
>>>> Yes, I understand that, but I *need* a scripting engine which is based
>>>> on Pascal. And ROPS is the only one I found that answered my
>>>> requirements. Also, it's integrated and it's "free", and very fast.
>>>> If there was another way, I would use it. But since, I must rely on a
>>>> stable FPC internal to make it work.
>>> Does this script support other calling conventions?
>>> You could try using stdcall instead of register. It´s much simpler,
>>> and as stable as it can get.
>>> I remember writing a simple script engine myself, and then I choose to
>>> support mostly stdcall.
>> ROPS (RemObjects Pascal Script remobjects.com) is 100% pascal code
> Not 100%, there is 1 routine which is assembler, it's the routine
> that sets up the stack when making a call to an imported function.
>> that you simply use in your own code. The engine compiles in your
>> application. It then work with the application stack, etc. to execute
>> native pascal functions and script functions. Quite a nice script
> I use it since ages, even when it was not owned by remobjects.
You are right about that. There is a routine that does that, but all it
does is copy the prepared data onto the stack (And copy back the
result). Now, there are a few problems with PS related to FPC:
* FPC has changed default calling convention once (or twice?)
* The way "register" works on FPC is slightly different from delphi, in
delphi special types like interfaces, strings and variant results are
passed as var parameters, it seems the easiest fix would be for me to
change PascalScript to process results differently for FreePascal.
How does FPC pass a string/variant/interface result actually? Returned
Once I know this, I should be able to add an FPCFIX define for this. (So
it can be easily undone when FPC supports the same "Register" mode as
More information about the fpc-pascal