public inbox for pthreads-win32@sourceware.org
 help / color / mirror / Atom feed
* RE: Followup -- Re: #define catch?
@ 2000-08-04  8:57 Bossom, John
  0 siblings, 0 replies; 4+ messages in thread
From: Bossom, John @ 2000-08-04  8:57 UTC (permalink / raw)
  To: 'rpj@ise.canberra.edu.au', Scott McCaskill; +Cc: pthreads-win32

I recommend that you catch the exception BY REFERENCE so that
you don't end up with copying...

i.e.)
	catch( Pthread_exception & )

Without the & a copy is made implicitly.

-----Original Message-----
From: Ross Johnson [ mailto:rpj@ise.canberra.edu.au ]
Sent: Thursday, August 03, 2000 11:14 PM
To: Scott McCaskill
Cc: pthreads-win32@sourceware.cygnus.com
Subject: Re: Followup -- Re: #define catch?


Scott McCaskill wrote:
> 
> Well, after doing some more research, it appears that it *is* legal in C++
> to have multiple catch blocks for the same exception, so apparently this
is
> yet another VC++ bug.

In any case, the library aims to work in it's target environments and so
I'm still seeking a way to handle this that is portable. Unfortunately,
thus far I haven't been able to come up with a neat, clean and
transparent
method.

The best I've come up with for VC++ (leaving the current macro
defined for other compilers) is the following:

#ifdef NEED_ALTCATCHALL
#warning Replace any 'catch(...)' with 'AltCatchAll' if you want \
	 Pthread-Win32 cancelation and pthread_exit to work.
#define AltCatchAll \
	catch(Pthread_exception) { throw; } \
	catch(...)	
#else
#define catch(e) \
	catch(Pthread_exception) { throw; } \
	catch(e)	
#endif

[I've now grouped internal library exceptions under a single base
class.]

The application code would need this also for portability:

#include <pthread.h>
#if defined(NEED_ALTCATCHALL) && ! defined(AltCatchAll)
#define AltCatchAll catch(...)
#endif

So unless anyone can offer an alternative I will use this.

Ross

> 
> ----- Original Message -----
> From: "Scott McCaskill" <scott@3dfx.com>
> To: <pthreads-win32@sourceware.cygnus.com>
> Sent: Wednesday, August 02, 2000 11:49 AM
> Subject: Re: #define catch?
> 
> >
> > ----- Original Message -----
> > From: "Bossom, John" <John.Bossom@Cognos.COM>
> > To: "'Ross Johnson'" <rpj@ise.canberra.edu.au>; "Scott McCaskill"
> > <scott@3dfx.com>
> > Cc: <pthreads-win32@sourceware.cygnus.com>
> > Sent: Wednesday, August 02, 2000 10:42 AM
> > Subject: RE: #define catch?
> >
> >
> > > "catch" is actually a keyword in C++...
> > >
> >
> > This is true.. but I don't see what you're getting at.  The fundamental
> > problem I encountered is that this (legal) code:
> >
> > catch ( app_exception ) { }
> > catch ( some_other_app_exception ) { }
> >
> > ..will be expanded to the following when using the macro in pthread.h:
> >
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( app_exception ) { }
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( some_other_app_exception ) { }
> >
> > ..and VC++ will not compile that because of the existence of multiple
> > handlers for Pthread_exception_cancel and Pthread_exception_exit.
> >

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: Followup -- Re: #define catch?
@ 2000-08-04  9:09 Claude Quezel
  0 siblings, 0 replies; 4+ messages in thread
From: Claude Quezel @ 2000-08-04  9:09 UTC (permalink / raw)
  To: pthreads-win32

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 679 bytes --]

Scott McCaskill wrote:

> So unless anyone can offer an alternative I will use this.


Seems to me that the problem is specific to MS Visual C++. Why don't you
isolate code for that specific compiler:

#ifdef _MSCVER
// patch here
#else
// normal code here
#endif

And let compliant compiler users free of this patch. Note: I use VC for my
work with pthreads-win32. I don't even know if another compiler can be used
with this package.

Claude

Claude Quézel
mailto:Claude_Quezel@syntell.com
http://www.syntell.com
SYNTELL
Place Iberville IV
Bureau 060
2954, boul. Laurier
Sainte-Foy (Québec) G1V 4T2
Canada
Tél. : (418) 266-0900, poste 317
Téléc. : (418) 266-0899

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Followup -- Re: #define catch?
  2000-08-03  9:11   ` Followup -- " Scott McCaskill
@ 2000-08-03 20:14     ` Ross Johnson
  0 siblings, 0 replies; 4+ messages in thread
From: Ross Johnson @ 2000-08-03 20:14 UTC (permalink / raw)
  To: Scott McCaskill; +Cc: pthreads-win32

Scott McCaskill wrote:
> 
> Well, after doing some more research, it appears that it *is* legal in C++
> to have multiple catch blocks for the same exception, so apparently this is
> yet another VC++ bug.

In any case, the library aims to work in it's target environments and so
I'm still seeking a way to handle this that is portable. Unfortunately,
thus far I haven't been able to come up with a neat, clean and
transparent
method.

The best I've come up with for VC++ (leaving the current macro
defined for other compilers) is the following:

#ifdef NEED_ALTCATCHALL
#warning Replace any 'catch(...)' with 'AltCatchAll' if you want \
	 Pthread-Win32 cancelation and pthread_exit to work.
#define AltCatchAll \
	catch(Pthread_exception) { throw; } \
	catch(...)	
#else
#define catch(e) \
	catch(Pthread_exception) { throw; } \
	catch(e)	
#endif

[I've now grouped internal library exceptions under a single base
class.]

The application code would need this also for portability:

#include <pthread.h>
#if defined(NEED_ALTCATCHALL) && ! defined(AltCatchAll)
#define AltCatchAll catch(...)
#endif

So unless anyone can offer an alternative I will use this.

Ross

> 
> ----- Original Message -----
> From: "Scott McCaskill" <scott@3dfx.com>
> To: <pthreads-win32@sourceware.cygnus.com>
> Sent: Wednesday, August 02, 2000 11:49 AM
> Subject: Re: #define catch?
> 
> >
> > ----- Original Message -----
> > From: "Bossom, John" <John.Bossom@Cognos.COM>
> > To: "'Ross Johnson'" <rpj@ise.canberra.edu.au>; "Scott McCaskill"
> > <scott@3dfx.com>
> > Cc: <pthreads-win32@sourceware.cygnus.com>
> > Sent: Wednesday, August 02, 2000 10:42 AM
> > Subject: RE: #define catch?
> >
> >
> > > "catch" is actually a keyword in C++...
> > >
> >
> > This is true.. but I don't see what you're getting at.  The fundamental
> > problem I encountered is that this (legal) code:
> >
> > catch ( app_exception ) { }
> > catch ( some_other_app_exception ) { }
> >
> > ..will be expanded to the following when using the macro in pthread.h:
> >
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( app_exception ) { }
> > catch ( Pthread_exception_cancel ) { throw; }
> > catch ( Pthread_exception_exit ) { throw; }
> > catch ( some_other_app_exception ) { }
> >
> > ..and VC++ will not compile that because of the existence of multiple
> > handlers for Pthread_exception_cancel and Pthread_exception_exit.
> >

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Followup -- Re: #define catch?
  2000-08-02  9:50 ` Scott McCaskill
@ 2000-08-03  9:11   ` Scott McCaskill
  2000-08-03 20:14     ` Ross Johnson
  0 siblings, 1 reply; 4+ messages in thread
From: Scott McCaskill @ 2000-08-03  9:11 UTC (permalink / raw)
  To: pthreads-win32

Well, after doing some more research, it appears that it *is* legal in C++
to have multiple catch blocks for the same exception, so apparently this is
yet another VC++ bug.

----- Original Message -----
From: "Scott McCaskill" <scott@3dfx.com>
To: <pthreads-win32@sourceware.cygnus.com>
Sent: Wednesday, August 02, 2000 11:49 AM
Subject: Re: #define catch?


>
> ----- Original Message -----
> From: "Bossom, John" <John.Bossom@Cognos.COM>
> To: "'Ross Johnson'" <rpj@ise.canberra.edu.au>; "Scott McCaskill"
> <scott@3dfx.com>
> Cc: <pthreads-win32@sourceware.cygnus.com>
> Sent: Wednesday, August 02, 2000 10:42 AM
> Subject: RE: #define catch?
>
>
> > "catch" is actually a keyword in C++...
> >
>
> This is true.. but I don't see what you're getting at.  The fundamental
> problem I encountered is that this (legal) code:
>
> catch ( app_exception ) { }
> catch ( some_other_app_exception ) { }
>
> ..will be expanded to the following when using the macro in pthread.h:
>
> catch ( Pthread_exception_cancel ) { throw; }
> catch ( Pthread_exception_exit ) { throw; }
> catch ( app_exception ) { }
> catch ( Pthread_exception_cancel ) { throw; }
> catch ( Pthread_exception_exit ) { throw; }
> catch ( some_other_app_exception ) { }
>
> ..and VC++ will not compile that because of the existence of multiple
> handlers for Pthread_exception_cancel and Pthread_exception_exit.
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2000-08-04  9:09 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-08-04  8:57 Followup -- Re: #define catch? Bossom, John
  -- strict thread matches above, loose matches on Subject: below --
2000-08-04  9:09 Claude Quezel
2000-08-02  8:42 Bossom, John
2000-08-02  9:50 ` Scott McCaskill
2000-08-03  9:11   ` Followup -- " Scott McCaskill
2000-08-03 20:14     ` Ross Johnson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).