Diff for /parser3/src/main/pa_exception.C between versions 1.8 and 1.62

version 1.8, 2001/03/19 16:44:02 version 1.62, 2023/09/26 20:49:10
Line 1 Line 1
 /** @file  /** @file
         Parser          Parser: exception class.
         Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)  
         Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)  
   
         $Id$          Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com)
           Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
 */  */
   
 #include <stdio.h>  
 #include <stdlib.h>  
   
 #include "pa_common.h"  #include "pa_common.h"
 #include "pa_exception.h"  #include "pa_exception.h"
   #include "pa_sapi.h"
   #include "pa_globals.h"
   
   volatile const char * IDENT_PA_EXCEPTION_C="$Id$" IDENT_PA_EXCEPTION_H;
   
   // methods
   
   Exception::Exception(): ftype(0), fproblem_source(0), fcomment(0) {}
   
   Exception::Exception(const Exception& src):
           ftype(src.ftype),
           fproblem_source(src.fproblem_source),
           fcomment(src.fcomment) {
   }
   
   Exception& Exception::operator =(const Exception& src) {
           ftype=src.ftype;
           fproblem_source=src.fproblem_source;
           fcomment=src.fcomment;
           return *this;
   }
   
 void Exception::_throw(const String *atype, const String *acode,  Exception::Exception(const char* atype, const String* aproblem_source, const char* comment_fmt, ...) {
                                           const String *aproblem_source,   
                                           const char *comment_fmt, ...) const {  
         ftype=atype;          ftype=atype;
         fcode=acode;          fproblem_source=aproblem_source ? new String(*aproblem_source) : 0;
         fproblem_source=aproblem_source;  
   
         if(comment_fmt) {          if(!comment_fmt) {
                   fcomment=0;
           } else if (!strcmp(comment_fmt, "%s")) { // to avoid MAX_STRING limit
                   va_list args;
                   va_start(args, comment_fmt);
                   fcomment=va_arg(args, const char *);
                   fcomment=fcomment ? pa_strdup(fcomment) : 0;
                   va_end(args);
           } else {
                   char comment[MAX_STRING];
                 va_list args;                  va_list args;
                 va_start(args, comment_fmt);                  va_start(args, comment_fmt);
                 vsnprintf(fcomment, MAX_STRING, comment_fmt, args);                  fcomment=pa_strdup(comment, vsnprintf(comment, MAX_STRING, comment_fmt, args));
                 va_end(args);                  va_end(args);
         } else           }
                 fcomment[0]=0;  }
   
   void Exception::add_comment(const char* acomment) {
           if(acomment)
                   fcomment=pa_strcat(fcomment, acomment);
   }
   
         longjmp(mark, 1);  const String* Exception::problem_source() const {
           return fproblem_source && !fproblem_source->is_empty() ? fproblem_source : 0;
 }  }

Removed from v.1.8  
changed lines
  Added in v.1.62


E-mail: