Index: t/oo/vtableoverride.t =================================================================== --- t/oo/vtableoverride.t (revision 36383) +++ t/oo/vtableoverride.t (working copy) @@ -18,11 +18,12 @@ .sub main :main .include 'test_more.pir' - plan(12) + plan(15) newclass_tests() subclass_tests() vtable_implies_self_tests() + mmd_override_not_proxied() .end .sub 'newclass_tests' @@ -86,6 +87,43 @@ ok( $I0, ':vtable should imply the self parameter' ) .end +.sub 'mmd_override_not_proxied' + .local pmc integer_cl, three_cl, three_obj + + get_class integer_cl, 'Integer' + subclass three_cl, integer_cl, 'Three' + three_cl.'add_attribute'('marker') + three_cl.'add_attribute'('zero_marker') + three_cl.'add_attribute'('one_marker') + three_obj = new 'Three' + + # zero_marker/one_marker initialization should go in init vtable method + # -- todo because seems to seg fault now + $P0 = new ['Integer'] + $P0 = 0 + setattribute three_obj, 'zero_marker', $P0 + $P0 = new ['Integer'] + $P0 = 1 + setattribute three_obj, 'one_marker', $P0 + + # not mmd but basic test + three_obj.'clear_marker'() + $I0 = three_obj + three_obj.'verify_marker'('assign to int register calls vtable get_integer override') + + .local pmc i + i = new 'Integer' + i = 2 + + three_obj.'clear_marker'() + $P0 = sub three_obj, i + three_obj.'verify_marker'('subtract calls vtable get_integer override') + + three_obj.'clear_marker'() + $I0 = cmp_num three_obj, i + three_obj.'verify_marker'('cmp_num with calls vtable get_integer override') +.end + .namespace [ 'MyObject' ] .sub '__onload' :anon :init @@ -169,6 +207,27 @@ .return( 1 ) .end +.namespace ['Three'] + +.sub '' :vtable('get_integer') :method + $P0 = getattribute self, 'one_marker' + setattribute self, 'marker', $P0 + .return (3) +.end + +.sub clear_marker :method + $P0 = getattribute self, 'zero_marker' + setattribute self, 'marker', $P0 +.end + +.sub verify_marker :method + .param string test_description + .local pmc get_integer_marker + + get_integer_marker = getattribute self, 'marker' + is(get_integer_marker, 1, test_description) +.end + # Local Variables: # mode: pir # fill-column: 100