diff --git a/t/oo/vtableoverride.t b/t/oo/vtableoverride.t index de2625d..a6b3724 100644 --- a/t/oo/vtableoverride.t +++ b/t/oo/vtableoverride.t @@ -17,11 +17,12 @@ Tests the behavior of VTABLE interfaces that have been overriden from PIR. .sub main :main .include 'test_more.pir' - plan(15) + plan(18) newclass_tests() subclass_tests() vtable_implies_self_tests() + mmd_override_not_proxied() anon_vtable_tests() invalid_vtable() get_pmc_keyed_int_Null() @@ -122,6 +123,43 @@ CODE ok($I0, "Override get_pmc_keyed_int without .return - TT #1593") .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 @@ -220,6 +258,27 @@ yes: # No .return .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