There are a number of set ops documented in core.ops that haven't actually been implemented - conversion from STR to INT/NUM (and vice versa), plus conversion from PMCs to STR.
The enclosed patch implements the last of these, and adds tests for PerlUndefs and PerlStrings (and implicitly PerlInts and PerlNums - should we also add explicit tests for these?). I haven't added tests for arrays/hashes, as I'm unclear what, if anything, they should actually be returning in this context. Simon --- core.ops.old Fri Feb 1 15:57:44 2002 +++ core.ops Fri Feb 1 15:59:10 2002 @@ -527,6 +527,11 @@ goto NEXT(); } +inline op set(out STR, in PMC) { + $1 = $2->vtable->get_string(interpreter, $2); + goto NEXT(); +} + inline op set(out STR, in STR) { $1 = string_copy(interpreter, $2); goto NEXT(); --- t/pmc/perlstring.t.old Fri Feb 1 17:48:25 2002 +++ t/pmc/perlstring.t Fri Feb 1 18:47:13 2002 @@ -1,6 +1,49 @@ #! perl -w -use Parrot::Test tests => 5; +use Parrot::Test tests => 6; + +output_is(<<CODE, <<OUTPUT, "Set/get strings"); + new P0, PerlString + set P0, "foo" + set S0, P0 + print P0 + print "\\n" + print S0 + print "\\n" + + set P0, "\0" + set S0, P0 + print P0 + print S0 + + set P0, "" + set S0, P0 + print P0 + print S0 + + set P0, 123 + set S0, P0 + print P0 + print "\\n" + print S0 + print "\\n" + + set P0, 1.234567 + set S0, P0 + print P0 + print "\\n" + print S0 + print "\\n" + + end +CODE +foo +foo +123 +123 +1.234567 +1.234567 +OUTPUT output_is(<<CODE, <<OUTPUT, "ensure that concat ppp copies strings"); new P0, PerlString --- t/pmc/pmc.t.old Fri Feb 1 18:26:51 2002 +++ t/pmc/pmc.t Fri Feb 1 18:28:24 2002 @@ -1,6 +1,6 @@ #! perl -w -use Parrot::Test tests => 58; +use Parrot::Test tests => 59; use Test::More; my $fp_equality_macro = <<'ENDOFMACRO'; @@ -558,6 +558,7 @@ set I0, P0 print I0 print "\\n" + end CODE 1Z1 1 @@ -1254,6 +1255,14 @@ 0 0 OUTPUT + +output_is(<<"CODE", <<'OUTPUT', "undef-string"); + new P0, PerlUndef + set S0, P0 + end +CODE +OUTPUT + output_is(<<CODE, <<OUTPUT, "IntQueue test"); new P0,IntQueue