fix EXE_BAD_ACCESS when compiling with -O with swift 1.1

This commit is contained in:
Erik 2015-03-04 15:52:18 -05:00
parent 2e80b9405d
commit 2205cfb7d9

View File

@ -24,6 +24,10 @@
import Foundation import Foundation
// This is used because in Swift 1.1, turning on -O causes a
// memory access violation in SocketEngine#parseEngineMessage
private var fixSwift:AnyObject?
extension String { extension String {
private var length:Int { private var length:Int {
return Array(self).count return Array(self).count
@ -194,7 +198,6 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
} }
} }
} else { } else {
NSLog("Error handshaking") NSLog("Error handshaking")
return return
@ -220,7 +223,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
// Translatation of engine.io-parser#decodePayload // Translatation of engine.io-parser#decodePayload
func parsePollingMessage(str:String) { private func parsePollingMessage(str:String) {
if str.length == 1 { if str.length == 1 {
return return
} }
@ -263,7 +266,8 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
if msg.length != 0 { if msg.length != 0 {
self.parseEngineMessage(msg) fixSwift = msg
self.parseEngineMessage(fixSwift)
} }
i += n i += n
@ -272,7 +276,7 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
} }
func parseEngineMessage(message:AnyObject?) { private func parseEngineMessage(message:AnyObject?) {
// println(message) // println(message)
if let data = message as? NSData { if let data = message as? NSData {
@ -281,8 +285,8 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
return return
} }
var message = message as String var messageString = message as String
var strMessage = RegexMutable(message) var strMessage = RegexMutable(messageString)
// We should upgrade // We should upgrade
if strMessage == "3probe" { if strMessage == "3probe" {
@ -294,12 +298,12 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
if type != PacketType.MESSAGE.rawValue { if type != PacketType.MESSAGE.rawValue {
// TODO Handle other packets // TODO Handle other packets
if message.hasPrefix("b4") { if messageString.hasPrefix("b4") {
// binary in base64 string // binary in base64 string
message.removeRange(Range<String.Index>(start: message.startIndex, messageString.removeRange(Range<String.Index>(start: messageString.startIndex,
end: advance(message.startIndex, 2))) end: advance(messageString.startIndex, 2)))
if let data = NSData(base64EncodedString: message, if let data = NSData(base64EncodedString: messageString,
options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) { options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) {
self.client.parseSocketMessage(data) self.client.parseSocketMessage(data)
} }
@ -308,13 +312,12 @@ class SocketEngine: NSObject, SRWebSocketDelegate {
} }
println("Got something idk what to do with") println("Got something idk what to do with")
println(message) println(messageString)
return
} }
// Remove message type // Remove message type
message.removeAtIndex(message.startIndex) messageString.removeAtIndex(messageString.startIndex)
self.client.parseSocketMessage(message) self.client.parseSocketMessage(messageString)
} }
func probeWebSocket() { func probeWebSocket() {