Mark some more conversion functions as @readonly.

On -Ounchecked we are now able to zap this expression (from Richards):
  UnicodeScalar(UInt32(2)+"0".value)

However, on -O we still check for overflow and actually need to construct the string.



Swift SVN r20856
This commit is contained in:
Nadav Rotem
2014-07-31 22:15:36 +00:00
parent 40111a461a
commit 08e5bff61b
4 changed files with 10 additions and 6 deletions

View File

@@ -44,6 +44,7 @@ public enum Character :
self = SmallRepresentation(Builtin.trunc_Int64_Int63(IE.asInt.value)) self = SmallRepresentation(Builtin.trunc_Int64_Int63(IE.asInt.value))
} }
@semantics("readonly")
public static func _convertFromBuiltinExtendedGraphemeClusterLiteral( public static func _convertFromBuiltinExtendedGraphemeClusterLiteral(
start: Builtin.RawPointer, start: Builtin.RawPointer,
byteSize: Builtin.Word, byteSize: Builtin.Word,

View File

@@ -55,8 +55,8 @@ public struct StaticString
self._isASCII = isASCII self._isASCII = isASCII
} }
public @semantics("readonly")
static func _convertFromBuiltinExtendedGraphemeClusterLiteral( public static func _convertFromBuiltinExtendedGraphemeClusterLiteral(
start: Builtin.RawPointer, start: Builtin.RawPointer,
byteSize: Builtin.Word, byteSize: Builtin.Word,
isASCII: Builtin.Int1) -> StaticString { isASCII: Builtin.Int1) -> StaticString {
@@ -65,20 +65,21 @@ public struct StaticString
start, byteSize: byteSize, isASCII: isASCII) start, byteSize: byteSize, isASCII: isASCII)
} }
@semantics("readonly")
public static func convertFromExtendedGraphemeClusterLiteral( public static func convertFromExtendedGraphemeClusterLiteral(
value: StaticString) -> StaticString { value: StaticString) -> StaticString {
return value return value
} }
public @semantics("readonly")
static func _convertFromBuiltinStringLiteral( public static func _convertFromBuiltinStringLiteral(
start: Builtin.RawPointer, byteSize: Builtin.Word, isASCII: Builtin.Int1 start: Builtin.RawPointer, byteSize: Builtin.Word, isASCII: Builtin.Int1
) -> StaticString { ) -> StaticString {
return StaticString(start: start, byteSize: byteSize, isASCII: isASCII) return StaticString(start: start, byteSize: byteSize, isASCII: isASCII)
} }
public @semantics("readonly")
static func convertFromStringLiteral(value: StaticString) -> StaticString { public static func convertFromStringLiteral(value: StaticString) -> StaticString {
return value return value
} }
} }

View File

@@ -62,6 +62,7 @@ extension String {
} }
extension String : _BuiltinExtendedGraphemeClusterLiteralConvertible { extension String : _BuiltinExtendedGraphemeClusterLiteralConvertible {
@semantics("readonly")
public public
static func _convertFromBuiltinExtendedGraphemeClusterLiteral( static func _convertFromBuiltinExtendedGraphemeClusterLiteral(
start: Builtin.RawPointer, start: Builtin.RawPointer,

View File

@@ -22,6 +22,7 @@ public struct UnicodeScalar : ExtendedGraphemeClusterLiteralConvertible {
} }
} }
@semantics("readonly")
public static func convertFromExtendedGraphemeClusterLiteral( public static func convertFromExtendedGraphemeClusterLiteral(
value: String) -> UnicodeScalar { value: String) -> UnicodeScalar {
let unicodeScalars = value.unicodeScalars let unicodeScalars = value.unicodeScalars