This file will pass the parser:
class ParseTest: SomeClass {
let description = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariable), \(fifthVar)"
}
This file results in either a hang or an OutOfMemoryError:
class ParseTest: SomeClass {
let description = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariable), \(fifthVari)"
}
Note the additional character near the end of the middle line. It seems that the parser will break with some combinations of string length and number of string interpolations. I've been unable to determine exactly what thresholds trigger this, but here are some other lines that I've tested, followed by whether they work or hang the parser
let a = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariableVariableTesting)" // works
let b = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariable) \(variableTesting)" // hangs
let c = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariableVariableTesting.test)" // works
let d = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariable) \(variableTesting) \(test)" // hangs
let e = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariableVariableTesting.test), \(test)" // hangs
let f = "\(firstVariable), \(secondVariable), \(thirdVariable), \(fourthVariableVariableTesting.test), test" //works
let g = "\(first), \(second), \(third), \(fourth), \(fifthVariable)" // works
let h = "\(first), \(second), \(third), \(fourth), \(fifthVariable) \(sixthVariable)" // hangs
let i = "\(first), \(second), \(third), \(fourth), \(fifth) \(sixth)" // works
Example stack traces from error:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.antlr.v4.runtime.atn.ATNConfigSet$AbstractConfigHashSet.createBuckets(ATNConfigSet.java:402)
at org.antlr.v4.runtime.atn.ATNConfigSet$AbstractConfigHashSet.createBuckets(ATNConfigSet.java:381)
at org.antlr.v4.runtime.misc.Array2DHashSet.expand(Array2DHashSet.java:166)
at org.antlr.v4.runtime.misc.Array2DHashSet.getOrAdd(Array2DHashSet.java:82)
at org.antlr.v4.runtime.atn.ATNConfigSet.add(ATNConfigSet.java:170)
at org.antlr.v4.runtime.atn.ATNConfigSet.add(ATNConfigSet.java:146)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:473)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at org.antlr.v4.runtime.atn.ATNConfigSet$AbstractConfigHashSet.createBucket(ATNConfigSet.java:407)
at org.antlr.v4.runtime.atn.ATNConfigSet$AbstractConfigHashSet.createBucket(ATNConfigSet.java:381)
at org.antlr.v4.runtime.misc.Array2DHashSet.expand(Array2DHashSet.java:188)
at org.antlr.v4.runtime.misc.Array2DHashSet.getOrAdd(Array2DHashSet.java:82)
at org.antlr.v4.runtime.atn.ATNConfigSet.add(ATNConfigSet.java:170)
at org.antlr.v4.runtime.atn.ATNConfigSet.add(ATNConfigSet.java:146)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:473)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:462)
at org.antlr.v4.runtime.atn.LexerATNSimulator.closure(LexerATNSimulator.java:482)
at org.antlr.v4.runtime.atn.LexerATNSimulator.getReachableConfigSet(LexerATNSimulator.java:369)
at org.antlr.v4.runtime.atn.LexerATNSimulator.computeTargetState(LexerATNSimulator.java:304)
at org.antlr.v4.runtime.atn.LexerATNSimulator.execATN(LexerATNSimulator.java:231)
at org.antlr.v4.runtime.atn.LexerATNSimulator.match(LexerATNSimulator.java:141)
at org.antlr.v4.runtime.Lexer.nextToken(Lexer.java:165)
at org.antlr.v4.runtime.BufferedTokenStream.fetch(BufferedTokenStream.java:185)
at org.antlr.v4.runtime.BufferedTokenStream.sync(BufferedTokenStream.java:168)
at org.antlr.v4.runtime.BufferedTokenStream.nextTokenOnChannel(BufferedTokenStream.java:340)
at org.antlr.v4.runtime.CommonTokenStream.adjustSeekIndex(CommonTokenStream.java:94)
at org.antlr.v4.runtime.BufferedTokenStream.consume(BufferedTokenStream.java:153)
at org.antlr.v4.runtime.atn.ParserATNSimulator.execATN(ParserATNSimulator.java:556)
at org.antlr.v4.runtime.atn.ParserATNSimulator.adaptivePredict(ParserATNSimulator.java:412)
at com.sleekbyte.tailor.antlr.SwiftParser.pattern(SwiftParser.java:10329)
at com.sleekbyte.tailor.antlr.SwiftParser.patternInitializer(SwiftParser.java:5034)
at com.sleekbyte.tailor.antlr.SwiftParser.patternInitializerList(SwiftParser.java:4976)
Lastly, note that this issue exists in 0.7.0, but does not exist in v0.5.0.
Sorry that I can't be more precise. Hope this helps.
This file will pass the parser:
This file results in either a hang or an
OutOfMemoryError:Note the additional character near the end of the middle line. It seems that the parser will break with some combinations of string length and number of string interpolations. I've been unable to determine exactly what thresholds trigger this, but here are some other lines that I've tested, followed by whether they work or hang the parser
Example stack traces from error:
Lastly, note that this issue exists in 0.7.0, but does not exist in v0.5.0.
Sorry that I can't be more precise. Hope this helps.