On Sun, Jan 11, 2004 at 12:33:16PM +0100, Leopold Toetsch wrote:
> Stéphane Payrard <[EMAIL PROTECTED]> wrote:
> 
> Thanks, applied - plus ...
> 
> >      INTVAL get_integer_keyed (PMC* attr) {
> > -   return SELF.get_integer_keyed_str(key_string(interpreter, attr));
> > +        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
> 
> ... a comment, why we might need that.
> 
> leo

Also the following patch exercises all the variations including
the susmentioned access thru a key pmc that may contain either a
string or an int.

A previous version I tried to attach to a mail and eventually got
attached as a Fortran file must be ignored. With the present
patch, the test is now included in objects.t instead of being a
separate file.

--
 stef

--- t/pmc/objects.t.orig        2003-12-05 17:00:25.000000000 +0100
+++ t/pmc/objects.t     2004-01-11 19:21:48.000000000 +0100
@@ -1,6 +1,6 @@
 #! perl -w
 
-use Parrot::Test tests => 22;
+use Parrot::Test tests => 24;
 use Test::More;
 
 output_is(<<'CODE', <<'OUTPUT', "findclass (base class)");
@@ -565,3 +565,271 @@
 130
 140
 OUTPUT
+
+
+output_is(<<'CODE',  (join '', map { "$_\n" }42..65), "attributes");
+   newclass P0, "Foo"
+   find_type I1, "Foo"
+   addattrib I0, P0, "b"
+   addattrib I0, P0, "l"
+   addattrib I0, P0, "a"
+   new P1, I1
+
+   set  P1["Foo\x00a"], 42
+   set  I2, P1["Foo\x00a"]
+   print I2
+   print "\n"
+
+   set  S0, "Foo\x00a"
+   set  P1[S0], 43
+   set  I2, P1[S0]
+   print I2
+   print "\n"
+
+   set  P1[2], 44
+   set  I2, P1[2]
+   print I2
+   print "\n"
+
+   set I3, 2
+   set  P1[I3], 45
+   set  I2, P1[I3]
+   print I2
+   print "\n"
+
+
+
+   new P2, .Key
+   set P2, "Foo\x00a"
+
+   set  P1[P2], 46
+   set  I2, P1[P2]
+   print I2
+   print "\n"
+
+   new P2, .Key
+   set P2, 0
+
+   set  P1[P2], 47
+   set  I2, P1[P2]
+   print I2
+   print "\n"
+
+
+
+# strings
+
+   set  P1["Foo\x00a"], "48"
+   set  S2, P1["Foo\x00a"]
+   print S2
+   print "\n"
+
+   set  S0, "Foo\x00a"
+   set  P1[S0], "49"
+   set  S2, P1[S0]
+   print S2
+   print "\n"
+
+   set  P1[2], "50"
+   set  S2, P1[2]
+   print S2
+   print "\n"
+
+   set I3, 2
+   set  P1[I3], "51"
+   set  S2, P1[I3]
+   print S2
+   print "\n"
+
+
+
+   new P2, .Key
+   set P2, "Foo\x00a"
+
+   set  P1[P2], "52"
+   set  S2, P1[P2]
+   print S2
+   print "\n"
+
+   new P2, .Key
+   set P2, 0
+
+   set  P1[P2], "53"
+   set  S2, P1[P2]
+   print S2
+   print "\n"
+
+# pmc
+
+
+   set  P1["Foo\x00a"], 54
+   set  P4, P1["Foo\x00a"]
+   print P4
+   print "\n"
+
+   set  S0, "Foo\x00a"
+   set  P1[S0], 55
+   set  P4, P1[S0]
+   print P4
+   print "\n"
+
+   set  P1[2], 56
+   set  P4, P1[2]
+   print P4
+   print "\n"
+
+   set I3, 2
+   set  P1[I3], 57
+   set  P4, P1[I3]
+   print P4
+   print "\n"
+
+
+
+   new P2, .Key
+   set P2, "Foo\x00a"
+
+   set  P1[P2], 58
+   set  P4, P1[P2]
+   print P4
+   print "\n"
+
+   new P2, .Key
+   set P2, 0
+
+   set  P1[P2], 59
+   set  P4, P1[P2]
+   print P4
+   print "\n"
+
+
+   set  P1["Foo\x00a"], "60"
+   set  P4, P1["Foo\x00a"]
+   print P4
+   print "\n"
+
+   set  S0, "Foo\x00a"
+   set  P1[S0], "61"
+   set  P4, P1[S0]
+   print P4
+   print "\n"
+
+   set  P1[2], "62"
+   set  P4, P1[2]
+   print P4
+   print "\n"
+
+   set I3, 2
+   set  P1[I3], "63"
+   set  P4, P1[I3]
+   print P4
+   print "\n"
+
+
+
+   new P2, .Key
+   set P2, "Foo\x00a"
+
+   set  P1[P2], "64"
+   set  P4, P1[P2]
+   print P4
+   print "\n"
+
+   new P2, .Key
+   set P2, 0
+
+   set  P1[P2], "65"
+   set  P4, P1[P2]
+   print P4
+   print "\n"
+   end
+CODE
+
+my $output_re = join '', map {  "$_.00.*[\\n\\r]+" } 4..15;
+$output_re = qr/^$output_re$/;
+output_like(<<'CODE',  $output_re , "float attributes");
+   newclass P0, "Foo"
+   find_type I1, "Foo"
+   addattrib I0, P0, "b"
+   addattrib I0, P0, "l"
+   addattrib I0, P0, "a"
+   new P1, I1
+
+
+   set  P1["Foo\x00a"], 4.00001
+   set  N2, P1["Foo\x00a"]
+   print N2
+   print "\n"
+
+
+   set  S0, "Foo\x00a"
+   set  P1[S0], 5.00001
+   set  N2, P1[S0]
+   print N2
+   print "\n"
+
+
+   set  P1[2], 6.00001
+   set  N2, P1[2]
+   print N2
+   print "\n"
+
+   set I3, 2
+   set  P1[I3], 7.00001
+   set  N2, P1[I3]
+   print N2
+   print "\n"
+
+   new P2, .Key
+   set P2, "Foo\x00a"
+   set  P1[P2], 8.00001
+   set  N2, P1[P2]
+   print N2
+   print "\n"
+
+   new P2, .Key
+   set P2, 0
+   set  P1[P2], 9.00001
+   set  N2, P1[P2]
+   print N2
+   print "\n"
+
+   set  P1["Foo\x00a"], 10.00001
+   set  P4, P1["Foo\x00a"]
+   print P4
+   print "\n"
+
+   set  S0, "Foo\x00a"
+   set  P1[S0], 11.00001
+   set  P4, P1[S0]
+   print P4
+   print "\n"
+
+   set  P1[2], 12.00001
+   set  P4, P1[2]
+   print P4
+   print "\n"
+
+   set I3, 2
+   set  P1[I3], 13.00001
+   set  P4, P1[I3]
+   print P4
+   print "\n"
+
+
+   new P2, .Key
+   set P2, "Foo\x00a"
+   set  P1[P2], 14.00001
+   set  P4, P1[P2]
+   print P4
+   print "\n"
+
+   new P2, .Key
+   set P2, 0
+   set  P1[P2], 15.00001
+   set  P4, P1[P2]
+   print P4
+   print "\n"
+
+
+CODE



Reply via email to