Not sure what the point of the do {...} while (0) is.
The code will execute once regardless of whether the do while is present or not.
Other than that, the macro looks fine.
It appears the compiler is complaining about the following line:
static SpeedyScript *find_scr(SpeedyDevIno devino, int *is_new) {
How is SpeedyScript declared?
Please use code tags (the <> formatting button) when posting code.