File:  [parser3project] / parser3 / src / include / pa_exception.h
Revision 1.7: download - view: text, annotated - select for diffs - revision graph
Sun Mar 11 08:16:32 2001 UTC (25 years, 4 months ago) by paf
Branches: MAIN
CVS tags: HEAD
headers updated

/*
	Parser
	Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
	Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)

	$Id: pa_exception.h,v 1.7 2001/03/11 08:16:32 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
	mutable jmp_buf mark;

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

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

private:

	mutable const String *ftype, *fcode, *fproblem_source;
	mutable 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: