diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-08-28 15:59:22 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-09-02 13:06:53 +0200 |
| commit | a7206b24cac96c08aecf2f3b4cc3c2e555eec708 (patch) | |
| tree | 80c678141148ce2eafaab5617f168bd840b8c8a6 /pkg/ast | |
| parent | aa51461a34f998908d10f551615ad242bdff8fe9 (diff) | |
pkg/compiler: check and generate types
Move most of the logic from sysgen to pkg/compiler.
Update #217
Diffstat (limited to 'pkg/ast')
| -rw-r--r-- | pkg/ast/parser.go | 4 | ||||
| -rw-r--r-- | pkg/ast/scanner.go | 16 |
2 files changed, 10 insertions, 10 deletions
diff --git a/pkg/ast/parser.go b/pkg/ast/parser.go index fd7b9ad4f..214be7fb9 100644 --- a/pkg/ast/parser.go +++ b/pkg/ast/parser.go @@ -96,10 +96,10 @@ func (p *parser) parseTopRecover() Node { case nil: case skipLine: // Try to recover by consuming everything until next NEWLINE. - for p.tok != tokNewLine { + for p.tok != tokNewLine && p.tok != tokEOF { p.next() } - p.consume(tokNewLine) + p.tryConsume(tokNewLine) default: panic(err) } diff --git a/pkg/ast/scanner.go b/pkg/ast/scanner.go index f1573350b..6dab16183 100644 --- a/pkg/ast/scanner.go +++ b/pkg/ast/scanner.go @@ -134,19 +134,19 @@ func (s *scanner) Scan() (tok token, lit string, pos Pos) { s.next() case s.ch == '`': tok = tokCExpr - for s.next(); s.ch != '`'; s.next() { - if s.ch == 0 || s.ch == '\n' { - s.Error(pos, "C expression is not terminated") - break - } + for s.next(); s.ch != '`' && s.ch != '\n'; s.next() { + } + if s.ch == '\n' { + s.Error(pos, "C expression is not terminated") + } else { + lit = string(s.data[pos.Off+1 : s.off]) + s.next() } - lit = string(s.data[pos.Off+1 : s.off]) - s.next() case s.prev2 == tokDefine && s.prev1 == tokIdent: // Note: the old form for C expressions, not really lexable. // TODO(dvyukov): get rid of this eventually. tok = tokCExpr - for s.next(); s.ch != '\n'; s.next() { + for ; s.ch != '\n'; s.next() { } lit = string(s.data[pos.Off:s.off]) case s.ch == '#': |
