Ticket #285: tt285.vtableoverride.diff

File tt285.vtableoverride.diff, 2.4 KB (added by jkeenan, 3 years ago)

Attempt at updating patch submitted by ronaldws

  • t/oo/vtableoverride.t

    diff --git a/t/oo/vtableoverride.t b/t/oo/vtableoverride.t
    index de2625d..a6b3724 100644
    a b  
    1717 
    1818.sub main :main 
    1919    .include 'test_more.pir' 
    20     plan(15) 
     20    plan(18) 
    2121 
    2222    newclass_tests() 
    2323    subclass_tests() 
    2424    vtable_implies_self_tests() 
     25     mmd_override_not_proxied() 
    2526    anon_vtable_tests() 
    2627    invalid_vtable() 
    2728    get_pmc_keyed_int_Null() 
     
    122123    ok($I0, "Override get_pmc_keyed_int without .return - TT #1593") 
    123124.end 
    124125 
     126.sub 'mmd_override_not_proxied' 
     127    .local pmc integer_cl, three_cl, three_obj 
     128 
     129    get_class integer_cl, 'Integer' 
     130    subclass three_cl, integer_cl, 'Three' 
     131    three_cl.'add_attribute'('marker') 
     132    three_cl.'add_attribute'('zero_marker') 
     133    three_cl.'add_attribute'('one_marker') 
     134    three_obj = new 'Three' 
     135 
     136    # zero_marker/one_marker initialization should go in init vtable method 
     137    # -- todo because seems to seg fault now 
     138    $P0 = new ['Integer'] 
     139    $P0 = 0 
     140    setattribute three_obj, 'zero_marker', $P0 
     141    $P0 = new ['Integer'] 
     142    $P0 = 1 
     143    setattribute three_obj, 'one_marker', $P0 
     144    
     145    # not mmd but basic test 
     146    three_obj.'clear_marker'() 
     147    $I0 = three_obj 
     148    three_obj.'verify_marker'('assign to int register calls vtable get_integer override') 
     149 
     150    .local pmc i 
     151    i = new 'Integer' 
     152    i = 2 
     153 
     154    three_obj.'clear_marker'() 
     155    $P0 = sub three_obj, i 
     156    three_obj.'verify_marker'('subtract calls vtable get_integer override') 
     157     
     158    three_obj.'clear_marker'() 
     159    $I0 = cmp_num three_obj, i 
     160    three_obj.'verify_marker'('cmp_num with calls vtable get_integer override') 
     161.end 
     162 
    125163.namespace [ 'MyObject' ] 
    126164 
    127165.sub '__onload' :anon :init 
     
    220258    # No .return 
    221259.end 
    222260 
     261.namespace ['Three'] 
     262 
     263.sub '' :vtable('get_integer') :method 
     264    $P0 = getattribute self, 'one_marker' 
     265    setattribute self, 'marker', $P0 
     266    .return (3) 
     267.end 
     268 
     269.sub clear_marker :method 
     270    $P0 = getattribute self, 'zero_marker' 
     271    setattribute self, 'marker', $P0 
     272.end 
     273 
     274.sub verify_marker :method 
     275    .param string test_description 
     276    .local pmc get_integer_marker 
     277 
     278    get_integer_marker = getattribute self, 'marker' 
     279    is(get_integer_marker, 1, test_description) 
     280.end 
     281 
    223282# Local Variables: 
    224283#   mode: pir 
    225284#   fill-column: 100