forked from jasder/antlr
Merge pull request #1808 from hanjoes/migration
Fixing Problems after Swift3.1 Release
This commit is contained in:
commit
6d4e019b16
|
@ -123,7 +123,7 @@ open func emit() -> Token {
|
||||||
private func handleAcceptPositionForIdentifier() -> Bool {
|
private func handleAcceptPositionForIdentifier() -> Bool {
|
||||||
let tokenText = getText()
|
let tokenText = getText()
|
||||||
var identifierLength = 0
|
var identifierLength = 0
|
||||||
while ((identifierLength \< tokenText.length) && isIdentifierChar(tokenText[tokenText.characters.index(tokenText.startIndex, offsetBy: identifierLength)])) {
|
while ((identifierLength \< tokenText.characters.count) && isIdentifierChar(tokenText[tokenText.characters.index(tokenText.startIndex, offsetBy: identifierLength)])) {
|
||||||
identifierLength += 1
|
identifierLength += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,8 +137,8 @@ private func handleAcceptPositionForIdentifier() -> Bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func handleAcceptPositionForKeyword(_ keyword:String) -> Bool {
|
private func handleAcceptPositionForKeyword(_ keyword:String) -> Bool {
|
||||||
if getInputStream()!.index() > _tokenStartCharIndex + keyword.length {
|
if getInputStream()!.index() > _tokenStartCharIndex + keyword.characters.count {
|
||||||
let offset = keyword.length - 1
|
let offset = keyword.characters.count - 1
|
||||||
(getInterpreter() as! PositionAdjustingLexerATNSimulator).resetAcceptPosition(getInputStream()!, _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset)
|
(getInterpreter() as! PositionAdjustingLexerATNSimulator).resetAcceptPosition(getInputStream()!, _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -246,14 +246,7 @@ public class CommonToken: WritableToken {
|
||||||
if let r = r {
|
if let r = r {
|
||||||
typeString = r.getVocabulary().getDisplayName(type);
|
typeString = r.getVocabulary().getDisplayName(type);
|
||||||
}
|
}
|
||||||
return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+typeString+">"+channelStr+","+line+":"+getCharPositionInLine()+"]"
|
return "[@\(getTokenIndex()),\(start):\(stop)='\(txt)',<\(typeString)>\(channelStr),\(line):\(getCharPositionInLine())]"
|
||||||
// let desc: StringBuilder = StringBuilder()
|
|
||||||
// desc.append("[@\(getTokenIndex()),")
|
|
||||||
// desc.append("\(start):\(stop)='\(txt)',")
|
|
||||||
// desc.append("<\(typeString)>\(channelStr),")
|
|
||||||
// desc.append("\(line):\(getCharPositionInLine())]")
|
|
||||||
//
|
|
||||||
// return desc.toString()
|
|
||||||
}
|
}
|
||||||
public var visited: Bool {
|
public var visited: Bool {
|
||||||
get {
|
get {
|
||||||
|
|
|
@ -129,9 +129,6 @@ open class Lexer: Recognizer<LexerATNSimulator>
|
||||||
_text = nil
|
_text = nil
|
||||||
repeat {
|
repeat {
|
||||||
_type = CommonToken.INVALID_TYPE
|
_type = CommonToken.INVALID_TYPE
|
||||||
// print("nextToken line \(_tokenStartLine)" + " at \(try _input!.LA(1))" +
|
|
||||||
// " in mode \(mode)" +
|
|
||||||
// " at index \(_input!.index())" );
|
|
||||||
var ttype: Int
|
var ttype: Int
|
||||||
do {
|
do {
|
||||||
ttype = try getInterpreter().match(_input, _mode)
|
ttype = try getInterpreter().match(_input, _mode)
|
||||||
|
@ -189,12 +186,10 @@ open class Lexer: Recognizer<LexerATNSimulator>
|
||||||
open func popMode() throws -> Int {
|
open func popMode() throws -> Int {
|
||||||
if _modeStack.isEmpty {
|
if _modeStack.isEmpty {
|
||||||
throw ANTLRError.unsupportedOperation(msg: " EmptyStackException")
|
throw ANTLRError.unsupportedOperation(msg: " EmptyStackException")
|
||||||
//RuntimeException(" EmptyStackException")
|
|
||||||
//throwException() /* throw EmptyStackException(); } */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if LexerATNSimulator.debug {
|
if LexerATNSimulator.debug {
|
||||||
print("popMode back to \(_modeStack.peek())")
|
print("popMode back to \(String(describing: _modeStack.peek()))")
|
||||||
}
|
}
|
||||||
mode(_modeStack.pop())
|
mode(_modeStack.pop())
|
||||||
return _mode
|
return _mode
|
||||||
|
|
|
@ -25,7 +25,7 @@ open class Parser: Recognizer<ParserATNSimulator> {
|
||||||
|
|
||||||
|
|
||||||
public func visitTerminal(_ node: TerminalNode) {
|
public func visitTerminal(_ node: TerminalNode) {
|
||||||
print("consume \(node.getSymbol()) rule \(host.getRuleNames()[host._ctx!.getRuleIndex()])")
|
print("consume \(String(describing: node.getSymbol())) rule \(host.getRuleNames()[host._ctx!.getRuleIndex()])")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -329,7 +329,7 @@ open class ParserRuleContext: RuleContext {
|
||||||
var rules: Array<String> = recognizer.getRuleInvocationStack(self)
|
var rules: Array<String> = recognizer.getRuleInvocationStack(self)
|
||||||
// Collections.reverse(rules);
|
// Collections.reverse(rules);
|
||||||
rules = rules.reversed()
|
rules = rules.reversed()
|
||||||
return "ParserRuleContext\(rules){start= + \(start), stop=\(stop)}"
|
return "ParserRuleContext\(rules){start= + \(String(describing: start)), stop=\(String(describing: stop))}"
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,8 +118,6 @@ public func ==(lhs: ArrayPredictionContext, rhs: ArrayPredictionContext) -> Bool
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// return lhs.returnStates == rhs.returnStates && lhs.parents == rhs.parents
|
return lhs.returnStates == rhs.returnStates && lhs.parents == rhs.parents
|
||||||
|
|
||||||
return ArrayEquals(lhs.returnStates, rhs.returnStates) && ArrayEquals(lhs.parents, rhs.parents)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -352,7 +352,7 @@ open class LexerATNSimulator: ATNSimulator {
|
||||||
internal func accept(_ input: CharStream, _ lexerActionExecutor: LexerActionExecutor?,
|
internal func accept(_ input: CharStream, _ lexerActionExecutor: LexerActionExecutor?,
|
||||||
_ startIndex: Int, _ index: Int, _ line: Int, _ charPos: Int) throws {
|
_ startIndex: Int, _ index: Int, _ line: Int, _ charPos: Int) throws {
|
||||||
if LexerATNSimulator.debug {
|
if LexerATNSimulator.debug {
|
||||||
print("ACTION \(lexerActionExecutor)\n")
|
print("ACTION \(String(describing: lexerActionExecutor))\n")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1124,7 +1124,7 @@ open class ParserATNSimulator: ATNSimulator {
|
||||||
let altToPred: [SemanticContext?]? = try configs.getPredsForAmbigAlts(ambigAlts,nalts)
|
let altToPred: [SemanticContext?]? = try configs.getPredsForAmbigAlts(ambigAlts,nalts)
|
||||||
|
|
||||||
if debug {
|
if debug {
|
||||||
print("getPredsForAmbigAlts result \(altToPred)")
|
print("getPredsForAmbigAlts result \(String(describing: altToPred))")
|
||||||
}
|
}
|
||||||
return altToPred
|
return altToPred
|
||||||
}
|
}
|
||||||
|
@ -1747,7 +1747,7 @@ open class ParserATNSimulator: ATNSimulator {
|
||||||
}
|
}
|
||||||
|
|
||||||
if debug {
|
if debug {
|
||||||
print("config from pred transition=\(c)")
|
print("config from pred transition=\(String(describing: c))")
|
||||||
}
|
}
|
||||||
return c!
|
return c!
|
||||||
}
|
}
|
||||||
|
@ -1790,7 +1790,7 @@ open class ParserATNSimulator: ATNSimulator {
|
||||||
}
|
}
|
||||||
|
|
||||||
if debug {
|
if debug {
|
||||||
print("config from pred transition=\(c)")
|
print("config from pred transition=\(String(describing: c))")
|
||||||
}
|
}
|
||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
@ -1798,7 +1798,7 @@ open class ParserATNSimulator: ATNSimulator {
|
||||||
|
|
||||||
final func ruleTransition(_ config: ATNConfig, _ t: RuleTransition) -> ATNConfig {
|
final func ruleTransition(_ config: ATNConfig, _ t: RuleTransition) -> ATNConfig {
|
||||||
if debug {
|
if debug {
|
||||||
print("CALL rule \(getRuleName(t.target.ruleIndex!)), ctx=\(config.context)")
|
print("CALL rule \(getRuleName(t.target.ruleIndex!)), ctx=\(String(describing: config.context))")
|
||||||
}
|
}
|
||||||
|
|
||||||
let returnState: ATNState = t.followState
|
let returnState: ATNState = t.followState
|
||||||
|
@ -1958,7 +1958,7 @@ open class ParserATNSimulator: ATNSimulator {
|
||||||
_ to: DFAState?) throws -> DFAState? {
|
_ to: DFAState?) throws -> DFAState? {
|
||||||
var to = to
|
var to = to
|
||||||
if debug {
|
if debug {
|
||||||
print("EDGE \(from) -> \(to) upon \(getTokenName(t))")
|
print("EDGE \(String(describing: from)) -> \(String(describing: to)) upon \(getTokenName(t))")
|
||||||
}
|
}
|
||||||
|
|
||||||
if to == nil {
|
if to == nil {
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class ProfilingATNSimulator: ParserATNSimulator {
|
||||||
decisions[decision].timeInPrediction += (stop - start)
|
decisions[decision].timeInPrediction += (stop - start)
|
||||||
decisions[decision].invocations += 1
|
decisions[decision].invocations += 1
|
||||||
|
|
||||||
var SLL_k: Int64 = _sllStopIndex - _startIndex + 1
|
var SLL_k: Int64 = Int64(_sllStopIndex - _startIndex + 1)
|
||||||
decisions[decision].SLL_TotalLook += SLL_k
|
decisions[decision].SLL_TotalLook += SLL_k
|
||||||
decisions[decision].SLL_MinLook = decisions[decision].SLL_MinLook == 0 ? SLL_k : min(decisions[decision].SLL_MinLook, SLL_k)
|
decisions[decision].SLL_MinLook = decisions[decision].SLL_MinLook == 0 ? SLL_k : min(decisions[decision].SLL_MinLook, SLL_k)
|
||||||
if SLL_k > decisions[decision].SLL_MaxLook {
|
if SLL_k > decisions[decision].SLL_MaxLook {
|
||||||
|
@ -67,7 +67,7 @@ public class ProfilingATNSimulator: ParserATNSimulator {
|
||||||
}
|
}
|
||||||
|
|
||||||
if _llStopIndex >= 0 {
|
if _llStopIndex >= 0 {
|
||||||
var LL_k: Int64 = _llStopIndex - _startIndex + 1
|
var LL_k: Int64 = Int64(_llStopIndex - _startIndex + 1)
|
||||||
decisions[decision].LL_TotalLook += LL_k
|
decisions[decision].LL_TotalLook += LL_k
|
||||||
decisions[decision].LL_MinLook = decisions[decision].LL_MinLook == 0 ? LL_k : min(decisions[decision].LL_MinLook, LL_k)
|
decisions[decision].LL_MinLook = decisions[decision].LL_MinLook == 0 ? LL_k : min(decisions[decision].LL_MinLook, LL_k)
|
||||||
if LL_k > decisions[decision].LL_MaxLook {
|
if LL_k > decisions[decision].LL_MaxLook {
|
||||||
|
|
|
@ -626,7 +626,7 @@ public class BitSet: Hashable, CustomStringConvertible {
|
||||||
n = n - 2
|
n = n - 2
|
||||||
x = y
|
x = y
|
||||||
}
|
}
|
||||||
return n - ((x << 1) >>> 31)
|
return Int(n - ((x << 1) >>> 31))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the index of the first bit that is set to {@code false}
|
/// Returns the index of the first bit that is set to {@code false}
|
||||||
|
@ -988,7 +988,7 @@ public class BitSet: Hashable, CustomStringConvertible {
|
||||||
var i: Int = wordsInUse
|
var i: Int = wordsInUse
|
||||||
i -= 1
|
i -= 1
|
||||||
while i >= 0 {
|
while i >= 0 {
|
||||||
h ^= words[i] * (i + 1)
|
h ^= words[i] * Int64(i + 1)
|
||||||
i -= 1
|
i -= 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,9 @@ public func +(lhs: String, rhs: Token) -> String {
|
||||||
public func +(lhs: Token, rhs: String) -> String {
|
public func +(lhs: Token, rhs: String) -> String {
|
||||||
return lhs.description + rhs
|
return lhs.description + rhs
|
||||||
}
|
}
|
||||||
|
|
||||||
infix operator >>> : BitwiseShiftPrecedence
|
infix operator >>> : BitwiseShiftPrecedence
|
||||||
//infix operator >>> { associativity right precedence 160 }
|
|
||||||
func >>>(lhs: Int32, rhs: Int32) -> Int32 {
|
func >>>(lhs: Int32, rhs: Int32) -> Int32 {
|
||||||
let left = UInt32(bitPattern: lhs)
|
let left = UInt32(bitPattern: lhs)
|
||||||
let right = UInt32(bitPattern: rhs) % 32
|
let right = UInt32(bitPattern: rhs) % 32
|
||||||
|
@ -56,19 +57,17 @@ func >>>(lhs: Int, rhs: Int) -> Int {
|
||||||
return Int(bitPattern: left >> right)
|
return Int(bitPattern: left >> right)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func synced(_ lock: AnyObject, closure: () -> ()) {
|
||||||
public func synced(_ lock: AnyObject, closure: () -> ()) {
|
|
||||||
objc_sync_enter(lock)
|
objc_sync_enter(lock)
|
||||||
closure()
|
closure()
|
||||||
objc_sync_exit(lock)
|
objc_sync_exit(lock)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func intChar2String(_ i: Int) -> String {
|
||||||
public func intChar2String(_ i: Int) -> String {
|
|
||||||
return String(Character(integerLiteral: i))
|
return String(Character(integerLiteral: i))
|
||||||
}
|
}
|
||||||
|
|
||||||
public func log(_ message: String = "", file: String = #file, function: String = #function, lineNum: Int = #line) {
|
func log(_ message: String = "", file: String = #file, function: String = #function, lineNum: Int = #line) {
|
||||||
|
|
||||||
// #if DEBUG
|
// #if DEBUG
|
||||||
print("FILE: \(URL(fileURLWithPath: file).pathComponents.last!),FUNC: \(function), LINE: \(lineNum) MESSAGE: \(message)")
|
print("FILE: \(URL(fileURLWithPath: file).pathComponents.last!),FUNC: \(function), LINE: \(lineNum) MESSAGE: \(message)")
|
||||||
|
@ -77,8 +76,7 @@ public func log(_ message: String = "", file: String = #file, function: String =
|
||||||
// #endif
|
// #endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func RuntimeException(_ message: String = "", file: String = #file, function: String = #function, lineNum: Int = #line) {
|
||||||
public func RuntimeException(_ message: String = "", file: String = #file, function: String = #function, lineNum: Int = #line) {
|
|
||||||
// #if DEBUG
|
// #if DEBUG
|
||||||
let info = "FILE: \(URL(fileURLWithPath: file).pathComponents.last!),FUNC: \(function), LINE: \(lineNum) MESSAGE: \(message)"
|
let info = "FILE: \(URL(fileURLWithPath: file).pathComponents.last!),FUNC: \(function), LINE: \(lineNum) MESSAGE: \(message)"
|
||||||
// #else
|
// #else
|
||||||
|
@ -89,99 +87,37 @@ public func RuntimeException(_ message: String = "", file: String = #file, funct
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toInt(_ c: Character) -> Int {
|
||||||
public func toInt(_ c: Character) -> Int {
|
|
||||||
return c.unicodeValue
|
return c.unicodeValue
|
||||||
}
|
}
|
||||||
|
|
||||||
public func toInt32(_ data: [Character], _ offset: Int) -> Int {
|
func toInt32(_ data: [Character], _ offset: Int) -> Int {
|
||||||
return data[offset].unicodeValue | (data[offset + 1].unicodeValue << 16)
|
return data[offset].unicodeValue | (data[offset + 1].unicodeValue << 16)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func toLong(_ data: [Character], _ offset: Int) -> Int64 {
|
func toLong(_ data: [Character], _ offset: Int) -> Int64 {
|
||||||
let mask: Int64 = 0x00000000FFFFFFFF
|
let mask: Int64 = 0x00000000FFFFFFFF
|
||||||
let lowOrder: Int64 = Int64(toInt32(data, offset)) & mask
|
let lowOrder: Int64 = Int64(toInt32(data, offset)) & mask
|
||||||
return lowOrder | Int64(toInt32(data, offset + 2) << 32)
|
return lowOrder | Int64(toInt32(data, offset + 2) << 32)
|
||||||
}
|
}
|
||||||
|
|
||||||
public func toUUID(_ data: [Character], _ offset: Int) -> UUID {
|
func toUUID(_ data: [Character], _ offset: Int) -> UUID {
|
||||||
let leastSigBits: Int64 = toLong(data, offset)
|
let leastSigBits: Int64 = toLong(data, offset)
|
||||||
let mostSigBits: Int64 = toLong(data, offset + 4)
|
let mostSigBits: Int64 = toLong(data, offset + 4)
|
||||||
//TODO:NSUUID(mostSigBits, leastSigBits);
|
|
||||||
return UUID(mostSigBits: mostSigBits, leastSigBits: leastSigBits)
|
return UUID(mostSigBits: mostSigBits, leastSigBits: leastSigBits)
|
||||||
}
|
}
|
||||||
public func == <Element : Equatable>(
|
|
||||||
lhs: Array<Element?>, rhs: Array<Element?>
|
func ==<T:Equatable>(_ lhs: [T?], _ rhs: [T?]) -> Bool {
|
||||||
) -> Bool {
|
|
||||||
let lhsCount = lhs.count
|
if lhs.count != rhs.count {
|
||||||
if lhsCount != rhs.count {
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test referential equality.
|
for i in 0..<lhs.count {
|
||||||
if lhsCount == 0 || lhs._buffer.identity == rhs._buffer.identity {
|
if lhs[i] != rhs[i] {
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
var streamLHS = lhs.makeIterator()
|
|
||||||
var streamRHS = rhs.makeIterator()
|
|
||||||
|
|
||||||
var nextLHS = streamLHS.next()
|
|
||||||
while nextLHS != nil {
|
|
||||||
let nextRHS = streamRHS.next()
|
|
||||||
if nextLHS == nil && nextRHS != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
else if nextRHS == nil && nextLHS != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
else if nextLHS! != nextRHS! {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
nextLHS = streamLHS.next()
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
|
|
||||||
}
|
|
||||||
public func ArrayEquals<T:Equatable>(_ a: [T], _ a2: [T]) -> Bool {
|
|
||||||
|
|
||||||
if a2.count != a.count {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
let length = a.count
|
|
||||||
for i in 0..<length {
|
|
||||||
if a[i] != a2[i] {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
public func ArrayEquals<T:Equatable>(_ a: [T?], _ a2: [T?]) -> Bool {
|
|
||||||
|
|
||||||
if a2.count != a.count {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
let length = a.count
|
|
||||||
|
|
||||||
for i in 0..<length {
|
|
||||||
if a[i] == nil && a2[i] != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if a2[i] == nil && a[i] != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if a2[i] != nil && a[i] != nil && a[i]! != a2[i]! {
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@ import XCTest
|
||||||
import Antlr4
|
import Antlr4
|
||||||
|
|
||||||
class VisitorTests: XCTestCase {
|
class VisitorTests: XCTestCase {
|
||||||
|
|
||||||
///
|
///
|
||||||
/// This test verifies the basic behavior of visitors, with an emphasis on
|
/// This test verifies the basic behavior of visitors, with an emphasis on
|
||||||
/// {@link AbstractParseTreeVisitor#visitTerminal}.
|
/// {@link AbstractParseTreeVisitor#visitTerminal}.
|
||||||
|
|
Loading…
Reference in New Issue