File:  [parser3project] / parser3 / src / include / pa_exception.h
Revision 1.4: download - view: text, annotated - select for diffs - revision graph
Wed Feb 21 14:59:41 2001 UTC (25 years, 4 months ago) by paf
Branches: MAIN
CVS tags: HEAD
.y methods and one_big_piece. now compile returns array<method*>

/*
  $Id: pa_exception.h,v 1.4 2001/02/21 14:59:41 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];
};

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

#endif

E-mail: