diff options
Diffstat (limited to 'parser.d')
| -rw-r--r-- | parser.d | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -252,6 +252,7 @@ class Parser { int line; bool peekable() { + writefln("pos %d source %d", pos, source.length); return (pos < source.length); } @@ -259,25 +260,36 @@ class Parser { if (pos < source.length) { return source[pos]; } else { - //writeln("peek returns null"); + writeln("peek returns null"); return '\0'; } } char advance() { + if (!peekable()) { + writeln("trying to advance() beyond the end!!!"); + return '\0'; + } else { + char ret = peek(); + pos++; + return ret; + } + /* char ret = peek(); if (ret != '\0') { pos++; } return ret; + */ } void skipWhitespace() { - while (canFind([' ', '\t', '\r', '\n'], peek())) { + while (peekable() && canFind([' ', '\t', '\r', '\n'], peek())) { if (peek() == '\n') { line++; } - pos++; + //pos++; + advance(); } } @@ -353,6 +365,8 @@ class Parser { advance(); // closing paren + writefln("ending DEF pos %d", pos); + return def; } @@ -406,6 +420,7 @@ class Parser { return new ParseError("unterminated block", line); } + writefln("ending block pos %d", pos); advance(); // consume closing paren return block; @@ -480,6 +495,9 @@ class Parser { default: return parseSymbol(); } + + writeln("FELL THROUGH ON PARSE FORM"); + advance(); return new Atom(0, -1); |
