その function hogehoge(mp) はどこからどうよんでるんだ?
見たところ特に問題のある記述じゃなさそうだから呼び出し側でなんかとちってるとみた

というか、わざわざ tagname で判定する理由がよくわからないんだが…
それぞれのマクロでそれぞれの関数を呼べば良いだけではないのか?