winebuild & (name, heap, init)

Patrik Stridvall ps at
Wed Sep 11 13:10:13 CDT 2002

> Patrik Stridvall <ps at> writes:
> > > Of course having an imperfect parser also means we cannot 
> use it for
> > > the export info, because unlike relay debugging it needs 
> to be 100%
> > > correct. So we either need compiler declspec support, 
> > 
> > That will leave us dependent on compilers that support it.
> Well, the idea would be not to depend on compiler support for the
> __declspec keyword itself, but more to have some clever macro
> replacements that output stuff in a special ELF section or something
> like that. This could then hopefully be made to work on most
> compilers. But I'm not sure if there's a good way to do that at all.

It might work, but then it might not.
> > This isn't happend soon either. It might not be THAT difficult,
> > however the code need not just work it needs be well structured
> > and organized as well if any reasonable guarantees of correctness
> > can be made.
> I think most of all it needs to be simple. My idea is to run through
> the preprocessor, 

This will be VERY slow.

> find the __declspec, and locate the corresponding
> function name, or die if there's anything it cannot parse. This should
> be reasonably foolproof. 

A naive idea would be search for __declspec while keeping track of the
nesting level (that is how many (, [, { that have not been closed).
If the nesting level goes from 1 to 0 before finding the __declspec
set a mark. When __declspec is found search backward to mark until
you find ; at nesting level 0 or the mark then skip forward any white space.
This is extremely likely to be the beginning of a function. Then search
until { or ; is found when nesting level is 0. Then skip any whitespace

You now know where a __declspec function begins and ends.
This reduces the problem to the parsing of a function declaration.
The rest is left as an exersize to the reader. :-)

The problem is that this might work or it might not. You have no real
guarante that it will.

> And IMO it shouldn't be in Perl, it should be
> part of winebuild.

That will not make things easier.

More information about the wine-devel mailing list