seh_try_macros2-00
Gregory M. Turner
gmturner007 at ameritech.net
Thu May 15 20:46:06 CDT 2003
On Wednesday 14 May 2003 11:08 pm, Alexandre Julliard wrote:
> "Gregory M. Turner" <gmturner007 at ameritech.net> writes:
> > - include/wine/excpetion.h
> > - memory/global.c
> >
> > Implement gcc-specific "__TYPED_TRY" macro supposedly capable of
> > intercepting return and running the finally clause. If it compiles,
> > it should work on x86...
>
> Cool! now you can start considering how to support continue, break,
> and goto ;-)
>
> (I don't want to discourage you, but I think you will eventually come
> to realize that the only way to make this work right is to do it in
> the compiler)
Don't worry, we are in agreement on this. I have spent a fair amount of time
trying to decide whether this problem is fixable without such a measure, and
I suspect the answer is no, or, at least, not without doing an inordinate
amount of work and writing lots of asm.
But, for the forseeable future, a majority of wine users & developers will not
have such a thing. So, in my view, it makes sense to improve the existing
__TRY family of macros nevertheless, and to create a partial implementation
of the __try syntax as well.
FWIW, I think break/continue can actually be implemented in this framework --
that was already on my TODO list -- I think I just have to put a "dummy" loop
inside the try-block function, and have more labels for the various exit
conditions. Goto out of the try block is another story, and of course there
are other limitations... but this would, at least, provide some coverage for
the stuff that wine already relies on, despite the missing implementation.
The alternative is to work around the bugs it will create in our RPC
implementation not to have such support, which is going to get dicey.
When/if gcc does it, great, we just use the implementation of __TRY in terms
of __try, we don't have to change a thing. If, for example, after some
research, the -fasync-unwind-tables thing pans out, that's fine too; we can
add that in, but not all platforms support this, even for gcc, so we still
need a pure-C portable alternative to be supported by wine to some reasonable
extent.
The only way I could see them working /portably/ is to use our own
preprocessor instead of, or in addition to, the C preprocessor, but that
could slow down our already slightly onerous build process.
--
"There is no dignity quite so impressive, and no independence quite
so important, as living within your means." --Calvin Coolidge
gmt
More information about the wine-devel
mailing list