diff string.rhope @ 105:43cc42df26cc

Various compiler improvements
author Mike Pavone <pavone@retrodev.com>
date Tue, 24 Aug 2010 23:22:17 -0400
parents f51c4c17457c
children 439db471f595
line wrap: on
line diff
--- a/string.rhope	Wed Aug 11 03:13:28 2010 -0400
+++ b/string.rhope	Tue Aug 24 23:22:17 2010 -0400
@@ -543,7 +543,7 @@
 {
 	If[count]
 	{
-		out <- [string]_Flatten[[dest]Append[ [[string]Buffer >>]Index[offset] ], [offset]+[1i32], [count]-[1i32]]
+		out <- [_internal_array_copychunk[[string]Buffer >>, offset, dest, [dest]Length, count]]Length <<[[[dest]Length]+[count]]
 	}{
 		out <- dest
 	}
@@ -561,8 +561,13 @@
 
 Flatten@String Slice[string:out]
 {
-	out <- [[Build[String()]]Buffer <<[ [[string]Source >>]_Flatten[Array[], [string]Offset >>, [string]ByteLen >>] ]
-		]Length <<[[string]Length >>]
+	If[[string]ByteLen >>]
+	{
+		out <- [[Build[String()]]Buffer <<[ [[string]Source >>]_Flatten[_internal_array_allocnaked[[string]ByteLen >>, UInt8()], [string]Offset >>, [string]ByteLen >>] ]
+			]Length <<[[string]Length >>]
+	}{
+		out <- ""
+	}
 }
 
 Print@String Slice[string:out]
@@ -665,12 +670,17 @@
 
 Flatten@String Cat[string:out]
 {
-	out <- [[Build[String()]
-		]Buffer << [
-			[[string]Right >>]_Flatten[
-				[[string]Left >>]_Flatten[Array[], 0i32, [[string]Left >>]Byte Length],
-				0i32, [[string]Right >>]Byte Length]]
-		]Length << [[string]Length >>]
+	If[[string]ByteLen >>]
+	{
+		out <- [[Build[String()]
+			]Buffer << [
+				[[string]Right >>]_Flatten[
+					[[string]Left >>]_Flatten[_internal_array_allocnaked[[string]ByteLen >>, UInt8()], 0i32, [[string]Left >>]Byte Length],
+					0i32, [[string]Right >>]Byte Length]]
+			]Length << [[string]Length >>]
+	}{
+		out <- ""
+	}
 }
 
 Print@String Cat[string:out]