Diff for /parser3/src/main/pa_exception.C between versions 1.3 and 1.61

version 1.3, 2001/01/30 13:43:43 version 1.61, 2021/11/10 10:20:27
Line 1 Line 1
 /*  /** @file
   $Id$          Parser: exception class.
 */  
   
 #include <stdio.h>          Copyright (c) 2001-2020 Art. Lebedev Studio (http://www.artlebedev.com)
 #include <stdlib.h>          Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
   */
   
 #include "pa_exception.h"  
 #include "pa_common.h"  #include "pa_common.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) {
   }
   
 void Exception::raise(const String *atype, const String *acode,  Exception& Exception::operator =(const Exception& src) {
                                           const String *aproblem_source,           ftype=src.ftype;
                                           const char *comment_fmt, ...) {          fproblem_source=src.fproblem_source;
           fcomment=src.fcomment;
           return *this;
   }
   
   Exception::Exception(const char* atype, const String* aproblem_source, const char* comment_fmt, ...) {
         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.3  
changed lines
  Added in v.1.61


E-mail: