@@ local idexpression p; expression q; @@ - p = q; - q = -1; - return p; + return TAKE_FD(q); /* The ideal solution would use 'local idexpression' to avoid matching errno, * which is a global variable. However, 'idexpression' nor 'identifier' * would match, for example, "x->fd", which is considered 'expression' in * the SmPL grammar */ @@ expression p != errno; expression q; @@ - p = q; - q = -1; + p = TAKE_FD(q);