# New Ticket Created by Patrick R. Michaud
# Please include the string: [perl #48467]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=48467 >
Using assign with an Object causes it to create a Ref
instead of assigning a copy.
For example, given the following Perl 6 code:
my $x = 0;
my $y = 3.2;
$x = $y;
$y++;
say $x; # outputs "4.2", should be "3.2"
Here's a PIR version of the code and its output:
$ cat y.pir
.sub main
$P0 = subclass 'Float', 'Num'
## my $x = 0;
$P1 = new 'Integer'
$P1 = 0
.lex '$x', $P1
## my $y = 3.2;
$P2 = new 'Num'
$P2 = 3.2
.lex '$y', $P2
## $x = $y;
$P3 = find_lex '$y'
$P4 = find_lex '$x'
morph $P4, 'Undef'
assign $P4, $P3
## $y++;
$P5 = find_lex '$y'
inc $P5
## say '$x = ', $x;
$P6 = find_lex '$x'
print "$x = "
say $P6
.end
$ ./parrot y.pir
$x = 4.2
This problem is blocking completion of a few 01-sanity
tests -- for example, using typeof on a Ref object returns
'Ref' instead of the type of the referenced object.
This is blocking completion of 07-ref.t and 07-isa.t tests.
Resolving ticket #47828 (copy opcode) may also help with
this particular issue, but at the moment we're a bit stuck.
Pm