utils.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * The Amsterdam Compiler Kit
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. *
  5. * Author: Manoel Trapier
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <stdarg.h>
  10. #include "param.h"
  11. #include "tables.h"
  12. #include "types.h"
  13. #include "data.h"
  14. #include "gencode.h"
  15. #include "utils.h"
  16. #ifdef TABLEDEBUG
  17. static void ruletrace();
  18. #endif
  19. /*VARARGS1*/
  20. void error(char *s, ...)
  21. {
  22. va_list ap;
  23. fprintf(stderr,"Error: ");
  24. va_start(ap, s);
  25. vfprintf(stderr, s, ap);
  26. va_end(ap);
  27. fprintf(stderr,"\n");
  28. #ifdef TABLEDEBUG
  29. ruletrace();
  30. #endif
  31. out_finish();
  32. exit(-1);
  33. }
  34. /*VARARGS1*/
  35. void fatal(char *s, ...)
  36. {
  37. va_list ap;
  38. fprintf(stderr,"Fatal: ");
  39. va_start(ap, s);
  40. vfprintf(stderr, s, ap);
  41. va_end(ap);
  42. fprintf(stderr,"\n");
  43. #ifdef TABLEDEBUG
  44. ruletrace();
  45. #endif
  46. out_finish();
  47. abort();
  48. exit(-1);
  49. }
  50. #ifdef TABLEDEBUG
  51. static void ruletrace()
  52. {
  53. int i;
  54. extern int tablelines[MAXTDBUG];
  55. extern int ntableline;
  56. extern char *tablename;
  57. fprintf(stderr,"Last code rules used\n");
  58. i=ntableline-1;
  59. while(i!=ntableline) {
  60. if (i<0)
  61. i += MAXTDBUG;
  62. if (tablelines[i]!=0)
  63. fprintf(stderr,"\"%d: \"%s\", line %d\n",i,tablename,tablelines[i]);
  64. i--;
  65. }
  66. }
  67. #endif
  68. #ifndef NDEBUG
  69. void badassertion(char *asstr, char *file, int line)
  70. {
  71. fatal("\"%s\", line %d:Assertion \"%s\" failed", file, line, asstr);
  72. }
  73. #endif