Pop grammar rules that result in infinite loops

This commit is contained in:
Corey Johnson & Nathan Sobo
2013-03-22 10:38:48 -07:00
parent 266c305ebb
commit 84fe0a384d
3 changed files with 34 additions and 1 deletions

View File

@@ -31,9 +31,10 @@ class TextMateGrammar
ruleStack = new Array(ruleStack...) # clone ruleStack
tokens = []
position = 0
loop
scopes = scopesFromStack(ruleStack)
previousRuleStackLength = ruleStack.length
previousPosition = position
if line.length == 0
tokens = [new Token(value: "", scopes: scopes)]
@@ -61,6 +62,10 @@ class TextMateGrammar
))
break
if position == previousPosition and ruleStack.length == previousRuleStackLength
console.error("Popping rule because it loops at column #{position} of line '#{line}'", _.clone(ruleStack))
ruleStack.pop()
ruleStack.forEach (rule) -> rule.clearAnchorPosition()
{ tokens, ruleStack }