f84f4ea07153528a12d96ce39cccef38031e1065 kent Fri Aug 23 21:08:18 2019 -0700 Adding 'not' operation and renaming split to word and separate to chop to help distinguish it a bit from python since the split doesn't quite work like python's diff --git src/lib/tokenizer.c src/lib/tokenizer.c index 875cd59..2a55077 100644 --- src/lib/tokenizer.c +++ src/lib/tokenizer.c @@ -180,37 +180,37 @@ void tokenizerErrAbort(struct tokenizer *tkz, char *format, ...) /* Print error message followed by file and line number and * abort. */ { va_list args; va_start(args, format); vaWarn(format, args); errAbort("line %d of %s:\n%s", tokenizerLineCount(tkz), tokenizerFileName(tkz), tkz->curLine); } void tokenizerNotEnd(struct tokenizer *tkz) /* Squawk if at end. */ { if (tkz->eof) - errAbort("Unexpected end of input %s", tkz->lf->fileName); + errAbort("Unexpected end of input line %d of %s", tkz->lf->lineIx, tkz->lf->fileName); } char *tokenizerMustHaveNext(struct tokenizer *tkz) /* Get next token, which must be there. */ { char *s = tokenizerNext(tkz); if (s == NULL) - errAbort("Unexpected end of input %s", tkz->lf->fileName); + errAbort("Unexpected end of input line %d of %s", tkz->lf->lineIx, tkz->lf->fileName); return s; } void tokenizerMustMatch(struct tokenizer *tkz, char *string) /* Require next token to match string. Return next token * if it does, otherwise abort. */ { if (sameWord(tkz->string, string)) tokenizerMustHaveNext(tkz); else tokenizerErrAbort(tkz, "Expecting %s got %s", string, tkz->string); }