# New Ticket Created by  I Sop 
# Please include the string:  [perl #59576]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=59576 >


I just copied the 'attribute' method, renamed everything, and changed the 
parameter order for the 'getprop' op.



      
Index: src/PAST/Compiler.pir
===================================================================
--- src/PAST/Compiler.pir	(revision 31566)
+++ src/PAST/Compiler.pir	(working copy)
@@ -1927,7 +1927,53 @@
     .return $P0.'new'(call_on, name, bindpost, 'pirop'=>'setattribute', 'result'=>bindpost)
 .end
 
+                               
+.sub 'property' :method :multi(_, ['PAST::Var'])
+    .param pmc node
+    .param pmc bindpost
 
+    .local string name
+    $P0 = get_hll_global ['POST'], 'Ops'
+    name = node.'name'()
+    name = self.'escape'(name)
+
+    .local int isdecl
+    isdecl = node.'isdecl'()
+
+    .local pmc call_on, ops
+    call_on = node[0]
+    if null call_on goto use_self
+    call_on = self.'as_post'(call_on, 'rtype'=>'P')
+    ops = call_on
+    goto invocant_done
+  use_self:
+    call_on = new 'String'
+    call_on = 'self'
+    ops = $P0.'new'('node'=>node)
+  invocant_done:
+
+    if bindpost goto property_bind
+
+  property_post:
+    if isdecl goto property_decl
+    .local pmc fetchop, storeop
+    $P0 = get_hll_global ['POST'], 'Op'
+    fetchop = $P0.'new'(ops, name, call_on, 'pirop'=>'getprop')
+    storeop = $P0.'new'(call_on, name, ops, 'pirop'=>'setprop')
+    .return self.'vivify'(node, ops, fetchop, storeop)
+
+  property_decl:
+    .return $P0.'new'('node'=>node)
+
+  property_bind:  
+    $P0 = get_hll_global ['POST'], 'Op'
+    if isdecl goto property_bind_decl
+    .return $P0.'new'(call_on, name, bindpost, 'pirop'=>'setprop', 'result'=>bindpost)
+  property_bind_decl:
+    .return $P0.'new'(call_on, name, bindpost, 'pirop'=>'setprop', 'result'=>bindpost)
+.end
+
+
 .sub 'register' :method :multi(_, ['PAST::Var'])
     .param pmc node
     .param pmc bindpost

Reply via email to