Author: jonathan
Date: Thu Jan 8 14:54:30 2009
New Revision: 35228
Modified:
branches/rvar2/languages/perl6/src/classes/Object.pir
Log:
[rakudo] Get clone to at least somewhat work, while we get S12's method/storage
location stuff sussed.
Modified: branches/rvar2/languages/perl6/src/classes/Object.pir
==============================================================================
--- branches/rvar2/languages/perl6/src/classes/Object.pir (original)
+++ branches/rvar2/languages/perl6/src/classes/Object.pir Thu Jan 8
14:54:30 2009
@@ -52,17 +52,23 @@
result = clone self
# Set any new attributes.
- .local pmc it
- it = iter new_attrs
- it_loop:
- unless it goto it_loop_end
- $S0 = shift it
- $P0 = new_attrs[$S0]
- $S0 = concat '!', $S0
- $P1 = result.$S0()
- 'infix:='($P1, $P0)
- goto it_loop
- it_loop_end:
+ .local pmc p6meta, parrotclass, attributes, it
+ p6meta = get_hll_global ['Perl6Object'], '$!P6META'
+ parrotclass = p6meta.'get_parrotclass'(result)
+ attributes = inspect parrotclass, 'attributes'
+ it = iter attributes
+ attrinit_loop:
+ unless it goto attrinit_done
+ .local string attrname, shortname
+ attrname = shift it
+ shortname = substr attrname, 2
+ $I0 = exists new_attrs[shortname]
+ unless $I0 goto attrinit_loop
+ $P0 = getattribute result, attrname
+ $P1 = new_attrs[shortname]
+ 'infix:='($P0, $P1)
+ goto attrinit_loop
+ attrinit_done:
.return (result)
.end