[lazarus] About compatibility???

Michael Van Canneyt michael.vancanneyt at wisa.be
Fri Mar 8 07:29:49 EST 2002




On Fri, 8 Mar 2002, Mattias Gaertner wrote:

> On Fri, 8 Mar 2002 09:43:14 +0100 (W. Europe Standard Time)
> Michael Van Canneyt <michael.vancanneyt at wisa.be> wrote:
>
> > > Since it is impossible to translate any c header file to good pascal code, the current h2pas is the better solution.
> > > I would like to add a h2pas frontend to the IDE, so that using c libraries will become much easier. But before that, h2pas must be improved.
> >
> > What is missing in h2pas ? (except a preprocessor :) )
>
> :)
>
> If someone does that, I will write a frontend for it.

It is not that easy. The problem with a preprocessor is
that it destroys all constants and macros.

e.g.

#define GTK_COLOR_BLACK 0
#define GTK_COLOR_WHITE 1

is lost when you preprocess it. The preprocessor replaces all
occurrentces of these constants with the actual values.

so you need 2 passes:

1 pass which takes care of constants and macros only. (unpreprocessed)
1 pass which takes care of the actual function/procedure definitions.
  This can/should be preprocessed.

Then the two passes must be reconciled...

This is not easy to solve. What is more,
- it depends on some C defines being available or not
  (e.g. various POSIX defines) etc etc etc.
- Sometimes, headers are included which are not available, and which are
  strictly speaking not needed for translation - but they do stop the
  preprocessor...

Like I said, preprocessing and macroitis is a serious problem...
There is no easy way out.

Adding an (external) preprocessor is not the hard part;
it is maybe 10 lines of code; but the output may/may not be usable.

Michael.






More information about the Lazarus mailing list