Diff for /parser3/src/main/pa_exception.C between versions 1.35 and 1.54

version 1.35, 2002/01/28 10:33:52 version 1.54, 2017/02/07 22:00:43
Line 1 Line 1
 /** @file  /** @file
         Parser: exception class.          Parser: exception class.
   
         Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)          Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com)
         Author: Alexander Petrosyan <paf@design.ru> (http://paf.design.ru)          Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
   
         $Id$  
 */  */
   
 #include "pa_common.h"  #include "pa_common.h"
 #include "pa_exception.h"  #include "pa_exception.h"
   #include "pa_sapi.h"
 #include "pa_globals.h"  #include "pa_globals.h"
   
 Exception::Exception() {  volatile const char * IDENT_PA_EXCEPTION_C="$Id$" IDENT_PA_EXCEPTION_H;
         ftype=fcode=fproblem_source=0;  
         owns_comment=false; fcomment=0;  
 }  
 Exception::Exception(const String *atype, const String *acode,  
                                           const String *aproblem_source,   
                                           const char *comment_fmt, ...) {  
         //_asm int 3;  
 //__asm__("int3");  
         ftype=atype;  
         fcode=acode;  
         fproblem_source=aproblem_source;  
         owns_comment=true;  
   
         if(comment_fmt) {  // methods
                 fcomment=(char *)malloc(MAX_STRING);  
                 va_list args;  Exception::Exception(): ftype(0), fproblem_source(0), fcomment(0) {}
                 va_start(args, comment_fmt);  Exception::Exception(const Exception& src):
                 vsnprintf(fcomment, MAX_STRING, comment_fmt, args);  
                 va_end(args);  
         } else  
                 fcomment=0;  
 }  
 Exception::Exception(const Exception& src) :   
         ftype(src.ftype),          ftype(src.ftype),
         fcode(src.fcode),  
         fproblem_source(src.fproblem_source),          fproblem_source(src.fproblem_source),
         fcomment(src.fcomment),          fcomment(src.fcomment) {
         owns_comment(src.owns_comment) {  
         // that ugly string got from STL, along with principal ideal  
         const_cast<Exception *>(&src)->owns_comment=false;  
 }  }
 Exception& Exception::operator =(const Exception& src) {  Exception& Exception::operator =(const Exception& src) {
         ftype=src.ftype;          ftype=src.ftype;
         fcode=src.fcode;  
         fproblem_source=src.fproblem_source;          fproblem_source=src.fproblem_source;
   
         if(owns_comment)  
                 free(fcomment);  
         fcomment=src.fcomment;          fcomment=src.fcomment;
         // that ugly string got from STL, along with principal ideal  
         owns_comment=src.owns_comment;  ((Exception*)&src)->owns_comment=false;  
           
         return *this;          return *this;
 }  }
 Exception::~Exception() {  
         if(owns_comment)  
                 free(fcomment);  
 }  
   
 #ifdef XML  Exception::Exception(const char* atype, 
 Exception::Exception(                          const String* aproblem_source, 
         const String *atype, const String *acode,                          const char* comment_fmt, ...) {
         const String *aproblem_source,           ftype=atype;
         GdomeException& exc) :          fproblem_source=aproblem_source ? new String(*aproblem_source) : 0;
         ftype(atype),  
         fcode(acode),          if(comment_fmt) {
         fproblem_source(aproblem_source),                  fcomment=new(PointerFreeGC) char[MAX_STRING];
         owns_comment(true) {                  va_list args;
                   va_start(args, comment_fmt);
         const char *xml_generic_errors=xmlGenericErrors();                  vsnprintf((char *)fcomment, MAX_STRING, comment_fmt, args);
         if(xml_generic_errors || exc) {                  va_end(args);
                 const char *s;  
                 switch((GdomeExceptionCode)exc) {  
                 case GDOME_NOEXCEPTION_ERR: s="NOEXCEPTION_ERR"; break;  
                 case GDOME_INDEX_SIZE_ERR: s="INDEX_SIZE_ERR"; break;  
                 case GDOME_DOMSTRING_SIZE_ERR: s="DOMSTRING_SIZE_ERR"; break;  
                 case GDOME_HIERARCHY_REQUEST_ERR: s="HIERARCHY_REQUEST_ERR"; break;  
                 case GDOME_WRONG_DOCUMENT_ERR: s="WRONG_DOCUMENT_ERR"; break;  
                 case GDOME_INVALID_CHARACTER_ERR: s="INVALID_CHARACTER_ERR"; break;  
                 case GDOME_NO_DATA_ALLOWED_ERR: s="NO_DATA_ALLOWED_ERR"; break;  
                 case GDOME_NO_MODIFICATION_ALLOWED_ERR: s="NO_MODIFICATION_ALLOWED_ERR"; break;  
                 case GDOME_NOT_FOUND_ERR: s="NOT_FOUND_ERR"; break;  
                 case GDOME_NOT_SUPPORTED_ERR: s="NOT_SUPPORTED_ERR"; break;  
                 case GDOME_INUSE_ATTRIBUTE_ERR: s="INUSE_ATTRIBUTE_ERR"; break;  
                 case GDOME_INVALID_STATE_ERR: s="INVALID_STATE_ERR"; break;  
                 case GDOME_SYNTAX_ERR: s="SYNTAX_ERR"; break;  
                 case GDOME_INVALID_MODIFICATION_ERR: s="INVALID_MODIFICATION_ERR"; break;  
                 case GDOME_NAMESPACE_ERR: s="NAMESPACE_ERR"; break;  
                 case GDOME_INVALID_ACCESS_ERR: s="INVALID_ACCESS_ERR"; break;  
                 case GDOME_NULL_POINTER_ERR: s="NULL_POINTER_ERR"; break;  
                 default: s="<UNKNOWN CODE>"; break;  
                 }  
                   
                 fcomment=(char *)malloc(MAX_STRING);  
                 const char *xml_error_message=  
                         xml_generic_errors?xml_generic_errors:"<no xml_generic_errors>";  
                 const char *xml_error_prefix=  
                         xml_generic_errors?"\n":"";  
                 if(exc)  
                         snprintf(fcomment, MAX_STRING,   
                                 "DOMException %s (%d)."  
                                 "%s%s",   
                                         s,  // decoded code of exception  
                                         exc, // DOM exception code  
                                         xml_error_prefix, xml_error_message // xml generic messages accumulated  
                         );  
                 else // no DOM exception  
                         snprintf(fcomment, MAX_STRING,   
                                 "%s",   
                                         xml_error_message // xml generic messages accumulated  
                         );  
                 if(xml_generic_errors)  
                         free((void *)xml_generic_errors);  
         } else          } else
                 fcomment=0;                  fcomment=0;
 }  }
 #endif  
   const String* Exception::problem_source() const { 
           return fproblem_source && !fproblem_source->is_empty()?fproblem_source:0; 
   }

Removed from v.1.35  
changed lines
  Added in v.1.54


E-mail: