Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include "parse/parse.h"
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. #include "trace.h"
  5. void l2_parse_err(struct l2_parse_error *err, struct l2_token *tok, const char *fmt, ...) {
  6. err->line = tok->line;
  7. err->ch = tok->ch;
  8. char buf[256];
  9. va_list va;
  10. va_start(va, fmt);
  11. int n = vsnprintf(buf, sizeof(buf), fmt, va);
  12. if (n < 0) {
  13. const char *message = "Failed to generate error message!";
  14. err->message = malloc(strlen(message) + 1);
  15. strcpy(err->message, message);
  16. va_end(va);
  17. l2_trace("Parse error: %s", err->message);
  18. return;
  19. } else if (n + 1 < sizeof(buf)) {
  20. err->message = malloc(n + 1);
  21. strcpy(err->message, buf);
  22. va_end(va);
  23. l2_trace("Parse error: %s", err->message);
  24. return;
  25. }
  26. // Need to allocate for this one
  27. err->message = malloc(n + 1);
  28. vsnprintf(err->message, n + 1, fmt, va);
  29. va_end(va);
  30. l2_trace("Parse error: %s", err->message);
  31. }
  32. void l2_parse_error_free(struct l2_parse_error *err) {
  33. free(err->message);
  34. }