diff options
| author | 2019-06-03 10:48:16 -0400 | |
|---|---|---|
| committer | 2019-06-03 10:48:16 -0400 | |
| commit | 6e8beff0a0eb829eb4f4f55df53d97c5a9815e29 (patch) | |
| tree | 36647ea51b9d57a6a2e03c561f3a9d29bc363ede | |
| parent | Fix redefinition. (diff) | |
Add optional argument to parser/where to set index.
DSLs that use the parser API can use this to more accurately
report source location.
| -rw-r--r-- | src/core/parse.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/core/parse.c b/src/core/parse.c index 64127350..9b92404e 100644 --- a/src/core/parse.c +++ b/src/core/parse.c @@ -801,9 +801,15 @@ static Janet cfun_parse_flush(int32_t argc, Janet *argv) { } static Janet cfun_parse_where(int32_t argc, Janet *argv) { - janet_fixarity(argc, 1); + janet_arity(argc, 1, 2); JanetParser *p = janet_getabstract(argv, 0, &janet_parse_parsertype); - return janet_wrap_integer(p->offset); + if (argc > 1) { + int32_t offset = janet_getinteger(argv, 1); + p->offset = offset; + return argv[0]; + } else { + return janet_wrap_integer(p->offset); + } } static Janet cfun_parse_state(int32_t argc, Janet *argv) { @@ -921,10 +927,10 @@ static const JanetReg parse_cfuns[] = { }, { "parser/where", cfun_parse_where, - JDOC("(parser/where parser)\n\n" + JDOC("(parser/where parser &opt offset)\n\n" "Returns the current line number and column number of the parser's location " - "in the byte stream as a tuple (line, column). Lines and columns are counted from " - "1, (the first byte is line 1, column 1) and a newline is considered ASCII 0x0A.") + "in the byte stream as an index, counted from 0. " + "If offset is supplied, then the byte offset is updated to that new value.") }, { "parser/eof", cfun_parse_eof, |
