cvsuser 02/03/14 10:45:22
Modified: . string.c
t/op string.t
Log:
Fix 0-length substr problem
Revision Changes Path
1.57 +3 -6 parrot/string.c
Index: string.c
===================================================================
RCS file: /home/perlcvs/parrot/string.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -w -r1.56 -r1.57
--- string.c 13 Mar 2002 18:06:18 -0000 1.56
+++ string.c 14 Mar 2002 18:45:18 -0000 1.57
@@ -1,7 +1,7 @@
/* string.c
* Copyright: (When this is determined...it will go here)
* CVS Info
- * $Id: string.c,v 1.56 2002/03/13 18:06:18 simon Exp $
+ * $Id: string.c,v 1.57 2002/03/14 18:45:18 dan Exp $
* Overview:
* This is the api definitions for the string subsystem
* Data Structure and Algorithms:
@@ -349,9 +349,10 @@
/* Allow regexes to return $' easily for "aaa" =~ /aaa/ */
if (offset == (INTVAL)string_length(src) || length < 1) {
- return NULL;
+ return string_make(interpreter, NULL, 0, src->encoding, 0, src->type);
}
+ true_length = (UINTVAL)length;
if (offset < 0) {
true_offset = (UINTVAL)(src->strlen + offset);
}
@@ -359,10 +360,6 @@
if (true_offset > src->strlen - 1) { /* 0 based... */
internal_exception(SUBSTR_OUT_OF_STRING,
"Cannot take substr outside string");
- }
- true_length = (UINTVAL)length;
- if (length < 0) {
- true_length = 0;
}
if (true_length > (src->strlen - true_offset)) {
true_length = (UINTVAL)(src->strlen - true_offset);
1.19 +10 -1 parrot/t/op/string.t
Index: string.t
===================================================================
RCS file: /home/perlcvs/parrot/t/op/string.t,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -w -r1.18 -r1.19
--- string.t 1 Jan 2002 17:22:55 -0000 1.18
+++ string.t 14 Mar 2002 18:45:22 -0000 1.19
@@ -1,6 +1,6 @@
#! perl -w
-use Parrot::Test tests => 63;
+use Parrot::Test tests => 64;
output_is( <<'CODE', <<OUTPUT, "set_s_s|sc" );
set S4, "JAPH\n"
@@ -18,6 +18,15 @@
set S4, "JAPH"
length I4, S4
print I4
+ end
+CODE
+
+output_is( <<'CODE', '0', "0 length substr" );
+ set I4, 0
+ set S4, "JAPH"
+ substr S3, S4, 1, 0
+ length I4, S3
+ print I4
end
CODE