defcomponent macro.