Diff for /parser3/src/include/pa_exception.h between versions 1.10 and 1.51

version 1.10, 2001/03/19 15:29:37 version 1.51, 2007/11/14 09:44:06
Line 1 Line 1
 /** @file  /** @file
         Parser          Parser: exception decls.
         Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)  
         Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)  
   
         $Id$          Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)
           Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
 */  */
   
 #ifndef PA_EXCEPTION_H  #ifndef PA_EXCEPTION_H
 #define PA_EXCEPTION_H  #define PA_EXCEPTION_H
   
 #include <setjmp.h>  static const char * const IDENT_EXCEPTION_H="$Date$";
   
 #include "pa_types.h"  const char* const PARSER_RUNTIME = "parser.runtime";
 #include "pa_string.h"  
   const char* const NAME_MUST_BE_STRING = "name must be string";
   const char* const FILE_NAME_MUST_BE_STRING = "file name must be string";
   const char* const NAMESPACEURI_MUST_BE_STRING = "namespaceURI must be string";
   const char* const DATA_MUST_BE_STRING = "data must be string";
   const char* const LOCALNAME_MUST_BE_STRING = "localName must be string";
   const char* const VALUE_MUST_BE_STRING = "value must be string";
   const char* const PARAMETER_MUST_BE_STRING = "parameter must be string";
   const char* const COLUMN_NAME_MUST_BE_STRING = "column name must be string";
   
   const char* const FILE_NAME_MUST_NOT_BE_CODE = "file name must not be code";
   const char* const COORDINATES_MUST_NOT_BE_CODE = "coordinates must not be code";
   const char* const FIRST_ARG_MUST_NOT_BE_CODE = "first argument must not be code";
   const char* const PARAM_MUST_NOT_BE_CODE = "param must not be code";
   const char* const MODE_MUST_NOT_BE_CODE = "mode must not be code";
   
   // includes
   
   #include "pa_memory.h"
   
   // forwards
   
   class String;
   
   // defines
   
 /// Just simple longjump mechanizm dressed in class clothes. use Temp_exception  
 class Exception {  class Exception {
 public:  public:
   
         /**          Exception();
                 address for long jump to jump to           Exception(
                 regretfully public:                  const char* atype,
                 can't make local unless sure of inlining                  const String* aproblem_source, 
                 for to-die stack frame ruins it all                  const char* comment_fmt, ...);
         */          Exception(const Exception& src);
         mutable jmp_buf mark;          operator bool() { return ftype || fproblem_source || fcomment; }
           Exception& operator =(const Exception& src);
         /// throws an exception[really goes to mark-ed position  
         void _throw(  
                 const String *atype, const String *acode,  
                 const String *aproblem_source,   
                 const char *comment_fmt, ...) const;  
   
         /// extracts exception type          /// extracts exception type
         const String *type() const { return ftype; }          const char* type(bool can_be_empty=false) const { 
         /// extracts exception code                  if(can_be_empty)
         const String *code() const { return fcode; }                          return ftype; 
                   else
                           return ftype?ftype:"<no type>";
           }
         /// extracts exception problem_source          /// extracts exception problem_source
         const String *problem_source() const { return fproblem_source; }          const String* problem_source() const;
         /// extracts exception comment          /// extracts exception comment
         const char *comment() const { return fcomment[0]?fcomment:0; }          const char* comment(bool can_be_empty=false) const { 
                   const char* result=fcomment && *fcomment?fcomment:0;
 private:                  if(can_be_empty)
                           return result; 
                   else
                           return result?result:"<no comment>";
           }
   
   protected:
   
           const char* ftype;
           const String* fproblem_source;
           char* fcomment;
   
         mutable const String *ftype, *fcode, *fproblem_source;  
         mutable char fcomment[MAX_STRING];  
 };  };
   
 #endif  #endif

Removed from v.1.10  
changed lines
  Added in v.1.51


E-mail: