]> mj.ucw.cz Git - eval.git/blobdiff - judge/token.c
Isolate: Updating TODO
[eval.git] / judge / token.c
index 3c8ce38cd71c68e642ca9a767bd4eef9b6f20388..85f5069420e96755f2f98e7299f3fa4469055f12 100644 (file)
@@ -34,9 +34,9 @@ void tok_err(struct tokenizer *t, char *msg, ...)
 {
   va_list args;
   va_start(args, msg);
 {
   va_list args;
   va_start(args, msg);
-  printf("%s:%d: ", t->stream->name, t->line);
-  vprintf(msg, args);
-  putchar('\n');
+  fprintf(stderr, "Error at %s line %d:\n", t->stream->name, t->line);
+  vfprintf(stderr, msg, args);
+  fputc('\n', stderr);
   va_end(args);
   exit(1);
 }
   va_end(args);
   exit(1);
 }
@@ -101,6 +101,8 @@ char *get_token(struct tokenizer *t)
 #define PARSE(f, ...)                                          \
        char *end;                                              \
        errno = 0;                                              \
 #define PARSE(f, ...)                                          \
        char *end;                                              \
        errno = 0;                                              \
+       if (!t->toksize)                                        \
+         return 0;                                             \
        *x = f(t->token, &end, ##__VA_ARGS__);                  \
        return !(errno || (unsigned char *) end != t->token + t->toksize)
 
        *x = f(t->token, &end, ##__VA_ARGS__);                  \
        return !(errno || (unsigned char *) end != t->token + t->toksize)
 
@@ -161,3 +163,10 @@ GET(long, long int)
 GET(ulong, unsigned long int)
 GET(double, double)
 GET(long_double, long double)
 GET(ulong, unsigned long int)
 GET(double, double)
 GET(long_double, long double)
+
+void get_nl(struct tokenizer *t)
+{
+  char *tok = get_token(t);
+  if (tok && *tok)
+    tok_err(t, "Expected end of line");
+}