Diff for /parser3/src/include/pa_exception.h between versions 1.55 and 1.68

version 1.55, 2009/07/15 12:58:07 version 1.68, 2020/12/15 17:10:31
Line 1 Line 1
 /** @file  /** @file
         Parser: exception decls.          Parser: exception decls.
   
         Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com)          Copyright (c) 2001-2020 Art. Lebedev Studio (http://www.artlebedev.com)
         Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)          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
   
 static const char * const IDENT_EXCEPTION_H="$Date$";  #define IDENT_PA_EXCEPTION_H "$Id$"
   
 const char* const PARSER_RUNTIME = "parser.runtime";  const char* const PARSER_RUNTIME = "parser.runtime";
 const char* const IMAGE_FORMAT = "image.format";  const char* const IMAGE_FORMAT = "image.format";
 const char* const PCRE_EXCEPTION_TYPE = "pcre.execute";  const char* const PCRE_EXCEPTION_TYPE = "pcre.execute";
 const char* const DATE_RANGE_EXCEPTION_TYPE = "date.range";  const char* const DATE_RANGE_EXCEPTION_TYPE = "date.range";
   const char* const BASE64_FORMAT = "base64.format";
   
 const char* const NAME_MUST_BE_STRING = "name must be string";  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 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 VALUE_MUST_BE_STRING = "value must be string";
 const char* const PARAMETER_MUST_BE_STRING = "parameter 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 COLUMN_NAME_MUST_BE_STRING = "column name must be string";
   
   const char* const FILE_NAME_MUST_BE_SPECIFIED = "file name must be specified";
 const char* const FILE_NAME_MUST_NOT_BE_CODE = "file name must not be code";  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 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 PARAM_MUST_NOT_BE_CODE = "param must not be code";
   const char* const PARAM_MUST_BE_HASH = "param must be hash";
 const char* const MODE_MUST_NOT_BE_CODE = "mode must not be code";  const char* const MODE_MUST_NOT_BE_CODE = "mode must not be code";
 const char* const OPTIONS_MUST_NOT_BE_CODE = "options must not be code";  const char* const OPTIONS_MUST_NOT_BE_CODE = "options must not be code";
   
   const char* const CALLED_WITH_INVALID_OPTION = "called with invalid option";
   
 // includes  // includes
   
 #include "pa_memory.h"  #include "pa_memory.h"
Line 45  class Exception { Line 46  class Exception {
 public:  public:
   
         Exception();          Exception();
         Exception(          Exception(const char* atype, const String* aproblem_source, const char* comment_fmt, ...);
                 const char* atype,  
                 const String* aproblem_source,   
                 const char* comment_fmt, ...);  
         Exception(const Exception& src);          Exception(const Exception& src);
   
         operator bool() { return ftype || fproblem_source || fcomment; }          operator bool() { return ftype || fproblem_source || fcomment; }
         Exception& operator =(const Exception& src);          Exception& operator =(const Exception& src);
   
         /// extracts exception type          /// extracts exception type
         const char* type(bool can_be_empty=false) const {           const char* type(bool can_be_empty=false) const {
                 if(can_be_empty)                  return can_be_empty || ftype ? ftype : "<no type>";
                         return ftype;   
                 else  
                         return ftype?ftype:"<no type>";  
         }          }
   
         /// extracts exception problem_source          /// extracts exception problem_source
         const String* problem_source() const;          const String* problem_source() const;
   
         /// extracts exception comment          /// extracts exception comment
         const char* comment(bool can_be_empty=false) const {           const char* comment(bool can_be_empty=false) const {
                 const char* result=fcomment && *fcomment?fcomment:0;                  const char* result=fcomment && *fcomment ? fcomment : 0;
                 if(can_be_empty)                  return can_be_empty || result ? result : "<no comment>";
                         return result;           }
                 else  
                         return result?result:"<no comment>";          // modifies exception to fine-tune error reporting
           void set_source(const String* aproblem_source) {
                   if(!problem_source())
                           fproblem_source=aproblem_source;
           }
   
           void add_comment(const char* acomment);
   
   #define ALTER_EXCEPTION_SOURCE(code, source)    \
           try {                                   \
                   code;                           \
           } catch (Exception& e) {                \
                   e.set_source(source);           \
                   rethrow;                        \
           }
   
   #define ALTER_EXCEPTION_COMMENT(code, comment)  \
           try {                                   \
                   code;                           \
           } catch (Exception& e) {                \
                   e.add_comment(comment);         \
                   rethrow;                        \
         }          }
   
 protected:  protected:
   
         const char* ftype;          const char* ftype;
         const String* fproblem_source;          const String* fproblem_source;
         char* fcomment;          const char* fcomment;
   
 };  };
   

Removed from v.1.55  
changed lines
  Added in v.1.68


E-mail: