Re: x and xx operators fail when given negatives it looks like the patch did not make it to the list, so here it is inline diff -ruN pugs.orig/src/Pugs/Prim.hs pugs/src/Pugs/Prim.hs --- pugs.orig/src/Pugs/Prim.hs  2007-05-25 16:34:55.000000000 -0400 +++ pugs/src/Pugs/Prim.hs       2007-05-25 15:59:47.000000000 -0400 @@ -923,6 +923,11 @@      | last str == '\\n'  = VStr (init str)      | otherwise         = VStr str +perlReplicate :: VInt -> a -> [a] +perlReplicate i a = if i < 0 +    then genericReplicate 0 a +    else genericReplicate i a +  -- |Implementation of 2-arity primitive operators and functions  op2 :: String -> Val -> Val -> Eval Val  op2 "rename" = guardedIO2 rename @@ -931,8 +936,8 @@  op2 "*"  = op2Numeric (*)  op2 "/"  = op2Divide  op2 "%"  = op2Modulus -op2 "x"  = op2Cast (\\x y -> VStr . concat $ (y :: VInt) `genericReplicate` x) -op2 "xx" = op2Cast (\\x y -> VList . concat $ (y :: VInt) `genericReplicate` x) +op2 "x"  = op2Cast (\\x y -> VStr . concat $ (y :: VInt) `perlReplicate` x) +op2 "xx" = op2Cast (\\x y -> VList . concat $ (y :: VInt) `perlReplicate` x)  op2 "+&" = op2Int (.&.)  op2 "+<" = op2Int shiftL  op2 "+>" = op2Int shiftR diff -ruN pugs.orig/t/operators/repeat.t pugs/t/operators/repeat.t --- pugs.orig/t/operators/repeat.t      2007-05-25 16:34:55.000000000 -0400 +++ pugs/t/operators/repeat.t   2007-05-25 16:13:29.000000000 -0400 @@ -8,7 +8,7 @@  =cut -plan 19; +plan 23;  #L @@ -16,6 +16,8 @@  is('ab' x 4, 'abababab', 'string repeat operator works on multiple character');  is(1 x 5, '11111', 'number repeat operator works on number and creates string');  is('' x 6, '', 'repeating an empty string creates an empty string'); +is('a' x 0, '', 'repeating zero times produces an empty string'); +is('a' x -1, '', 'repeating negative times produces an empty string');  #L  my @foo = 'x' xx 10; @@ -23,12 +25,20 @@  is(@foo[9], 'x', 'list repeat operator created correct array');  is(+@foo, 10, 'list repeat operator created array of the right size'); +  lives_ok { my @foo2 = undef xx 2; }, 'can repeat undefs';  my @foo3 = (1, 2) xx 2;  is(@foo3[0], 1, 'can repeat lists');  is(@foo3[1], 2, 'can repeat lists');  is(@foo3[2], 1, 'can repeat lists');  is(@foo3[3], 2, 'can repeat lists'); + +my @foo4 = 'x' xx 0; +is(+@foo4, 0, 'repeating zero times produces an empty list'); + +my @foo5 = 'x' xx -1; +is(+@foo5, 0, 'repeating negative times produces an empty list'); +  my @foo_2d = [1, 2] xx 2; # should create 2d  is(@foo_2d[1], [1, 2], 'can create 2d arrays', :todo); # creates a flat 1d array  # Wrong/unsure: \\(1, 2) does not create a ref to the array/list (1,2), but