1*898184e3Ssthenuse warnings; 2*898184e3Ssthenuse strict; 3*898184e3Ssthen 4*898184e3Ssthenuse Test::More tests => 2*10; 5*898184e3Ssthen 6*898184e3SsthenBEGIN { $^H |= 0x20000; } 7*898184e3Ssthen 8*898184e3Ssthenmy @t; 9*898184e3Ssthen 10*898184e3Ssthensub mymap(&@) { my $sub = shift; return map { $sub->($_) } @_; } 11*898184e3Ssthensub myneg(@) { return map { -$_ } @_; } 12*898184e3Ssthenpackage AA { sub listmeth { shift; return map { -$_ } @_; } } 13*898184e3Ssthen 14*898184e3Ssthen@t = (); 15*898184e3Sstheneval q{ 16*898184e3Ssthen use XS::APItest qw(arrayfullexpr); 17*898184e3Ssthen no warnings "void"; 18*898184e3Ssthen push @t, arrayfullexpr 1+2; 19*898184e3Ssthen push @t, arrayfullexpr 0 || 2; 20*898184e3Ssthen push @t, arrayfullexpr 1 || 2; 21*898184e3Ssthen push @t, arrayfullexpr 0 || 2, 3; 22*898184e3Ssthen push @t, arrayfullexpr 1 || 2, 3; 23*898184e3Ssthen push @t, arrayfullexpr 1, 2; 24*898184e3Ssthen push @t, arrayfullexpr 0 or 2; 25*898184e3Ssthen push @t, arrayfullexpr 1 or 2; 26*898184e3Ssthen push @t, arrayfullexpr 0 or 2, 3; 27*898184e3Ssthen push @t, arrayfullexpr 1 or 2, 3; 28*898184e3Ssthen { push @t, arrayfullexpr 1, 2 } 29*898184e3Ssthen push @t, (arrayfullexpr 1, 2), 3; 30*898184e3Ssthen push @t, arrayfullexpr do { 1; 1 }, 2; 31*898184e3Ssthen push @t, arrayfullexpr 3, 4 if 1; 32*898184e3Ssthen push @t, arrayfullexpr 5, 6 if 0; 33*898184e3Ssthen push @t, arrayfullexpr (7, 8), 9; 34*898184e3Ssthen push @t, arrayfullexpr a => "b"; 35*898184e3Ssthen push @t, arrayfullexpr 1 ? reverse 2, 3 : 4, 5; 36*898184e3Ssthen push @t, arrayfullexpr 0 ? reverse 2, 3 : 4, 5; 37*898184e3Ssthen push @t, 1 ? reverse arrayfullexpr 2, 3 : 4, 5; 38*898184e3Ssthen push @t, 0 ? reverse arrayfullexpr 2, 3 : 4, 5; 39*898184e3Ssthen push @t, arrayfullexpr reverse 1, 2, 3; 40*898184e3Ssthen push @t, sub { arrayfullexpr return 1, 2, 3 }->(); 41*898184e3Ssthen push @t, arrayfullexpr myneg 1, 2, 3; 42*898184e3Ssthen push @t, arrayfullexpr map { -$_ } 1, 2, 3; 43*898184e3Ssthen push @t, arrayfullexpr mymap { -$_[0] } 1, 2, 3; 44*898184e3Ssthen push @t, arrayfullexpr AA->listmeth(1, 2), 3; 45*898184e3Ssthen push @t, arrayfullexpr listmeth AA (1, 2), 3; 46*898184e3Ssthen push @t, arrayfullexpr listmeth AA 1, 2, 3; 47*898184e3Ssthen push @t, arrayfullexpr not 1, 2; 48*898184e3Ssthen push @t, arrayfullexpr reverse 6, 7, 8 or 9; 49*898184e3Ssthen push @t, arrayfullexpr reverse 6, 7, 8 and 9; 50*898184e3Ssthen push @t, arrayfullexpr 1 << 2; 51*898184e3Ssthen push @t, arrayfullexpr 7 < 8; 52*898184e3Ssthen}; 53*898184e3Ssthenis $@, ""; 54*898184e3Ssthenis_deeply \@t, [ 55*898184e3Ssthen [3], 56*898184e3Ssthen [2], 57*898184e3Ssthen [1], 58*898184e3Ssthen [2,3], 59*898184e3Ssthen [1,3], 60*898184e3Ssthen [1,2], 61*898184e3Ssthen [2], 62*898184e3Ssthen [1], 63*898184e3Ssthen [2,3], 64*898184e3Ssthen [1], 65*898184e3Ssthen [1,2], 66*898184e3Ssthen [1,2], 3, 67*898184e3Ssthen [1,2], 68*898184e3Ssthen [3,4], 69*898184e3Ssthen [7,8,9], 70*898184e3Ssthen ["a","b"], 71*898184e3Ssthen [3,2,5], 72*898184e3Ssthen [4,5], 73*898184e3Ssthen [2,3], 5, 74*898184e3Ssthen 4, 5, 75*898184e3Ssthen [3,2,1], 76*898184e3Ssthen 1, 2, 3, 77*898184e3Ssthen [-1,-2,-3], 78*898184e3Ssthen [-1,-2,-3], 79*898184e3Ssthen [-1,-2,-3], 80*898184e3Ssthen [-1,-2,3], 81*898184e3Ssthen [-1,-2,3], 82*898184e3Ssthen [-1,-2,-3], 83*898184e3Ssthen [!1], 84*898184e3Ssthen [876], 85*898184e3Ssthen [9], 86*898184e3Ssthen [4], 87*898184e3Ssthen [!!1], 88*898184e3Ssthen]; 89*898184e3Ssthen 90*898184e3Ssthen@t = (); 91*898184e3Sstheneval q{ 92*898184e3Ssthen use XS::APItest qw(arraylistexpr); 93*898184e3Ssthen no warnings "void"; 94*898184e3Ssthen push @t, arraylistexpr 1+2; 95*898184e3Ssthen push @t, arraylistexpr 0 || 2; 96*898184e3Ssthen push @t, arraylistexpr 1 || 2; 97*898184e3Ssthen push @t, arraylistexpr 0 || 2, 3; 98*898184e3Ssthen push @t, arraylistexpr 1 || 2, 3; 99*898184e3Ssthen push @t, arraylistexpr 1, 2; 100*898184e3Ssthen push @t, arraylistexpr 0 or 2; 101*898184e3Ssthen push @t, arraylistexpr 1 or 2; 102*898184e3Ssthen push @t, arraylistexpr 0 or 2, 3; 103*898184e3Ssthen push @t, arraylistexpr 1 or 2, 3; 104*898184e3Ssthen { push @t, arraylistexpr 1, 2 } 105*898184e3Ssthen push @t, (arraylistexpr 1, 2), 3; 106*898184e3Ssthen push @t, arraylistexpr do { 1; 1 }, 2; 107*898184e3Ssthen push @t, arraylistexpr 3, 4 if 1; 108*898184e3Ssthen push @t, arraylistexpr 5, 6 if 0; 109*898184e3Ssthen push @t, arraylistexpr (7, 8), 9; 110*898184e3Ssthen push @t, arraylistexpr a => "b"; 111*898184e3Ssthen push @t, arraylistexpr 1 ? reverse 2, 3 : 4, 5; 112*898184e3Ssthen push @t, arraylistexpr 0 ? reverse 2, 3 : 4, 5; 113*898184e3Ssthen push @t, 1 ? reverse arraylistexpr 2, 3 : 4, 5; 114*898184e3Ssthen push @t, 0 ? reverse arraylistexpr 2, 3 : 4, 5; 115*898184e3Ssthen push @t, arraylistexpr reverse 1, 2, 3; 116*898184e3Ssthen push @t, sub { arraylistexpr return 1, 2, 3 }->(); 117*898184e3Ssthen push @t, arraylistexpr myneg 1, 2, 3; 118*898184e3Ssthen push @t, arraylistexpr map { -$_ } 1, 2, 3; 119*898184e3Ssthen push @t, arraylistexpr mymap { -$_[0] } 1, 2, 3; 120*898184e3Ssthen push @t, arraylistexpr AA->listmeth(1, 2), 3; 121*898184e3Ssthen push @t, arraylistexpr listmeth AA (1, 2), 3; 122*898184e3Ssthen push @t, arraylistexpr listmeth AA 1, 2, 3; 123*898184e3Ssthen push @t, arraylistexpr not 1, 2; 124*898184e3Ssthen push @t, arraylistexpr reverse 6, 7, 8 or 9; 125*898184e3Ssthen push @t, arraylistexpr reverse 6, 7, 8 and 9; 126*898184e3Ssthen push @t, arraylistexpr 1 << 2; 127*898184e3Ssthen push @t, arraylistexpr 7 < 8; 128*898184e3Ssthen}; 129*898184e3Ssthenis $@, ""; 130*898184e3Ssthenis_deeply \@t, [ 131*898184e3Ssthen [3], 132*898184e3Ssthen [2], 133*898184e3Ssthen [1], 134*898184e3Ssthen [2,3], 135*898184e3Ssthen [1,3], 136*898184e3Ssthen [1,2], 137*898184e3Ssthen [0], 138*898184e3Ssthen [1], 139*898184e3Ssthen [0], 140*898184e3Ssthen [1], 141*898184e3Ssthen [1,2], 142*898184e3Ssthen [1,2], 3, 143*898184e3Ssthen [1,2], 144*898184e3Ssthen [3,4], 145*898184e3Ssthen [7,8,9], 146*898184e3Ssthen ["a","b"], 147*898184e3Ssthen [3,2,5], 148*898184e3Ssthen [4,5], 149*898184e3Ssthen [2,3], 5, 150*898184e3Ssthen 4, 5, 151*898184e3Ssthen [3,2,1], 152*898184e3Ssthen 1, 2, 3, 153*898184e3Ssthen [-1,-2,-3], 154*898184e3Ssthen [-1,-2,-3], 155*898184e3Ssthen [-1,-2,-3], 156*898184e3Ssthen [-1,-2,3], 157*898184e3Ssthen [-1,-2,3], 158*898184e3Ssthen [-1,-2,-3], 159*898184e3Ssthen [!1], 160*898184e3Ssthen [8,7,6], 161*898184e3Ssthen [8,7,6], 162*898184e3Ssthen [4], 163*898184e3Ssthen [!!1], 164*898184e3Ssthen]; 165*898184e3Ssthen 166*898184e3Ssthen@t = (); 167*898184e3Sstheneval q{ 168*898184e3Ssthen use XS::APItest qw(arraytermexpr); 169*898184e3Ssthen no warnings "void"; 170*898184e3Ssthen push @t, arraytermexpr 1+2; 171*898184e3Ssthen push @t, arraytermexpr 0 || 2; 172*898184e3Ssthen push @t, arraytermexpr 1 || 2; 173*898184e3Ssthen push @t, arraytermexpr 0 || 2, 3; 174*898184e3Ssthen push @t, arraytermexpr 1 || 2, 3; 175*898184e3Ssthen push @t, arraytermexpr 1, 2; 176*898184e3Ssthen push @t, arraytermexpr 0 or 2; 177*898184e3Ssthen push @t, arraytermexpr 1 or 2; 178*898184e3Ssthen push @t, arraytermexpr 0 or 2, 3; 179*898184e3Ssthen push @t, arraytermexpr 1 or 2, 3; 180*898184e3Ssthen { push @t, arraytermexpr 1 } 181*898184e3Ssthen push @t, (arraytermexpr 1, 2), 3; 182*898184e3Ssthen push @t, arraytermexpr do { 1; 1 }, 2; 183*898184e3Ssthen push @t, arraytermexpr 3, 4 if 1; 184*898184e3Ssthen push @t, arraytermexpr 5, 6 if 0; 185*898184e3Ssthen push @t, arraytermexpr (7, 8), 9; 186*898184e3Ssthen push @t, arraytermexpr a => "b"; 187*898184e3Ssthen push @t, arraytermexpr 1 ? reverse 2, 3 : 4, 5; 188*898184e3Ssthen push @t, arraytermexpr 0 ? reverse 2, 3 : 4, 5; 189*898184e3Ssthen push @t, 1 ? reverse arraytermexpr 2, 3 : 4, 5; 190*898184e3Ssthen push @t, 0 ? reverse arraytermexpr 2, 3 : 4, 5; 191*898184e3Ssthen push @t, arraytermexpr reverse 1, 2, 3; 192*898184e3Ssthen push @t, sub { arraytermexpr return 1, 2, 3 }->(); 193*898184e3Ssthen push @t, arraytermexpr myneg 1, 2, 3; 194*898184e3Ssthen push @t, arraytermexpr map { -$_ } 1, 2, 3; 195*898184e3Ssthen push @t, arraytermexpr mymap { -$_[0] } 1, 2, 3; 196*898184e3Ssthen push @t, arraytermexpr AA->listmeth(1, 2), 3; 197*898184e3Ssthen push @t, arraytermexpr listmeth AA (1, 2), 3; 198*898184e3Ssthen push @t, arraytermexpr listmeth AA 1, 2, 3; 199*898184e3Ssthen push @t, arraytermexpr not 1, 2; 200*898184e3Ssthen push @t, arraytermexpr reverse 6, 7, 8 or 9; 201*898184e3Ssthen push @t, arraytermexpr reverse 6, 7, 8 and 9; 202*898184e3Ssthen push @t, arraytermexpr 1 << 2; 203*898184e3Ssthen push @t, arraytermexpr 7 < 8; 204*898184e3Ssthen}; 205*898184e3Ssthenis $@, ""; 206*898184e3Ssthenis_deeply \@t, [ 207*898184e3Ssthen [3], 208*898184e3Ssthen [2], 209*898184e3Ssthen [1], 210*898184e3Ssthen [2], 3, 211*898184e3Ssthen [1], 3, 212*898184e3Ssthen [1], 2, 213*898184e3Ssthen [0], 214*898184e3Ssthen [1], 215*898184e3Ssthen [0], 216*898184e3Ssthen [1], 217*898184e3Ssthen [1], 218*898184e3Ssthen [1], 2, 3, 219*898184e3Ssthen [1], 2, 220*898184e3Ssthen [3], 4, 221*898184e3Ssthen [7,8], 9, 222*898184e3Ssthen ["a"], "b", 223*898184e3Ssthen [3,2], 5, 224*898184e3Ssthen [4], 5, 225*898184e3Ssthen 3, [2], 5, 226*898184e3Ssthen 4, 5, 227*898184e3Ssthen [3,2,1], 228*898184e3Ssthen 1, 2, 3, 229*898184e3Ssthen [-1,-2,-3], 230*898184e3Ssthen [-1,-2,-3], 231*898184e3Ssthen [-1,-2,-3], 232*898184e3Ssthen [-1,-2], 3, 233*898184e3Ssthen [-1,-2], 3, 234*898184e3Ssthen [-1,-2,-3], 235*898184e3Ssthen [!1], 236*898184e3Ssthen [8,7,6], 237*898184e3Ssthen [8,7,6], 238*898184e3Ssthen [4], 239*898184e3Ssthen [!!1], 240*898184e3Ssthen]; 241*898184e3Ssthen 242*898184e3Ssthen@t = (); 243*898184e3Sstheneval q{ 244*898184e3Ssthen use XS::APItest qw(arrayarithexpr); 245*898184e3Ssthen no warnings "void"; 246*898184e3Ssthen push @t, arrayarithexpr 1+2; 247*898184e3Ssthen push @t, arrayarithexpr 0 || 2; 248*898184e3Ssthen push @t, arrayarithexpr 1 || 2; 249*898184e3Ssthen push @t, arrayarithexpr 0 || 2, 3; 250*898184e3Ssthen push @t, arrayarithexpr 1 || 2, 3; 251*898184e3Ssthen push @t, arrayarithexpr 1, 2; 252*898184e3Ssthen push @t, arrayarithexpr 0 or 2; 253*898184e3Ssthen push @t, arrayarithexpr 1 or 2; 254*898184e3Ssthen push @t, arrayarithexpr 0 or 2, 3; 255*898184e3Ssthen push @t, arrayarithexpr 1 or 2, 3; 256*898184e3Ssthen { push @t, arrayarithexpr 1 } 257*898184e3Ssthen push @t, (arrayarithexpr 1, 2), 3; 258*898184e3Ssthen push @t, arrayarithexpr do { 1; 1 }, 2; 259*898184e3Ssthen push @t, arrayarithexpr 3, 4 if 1; 260*898184e3Ssthen push @t, arrayarithexpr 5, 6 if 0; 261*898184e3Ssthen push @t, arrayarithexpr (7, 8), 9; 262*898184e3Ssthen push @t, arrayarithexpr a => "b"; 263*898184e3Ssthen push @t, arrayarithexpr 1 ? reverse 2, 3 : 4, 5; 264*898184e3Ssthen push @t, arrayarithexpr 0 ? reverse 2, 3 : 4, 5; 265*898184e3Ssthen push @t, 1 ? reverse arrayarithexpr 2, 3 : 4, 5; 266*898184e3Ssthen push @t, 0 ? reverse arrayarithexpr 2, 3 : 4, 5; 267*898184e3Ssthen push @t, arrayarithexpr reverse 1, 2, 3; 268*898184e3Ssthen push @t, sub { arrayarithexpr return 1, 2, 3 }->(); 269*898184e3Ssthen push @t, arrayarithexpr myneg 1, 2, 3; 270*898184e3Ssthen push @t, arrayarithexpr map { -$_ } 1, 2, 3; 271*898184e3Ssthen push @t, arrayarithexpr mymap { -$_[0] } 1, 2, 3; 272*898184e3Ssthen push @t, arrayarithexpr AA->listmeth(1, 2), 3; 273*898184e3Ssthen push @t, arrayarithexpr listmeth AA (1, 2), 3; 274*898184e3Ssthen push @t, arrayarithexpr listmeth AA 1, 2, 3; 275*898184e3Ssthen push @t, arrayarithexpr not 1, 2; 276*898184e3Ssthen push @t, arrayarithexpr reverse 6, 7, 8 or 9; 277*898184e3Ssthen push @t, arrayarithexpr reverse 6, 7, 8 and 9; 278*898184e3Ssthen push @t, arrayarithexpr 1 << 2; 279*898184e3Ssthen push @t, arrayarithexpr 7 < 8; 280*898184e3Ssthen}; 281*898184e3Ssthenis $@, ""; 282*898184e3Ssthenis_deeply \@t, [ 283*898184e3Ssthen [3], 284*898184e3Ssthen [0], 285*898184e3Ssthen [1], 286*898184e3Ssthen [0], 3, 287*898184e3Ssthen [1], 3, 288*898184e3Ssthen [1], 2, 289*898184e3Ssthen [0], 290*898184e3Ssthen [1], 291*898184e3Ssthen [0], 292*898184e3Ssthen [1], 293*898184e3Ssthen [1], 294*898184e3Ssthen [1], 2, 3, 295*898184e3Ssthen [1], 2, 296*898184e3Ssthen [3], 4, 297*898184e3Ssthen [7,8], 9, 298*898184e3Ssthen ["a"], "b", 299*898184e3Ssthen 3, 2, 5, 300*898184e3Ssthen 3, 2, 5, 301*898184e3Ssthen 3, [2], 5, 302*898184e3Ssthen 4, 5, 303*898184e3Ssthen [3,2,1], 304*898184e3Ssthen 1, 2, 3, 305*898184e3Ssthen [-1,-2,-3], 306*898184e3Ssthen [-1,-2,-3], 307*898184e3Ssthen [-1,-2,-3], 308*898184e3Ssthen [-1,-2], 3, 309*898184e3Ssthen [-1,-2], 3, 310*898184e3Ssthen [-1,-2,-3], 311*898184e3Ssthen [!1], 312*898184e3Ssthen [8,7,6], 313*898184e3Ssthen [8,7,6], 314*898184e3Ssthen [4], 315*898184e3Ssthen !!0, 316*898184e3Ssthen]; 317*898184e3Ssthen 318*898184e3Ssthen@t = (); 319*898184e3Sstheneval q{ 320*898184e3Ssthen use XS::APItest qw(arrayexprflags); 321*898184e3Ssthen push @t, arrayexprflags! 1, 2; 322*898184e3Ssthen}; 323*898184e3Ssthenis $@, ""; 324*898184e3Ssthenis_deeply \@t, [ [1,2] ]; 325*898184e3Ssthen 326*898184e3Ssthen@t = (); 327*898184e3Sstheneval q{ 328*898184e3Ssthen use XS::APItest qw(arrayexprflags); 329*898184e3Ssthen push @t, arrayexprflags? 1, 2; 330*898184e3Ssthen}; 331*898184e3Ssthenis $@, ""; 332*898184e3Ssthenis_deeply \@t, [ [1,2] ]; 333*898184e3Ssthen 334*898184e3Ssthen@t = (); 335*898184e3Sstheneval q{ 336*898184e3Ssthen use XS::APItest qw(arrayexprflags); 337*898184e3Ssthen push @t, arrayexprflags! [); 338*898184e3Ssthen}; 339*898184e3Ssthenlike $@, qr/\A(?:Parse|syntax) error/; 340*898184e3Ssthenis_deeply \@t, []; 341*898184e3Ssthen 342*898184e3Ssthen@t = (); 343*898184e3Sstheneval q{ 344*898184e3Ssthen use XS::APItest qw(arrayexprflags); 345*898184e3Ssthen push @t, arrayexprflags? [); 346*898184e3Ssthen}; 347*898184e3Ssthenlike $@, qr/\A(?:Parse|syntax) error/; 348*898184e3Ssthenis_deeply \@t, []; 349*898184e3Ssthen 350*898184e3Ssthen@t = (); 351*898184e3Sstheneval q{ 352*898184e3Ssthen use XS::APItest qw(arrayexprflags); 353*898184e3Ssthen push @t, arrayexprflags! ; 354*898184e3Ssthen}; 355*898184e3Ssthenlike $@, qr/\A(?:Parse|syntax) error/; 356*898184e3Ssthenis_deeply \@t, []; 357*898184e3Ssthen 358*898184e3Ssthen@t = (); 359*898184e3Sstheneval q{ 360*898184e3Ssthen use XS::APItest qw(arrayexprflags); 361*898184e3Ssthen push @t, arrayexprflags? ; 362*898184e3Ssthen}; 363*898184e3Ssthenis $@, ""; 364*898184e3Ssthenis_deeply \@t, [ {} ]; 365*898184e3Ssthen 366*898184e3Ssthen1; 367