File:  [parser3project] / parser3 / src / include / pa_exception.h
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Tue Jan 30 13:43:42 2001 UTC (25 years, 5 months ago) by paf
Branches: MAIN
CVS tags: HEAD
minor * to & changes

/*
  $Id: pa_exception.h,v 1.3 2001/01/30 13:43:42 paf Exp $
*/

#ifndef PA_EXCEPTION_H
#define PA_EXCEPTION_H

#include <setjmp.h>

#include "pa_types.h"
#include "pa_string.h"

class Exception {
public:

	// address for long jump to jump to 
	// regretfully public:
	//   can't make local unless sure of inlining
	//   for to-die stack frame ruins it all
	jmp_buf mark;

	void raise(
		const String *atype, const String *acode,
		const String *aproblem_source, 
		const char *comment_fmt, ...);

	const String *type() { return ftype; }
	const String *code() { return fcode; }
	const String *problem_source() { return fproblem_source; }
	const char *comment() { return fcomment[0]?fcomment:0; }

private:

	const String *ftype, *fcode, *fproblem_source;
	char fcomment[MAX_STRING];
};

// usage:
//   if(EXCEPTION_TRY(e)) { ...; if(?) e.raise(?); ...; } else { catch-code }
#define EXCEPTION_TRY(e) (setjmp((e).mark)==0)

#endif

E-mail: