From 13110f48e948d7554500aefc336e72f96041386b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 28 Aug 2018 00:42:13 +0300 Subject: Log errors --- crates/libsyntax2/src/parser_impl/mod.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'crates/libsyntax2/src') diff --git a/crates/libsyntax2/src/parser_impl/mod.rs b/crates/libsyntax2/src/parser_impl/mod.rs index f60ef80f0..b343b404f 100644 --- a/crates/libsyntax2/src/parser_impl/mod.rs +++ b/crates/libsyntax2/src/parser_impl/mod.rs @@ -1,6 +1,8 @@ mod event; mod input; +use std::cell::Cell; + use { lexer::Token, parser_api::Parser, @@ -51,6 +53,7 @@ pub(crate) struct ParserImpl<'t> { pos: InputPosition, events: Vec, + steps: Cell, } impl<'t> ParserImpl<'t> { @@ -60,6 +63,7 @@ impl<'t> ParserImpl<'t> { pos: InputPosition::new(), events: Vec::new(), + steps: Cell::new(0), } } @@ -91,6 +95,12 @@ impl<'t> ParserImpl<'t> { } pub(super) fn nth(&self, n: u32) -> SyntaxKind { + let steps = self.steps.get(); + if steps > 10_000_000 { + panic!("the parser seems stuck"); + } + self.steps.set(steps + 1); + self.inp.kind(self.pos + n) } -- cgit v1.2.3