From: schwarze@mdocml.bsd.lv
To: source@mdocml.bsd.lv
Subject: mdocml: Delete the redundant "nchild" member of struct roff_node,
Date: Fri, 8 Jan 2016 12:48:40 -0500 (EST) [thread overview]
Message-ID: <2824047162744339370.enqueue@fantadrom.bsd.lv> (raw)
Log Message:
-----------
Delete the redundant "nchild" member of struct roff_node, replacing
most uses by one, a few by two pointer checks, and only one by a
tiny loop - not only making data smaller, but code shorter as well.
This gets rid of an implicit invariant that confused both static
analysis tools and human auditors. No functional change.
Modified Files:
--------------
mdocml:
man_html.c
man_macro.c
man_term.c
man_validate.c
mandoc.3
mandocdb.c
mdoc_html.c
mdoc_man.c
mdoc_term.c
mdoc_validate.c
roff.c
roff.h
Revision Data
-------------
Index: man_term.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_term.c,v
retrieving revision 1.186
retrieving revision 1.187
diff -Lman_term.c -Lman_term.c -u -p -r1.186 -r1.187
--- man_term.c
+++ man_term.c
@@ -219,7 +219,7 @@ static int
pre_ll(DECL_ARGS)
{
- term_setwidth(p, n->nchild ? n->child->string : NULL);
+ term_setwidth(p, n->child != NULL ? n->child->string : NULL);
return 0;
}
Index: roff.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/roff.c,v
retrieving revision 1.283
retrieving revision 1.284
diff -Lroff.c -Lroff.c -u -p -r1.283 -r1.284
--- roff.c
+++ roff.c
@@ -1024,7 +1024,6 @@ roff_node_append(struct roff_man *man, s
default:
abort();
}
- n->parent->nchild++;
man->last = n;
switch (n->type) {
@@ -1169,7 +1168,6 @@ roff_node_unlink(struct roff_man *man, s
/* Adjust parent. */
if (n->parent != NULL) {
- n->parent->nchild--;
if (n->parent->child == n)
n->parent->child = n->next;
if (n->parent->last == n)
@@ -1211,7 +1209,6 @@ roff_node_delete(struct roff_man *man, s
while (n->child != NULL)
roff_node_delete(man, n->child);
- assert(n->nchild == 0);
roff_node_unlink(man, n);
roff_node_free(n);
}
Index: mdoc_validate.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_validate.c,v
retrieving revision 1.300
retrieving revision 1.301
diff -Lmdoc_validate.c -Lmdoc_validate.c -u -p -r1.300 -r1.301
--- mdoc_validate.c
+++ mdoc_validate.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2016 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -1278,7 +1278,8 @@ post_bl_head(POST_ARGS)
argv = nbl->args->argv + j;
i = argv->sz;
- argv->sz += nh->nchild;
+ for (nch = nh->child; nch != NULL; nch = nch->next)
+ argv->sz++;
argv->value = mandoc_reallocarray(argv->value,
argv->sz, sizeof(char *));
@@ -1291,7 +1292,6 @@ post_bl_head(POST_ARGS)
nnext = nch->next;
roff_node_delete(NULL, nch);
}
- nh->nchild = 0;
nh->child = NULL;
}
@@ -1352,14 +1352,11 @@ post_bl(POST_ARGS)
*/
assert(nchild->prev == NULL);
- if (--nbody->nchild == 0) {
- nbody->child = NULL;
+ nbody->child = nnext;
+ if (nnext == NULL)
nbody->last = NULL;
- assert(nnext == NULL);
- } else {
- nbody->child = nnext;
+ else
nnext->prev = NULL;
- }
/*
* Relink this child.
@@ -1370,7 +1367,6 @@ post_bl(POST_ARGS)
nchild->next = nblock;
nblock->prev = nchild;
- nparent->nchild++;
if (nprev == NULL)
nparent->child = nchild;
else
@@ -1688,7 +1684,9 @@ post_sh_see_also(POST_ARGS)
n = mdoc->last->child;
lastname = lastsec = lastpunct = NULL;
while (n != NULL) {
- if (n->tok != MDOC_Xr || n->nchild < 2)
+ if (n->tok != MDOC_Xr ||
+ n->child == NULL ||
+ n->child->next == NULL)
break;
/* Process one .Xr node. */
@@ -1744,7 +1742,7 @@ child_an(const struct roff_node *n)
{
for (n = n->child; n != NULL; n = n->next)
- if ((n->tok == MDOC_An && n->nchild) || child_an(n))
+ if ((n->tok == MDOC_An && n->child != NULL) || child_an(n))
return 1;
return 0;
}
@@ -1931,7 +1929,7 @@ post_par(POST_ARGS)
post_prevpar(mdoc);
if (np->tok == MDOC_sp) {
- if (np->nchild > 1)
+ if (np->child != NULL && np->child->next != NULL)
mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
np->child->next->line, np->child->next->pos,
"sp ... %s", np->child->next->string);
Index: man_html.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_html.c,v
retrieving revision 1.119
retrieving revision 1.120
diff -Lman_html.c -Lman_html.c -u -p -r1.119 -r1.120
--- man_html.c
+++ man_html.c
@@ -654,7 +654,7 @@ man_UR_pre(MAN_ARGS)
n = n->child;
assert(n->type == ROFFT_HEAD);
- if (n->nchild) {
+ if (n->child != NULL) {
assert(n->child->type == ROFFT_TEXT);
PAIR_CLASS_INIT(&tag[0], "link-ext");
PAIR_HREF_INIT(&tag[1], n->child->string);
@@ -662,7 +662,7 @@ man_UR_pre(MAN_ARGS)
}
assert(n->next->type == ROFFT_BODY);
- if (n->next->nchild)
+ if (n->next->child != NULL)
n = n->next;
print_man_nodelist(man, n->child, mh, h);
Index: mandocdb.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandocdb.c,v
retrieving revision 1.214
retrieving revision 1.215
diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.214 -r1.215
--- mandocdb.c
+++ mandocdb.c
@@ -1446,7 +1446,7 @@ parse_man(struct mpage *mpage, const str
char byte;
size_t sz;
- if (NULL == n)
+ if (n == NULL)
return;
/*
@@ -1458,13 +1458,12 @@ parse_man(struct mpage *mpage, const str
if (n->type == ROFFT_BODY && n->tok == MAN_SH) {
body = n;
- assert(body->parent);
- if (NULL != (head = body->parent->head) &&
- 1 == head->nchild &&
- NULL != (head = (head->child)) &&
+ if ((head = body->parent->head) != NULL &&
+ (head = head->child) != NULL &&
+ head->next == NULL &&
head->type == ROFFT_TEXT &&
- 0 == strcmp(head->string, "NAME") &&
- NULL != body->child) {
+ strcmp(head->string, "NAME") == 0 &&
+ body->child != NULL) {
/*
* Suck the entire NAME section into memory.
@@ -1697,7 +1696,9 @@ parse_mdoc_Va(struct mpage *mpage, const
if (n->type != ROFFT_ELEM && n->type != ROFFT_BODY)
return 0;
- if (n->nchild == 1 && n->child->type == ROFFT_TEXT)
+ if (n->child != NULL &&
+ n->child->next == NULL &&
+ n->child->type == ROFFT_TEXT)
return 1;
cp = NULL;
Index: mdoc_html.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_html.c,v
retrieving revision 1.239
retrieving revision 1.240
diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.239 -r1.240
--- mdoc_html.c
+++ mdoc_html.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -602,7 +602,7 @@ mdoc_fl_pre(MDOC_ARGS)
print_text(h, "\\-");
- if ( ! (n->nchild == 0 &&
+ if (!(n->child == NULL &&
(n->next == NULL ||
n->next->type == ROFFT_TEXT ||
n->next->flags & MDOC_LINE)))
@@ -979,9 +979,9 @@ mdoc_bl_pre(MDOC_ARGS)
static int
mdoc_ex_pre(MDOC_ARGS)
{
- struct tag *t;
- struct htmlpair tag;
- int nchild;
+ struct htmlpair tag;
+ struct tag *t;
+ struct roff_node *nch;
if (n->prev)
print_otag(h, TAG_BR, 0, NULL);
@@ -990,24 +990,26 @@ mdoc_ex_pre(MDOC_ARGS)
print_text(h, "The");
- nchild = n->nchild;
- for (n = n->child; n; n = n->next) {
- assert(n->type == ROFFT_TEXT);
+ for (nch = n->child; nch != NULL; nch = nch->next) {
+ assert(nch->type == ROFFT_TEXT);
t = print_otag(h, TAG_B, 1, &tag);
- print_text(h, n->string);
+ print_text(h, nch->string);
print_tagq(h, t);
- if (nchild > 2 && n->next) {
+ if (nch->next == NULL)
+ continue;
+
+ if (nch->prev != NULL || nch->next->next != NULL) {
h->flags |= HTML_NOSPACE;
print_text(h, ",");
}
- if (n->next && NULL == n->next->next)
+ if (nch->next->next == NULL)
print_text(h, "and");
}
- if (nchild > 1)
+ if (n->child != NULL && n->child->next != NULL)
print_text(h, "utilities exit\\~0");
else
print_text(h, "utility exits\\~0");
@@ -1695,37 +1697,36 @@ mdoc_rv_pre(MDOC_ARGS)
{
struct htmlpair tag;
struct tag *t;
- int nchild;
+ struct roff_node *nch;
if (n->prev)
print_otag(h, TAG_BR, 0, NULL);
PAIR_CLASS_INIT(&tag, "fname");
- nchild = n->nchild;
- if (nchild > 0) {
+ if (n->child != NULL) {
print_text(h, "The");
- for (n = n->child; n; n = n->next) {
+ for (nch = n->child; nch != NULL; nch = nch->next) {
t = print_otag(h, TAG_B, 1, &tag);
- print_text(h, n->string);
+ print_text(h, nch->string);
print_tagq(h, t);
h->flags |= HTML_NOSPACE;
print_text(h, "()");
- if (n->next == NULL)
+ if (nch->next == NULL)
continue;
- if (nchild > 2) {
+ if (nch->prev != NULL || nch->next->next != NULL) {
h->flags |= HTML_NOSPACE;
print_text(h, ",");
}
- if (n->next->next == NULL)
+ if (nch->next->next == NULL)
print_text(h, "and");
}
- if (nchild > 1)
+ if (n->child != NULL && n->child->next != NULL)
print_text(h, "functions return");
else
print_text(h, "function returns");
@@ -2001,7 +2002,7 @@ mdoc_bk_pre(MDOC_ARGS)
case ROFFT_HEAD:
return 0;
case ROFFT_BODY:
- if (n->parent->args || 0 == n->prev->nchild)
+ if (n->parent->args != NULL || n->prev->child == NULL)
h->flags |= HTML_PREKEEP;
break;
default:
@@ -2030,7 +2031,7 @@ mdoc_quote_pre(MDOC_ARGS)
switch (n->tok) {
case MDOC_Ao:
case MDOC_Aq:
- print_text(h, n->nchild == 1 &&
+ print_text(h, n->child != NULL && n->child->next == NULL &&
n->child->tok == MDOC_Mt ? "<" : "\\(la");
break;
case MDOC_Bro:
@@ -2094,7 +2095,7 @@ mdoc_quote_post(MDOC_ARGS)
switch (n->tok) {
case MDOC_Ao:
case MDOC_Aq:
- print_text(h, n->nchild == 1 &&
+ print_text(h, n->child != NULL && n->child->next == NULL &&
n->child->tok == MDOC_Mt ? ">" : "\\(ra");
break;
case MDOC_Bro:
Index: man_validate.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_validate.c,v
retrieving revision 1.121
retrieving revision 1.122
diff -Lman_validate.c -Lman_validate.c -u -p -r1.121 -r1.122
--- man_validate.c
+++ man_validate.c
@@ -1,7 +1,7 @@
/* $OpenBSD$ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2012-2016 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -180,10 +180,10 @@ static void
post_OP(CHKARGS)
{
- if (n->nchild == 0)
+ if (n->child == NULL)
mandoc_msg(MANDOCERR_OP_EMPTY, man->parse,
n->line, n->pos, "OP");
- else if (n->nchild > 2) {
+ else if (n->child->next != NULL && n->child->next->next != NULL) {
n = n->child->next->next;
mandoc_vmsg(MANDOCERR_ARG_EXCESS, man->parse,
n->line, n->pos, "OP ... %s", n->string);
@@ -206,7 +206,7 @@ post_ft(CHKARGS)
char *cp;
int ok;
- if (0 == n->nchild)
+ if (n->child == NULL)
return;
ok = 0;
@@ -256,22 +256,22 @@ check_par(CHKARGS)
switch (n->type) {
case ROFFT_BLOCK:
- if (0 == n->body->nchild)
+ if (n->body->child == NULL)
roff_node_delete(man, n);
break;
case ROFFT_BODY:
- if (0 == n->nchild)
+ if (n->child == NULL)
mandoc_vmsg(MANDOCERR_PAR_SKIP,
man->parse, n->line, n->pos,
"%s empty", man_macronames[n->tok]);
break;
case ROFFT_HEAD:
- if (n->nchild)
+ if (n->child != NULL)
mandoc_vmsg(MANDOCERR_ARG_SKIP,
man->parse, n->line, n->pos,
"%s %s%s", man_macronames[n->tok],
n->child->string,
- n->nchild > 1 ? " ..." : "");
+ n->child->next != NULL ? " ..." : "");
break;
default:
break;
@@ -284,11 +284,11 @@ post_IP(CHKARGS)
switch (n->type) {
case ROFFT_BLOCK:
- if (0 == n->head->nchild && 0 == n->body->nchild)
+ if (n->head->child == NULL && n->body->child == NULL)
roff_node_delete(man, n);
break;
case ROFFT_BODY:
- if (0 == n->parent->head->nchild && 0 == n->nchild)
+ if (n->parent->head->child == NULL && n->child == NULL)
mandoc_vmsg(MANDOCERR_PAR_SKIP,
man->parse, n->line, n->pos,
"%s empty", man_macronames[n->tok]);
Index: mandoc.3
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mandoc.3,v
retrieving revision 1.35
retrieving revision 1.36
diff -Lmandoc.3 -Lmandoc.3 -u -p -r1.35 -r1.36
--- mandoc.3
+++ mandoc.3
@@ -1,7 +1,7 @@
.\" $Id$
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2010, 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2010-2016 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -557,7 +557,7 @@ and
fields), its position in the tree (the
.Va parent ,
.Va child ,
-.Va nchild ,
+.Va last ,
.Va next
and
.Va prev
Index: roff.h
===================================================================
RCS file: /home/cvs/mdocml/mdocml/roff.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -Lroff.h -Lroff.h -u -p -r1.36 -r1.37
--- roff.h
+++ roff.h
@@ -93,7 +93,6 @@ struct roff_node {
char *string; /* TEXT */
const struct tbl_span *span; /* TBL */
const struct eqn *eqn; /* EQN */
- int nchild; /* Number of child nodes. */
int line; /* Input file line number. */
int pos; /* Input file column number. */
int tok; /* Request or macro ID. */
Index: mdoc_man.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_man.c,v
retrieving revision 1.95
retrieving revision 1.96
diff -Lmdoc_man.c -Lmdoc_man.c -u -p -r1.95 -r1.96
--- mdoc_man.c
+++ mdoc_man.c
@@ -1,6 +1,6 @@
/* $Id$ */
/*
- * Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2016 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -610,7 +610,8 @@ print_node(DECL_ARGS)
*/
act = manacts + n->tok;
cond = act->cond == NULL || (*act->cond)(meta, n);
- if (cond && act->pre && (n->end == ENDBODY_NOT || n->nchild))
+ if (cond && act->pre != NULL &&
+ (n->end == ENDBODY_NOT || n->child != NULL))
do_sub = (*act->pre)(meta, n);
}
@@ -681,30 +682,29 @@ post_enc(DECL_ARGS)
static int
pre_ex(DECL_ARGS)
{
- int nchild;
+ struct roff_node *nch;
outflags |= MMAN_br | MMAN_nl;
print_word("The");
- nchild = n->nchild;
- for (n = n->child; n; n = n->next) {
+ for (nch = n->child; nch != NULL; nch = nch->next) {
font_push('B');
- print_word(n->string);
+ print_word(nch->string);
font_pop();
- if (n->next == NULL)
+ if (nch->next == NULL)
continue;
- if (nchild > 2) {
+ if (nch->prev != NULL || nch->next->next != NULL) {
outflags &= ~MMAN_spc;
print_word(",");
}
- if (n->next->next == NULL)
+ if (nch->next->next == NULL)
print_word("and");
}
- if (nchild > 1)
+ if (n->child != NULL && n->child->next != NULL)
print_word("utilities exit\\~0");
else
print_word("utility exits\\~0");
@@ -873,7 +873,7 @@ static int
pre_aq(DECL_ARGS)
{
- print_word(n->nchild == 1 &&
+ print_word(n->child != NULL && n->child->next == NULL &&
n->child->tok == MDOC_Mt ? "<" : "\\(la");
outflags &= ~MMAN_spc;
return 1;
@@ -884,7 +884,7 @@ post_aq(DECL_ARGS)
{
outflags &= ~(MMAN_spc | MMAN_nl);
- print_word(n->nchild == 1 &&
+ print_word(n->child != NULL && n->child->next == NULL &&
n->child->tok == MDOC_Mt ? ">" : "\\(ra");
}
@@ -1000,7 +1000,7 @@ pre_bl(DECL_ARGS)
return 1;
}
- if (n->nchild) {
+ if (n->child != NULL) {
print_line(".TS", MMAN_nl);
for (icol = 0; icol < n->norm->Bl.ncols; icol++)
print_word("l");
@@ -1016,7 +1016,7 @@ post_bl(DECL_ARGS)
switch (n->norm->Bl.type) {
case LIST_column:
- if (n->nchild)
+ if (n->child != NULL)
print_line(".TE", 0);
break;
case LIST_enum:
@@ -1214,7 +1214,7 @@ pre_fl(DECL_ARGS)
font_push('B');
print_word("\\-");
- if (n->nchild)
+ if (n->child != NULL)
outflags &= ~MMAN_spc;
return 1;
}
@@ -1224,7 +1224,7 @@ post_fl(DECL_ARGS)
{
font_pop();
- if ( ! (n->nchild ||
+ if (!(n->child != NULL ||
n->next == NULL ||
n->next->type == ROFFT_TEXT ||
n->next->flags & MDOC_LINE))
@@ -1645,34 +1645,33 @@ pre_rs(DECL_ARGS)
static int
pre_rv(DECL_ARGS)
{
- int nchild;
+ struct roff_node *nch;
outflags |= MMAN_br | MMAN_nl;
- nchild = n->nchild;
- if (nchild > 0) {
+ if (n->child != NULL) {
print_word("The");
- for (n = n->child; n; n = n->next) {
+ for (nch = n->child; nch != NULL; nch = nch->next) {
font_push('B');
- print_word(n->string);
+ print_word(nch->string);
font_pop();
outflags &= ~MMAN_spc;
print_word("()");
- if (n->next == NULL)
+ if (nch->next == NULL)
continue;
- if (nchild > 2) {
+ if (nch->prev != NULL || nch->next->next != NULL) {
outflags &= ~MMAN_spc;
print_word(",");
}
- if (n->next->next == NULL)
+ if (nch->next->next == NULL)
print_word("and");
}
- if (nchild > 1)
+ if (n->child != NULL && n->child->next != NULL)
print_word("functions return");
else
print_word("function returns");
Index: mdoc_term.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/mdoc_term.c,v
retrieving revision 1.330
retrieving revision 1.331
diff -Lmdoc_term.c -Lmdoc_term.c -u -p -r1.330 -r1.331
--- mdoc_term.c
+++ mdoc_term.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010, 2012-2016 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -357,7 +357,7 @@ print_mdoc_node(DECL_ARGS)
break;
default:
if (termacts[n->tok].pre &&
- (n->end == ENDBODY_NOT || n->nchild))
+ (n->end == ENDBODY_NOT || n->child != NULL))
chld = (*termacts[n->tok].pre)
(p, &npair, meta, n);
break;
@@ -598,7 +598,7 @@ static int
termp_ll_pre(DECL_ARGS)
{
- term_setwidth(p, n->nchild ? n->child->string : NULL);
+ term_setwidth(p, n->child != NULL ? n->child->string : NULL);
return 0;
}
@@ -731,7 +731,7 @@ termp_it_pre(DECL_ARGS)
term_word(p, "\\ \\ ");
break;
case LIST_inset:
- if (n->type == ROFFT_BODY && n->parent->head->nchild)
+ if (n->type == ROFFT_BODY && n->parent->head->child != NULL)
term_word(p, "\\ ");
break;
default:
@@ -1039,7 +1039,7 @@ termp_fl_pre(DECL_ARGS)
term_fontpush(p, TERMFONT_BOLD);
term_word(p, "\\-");
- if ( ! (n->nchild == 0 &&
+ if (!(n->child == NULL &&
(n->next == NULL ||
n->next->type == ROFFT_TEXT ||
n->next->flags & MDOC_LINE)))
@@ -1106,34 +1106,33 @@ termp_rs_pre(DECL_ARGS)
static int
termp_rv_pre(DECL_ARGS)
{
- int nchild;
+ struct roff_node *nch;
term_newln(p);
- nchild = n->nchild;
- if (nchild > 0) {
+ if (n->child != NULL) {
term_word(p, "The");
- for (n = n->child; n; n = n->next) {
+ for (nch = n->child; nch != NULL; nch = nch->next) {
term_fontpush(p, TERMFONT_BOLD);
- term_word(p, n->string);
+ term_word(p, nch->string);
term_fontpop(p);
p->flags |= TERMP_NOSPACE;
term_word(p, "()");
- if (n->next == NULL)
+ if (nch->next == NULL)
continue;
- if (nchild > 2) {
+ if (nch->prev != NULL || nch->next->next != NULL) {
p->flags |= TERMP_NOSPACE;
term_word(p, ",");
}
- if (n->next->next == NULL)
+ if (nch->next->next == NULL)
term_word(p, "and");
}
- if (nchild > 1)
+ if (n->child != NULL && n->child->next != NULL)
term_word(p, "functions return");
else
term_word(p, "function returns");
@@ -1159,27 +1158,29 @@ termp_rv_pre(DECL_ARGS)
static int
termp_ex_pre(DECL_ARGS)
{
- int nchild;
+ struct roff_node *nch;
term_newln(p);
term_word(p, "The");
- nchild = n->nchild;
- for (n = n->child; n; n = n->next) {
+ for (nch = n->child; nch != NULL; nch = nch->next) {
term_fontpush(p, TERMFONT_BOLD);
- term_word(p, n->string);
+ term_word(p, nch->string);
term_fontpop(p);
- if (nchild > 2 && n->next) {
+ if (nch->next == NULL)
+ continue;
+
+ if (nch->prev != NULL || nch->next->next != NULL) {
p->flags |= TERMP_NOSPACE;
term_word(p, ",");
}
- if (n->next && NULL == n->next->next)
+ if (nch->next->next == NULL)
term_word(p, "and");
}
- if (nchild > 1)
+ if (n->child != NULL && n->child->next != NULL)
term_word(p, "utilities exit\\~0");
else
term_word(p, "utility exits\\~0");
@@ -1838,7 +1839,7 @@ termp_quote_pre(DECL_ARGS)
switch (n->tok) {
case MDOC_Ao:
case MDOC_Aq:
- term_word(p, n->nchild == 1 &&
+ term_word(p, n->child != NULL && n->child->next == NULL &&
n->child->tok == MDOC_Mt ? "<" : "\\(la");
break;
case MDOC_Bro:
@@ -1895,7 +1896,7 @@ termp_quote_post(DECL_ARGS)
switch (n->tok) {
case MDOC_Ao:
case MDOC_Aq:
- term_word(p, n->nchild == 1 &&
+ term_word(p, n->child != NULL && n->child->next == NULL &&
n->child->tok == MDOC_Mt ? ">" : "\\(ra");
break;
case MDOC_Bro:
@@ -2159,7 +2160,7 @@ termp_bk_pre(DECL_ARGS)
case ROFFT_HEAD:
return 0;
case ROFFT_BODY:
- if (n->parent->args || 0 == n->prev->nchild)
+ if (n->parent->args != NULL || n->prev->child == NULL)
p->flags |= TERMP_PREKEEP;
break;
default:
Index: man_macro.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/man_macro.c,v
retrieving revision 1.113
retrieving revision 1.114
diff -Lman_macro.c -Lman_macro.c -u -p -r1.113 -r1.114
--- man_macro.c
+++ man_macro.c
@@ -157,7 +157,7 @@ rew_scope(struct roff_man *man, int tok)
/* Preserve empty paragraphs before RS. */
n = man->last;
- if (tok == MAN_RS && n->nchild == 0 &&
+ if (tok == MAN_RS && n->child == NULL &&
(n->tok == MAN_P || n->tok == MAN_PP || n->tok == MAN_LP))
return;
--
To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv
reply other threads:[~2016-01-08 17:48 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2824047162744339370.enqueue@fantadrom.bsd.lv \
--to=schwarze@mdocml.bsd.lv \
--cc=source@mdocml.bsd.lv \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).