blob: 9a56397d719eb6d199caf81e14a9308a1bd3201c [file] [log] [blame]
- Source extraction program for chew.
- Copyright (C) 1990-2024 Free Software Foundation, Inc.
- This file is part of BFD, the Binary File Descriptor library.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
- chew.c keywords defined here put output into bfd-in2.h and libbfd.h or
- libcoff.h, from comments in the source. See also doc.str.
- Output lines generally come from comment lines starting with a dot,
- or from keywords like SYNOPSIS. Output switches to bfd-in2.h at the
- end of each comment. Use INTERNAL* to output to libbfd.h.
-
- EXTERNAL: output to bfd-in2.h, nothing to docs
- INTERNAL: output to libbfd.h, nothing to docs
- CODE_FRAGMENT: output to header and docs
- FUNCTION: output to bfd-in2.h and docs
- INTERNAL_FUNCTION: output to libbfd.h and docs
- DEFINITION: alias for FUNCTION, but generally doesn't have SYNOPSIS,
- used for structs and other random code
- INTERNAL_DEFINITION: as above, but output to libbfd.h and docs
- ENUM* outputs to bfd-in2.h, libbfd.h and docs.
: SYNOPSIS
skip_past_newline
get_stuff_in_command
translatecomments
strip_trailing_newlines
remchar
" ATTRIBUTE_HIDDEN" internalmode @ catstrif
";\n\n" catstr
indent
maybecatstr
;
- Ignore stuff that is for the docs. Output lines starting with dots.
: ignore
skip_past_newline
get_stuff_in_command
outputdots
maybecatstr
;
: CODE_FRAGMENT
ignore ;
- Output goes to bfd-in2.h
: EXTERNAL
0 internalmode ! ignore ;
- Output goes to libbfd.h/libcoff.h
: INTERNAL
1 internalmode ! ignore ;
- input stack { a b } output b if internal, a if external
: ifinternal
"" swap 1 internalmode ! maybecatstr
swap
"" swap 0 internalmode ! maybecatstr
catstr
;
- Put note in output string, regardless of internal mode.
: COMMENT
skip_past_newline
get_stuff_in_command
translatecomments
catstr
;
- SENUM enum-type-name
- ENUM enum-name
- ENUMX addl-enum-name
- ENUMDOC doc for preceding enums
- ENDSENUM max-enum-name
: make_enum_header
dup
"enum " swap catstr
"\n{\n" catstr
swap " _dummy_first_" swap catstr catstr
",\n" catstr
;
: make_string_table_header
dup
"#ifdef _BFD_MAKE_TABLE_" swap catstr swap
"\n\nstatic const char *const " swap catstr catstr
"_names[] = { \"@@uninitialized@@\",\n" catstr
;
: SENUM
skip_past_newline
copy_past_newline
remchar
dup
make_enum_header
swap
make_string_table_header
ifinternal
catstr
get_stuff_in_command catstr
translatecomments ;
: ENDSENUM
skip_past_newline
copy_past_newline strip_trailing_newlines
dup
" " swap catstr "\n};\n" catstr swap
" \"@@overflow: " swap catstr "@@\",\n};\n#endif\n\n" catstr
ifinternal
catstr
;
: make_enumerator
" " swap catstr
",\n" catstr
;
: make_enumerator_string
" \"" swap catstr
"\",\n" catstr
;
: ENUM
skip_past_newline
copy_past_newline
remchar
dup
make_enumerator
swap
make_enumerator_string
ifinternal
;
: ENUMX ENUM catstr ;
: ENUMEQ
skip_past_newline
"#define "
copy_past_newline remchar
catstr
" "
catstr
copy_past_newline
catstr
"" swap 0 internalmode ! maybecatstr
;
: ENUMEQX ENUMEQ catstr ;
: ENUMDOC
skip_past_newline
get_stuff_in_command
strip_trailing_newlines
" " wrap_comment
"\n" swap catstr "\n" catstr
- discard it if we're doing internal mode
"" swap 0 internalmode ! maybecatstr
swap
catstr catstr
;
: SECTION ignore ;
: SUBSECTION ignore ;
: SUBSUBSECTION ignore ;
: INODE ignore ;
: DESCRIPTION ignore ;
: DOCDD ignore ;
: ENDDD EXTERNAL ;
: FUNCTION EXTERNAL ;
: INTERNAL_FUNCTION INTERNAL ;
: DEFINITION EXTERNAL ;
: INTERNAL_DEFINITION INTERNAL ;