support virtual function call(wip)