#1991: simplify 'new_callback' op
--------------------+-------------------------------------------------------
 Reporter:  jimmy   |       Owner:       
     Type:  RFC     |      Status:  new  
 Priority:  normal  |   Milestone:       
Component:  none    |     Version:  3.0.0
 Severity:  medium  |    Keywords:       
     Lang:          |       Patch:       
 Platform:          |  
--------------------+-------------------------------------------------------
 Hello,
     I would like to simplify 'new_callback' op. first please see
 https://github.com/parrot/parrot/blob/master/t/pmc/nci.t#L1545-#L1606-1551.
     there are lines:
     .local pmc user_data
     user_data = new ['Integer']
     user_data = 42

     # A Sub that can be given to the library
     # this callback function will eventually by called by the library
     .const 'Sub' cb = "_call_back"
     .local pmc cb_wrapped
     cb_wrapped = new_callback cb, user_data, "vtU"  # Z in pdd16
     print "created a callback sub\n"

     # now call the external sub, that takes a callback and user data
     .local pmc libnci_test
     libnci_test = loadlib "libnci_test"
     .local pmc nci_cb_C1
     nci_cb_C1 = dlfunc libnci_test, "nci_cb_C1", "vpP"
     print "loaded a function that takes a callback\n"
     nci_cb_C1( cb_wrapped, user_data )


 passing the value of user_data into new_callback is useless and unused,
 because it's finally invoked and used by this code.
 nci_cb_C1( cb_wrapped, user_data ). So consider:
     .local pmc user_data
     user_data = new ['Integer']

     # A Sub that can be given to the library
     # this callback function will eventually by called by the library
     .const 'Sub' cb = "_call_back"
     .local pmc cb_wrapped
     user_data = 42
     cb_wrapped = new_callback cb, user_data, "vtU"  # Z in pdd16
     print "created a callback sub\n"

     # now call the external sub, that takes a callback and user data
     .local pmc libnci_test
     libnci_test = loadlib "libnci_test"
     .local pmc nci_cb_C1
     nci_cb_C1 = dlfunc libnci_test, "nci_cb_C1", "vpP"
     print "loaded a function that takes a callback\n"
     user_data = 44   # user_data is changed here.
     nci_cb_C1( cb_wrapped, user_data )

 so passing user_data = 42 to new_callback is redundant, I would simplify
 to this one:
     cb_wrapped = new_callback cb, "vtU"

-- 
Ticket URL: <https://trac.parrot.org/parrot/ticket/1991>
Parrot <https://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets

Reply via email to