Mercurial > repos > ktnyt > gembassy
diff GEMBASSY-1.0.3/gsoap/src/error2.c @ 0:8300eb051bea draft
Initial upload
author | ktnyt |
---|---|
date | Fri, 26 Jun 2015 05:19:29 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GEMBASSY-1.0.3/gsoap/src/error2.c Fri Jun 26 05:19:29 2015 -0400 @@ -0,0 +1,152 @@ +/* + error2.c + + Error handling. + +gSOAP XML Web services tools +Copyright (C) 2000-2008, Robert van Engelen, Genivia Inc. All Rights Reserved. +This part of the software is released under one of the following licenses: +GPL or Genivia's license for commercial use. +-------------------------------------------------------------------------------- +GPL license. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +Author contact information: +engelen@genivia.com / engelen@acm.org + +This program is released under the GPL with the additional exemption that +compiling, linking, and/or using OpenSSL is allowed. +-------------------------------------------------------------------------------- +A commercial use license is available from Genivia, Inc., contact@genivia.com +-------------------------------------------------------------------------------- +*/ + +#include "soapcpp2.h" + +#ifdef HAVE_CONFIG_H +#include "soapcpp2_yacc.h" +#else +#include "soapcpp2_yacc.tab.h" +#endif + +#define MAXERR 10 + +extern char yytext[]; /* lexeme found by the lexical analyzer */ + +static int lexerrno = 0; +static int synerrno = 0; +static int semerrno = 0; +static int semwarno = 0; + +char errbuf[1024]; /* to hold error messages */ + +/* +yyerror - called by parser from an error production with nonterminal `error' +*/ +void yyerror(char *s) +{ fprintf(stderr, "%s(%d): %s\n", filename, yylineno, s); +} + +/* +lexerror - called by lexical analyzer upon failure to recognize a token +*/ +void lexerror(const char *s) +{ fprintf(stderr, "%s(%d): %s: %s\n", filename, yylineno, s, yytext); + if (lexerrno++ >= MAXERR) + execerror("too many syntactic errors, bailing out"); +} + +/* +synerror - called by a semantic action in the yacc grammar +*/ +void synerror(const char *s) +{ fprintf(stderr, "%s(%d): Syntax error: %s\n", filename, yylineno-1, s); + if (synerrno++ >= MAXERR) + execerror("too many syntactic errors, bailing out"); +} + +/* +semerror - report semantic error from static checking +*/ +void semerror(const char *s) +{ fprintf(stderr, "\n%s(%d): **ERROR**: %s\n\n", filename, yylineno, s); + if (semerrno++ >= MAXERR) + execerror("too many semantic errors, bailing out"); +} + +/* +semwarn - report semantic warning from static checking +*/ +void semwarn(const char *s) +{ fprintf(stderr, "\n%s(%d): *WARNING*: %s\n\n", filename, yylineno, s); + semwarno++; +} + +/* +compliancewarn - report compliance warning +*/ +void compliancewarn(const char *s) +{ fprintf(stderr, "Compliance warning: %s\n", s); +} + +/* +typerror - report type error (a semantic error) +*/ +void typerror(const char *s) +{ fprintf(stderr, "%s(%d): Type error: %s\n", filename, yylineno, s); + if (semerrno++ >= MAXERR) + execerror("too many semantic errors, bailing out"); +} + +/* +execerror - print error message and terminate execution +*/ +void execerror(const char *s) +{ fprintf(stderr, "Critical error: %s\n", s); + exit(1); +} + +/* +progerror - called when check(expr) failed, i.e. upon programming error +*/ +void progerror(const char *s, const char *f, int l) +{ fprintf(stderr, "Program failure: %s in file %s line %d\n", s, f, l); + exit(1); +} + +/* +errstat - show error statistics +*/ +int errstat(void) +{ if (!lexerrno && !synerrno && !semerrno) + { fprintf(stderr, "\nCompilation successful "); + if (semwarno) + fprintf(stderr, "(%d warning%s)\n\n", semwarno, semwarno>1?"s":""); + else + fprintf(stderr, "\n\n"); + return 0; + } + fprintf(stderr, "\nThere were errors:\n"); + if (lexerrno) + fprintf(stderr, "%d lexical error%s\n", lexerrno, lexerrno>1?"s":""); + if (synerrno) + fprintf(stderr, "%d syntax error%s\n", synerrno, synerrno>1?"s":""); + if (semerrno) + fprintf(stderr, "%d semantic error%s\n", semerrno, semerrno>1?"s":""); + if (semwarno) + fprintf(stderr, "%d warning%s\n", semwarno, semwarno>1?"s":""); + fprintf(stderr, "\n"); + return -1; +}