=================================================================== RCS file: /cvs/mandoc/mdoc_macro.c,v retrieving revision 1.195 retrieving revision 1.199 diff -u -p -r1.195 -r1.199 --- mandoc/mdoc_macro.c 2015/04/23 15:35:59 1.195 +++ mandoc/mdoc_macro.c 2015/05/01 16:02:47 1.199 @@ -1,4 +1,4 @@ -/* $Id: mdoc_macro.c,v 1.195 2015/04/23 15:35:59 schwarze Exp $ */ +/* $Id: mdoc_macro.c,v 1.199 2015/05/01 16:02:47 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010, 2012-2015 Ingo Schwarze @@ -258,7 +258,7 @@ lookup(struct roff_man *mdoc, int from, int line, int static void rew_last(struct roff_man *mdoc, const struct roff_node *to) { - struct roff_node *n, *np; + struct roff_node *np; if (to->flags & MDOC_VALID) return; @@ -273,10 +273,8 @@ rew_last(struct roff_man *mdoc, const struct roff_node */ np = mdoc->last->parent; mdoc_valid_post(mdoc); - n = mdoc->last; mdoc->last = np; assert(mdoc->last); - mdoc->last->last = n; } mdoc_valid_post(mdoc); } @@ -644,6 +642,8 @@ blk_exp_close(MACRO_PROT_ARGS) if (body == NULL) { mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse, line, ppos, mdoc_macronames[tok]); + if (later != NULL) + later->flags &= ~MDOC_BROKEN; if (maxargs && endbody == NULL) { /* * Stray .Ec without previous .Eo: @@ -671,6 +671,8 @@ blk_exp_close(MACRO_PROT_ARGS) if (endbody != NULL) n = endbody; + + ntok = TOKEN_NONE; for (j = 0; ; j++) { lastarg = *pos; @@ -698,7 +700,7 @@ blk_exp_close(MACRO_PROT_ARGS) } if (n != NULL) { - if (n != mdoc->last && n->flags & MDOC_BROKEN) { + if (ntok != TOKEN_NONE && n->flags & MDOC_BROKEN) { target = n; do target = target->parent; @@ -1395,7 +1397,7 @@ in_line_eoln(MACRO_PROT_ARGS) if (mdoc->next == ROFF_NEXT_SIBLING) n = n->parent; if (n->tok == MDOC_Nm) - rew_last(mdoc, mdoc->last->parent); + rew_last(mdoc, n->parent); } if (buf[*pos] == '\0' &&