Skip to content

Commit

Permalink
Use @deftypefn in chew output
Browse files Browse the repository at this point in the history
When reading the BFD info manual, function definitions looked very
strange to me:

    *Synopsis*
	 long bfd_get_mtime (bfd *abfd);
       *Description*
    Return the file modification time (as read from the file system, or from
    the archive header for archive members).

The *Synopsis* and *Description* text in particular is very un-info-like.

To fix this, I tried removing the *Synopsis* text and having FUNCTION
use @deftypefn instead.  However, this ended up requiring some new
state, because SYNOPSIS can appear without FUNCTION.  This in turn
required "catstrif" (I considered adding FORTH-style if-else-then, but
in the end decided on an ad hoc approach).

After this the result looks like:

 -- Function: long bfd_get_mtime (bfd *abfd);
     Return the file modification time (as read from the file system, or
     from the archive header for archive members).

This patch also reorders a few documentation comments to ensure that
SYNOPSIS comes before DESCRIPTION.  This is the more common style and
is also now required by doc.str.

2023-02-07  Tom Tromey  <tom@tromey.com>

	* syms.c (bfd_decode_symclass, bfd_is_undefined_symclass)
	(bfd_symbol_info): Reorder documentation comment.
	* doc/doc.str (synopsis_seen): New variable.
	(SYNOPSIS): Set synopsis_seen.  Emit @deftypefn.
	(DESCRIPTION): Use synopsis_seen.
	* doc/chew.c (catstrif): New function.
	(main): Add catstrif intrinsic.
	(compile): Recognize "variable" command.
  • Loading branch information
tromey committed Feb 15, 2023
1 parent fe20eda commit b8e81f1
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 14 deletions.
11 changes: 11 additions & 0 deletions bfd/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
2023-02-07 Tom Tromey <tom@tromey.com>

* syms.c (bfd_decode_symclass, bfd_is_undefined_symclass)
(bfd_symbol_info): Reorder documentation comment.
* doc/doc.str (synopsis_seen): New variable.
(SYNOPSIS): Set synopsis_seen. Emit @deftypefn.
(DESCRIPTION): Use synopsis_seen.
* doc/chew.c (catstrif): New function.
(main): Add catstrif intrinsic.
(compile): Recognize "variable" command.

2023-02-07 Tom Tromey <tom@tromey.com>

* doc/proto.str (external, internal, ifinternal, ENUMEQ, ENUMDOC):
Expand Down
30 changes: 30 additions & 0 deletions bfd/doc/chew.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
You define new words thus:
: <newword> <oldwords> ;
Variables are defined using:
variable NAME
*/

/* Primitives provided by the program:
Expand Down Expand Up @@ -67,6 +70,7 @@
outputdots - strip out lines without leading dots
maybecatstr - do catstr if internal_mode == internal_wanted, discard
value in any case
catstrif - do catstr if top of integer stack is nonzero
translatecomments - turn {* and *} into comment delimiters
kill_bogus_lines - get rid of extra newlines
indent
Expand Down Expand Up @@ -1015,6 +1019,20 @@ maybecatstr (void)
pc++;
}

static void
catstrif (void)
{
int cond = isp[0];
isp--;
icheck_range ();
if (cond)
catstr (tos - 1, tos);
delete_string (tos);
tos--;
check_range ();
pc++;
}

char *
nextword (char *string, char **word)
{
Expand Down Expand Up @@ -1307,6 +1325,17 @@ compile (char *string)
free (word);
string = nextword (string, &word);
}
else if (strcmp (word, "variable") == 0)
{
free (word);
string = nextword (string, &word);
if (!string)
continue;
intptr_t *loc = xmalloc (sizeof (intptr_t));
*loc = 0;
add_intrinsic_variable (word, loc);
string = nextword (string, &word);
}
else
{
fprintf (stderr, "syntax error at %s\n", string - 1);
Expand Down Expand Up @@ -1444,6 +1473,7 @@ main (int ac, char *av[])
add_intrinsic ("swap", swap);
add_intrinsic ("outputdots", outputdots);
add_intrinsic ("maybecatstr", maybecatstr);
add_intrinsic ("catstrif", catstrif);
add_intrinsic ("translatecomments", translatecomments);
add_intrinsic ("kill_bogus_lines", kill_bogus_lines);
add_intrinsic ("indent", indent);
Expand Down
14 changes: 9 additions & 5 deletions bfd/doc/doc.str
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

- True if SYNOPSIS was seen.
variable synopsis_seen

: DOCDD
skip_past_newline
get_stuff_in_command kill_bogus_lines catstr
Expand Down Expand Up @@ -48,14 +51,12 @@

: SYNOPSIS
skip_past_newline
"@strong{Synopsis}\n" catstr
"@example\n" catstr
1 synopsis_seen !
"@deftypefn {Function} " catstr
get_stuff_in_command
kill_bogus_lines
indent
catstr
"@end example\n" catstr

;

: func
Expand Down Expand Up @@ -118,7 +119,10 @@


: DESCRIPTION
"@strong{Description}@*\n" catstr subhead ;
subhead
"@end deftypefn\n" synopsis_seen @ catstrif
0 synopsis_seen !
;

: RETURNS
"@strong{Returns}@*\n" catstr subhead ;
Expand Down
18 changes: 9 additions & 9 deletions bfd/syms.c
Original file line number Diff line number Diff line change
Expand Up @@ -642,12 +642,12 @@ decode_section_type (const struct bfd_section *section)
FUNCTION
bfd_decode_symclass
SYNOPSIS
int bfd_decode_symclass (asymbol *symbol);
DESCRIPTION
Return a character corresponding to the symbol
class of @var{symbol}, or '?' for an unknown class.
SYNOPSIS
int bfd_decode_symclass (asymbol *symbol);
*/
int
bfd_decode_symclass (asymbol *symbol)
Expand Down Expand Up @@ -725,13 +725,13 @@ bfd_decode_symclass (asymbol *symbol)
FUNCTION
bfd_is_undefined_symclass
SYNOPSIS
bool bfd_is_undefined_symclass (int symclass);
DESCRIPTION
Returns non-zero if the class symbol returned by
bfd_decode_symclass represents an undefined symbol.
Returns zero otherwise.
SYNOPSIS
bool bfd_is_undefined_symclass (int symclass);
*/

bool
Expand All @@ -744,13 +744,13 @@ bfd_is_undefined_symclass (int symclass)
FUNCTION
bfd_symbol_info
SYNOPSIS
void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
DESCRIPTION
Fill in the basic info about symbol that nm needs.
Additional info may be added by the back-ends after
calling this function.
SYNOPSIS
void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
*/

void
Expand Down

0 comments on commit b8e81f1

Please sign in to comment.