annotate lib-src/ebrowse.c @ 107863:594e81986a75

2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-insert-link): Find the link buffer on visible frames. (org-export-latex-default-packages-alist): hyperref must be loaded late. (org-open-file): More care with the new matching for file links. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-preprocess): Do not yet protect defined entities - these will be taken care of later. (org-export-latex-special-chars): Post-process entity replacement. (org-export-latex-fontify-headline): Do not yet protect defined entities - these will be taken care of later. (org-export-latex-tables, org-export-latex-links): Format the caption properly. * org-entities.el (org-entities-user): Fix typo. * org.el (org-prepare-agenda-buffers): Uniquify TODO keywords * org-entities.el (org-entities-user): Improve docstring. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-entities.el (org-macs): Require org-macs, to be sure that we have `declare-function' defined. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-classes): Update docstring. * org.el (org-format-latex-header): Add cookies to the header. (org-splice-latex-header): Implement placement according to cookies. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish-aux-preprocess): Control case sensitivity. 2010-04-10 Bastien Guerry <bzg@altern.org> * org.el (org-splice-latex-header): Fix typo. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-make-header): Use `org-splice-latex-header' to build the header. (org-export-latex-classes): Update docstring. * org.el (org-splice-latex-header): New function. (org-create-formula-image): Use `org-splice-latex-header' to build the header. * org-gnus.el (org-gnus-follow-link): Handle nndoc backend. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-export-latex-packages-alist) (org-export-latex-default-packages-alist): Fix docstring to reflect the expected structure. * org-docbook.el (org-docbook-do-expand): Fix bug with variable names. (org-export-docbook-finalize-table): Make use of label for tables. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-attach.el (org-attach-commit): Split on newlines. * org.el (org-export-latex-default-packages-alist): Use list instead of cons for the entries. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-entities.el (org-entity-get-representation): Catch the case that there is not entry in the list. * org-mobile.el (org-mobile-use-encryption) (org-mobile-encryption-tempfile, org-mobile-encryption-password): New options. (org-mobile-check-setup): CHeck the encryption setup. (org-mobile-copy-agenda-files, org-mobile-sumo-agenda-command) (org-mobile-create-sumo-agenda): Use encryption code. (org-mobile-encrypt-and-move): New function. (org-mobile-encrypt-file, org-mobile-decrypt-file): New functions. (org-mobile-move-capture): Decrypt the capture file. * org.el (org-entities): Require the new file. (org-export-latex-default-packages-alist): New variable. (org-complete): Use new entity code for completion. (org-create-formula-image): Use the new packages variable. * org-latex.el (org-export-latex-classes): Remove the standard packages from the class headers. (org-export-latex-make-header): Use the new package variable. (org-export-latex-special-chars): Better regexp for entities, to support entity name that contain numbers. (org-export-latex-treat-backslash-char): Use the new entity code. * org-html.el (org-html-do-expand): Use the new entity code. * org-exp.el (org-export): Add the new export commands. (org-html-entities): Constant removed. (org-export-visible): Add the new export commands. * org-entities.el: New file. * org-docbook.el (org-docbook-do-expand): Use new entity code. * org-ascii.el (org-export-ascii-entities): New variable. (org-export-as-latin1, org-export-as-latin1-to-buffer) (org-export-as-utf8, org-export-as-utf8-to-buffer): New commands. (org-export-as-encoding): New function. (org-export-ascii-preprocess): Call `org-ascii-replace-entities'. (org-ascii-replace-entities): New function. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-html.el (org-html-level-start): Catch the case that target might be nil. 2010-04-10 Dan Davison <davison@stats.ox.ac.uk> * org.el (org-appearance): Change Customize group variable name from org-font-lock to org-appearance, and change tag from "Org Font Lock" to "Org Appearance" (org-odd-levels-only): Change Customize group variable name (org-level-color-stars-only): Change Customize group variable name (org-hide-leading-stars): Change Customize group variable name (org-hidden-keywords): Change Customize group variable name (org-fontify-done-headline): Change Customize group variable name (org-fontify-emphasized-text): Change Customize group variable name (org-fontify-whole-heading-line): Change Customize group variable name (org-highlight-latex-fragments-and-specials): Change Customize group variable name (org-hide-emphasis-markers): Change Customize group variable name (org-emphasis-alist): Change Customize group variable name (org-emphasis-regexp-components): Change Customize group variable name (org-modules): Remove mention of org-R * org-faces.el (org-faces): Change Customize group variable name 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-diary-last-run-time): New variable. (org-diary): prepare agenda buffers only if last call was some time ago. * org-html.el (org-export-html-preprocess): Replace \ref macros with a link. (org-format-org-table-html): Add the label as an anchor. * org-docbook.el (org-export-docbook-format-image): Do some formatting on captions. * org-latex.el (org-export-latex-tables, org-export-latex-links): Do some formatting on captions. * org-html.el (org-export-html-format-image) (org-format-org-table-html): Do some formatting on captions. 2010-04-10 Dan Davison <davison@stats.ox.ac.uk> * org.el (org-hidden-keywords): New customizable variable. This is a list of symbols specifying which of the special keywords #+DATE, #+AUTHOR, #+EMAIL and #+TITLE should be hidden by font lock. (org-fontify-meta-lines-and-blocks): Changes to font-lock code implementing new faces and hiding behaviour. * org-faces.el (org-document-title): New face for #+TITLE lines (org-document-info): New face for #+DATE, #+AUTHOR, #+EMAIL lines (org-document-info-keyword): New face for #+DATE, #+AUTHOR, #+EMAIL keywords 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish-sanitize-plist): New function to rename "index" properties to "sitemap". Do this renaming globally. (org-publish-with-aux-preprocess-maybe): New macro. (org-publish-org-to-pdf, org-publish-org-to-html): Use the new macro. (org-publish-aux-preprocess) (org-publish-index-generate-theindex.inc): New function. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-align): Interpret <N> at fixed width, not as maximum width. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-author-info, org-export-email-info): Fix docstrings. * org-beamer.el (org-beamer-select-environment): Renamed from `org-beamer-set-environment-tag'. Improve docstring. * org-freemind.el (org-freemind-write-mm-buffer): Fix another problem with odd levels. * org-ascii.el (org-export-as-ascii): Export email only if the author wants it. * org-docbook.el (org-export-as-docbook): Export email only if the author wants it. * org-html.el (org-export-as-html): Export email only if the author wants it. * org-exp.el (org-export-email-info): New option. (org-export-plist-vars): Add entry for `org-export-email'. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-goto-line): Fix typo. 2010-04-10 Mikael Fornius <mfo@abc.se> * org.el (org-agenda-files): Typo. (org-read-agenda-file-list): Add optional argument to help `org-store-new-agenda-file-list' to remember un-expanded file names. Expand file names relative to `org-directory'. (org-store-new-agenda-file-list): Keep un-expanded file names when saving, if available. (org-agenda-files): Update documentation. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-ascii.el (org-export-as-ascii): Catch the case of exporting a buffer with no file name attached. * org.el (org-log-refile): New option. (org-log-note-headings): Add a heading for refiling. (org-startup-options): Add keywords for logging of the refile action. (org-refile): Add logging action. (org-add-log-note): Allow for refiling action. * org-agenda.el (org-agenda-bulk-action): Make sure `org-log-refile' is not `note' during a bulk action. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-map-dblocks): Use save-excursion to remember the position. * org-attach.el (org-attach-commit): Remove dependence on xargs. (org-attach-delete-one): Commit after deleting a file. * org-latex.el (org-export-latex-fontify): Do not mistake table.el borders for strike-through emphasis. * org-freemind.el (org-freemind-write-mm-buffer): Simplify the handling of odd levels. * org-agenda.el (org-agenda-todo-ignore-deadlines): Document `past' and `future' values. (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item): Handle `past' and `future' values. * org.el (org-read-agenda-file-list): Interpret file names relative to org-directory and allow environment variables and "~". * org-latex.el (org-export-latex-special-chars): Allow a parenthesis before an exponent or subscript. 2010-04-10 Dan Davison <davison@stats.ox.ac.uk> * org-src.el (org-edit-src-exit): When returning from code edit buffer, if code block is hidden, leave point at start of #+begin_src line 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-insert-heading): Do not remove all spaces if the headline is empty. * org-indent.el (org-indent): Fix group name. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-goto-column): Fix forcing a non-existing column. (org-table-get, org-table-put, org-table-goto-line) (org-table-current-line): New functions. 2010-04-10 Jan Bcker <jan.boecker@jboecker.de> * org.el (org-open-file): Allow regular expressions in org-file-apps to capture link parameters using groups. In a command string to be executed, the parameters can be referenced using %1, %2, etc. Lisp forms can access them using (match-string n link). (org-apps-regexp-alist): Adopt the created regexp, as this is now matched against a file: link instead of the file name. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-crypt.el (org-reveal-start-hook): Add a decryption function to this hook. (org-decrypt-entries, org-encrypt-entries, org-decrypt-entry): Add docstrings. * org.el (org-point-at-end-of-empty-headline) (org-level-increment, org-get-previous-line-level): New function. (org-cycle-level): Rewritten to be independent of when this function is called. (org-in-regexps-block-p): New function. (org-reveal-start-hook): New hook. (org-reveal): Run new hook. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-keywords): Start a new paragraph after time keywords, do not add "\newline". * org-html.el (org-export-as-html): Avoid double # in href. * org.el (org-refile-get-location): Catch an invalid target specification. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-add-entry-to-org-agenda-diary-file): Make sure the behavior regarding to extracting time is consistent. 2010-04-10 Stephen Eglen <stephen@gnu.org> * org-agenda.el (org-agenda-insert-diary-extract-time): New variable. (org-agenda-add-entry-to-org-agenda-diary-file): Use this new variable rather than `org-agenda-search-headline-for-time'. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-fix-bullet-type): Improve cursor positioning. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-adaptive-fill-regexp-backup): New variable. (org-set-autofill-regexps): Store a backup of `adaptive-fill-regexp'. (org-adaptive-fill-function): Fix filling of comments and ordered lists. If there is no other match, till try adaptive fill. 2010-04-10 John Wiegley <jwiegley@gmail.com> * org-agenda.el (org-agenda-include-deadlines): Added new customization variable to determine whether unscheduled tasks should appear in the agenda solely because of their deadline. Default to true, which was the previous behavior (it just wasn't configurable). (org-agenda-mode-map, org-agenda-view-mode-dispatch): Bind ! in the agenda to show/hide deadline tasks. (org-agenda-menu): Added menu option for show/hide deadlines. (org-agenda-list): Make the agenda list sensitive to the value of `org-agenda-include-deadlines'. (org-agenda-toggle-deadlines): New function to toggle the value of `org-agenda-include-deadlines' and repaint the modeline indicators. (org-agenda-set-mode-name): Show "Deadlines" in the agenda modeline if deadline tasks are being displayed. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-eval-formula): Replace $# and @# by current column and row number. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-set-property, org-delete-property): Go back to prompting for the property. * org-latex.el (org-export-latex-make-header): Fully process author line. (org-export-latex-fontify-headline): Allow several arguments, not just one. (org-export-latex-fix-inputenc): Catch the error when `latexenc-coding-system-to-inputenc' is not defined. * org-agenda.el (org-agenda-skip-if-todo): New function. (org-agenda-skip-if): Add conditions for TODO keywords. (org-agenda-skip-if): Document the new todo conditions. 2010-04-10 Mikael Fornius <mfo@abc.se> * org.el (org-at-property-p): Check if we are inside a property drawer not just any drawer. (org-set-property, org-delete-property): When cursor is on a property key value pair do not prompt for property name instead use name at cursor. (org-ctrl-c-ctrl-c): Still do org-property-action when cursor is on the first line of a property drawer. (org-property-end-re): Spell check. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-attach-captions-and-attributes): Add the properties to the entire table, in case the first line is removed. * org-archive.el (org-archive-reversed-order): New option. (org-archive-subtree, org-archive-to-archive-sibling): Use the new option `org-archive-reversed-order'. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-entry-types): New variable. (org-agenda-list): Use `org-agenda-entry-types'. (org-agenda-custom-commands-local-options): Support for setting `org-agenda-entry-types' as an option. (org-diary): Shift some documentation from here to the variable `org-agenda-entry-types'. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-make-header): Apply macros in author field. * org-clock.el (org-clocking-buffer, org-clocking-p): New function. (org-clock-select-task, org-clock-notify-once-if-expired) (org-clock-in, org-clock-out, org-clock-cancel, org-clock-goto) (org-clock-out-if-current, org-clock-save): Use the new functions. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-docbook.el (org-export-as-docbook): Remove unnecessary newline. (org-export-as-docbook): Remove unnecessary newline. (org-export-as-docbook): Fix problem with double footnote reference in one place. * org-exp.el (org-export-format-source-code-or-example): Remove unnecessary newline. * org.el (org-deadline, org-schedule): Allow rescheduling entries with repeaters. * org-table.el (org-table-convert-refs-to-rc): Better way to catch function calls that look like references. * org.el (org-open-at-point): Get link abbreviations from reference buffer. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-table.el (org-table-convert-refs-to-rc): Do not read arctan2 as a reference. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-link-unescape): Solve issue with lower-case escapes. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-classes): Add \usepackage{latexsym} to all classes. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-html.el (org-export-as-html): Do not allow protected lines into the table of contents. * org-latex.el (org-export-latex-special-chars): Find subsequent occurrences of special characters. (org-export-latex-tables): Do not convert table-like stuff that is protected. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-toggle-checkbox): No errors when updating checkbox count fails because there is no heading. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-report-include-clocking-task): New option. (org-clock-sum): Add the current clocking task. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-cycle): Print a message when in a table.el table. (org-edit-special): Recognize the table.el context. (org-ctrl-c-ctrl-c): Print a message when in a table.el table. * org-src.el (org-at-table.el-p): Declare. (org-edit-src-code): Handle a special case for table.el editing. (org-edit-src-find-region-and-lang): Recognize the table.el context. * org-latex.el (org-export-latex-tables): Convert table.el tables. (org-export-latex-convert-table.el-table): New function. * org-html.el (org-html-expand): Fix table.el export. * org-latex.el (org-export-latex-preprocess): Protect footnotes in headings. * org-id.el (org-id-find-id-file): Fix bug when there is no hash table for the id locations. * org.el (org-read-date-analyze): Match American-style dates, like 5/30 or 5/13/7. Make sure cal-iso.el is loaded. Don't force he current year when reading ISO and American dates. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-face-from-face-or-color): New function. (org-get-todo-face, org-font-lock-add-priority-faces) (org-get-tag-face): Use `org-face-from-face-or-color'. * org-faces.el (org-todo-keyword-faces, org-priority-faces): Allow simple colors as values. (org-faces-easy-properties): New option. * org-agenda.el (org-agenda-set-mode-name): Show if the agenda is restricted, as an agenda mode. (org-agenda-fontify-priorities): Allow simple colors as values. 2010-04-10 Bastien Guerry <bzg@altern.org> * org-timer.el (org-timer-current-timer): Renamed from `org-timer-last-timer'. (org-timer-timer1, org-timer-timer2, org-timer-timer3): Removed. (org-timer-cancel-timer, org-timer-show-remaining-time) (org-timer-set-timer): Update to use only one timer. * org.el (org-set-property): Remove useless space in the prompt. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-html.el (org-export-html-style-default): Add a default style for textareas. * org-exp.el (org-export-format-source-code-or-example): Fix textarea tag. 2010-04-10 Bastien Guerry <bzg@altern.org> * org-clock.el (org-clock-current-task): New variable to store last clocked in task. (org-clock-set-current, org-clock-delete-current): New functions. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-remember.el (org-remember-apply-template): Extend comment. (org-remember-handler): Implement clock sibling filing. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-publish.el (org-publish-all, org-publish-current-file) (org-publish-current-project): When called with prefix argument FORCE, also rebuild the validation file list. * org-latex.el (org-export-latex-preprocess): Protect footnotes in section headings. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-html.el (org-export-as-html-and-open): Kill product buffer if the user wants that. * org-latex.el (org-export-as-pdf-and-open): Kill product buffer if the user wants that. * org-exp.el (org-export-kill-product-buffer-when-displayed): New option. * org-agenda.el (org-batch-agenda-csv): Use the time property instead of the `time-of-day' property. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-timer.el (org-timer-start-hook, org-timer-stop-hook) (org-timer-pause-hook, org-timer-set-hook) (org-timer-cancel-hook): New hooks. (org-timer-start): Run `org-timer-start-hook'. (org-timer-pause-or-continue): Run `org-timer-pause-hook'. (org-timer-stop): Run `org-timer-stop-hook'. (org-timer-cancel-timers): Run `org-timer-cancel-hook'. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-reveal): Double prefix arg shows the subtree of the parent. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-search-view): Fix bug with searching full words in headlines in search view. (org-agenda-skip-deadline-prewarning-if-scheduled): New option. (org-agenda-get-deadlines): Suppress pre-warning if the entry is scheduled (if the user configures it so. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-hide-archived-subtrees): Don't jump to end of subtree if the match was not in a headline. (org-inside-latex-macro-p): Allow more complex arguments. (org-emphasize): Protect against use at end of buffer. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-align-tags): Avoid side effects on text properties. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-todo-ignore-scheduled): More allowed values. (org-agenda-todo-ignore-scheduled) (org-agenda-todo-ignore-deadlines): More control with different allowed values. (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item): Honor the new option settings. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-get-location): Make sure the selection buffer is shown in the current frame. * org-ascii.el (org-export-ascii-table-widen-columns): New option. (org-export-ascii-preprocess): Realign tables to remove narrowing if `org-export-ascii-table-widen-columns' is set. * org-table.el (org-table-do-narrow): New variable. (org-table-align): Narrow only if `org-table-do-narrow' is t. * org.el (org-deadline, org-schedule): Allow updating if the relevant time stamp does not have a repeater, i.e. do not require that no time stamp has a repeater. * org-agenda.el (org-agenda-align-tags): Don't add a face to the new white space before the tags. * org-latex.el (org-export-as-latex): Do nit require the buffer to be visiting a file when only exporting to a buffer or string. (org-export-latex-fix-inputenc): Only save the buffer is there is a file name attached to it. 2010-04-10 Dan Davison <davison@stats.ox.ac.uk> * org-src.el (org-edit-src-exit): Widen before exiting edit buffers 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-fontify-meta-lines-and-blocks): Honor `org-fontify-quote-and-verse-blocks'. * org-faces.el (org-fontify-quote-and-verse-blocks): New option. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-open-at-point): Also check for text property org-linked-text before offering collected links. 2010-04-10 Stephen Eglen <stephen@gnu.org> * org-agenda.el (org-agenda-add-entry-to-org-agenda-diary-file): Optionally extract time specification from text and add to the timestamp. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-html-entities): Fix typo. * org-latex.el (org-export-latex-make-header): Use \providecommand to make sure the \alert macro is defined. * org.el (org-format-latex-signal-error) (org-create-formula-image): Use `org-format-latex-signal-error'. 2010-04-10 Stephen Eglen <stephen@gnu.org> * org.el (org-store-link): For dired buffers, use default-directory as link name if dired-get-filename returns nil. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-concatenate-multiline-links): The for protectedness at beginning of match. * org-latex.el (org-export-latex-fix-inputenc): Never leave the AUTO as a coding system, instead default to utf8. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-block-todo-from-children-or-siblings-or-parent) (org-block-todo-from-checkboxes): Respect the local variable value when deciding if blocking should be active. * org-latex.el (org-export-latex-make-header): Define the align macro if it is not yet defined. * org-agenda.el (org-agenda-insert-diary-make-new-entry): Call `org-insert-heading' with the INVISIBLE-OK argument. * org-mac-message.el (org-mac-message-insert-flagged): Call `org-insert-heading' with the INVISIBLE-OK argument. * org.el (org-insert-heading): New argument INVISIBLE-OK. * org-agenda.el (org-agenda-view-mode-dispatch): Improve the prompt message. * org-html.el (org-html-level-start): Use the `html-container-class' text property to set an additional class for an outline container. * org-exp.el (org-export-remember-html-container-classes): New function. (org-export-preprocess-string): Call `org-export-remember-html-container-classes'. * org.el (org-cycle): Mention level cycling in the docstring. (org-default-properties): Add new property HTML_CONTAINER_CLASS. * org-remember.el (org-remember-apply-template): Do file insertion first. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-habit.el (org-habit-insert-consistency-graphs): Fix a problem with mis-aligned graphs when showing habits. 2010-04-10 Mikael Fornius <mfo@abc.se> * org.el (org-assign-fast-keys): Prefer keys used in keyword name when assigning. Begin using numerical characters when all in name is used up. This is to spare alphanumeric characters for better match with other keywords. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-preprocess-hook): Improve documentation. * org-latex.el (org-export-latex-preprocess): More consistent conversion and protection of the words LaTeX and TeX. (org-export-latex-fontify-headline, org-export-latex-preprocess): Allow angle brackets in commands, for beamer. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-in): Improve the look of the clock line by formatting links. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-classes): Use AUTO as the place holder string for the coding system. And improve the documentation. (org-export-latex-fix-inputenc): Only modify the coding system if it is given by the placeholder AUTO. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-task-overrun-text): New option. (org-task-overrun, org-clock-update-period): New variables. (org-clock-get-clock-string, org-clock-update-mode-line): Mark overrun clock. (org-clock-notify-once-if-expired): Check if clock is overrun. * org-faces.el: New face `org-mode-line-clock-overrun'. 2010-04-10 Jan Bcker <jan.boecker@jboecker.de> * org.el (org-narrow-to-subtree): Position the end of the narrowed region before the line with the next heading, to prevent the user from prepending text to the next headline. 2010-04-10 Stephen Eglen <stephen@gnu.org> * org-agenda.el (org-get-time-of-day): Use org-agenda-time-leading-zero to allow leading zero (rather than space) for times. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-diary-entry-in-org-file): Make sure org-datetree.el is loaded. * org-datetree.el: autoload `org-datetree-find-day-create' * org-latex.el (org-export-latex-hyperref-format): New option. (org-export-latex-links): Use `org-export-latex-hyperref-format'. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-ctags.el (org-ctags-enable): Change order of functions. (org-ctags-create-tags): Add wildcard to file name expansion. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-entry-properties): Fix some important bugs. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-link-unescape, org-link-escape): Only use hexlify if the table is not explicitly given. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-out-when-done): Allow a list of keywords as value. (org-clock-out-if-current): Work with the new list value of `org-clock-out-when-done'. (org-clock-out, org-clock-out-if-current): Avoid circular logic between clocking out and state changes. * org-ctags.el (org-ctags-path-to-ctags): Better system-type test. * org-latex.el (org-export-latex-treat-backslash-char): Do not by accident protect a character that is before a backslash. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-diary-class): Use `org-order-calendar-date-args'. * org.el (org-order-calendar-date-args): New function. * org-exp.el (org-export-target-internal-links): Check for protectedness after the first bracket. * org.el (org-entry-properties): Don't match wrong-case TODO keywords. * org-agenda.el (org-agenda-schedule, org-agenda-deadline): Document that ARG is passed through to remove the date. (org-agenda-bulk-action): Accept prefix arg and pass it on. Do not read a date when the user has given a `C-u' prefix. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-fix-displayed-tags): Fix bug when all tags are hidden. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-fix-inputenc): New function. (org-export-latex-inputenc-alist): New option. * org-exp.el (org-export): New key SPC to publish enclosing subtree. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-indent.el (org-indent-add-properties): Catch case when there is no headline in the buffer. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-html-entities): Add checkmark symbol. * org-ascii.el (org-export-ascii-preprocess): Protect targets in verbatim code for ASCII export. * org.el (org-update-statistics-cookies): Also see checkboxes in ordered lists. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-view-mode-dispatch): Define the `L' key. * org-beamer.el (org-beamer-amend-header): Change the location where `org-beamer-header-extra' is inserted. * org.el (org-compute-latex-and-specials-regexp): Don't do BIND just for computing this regexp. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-beamer.el (org-beamer-frame-default-options): New option. (org-beamer-sectioning): Use default options if the user does not have defined any. (org-beamer-fix-toc): Put a frame around the table of contents. * org-exp.el (org-export-remove-comment-blocks-and-subtrees): Make sure case-folding works well when processing comment stuff. * org-latex.el (org-export-latex-after-save-hook): New hook. (org-export-as-latex): Run the new hook. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-beamer.el (org-beamer-environments-default): Add the note environments. (org-beamer-after-initial-vars): Allow several BEAMER_HEADER_EXTRA lines and collect and combine the content. (org-beamer-after-initial-vars): Check for note tags and make sure they will be seen like a property. * org.el (org-offer-links-in-entry): Fix bug when there is a single link. * org-exp.el (org-export): Make sure the mark is activated, also when `transient-mark-mode' is off. * org-agenda.el (org-agenda-search-view-always-boolean): New option. (org-agenda-search-view-search-words-only): Obsolete variable, is now an alias for `org-agenda-search-view-always-boolean'. (org-agenda-search-view-force-full-words): New option. (org-search-view): Improve docstring, and implement a better logic for Boolean and phrase searches. (org-agenda-last-search-view-search-was-boolean): New variable. (org-agenda-manipulate-query): Consider the type of the last search when modifying the search string. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-as-latex): Do the first letbind in the right moment. * org-agenda.el (org-get-entries-from-diary): Add the new face to these entries. * org-faces.el (org-agenda-diary): New face. * org.el (org-make-link-regexps): Allow regexp-special characters in link types. (org-open-file): When in-emacs is `system', also force system opening, like when the value was `(16)'. (org-update-statistics-cookies): Handle entries without children. * org-exp.el (org-export-preprocess-before-normalizing-links-hook): New hook. (org-export-preprocess-string): Run the new hook. * org.el (org-offer-links-in-entry): Make RET open all links. * org-html.el (org-export-as-html): Remove any leftover display properties in the html file. * org-wl.el (org-wl-store-link): Work-around for format bug with text properties. * org-habit.el (org-habit-insert-consistency-graphs): Turn off invisibility while adding the graphs. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-remember.el (org-select-remember-template): Use C letter to customize remember templates. * org-agenda.el (org-agenda-bulk-mark, org-agenda-bulk-unmark): Move cursor to next visible line. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-beamer.el (org-beamer-sectioning): Leave columns environment by specifying 0 or 1 for column width. (org-beamer-column-widths): Make 0 stand for 0.0. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-mark-radio-links): Don't match inside <<target>>. * org.el (org-format-latex-header-extra): New variable. (org-format-latex): Set org-format-latex-header-extra from in-buffer stuff. (org-format-latex): Add org-format-latex-header-extra to the variables on which image creation depends. (org-create-formula-image): Add the header stuff from in-buffer settings. (org-read-date-analyze): Base the analysis for future preference on NOW, not on the default date. * org-inlinetask.el (org-inlinetask-export-handler): Add CSS class for TODO keyword in inline tasks. * org.el (org-log-note-headings): New headings for removing deadline or scheduling date. (org-deadline, org-schedule): Arrange for logging when removing a date. (org-add-log-note): Handle deadline and scheduling removal. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-visible): Add LaTeX/pdf export. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-diary-class): New function. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-preprocess): Do process the text of a radio target. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-entry-properties): Add TIMESTAMP properties back in. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-all-time-keywords): New variable. (org-set-regexps-and-options): Set `org-all-time-keywords'. (org-entry-blocked-p): New function. (org-special-properties): Add BLOCKED as a new special property. (org-entry-properties): New optional argument SPECIFIC, only parse for this property when it is specified. (org-entry-get): Pass a SPECIFIC argument to `org-entry-properties'. * org-latex.el (org-export-as-latex): Preprocess TEXT as well. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-tables): No forced line end if there is no caption. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-html-entities): Add Euro symbols from Marvosym package. * org-latex.el (org-export-latex-tables): Only add a caption when macro in in longtable environments if one has been defined. * org-html.el (org-export-as-html): Only take title from buffer if not exporting body-only. * org-latex.el (org-export-latex-preprocess): Better version of the regular expression for protecting LaTeX macros. (org-export-latex-preprocess): Start searching for macros to protect from beginning of buffer. * org-exp.el (org-export-target-internal-links): Check for protectedness earlier in the string. * org-agenda.el (org-agenda-highlight-todo): Match TODO keywords case sensitively. * org-id.el (org-id-store-link): Match TODO keywords case sensitively. * org.el (org-heading-components, org-get-outline-path) (org-display-outline-path): Match TODO keywords case sensitively. * org-latex.el (org-export-as-latex): Ignore read-only properties. * org-exp.el (org-export-preprocess-string): Remove any `read-only' properties. * org-agenda.el (org-agenda-inactive-leader): New option. (org-agenda-get-timestamps): Use `org-agenda-inactive-leader'. (org-tags-view): Prompt for matcher if MATCH is an empty string. (org-todo-list): Prompt for matcher if ARG is an empty string. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-open-link-functions): New hook. (org-open-at-point): Run `org-open-link-functions'. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-agenda.el (org-agenda-date-prompt): Allow inactive time stamps as well. * org.el (org-inhibit-startup-visibility-stuff): New variable. (org-mode): Don't do startup visibility if inhibited. (org-outline-overlay-data, org-set-outline-overlay-data): New functions. (org-save-outline-visibility): New macro. (org-log-note-headings): Document that one should not change the `state' note format. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-make-link-regexps): Capture link path into a group. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-beamer.el (org-beamer-after-initial-vars): Do not overwrite the options plist. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-startup-with-beamer-mode): New option. (org-property-changed-functions) (org-property-allowed-value-functions): New hooks. (org-entry-put, org-property-get-allowed-values): Run the new hooks. (org-property-next-allowed-value): Run the new hooks. * org-exp.el (org-export-select-backend-specific-text): Add the special beamer tags. * org-beamer.el (org-export-preprocess-before-selecting-backend-code-hook): New file. * org-latex.el (org-export-latex-after-initial-vars-hook): New hook. (org-export-as-latex): Run `org-export-latex-after-initial-vars-hook'. (org-export-latex-format-toc-function) (org-export-latex-make-header): Call `org-export-latex-format-toc-function'. * org.el (org-fill-template): Make template searches case sensitive. * org-exp.el (org-export): Use "1" as a sign to export only the subtree. * org-colview-xemacs.el (org-columns-edit-value): Use org-unrestricted property. * org-colview.el (org-columns-edit-value): Use org-unrestricted property. * org.el (org-compute-property-at-point): Set org-unrestricted text property if the list contains ":ETC". (org-insert-property-drawer): Use org-unrestricted property. * org-exp.el (org-export-preprocess-before-selecting-backend-code-hook): New hook. (org-export-preprocess-string): Run `org-export-preprocess-before-selecting-backend-code-hook'. * org-xoxo.el (org-export-as-xoxo): Run `org-export-first-hook'. * org-latex.el (org-export-region-as-latex): Run `org-export-first-hook'. * org-html.el (org-export-as-html): Run `org-export-first-hook'. * org-docbook.el (org-export-as-docbook): Run `org-export-first-hook'. * org-ascii.el (org-export-as-ascii): Run `org-export-first-hook'. * org-exp.el (org-export-first-hook): New hook. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-previous-item): Exit at the beginning of the buffer. * org-id.el (org-id-locations-save): Only write the id locations if any are defined. * org-archive.el (org-archive-all-done): Make this work in a file with org-odd-levels-only set. * org.el (org-get-refile-targets): Catch the case when a buffer has no file. * org-latex.el (org-export-as-latex): Cleanup forced line ends where they are not needed. (org-export-latex-subcontent): Remove unnecessary newlines. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-make-header): Remove \obeylines. (org-export-latex-fontify): Fix regexp bug that takes special care of protecting the right boundary characters in emphasis matches. (org-export-latex-preprocess): Allow multiple arguments to latex macros. * org.el (org-make-link-regexps): Use John Gruber's regexp for urls. * org-macs.el (org-re): Interpret :punct: in regexps. * org-exp.el (org-export-replace-src-segments-and-examples): Also take the final newline after the END line. * org.el (org-clean-visibility-after-subtree-move): Only fix entries that are not entirely invisible already. (org-insert-link): Respect org-link-file-path-type for "docview:" links in addition to "file:" links. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-format-source-code-or-example): Avoid additional extra white lines in LaTeX. * org-list.el (org-list-parse-list): Leave empty lines after the list, don't consider them as part of the list. * org-mobile.el (org-mobile-sumo-agenda-command): Allow tagstodo searches. * org-clock.el (org-clock-select-task): Convert integer to character for XEmacs. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-resolve): Make reading a char XEmacs compatible. 2010-04-10 Tassilo Horn <tassilo@member.fsf.org> * org.el (org-complete-tags-always-offer-all-agenda-tags): New variable. (org-set-tags): Use it. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-list.el (org-empty-line-terminates-plain-lists): Update docstring. * org.el (org-format-latex): Fix link creation for processed latex snippets. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-footnote.el (org-footnote-normalize): Protect replacement text. * org.el (org-inside-latex-macro-p): Save match data. 2010-04-10 Jan Bcker <jan.boecker@jboecker.de> * org-docview.el: New file. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-class-options): New variable. (org-export-latex-set-initial-vars): Use the class options. * org.el (org-forward-same-level): Stop at headings that start with an invisible character. (org-additional-option-like-keywords): Add LaTeX_CLASS_OPTIONS. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-footnote.el (org-footnote-normalize): Don't take optional arguments in LaTeX macros as footnotes. * org.el (org-inside-latex-macro-p): New function. * org-latex.el (org-latex-to-pdf-process): Change customization group to `org-export-pdf'. * org-agenda.el (org-agenda-get-blocks): Look at time string also on days after the first one. * org.el (org-insert-heading): Also check for item before assuming before-first-heading condition. * org-latex.el (org-latex-to-pdf-process): Fix typo in group tag. (org-export-pdf-logfiles): New option. (org-export-as-pdf): Use `org-export-pdf-logfiles'. (org-export-pdf-logfiles): Fix customization type. * org.el (org-insert-link): Improve error message when there is no default link to select with RET. * org-agenda.el (org-agenda-filter-by-tag): Use char argument from parameter list. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-parse-global) (org-export-latex-parse-content) (org-export-latex-parse-subcontent): Use `org-re-search-forward-unprotected'. (org-export-as-pdf): Remove log files produced by XeTeX. * org-macs.el (org-re-search-forward-unprotected): New function. 2010-04-10 James TD Smith <ahktenzero@mohorovi.cc> * org-colview.el (org-agenda-colview-summarize): Sort out some confusion between properties and titles, which resulted in agenda summaries not working if a title was set for a column. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-mobile.el (org-mobile-agendas): New option. (org-mobile-sumo-agenda-command): Select the right agendas. * org-latex.el (org-export-latex-format-image): Preserve the original-indentation property. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-clock.el (org-clock-insert-selection-line): Catch error when an old tasks no longer exists. * org-latex.el (org-export-as-pdf): Remove also the .idx file. (org-export-as-pdf): Don't remove the old PDF file before making the new one. * org-mouse.el (org-mouse-end-headline, org-mouse-insert-item) (org-mouse-context-menu): Use `org-looking-back'. * org.el (org-cycle-level): Use `org-looking-back'. * org-list.el (org-cycle-item-indentation): Use `org-looking-back'. * org-compat.el (org-looking-back): New function. * org.el (org-insert-heading): Catch before-first-headline when inserting a headline. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-latex.el (org-export-latex-format-image): Indent figure environment, so that it does not interrupt plain list. * org.el (org-open-at-point): Allow long link descriptions. 2010-04-10 Carsten Dominik <carsten.dominik@gmail.com> * org-html.el (org-export-as-html): Remove empty lines at the beginning of the exported text. 2010-04-15 Carsten Dominik <carsten.dominik@gmail.com> * org.texi (LaTeX and PDF export): Add a footnote about xetex. (LaTeX/PDF export commands): Section renamed and moved. (Sectioning structure): Update. (References): New use case for field coordinates. (The export dispatcher): Renamed from ASCII export. (Setting up the staging area): Document the availability of encryption for MobileOrg. (Images and tables): Document how to reference labels. (Index entries): New section. (Generating an index): New section. (Column width and alignment): Document that <N> now means a fixed width, not a maximum width. (Publishing options): Document the :email option. (Beamer class export): Fix bug in the BEAMER example. (Refiling notes): Document refile logging. (In-buffer settings): Document refile logging keywords. (Drawers): Document `C-c C-z' command. (Agenda commands): Mention the alternative key `C-c C-z'. (Special properties): Document the BLOCKED property. (The spreadsheet): Mention the formula editor. (References): Document field coordinates. (Publishing action): Correct the documentation for the publishing function. (The date/time prompt): Document that we accept dates like month/day/year. (Cooperation): Document the changes in table.el support. (Faces for TODO keywords, Faces for TODO keywords) (Priorities): Document the easy colors. (Visibility cycling): Document the new double prefix arg for `org-reveal'. (Cooperation): Remember.el is part of Emacs. (Clean view): Mention that `wrap-prefix' is also set by org-indent-mode. (Agenda commands): Add information about prefix args to scheduling and deadline commands. (Search view): Point to the docstring of `org-search-view' for more details. (Agenda commands): Document that `>' prompts for a date. (Setting tags): Document variable org-complete-tags-always-offer-all-agenda-tags. (Column attributes): Cross-reference special properties.
author Carsten Dominik <carsten.dominik@gmail.com>
date Thu, 15 Apr 2010 12:11:52 +0200
parents f039ef236594
children 2bc9a0c04c87 921c7579cd1a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1 /* ebrowse.c --- parsing files for the ebrowse C++ browser
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
3 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
106790
f039ef236594 Set copyright year to 2010.
Glenn Morris <rgm@gnu.org>
parents: 101177
diff changeset
4 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
94828
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
5 Free Software Foundation, Inc.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
6
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
7 This file is part of GNU Emacs.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
8
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
9 GNU Emacs is free software: you can redistribute it and/or modify
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
10 it under the terms of the GNU General Public License as published by
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
11 the Free Software Foundation, either version 3 of the License, or
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
12 (at your option) any later version.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
13
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
14 GNU Emacs is distributed in the hope that it will be useful,
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
17 GNU General Public License for more details.
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
18
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
19 You should have received a copy of the GNU General Public License
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
20 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
3a4bc081639c Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 87550
diff changeset
21
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
22
29889
565ecd919fca Move config.h before other includes (which may use feature tests).
Dave Love <fx@gnu.org>
parents: 29561
diff changeset
23 #ifdef HAVE_CONFIG_H
565ecd919fca Move config.h before other includes (which may use feature tests).
Dave Love <fx@gnu.org>
parents: 29561
diff changeset
24 #include <config.h>
565ecd919fca Move config.h before other includes (which may use feature tests).
Dave Love <fx@gnu.org>
parents: 29561
diff changeset
25 #endif
565ecd919fca Move config.h before other includes (which may use feature tests).
Dave Love <fx@gnu.org>
parents: 29561
diff changeset
26
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
27 #include <stdio.h>
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
28
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
29 #ifdef HAVE_STDLIB_H
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
30 #include <stdlib.h>
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
31 #endif
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
32
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
33 #ifdef HAVE_STRING_H
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
34 #include <string.h>
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
35 #endif
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
36
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
37 #include <ctype.h>
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
38 #include <assert.h>
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
39 #include "getopt.h"
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
40
39076
fe37d7c5eae2 (SEEK_END): #define if not defined by system headers.
Eli Zaretskii <eliz@gnu.org>
parents: 38769
diff changeset
41 /* The SunOS compiler doesn't have SEEK_END. */
fe37d7c5eae2 (SEEK_END): #define if not defined by system headers.
Eli Zaretskii <eliz@gnu.org>
parents: 38769
diff changeset
42 #ifndef SEEK_END
fe37d7c5eae2 (SEEK_END): #define if not defined by system headers.
Eli Zaretskii <eliz@gnu.org>
parents: 38769
diff changeset
43 #define SEEK_END 2
fe37d7c5eae2 (SEEK_END): #define if not defined by system headers.
Eli Zaretskii <eliz@gnu.org>
parents: 38769
diff changeset
44 #endif
fe37d7c5eae2 (SEEK_END): #define if not defined by system headers.
Eli Zaretskii <eliz@gnu.org>
parents: 38769
diff changeset
45
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
46 /* Conditionalize function prototypes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
47
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
48 #ifdef PROTOTYPES /* From config.h. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
49 #define P_(x) x
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
50 #else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
51 #define P_(x) ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
52 #endif
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
53
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
54 /* Value is non-zero if strings X and Y compare equal. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
55
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
56 #define streq(X, Y) (*(X) == *(Y) && strcmp ((X) + 1, (Y) + 1) == 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
57
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
58 /* The ubiquitous `max' and `min' macros. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
59
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
60 #ifndef max
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
61 #define max(X, Y) ((X) > (Y) ? (X) : (Y))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
62 #define min(X, Y) ((X) < (Y) ? (X) : (Y))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
63 #endif
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
64
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
65 /* Files are read in chunks of this number of bytes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
66
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
67 #define READ_CHUNK_SIZE (100 * 1024)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
68
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
69 /* The character used as a separator in path lists (like $PATH). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
70
29561
235fb8ea80a2 [WINDOWS-NT]: Use stricmp rather than strcasecmp to compare filenames.
Jason Rumney <jasonr@gnu.org>
parents: 29459
diff changeset
71 #if defined(__MSDOS__)
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
72 #define PATH_LIST_SEPARATOR ';'
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
73 #define FILENAME_EQ(X,Y) (strcasecmp(X,Y) == 0)
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
74 #else
29561
235fb8ea80a2 [WINDOWS-NT]: Use stricmp rather than strcasecmp to compare filenames.
Jason Rumney <jasonr@gnu.org>
parents: 29459
diff changeset
75 #if defined(WINDOWSNT)
235fb8ea80a2 [WINDOWS-NT]: Use stricmp rather than strcasecmp to compare filenames.
Jason Rumney <jasonr@gnu.org>
parents: 29459
diff changeset
76 #define PATH_LIST_SEPARATOR ';'
235fb8ea80a2 [WINDOWS-NT]: Use stricmp rather than strcasecmp to compare filenames.
Jason Rumney <jasonr@gnu.org>
parents: 29459
diff changeset
77 #define FILENAME_EQ(X,Y) (stricmp(X,Y) == 0)
235fb8ea80a2 [WINDOWS-NT]: Use stricmp rather than strcasecmp to compare filenames.
Jason Rumney <jasonr@gnu.org>
parents: 29459
diff changeset
78 #else
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
79 #define PATH_LIST_SEPARATOR ':'
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
80 #define FILENAME_EQ(X,Y) (streq(X,Y))
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
81 #endif
29561
235fb8ea80a2 [WINDOWS-NT]: Use stricmp rather than strcasecmp to compare filenames.
Jason Rumney <jasonr@gnu.org>
parents: 29459
diff changeset
82 #endif
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
83 /* The default output file name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
84
28814
7bb3a2b7ff29 (DEFAULT_OUTFILE): Set to `BROWSE'.
Gerd Moellmann <gerd@gnu.org>
parents: 28773
diff changeset
85 #define DEFAULT_OUTFILE "BROWSE"
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
86
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
87 /* A version string written to the output file. Change this whenever
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
88 the structure of the output file changes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
89
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
90 #define EBROWSE_FILE_VERSION "ebrowse 5.0"
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
91
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
92 /* The output file consists of a tree of Lisp objects, with major
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
93 nodes built out of Lisp structures. These are the heads of the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
94 Lisp structs with symbols identifying their type. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
95
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
96 #define TREE_HEADER_STRUCT "[ebrowse-hs "
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
97 #define TREE_STRUCT "[ebrowse-ts "
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
98 #define MEMBER_STRUCT "[ebrowse-ms "
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
99 #define BROWSE_STRUCT "[ebrowse-bs "
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
100 #define CLASS_STRUCT "[ebrowse-cs "
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
101
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
102 /* The name of the symbol table entry for global functions, variables,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
103 defines etc. This name also appears in the browser display. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
104
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
105 #define GLOBALS_NAME "*Globals*"
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
106
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
107 /* Token definitions. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
108
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
109 enum token
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
110 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
111 YYEOF = 0, /* end of file */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
112 CSTRING = 256, /* string constant */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
113 CCHAR, /* character constant */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
114 CINT, /* integral constant */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
115 CFLOAT, /* real constant */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
116
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
117 ELLIPSIS, /* ... */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
118 LSHIFTASGN, /* <<= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
119 RSHIFTASGN, /* >>= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
120 ARROWSTAR, /* ->* */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
121 IDENT, /* identifier */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
122 DIVASGN, /* /= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
123 INC, /* ++ */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
124 ADDASGN, /* += */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
125 DEC, /* -- */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
126 ARROW, /* -> */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
127 SUBASGN, /* -= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
128 MULASGN, /* *= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
129 MODASGN, /* %= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
130 LOR, /* || */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
131 ORASGN, /* |= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
132 LAND, /* && */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
133 ANDASGN, /* &= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
134 XORASGN, /* ^= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
135 POINTSTAR, /* .* */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
136 DCOLON, /* :: */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
137 EQ, /* == */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
138 NE, /* != */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
139 LE, /* <= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
140 LSHIFT, /* << */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
141 GE, /* >= */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
142 RSHIFT, /* >> */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
143
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
144 /* Keywords. The undef's are there because these
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
145 three symbols are very likely to be defined somewhere. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
146 #undef BOOL
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
147 #undef TRUE
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
148 #undef FALSE
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
149
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
150 ASM, /* asm */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
151 AUTO, /* auto */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
152 BREAK, /* break */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
153 CASE, /* case */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
154 CATCH, /* catch */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
155 CHAR, /* char */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
156 CLASS, /* class */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
157 CONST, /* const */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
158 CONTINUE, /* continue */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
159 DEFAULT, /* default */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
160 DELETE, /* delete */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
161 DO, /* do */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
162 DOUBLE, /* double */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
163 ELSE, /* else */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
164 ENUM, /* enum */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
165 EXTERN, /* extern */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
166 FLOAT, /* float */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
167 FOR, /* for */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
168 FRIEND, /* friend */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
169 GOTO, /* goto */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
170 IF, /* if */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
171 T_INLINE, /* inline */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
172 INT, /* int */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
173 LONG, /* long */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
174 NEW, /* new */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
175 OPERATOR, /* operator */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
176 PRIVATE, /* private */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
177 PROTECTED, /* protected */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
178 PUBLIC, /* public */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
179 REGISTER, /* register */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
180 RETURN, /* return */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
181 SHORT, /* short */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
182 SIGNED, /* signed */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
183 SIZEOF, /* sizeof */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
184 STATIC, /* static */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
185 STRUCT, /* struct */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
186 SWITCH, /* switch */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
187 TEMPLATE, /* template */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
188 THIS, /* this */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
189 THROW, /* throw */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
190 TRY, /* try */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
191 TYPEDEF, /* typedef */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
192 UNION, /* union */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
193 UNSIGNED, /* unsigned */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
194 VIRTUAL, /* virtual */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
195 VOID, /* void */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
196 VOLATILE, /* volatile */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
197 WHILE, /* while */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
198 MUTABLE, /* mutable */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
199 BOOL, /* bool */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
200 TRUE, /* true */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
201 FALSE, /* false */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
202 SIGNATURE, /* signature (GNU extension) */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
203 NAMESPACE, /* namespace */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
204 EXPLICIT, /* explicit */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
205 TYPENAME, /* typename */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
206 CONST_CAST, /* const_cast */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
207 DYNAMIC_CAST, /* dynamic_cast */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
208 REINTERPRET_CAST, /* reinterpret_cast */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
209 STATIC_CAST, /* static_cast */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
210 TYPEID, /* typeid */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
211 USING, /* using */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
212 WCHAR /* wchar_t */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
213 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
214
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
215 /* Storage classes, in a wider sense. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
216
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
217 enum sc
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
218 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
219 SC_UNKNOWN,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
220 SC_MEMBER, /* Is an instance member. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
221 SC_STATIC, /* Is static member. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
222 SC_FRIEND, /* Is friend function. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
223 SC_TYPE /* Is a type definition. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
224 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
225
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
226 /* Member visibility. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
227
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
228 enum visibility
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
229 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
230 V_PUBLIC,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
231 V_PROTECTED,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
232 V_PRIVATE
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
233 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
234
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
235 /* Member flags. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
236
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
237 #define F_VIRTUAL 1 /* Is virtual function. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
238 #define F_INLINE 2 /* Is inline function. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
239 #define F_CONST 4 /* Is const. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
240 #define F_PURE 8 /* Is pure virtual function. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
241 #define F_MUTABLE 16 /* Is mutable. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
242 #define F_TEMPLATE 32 /* Is a template. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
243 #define F_EXPLICIT 64 /* Is explicit constructor. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
244 #define F_THROW 128 /* Has a throw specification. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
245 #define F_EXTERNC 256 /* Is declared extern "C". */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
246 #define F_DEFINE 512 /* Is a #define. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
247
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
248 /* Two macros to set and test a bit in an int. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
249
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
250 #define SET_FLAG(F, FLAG) ((F) |= (FLAG))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
251 #define HAS_FLAG(F, FLAG) (((F) & (FLAG)) != 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
252
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
253 /* Structure describing a class member. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
254
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
255 struct member
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
256 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
257 struct member *next; /* Next in list of members. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
258 struct member *anext; /* Collision chain in member_table. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
259 struct member **list; /* Pointer to list in class. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
260 unsigned param_hash; /* Hash value for parameter types. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
261 int vis; /* Visibility (public, ...). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
262 int flags; /* See F_* above. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
263 char *regexp; /* Matching regular expression. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
264 char *filename; /* Don't free this shared string. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
265 int pos; /* Buffer position of occurrence. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
266 char *def_regexp; /* Regular expression matching definition. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
267 char *def_filename; /* File name of definition. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
268 int def_pos; /* Buffer position of definition. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
269 char name[1]; /* Member name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
270 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
271
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
272 /* Structures of this type are used to connect class structures with
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
273 their super and subclasses. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
274
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
275 struct link
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
276 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
277 struct sym *sym; /* The super or subclass. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
278 struct link *next; /* Next in list or NULL. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
279 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
280
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
281 /* Structure used to record namespace aliases. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
282
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
283 struct alias
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
284 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
285 struct alias *next; /* Next in list. */
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
286 struct sym *namesp; /* Namespace in which defined. */
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
287 struct link *aliasee; /* List of aliased namespaces (A::B::C...). */
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
288 char name[1]; /* Alias name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
289 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
290
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
291 /* The structure used to describe a class in the symbol table,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
292 or a namespace in all_namespaces. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
293
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
294 struct sym
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
295 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
296 int flags; /* Is class a template class?. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
297 unsigned char visited; /* Used to find circles. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
298 struct sym *next; /* Hash collision list. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
299 struct link *subs; /* List of subclasses. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
300 struct link *supers; /* List of superclasses. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
301 struct member *vars; /* List of instance variables. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
302 struct member *fns; /* List of instance functions. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
303 struct member *static_vars; /* List of static variables. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
304 struct member *static_fns; /* List of static functions. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
305 struct member *friends; /* List of friend functions. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
306 struct member *types; /* List of local types. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
307 char *regexp; /* Matching regular expression. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
308 int pos; /* Buffer position. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
309 char *filename; /* File in which it can be found. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
310 char *sfilename; /* File in which members can be found. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
311 struct sym *namesp; /* Namespace in which defined. . */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
312 char name[1]; /* Name of the class. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
313 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
314
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
315 /* Experimental: Print info for `--position-info'. We print
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
316 '(CLASS-NAME SCOPE MEMBER-NAME). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
317
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
318 #define P_DEFN 1
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
319 #define P_DECL 2
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
320
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
321 int info_where;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
322 struct sym *info_cls = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
323 struct member *info_member = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
324
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
325 /* Experimental. For option `--position-info', the buffer position we
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
326 are interested in. When this position is reached, print out
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
327 information about what we know about that point. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
328
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
329 int info_position = -1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
330
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
331 /* Command line options structure for getopt_long. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
332
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
333 struct option options[] =
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
334 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
335 {"append", no_argument, NULL, 'a'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
336 {"files", required_argument, NULL, 'f'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
337 {"help", no_argument, NULL, -2},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
338 {"min-regexp-length", required_argument, NULL, 'm'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
339 {"max-regexp-length", required_argument, NULL, 'M'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
340 {"no-nested-classes", no_argument, NULL, 'n'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
341 {"no-regexps", no_argument, NULL, 'x'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
342 {"no-structs-or-unions", no_argument, NULL, 's'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
343 {"output-file", required_argument, NULL, 'o'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
344 {"position-info", required_argument, NULL, 'p'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
345 {"search-path", required_argument, NULL, 'I'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
346 {"verbose", no_argument, NULL, 'v'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
347 {"version", no_argument, NULL, -3},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
348 {"very-verbose", no_argument, NULL, 'V'},
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
349 {NULL, 0, NULL, 0}
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
350 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
351
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
352 /* Semantic values of tokens. Set by yylex.. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
353
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
354 unsigned yyival; /* Set for token CINT. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
355 char *yytext; /* Set for token IDENT. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
356 char *yytext_end;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
357
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
358 /* Output file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
359
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
360 FILE *yyout;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
361
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
362 /* Current line number. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
363
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
364 int yyline;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
365
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
366 /* The name of the current input file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
367
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
368 char *filename;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
369
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
370 /* Three character class vectors, and macros to test membership
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
371 of characters. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
372
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
373 char is_ident[255];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
374 char is_digit[255];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
375 char is_white[255];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
376
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
377 #define IDENTP(C) is_ident[(unsigned char) (C)]
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
378 #define DIGITP(C) is_digit[(unsigned char) (C)]
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
379 #define WHITEP(C) is_white[(unsigned char) (C)]
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
380
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
381 /* Command line flags. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
382
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
383 int f_append;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
384 int f_verbose;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
385 int f_very_verbose;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
386 int f_structs = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
387 int f_regexps = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
388 int f_nested_classes = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
389
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
390 /* Maximum and minimum lengths of regular expressions matching a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
391 member, class etc., for writing them to the output file. These are
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
392 overridable from the command line. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
393
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
394 int min_regexp = 5;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
395 int max_regexp = 50;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
396
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
397 /* Input buffer. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
398
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
399 char *inbuffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
400 char *in;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
401 int inbuffer_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
402
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
403 /* Return the current buffer position in the input file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
404
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
405 #define BUFFER_POS() (in - inbuffer)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
406
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
407 /* If current lookahead is CSTRING, the following points to the
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
408 first character in the string constant. Used for recognizing
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
409 extern "C". */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
410
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
411 char *string_start;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
412
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
413 /* The size of the hash tables for classes.and members. Should be
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
414 prime. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
415
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
416 #define TABLE_SIZE 1001
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
417
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
418 /* The hash table for class symbols. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
419
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
420 struct sym *class_table[TABLE_SIZE];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
421
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
422 /* Hash table containing all member structures. This is generally
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
423 faster for member lookup than traversing the member lists of a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
424 `struct sym'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
425
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
426 struct member *member_table[TABLE_SIZE];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
427
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
428 /* Hash table for namespace aliases */
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
429
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
430 struct alias *namespace_alias_table[TABLE_SIZE];
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
431
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
432 /* The special class symbol used to hold global functions,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
433 variables etc. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
434
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
435 struct sym *global_symbols;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
436
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
437 /* The current namespace. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
438
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
439 struct sym *current_namespace;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
440
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
441 /* The list of all known namespaces. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
442
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
443 struct sym *all_namespaces;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
444
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
445 /* Stack of namespaces we're currently nested in, during the parse. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
446
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
447 struct sym **namespace_stack;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
448 int namespace_stack_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
449 int namespace_sp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
450
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
451 /* The current lookahead token. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
452
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
453 int tk = -1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
454
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
455 /* Structure describing a keyword. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
456
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
457 struct kw
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
458 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
459 char *name; /* Spelling. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
460 int tk; /* Token value. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
461 struct kw *next; /* Next in collision chain. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
462 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
463
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
464 /* Keywords are lookup up in a hash table of their own. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
465
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
466 #define KEYWORD_TABLE_SIZE 1001
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
467 struct kw *keyword_table[KEYWORD_TABLE_SIZE];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
468
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
469 /* Search path. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
470
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
471 struct search_path
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
472 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
473 char *path;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
474 struct search_path *next;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
475 };
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
476
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
477 struct search_path *search_path;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
478 struct search_path *search_path_tail;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
479
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
480 /* Function prototypes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
481
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
482 int yylex P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
483 void yyparse P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
484 void re_init_parser P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
485 char *token_string P_ ((int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
486 char *matching_regexp P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
487 void init_sym P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
488 struct sym *add_sym P_ ((char *, struct sym *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
489 void add_link P_ ((struct sym *, struct sym *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
490 void add_member_defn P_ ((struct sym *, char *, char *,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
491 int, unsigned, int, int, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
492 void add_member_decl P_ ((struct sym *, char *, char *, int,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
493 unsigned, int, int, int, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
494 void dump_roots P_ ((FILE *));
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
495 void *xmalloc P_ ((int));
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
496 void xfree P_ ((void *));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
497 void add_global_defn P_ ((char *, char *, int, unsigned, int, int, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
498 void add_global_decl P_ ((char *, char *, int, unsigned, int, int, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
499 void add_define P_ ((char *, char *, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
500 void mark_inherited_virtual P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
501 void leave_namespace P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
502 void enter_namespace P_ ((char *));
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
503 void register_namespace_alias P_ ((char *, struct link *));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
504 void insert_keyword P_ ((char *, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
505 void re_init_scanner P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
506 void init_scanner P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
507 void usage P_ ((int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
508 void version P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
509 void process_file P_ ((char *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
510 void add_search_path P_ ((char *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
511 FILE *open_file P_ ((char *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
512 int process_pp_line P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
513 int dump_members P_ ((FILE *, struct member *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
514 void dump_sym P_ ((FILE *, struct sym *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
515 int dump_tree P_ ((FILE *, struct sym *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
516 struct member *find_member P_ ((struct sym *, char *, int, int, unsigned));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
517 struct member *add_member P_ ((struct sym *, char *, int, int, unsigned));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
518 void mark_virtual P_ ((struct sym *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
519 void mark_virtual P_ ((struct sym *));
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
520 struct sym *make_namespace P_ ((char *, struct sym *));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
521 char *sym_scope P_ ((struct sym *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
522 char *sym_scope_1 P_ ((struct sym *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
523 int skip_to P_ ((int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
524 void skip_matching P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
525 void member P_ ((struct sym *, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
526 void class_body P_ ((struct sym *, int));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
527 void class_definition P_ ((struct sym *, int, int, int));
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
528 void declaration P_ ((int));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
529 unsigned parm_list P_ ((int *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
530 char *operator_name P_ ((int *));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
531 struct sym *parse_classname P_ ((void));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
532 struct sym *parse_qualified_ident_or_type P_ ((char **));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
533 void parse_qualified_param_ident_or_type P_ ((char **));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
534 int globals P_ ((int));
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
535 void yyerror P_ ((char *, char *));
72005
da0099bc0ba4 * ebrowse.c (usage, version): Mark as NO_RETURN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 71199
diff changeset
536 void usage P_ ((int)) NO_RETURN;
da0099bc0ba4 * ebrowse.c (usage, version): Mark as NO_RETURN.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 71199
diff changeset
537 void version P_ (()) NO_RETURN;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
538
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
539
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
540
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
541 /***********************************************************************
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
542 Utilities
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
543 ***********************************************************************/
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
544
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
545 /* Print an error in a printf-like style with the current input file
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
546 name and line number. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
547
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
548 void
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
549 yyerror (format, s)
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
550 char *format, *s;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
551 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
552 fprintf (stderr, "%s:%d: ", filename, yyline);
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
553 fprintf (stderr, format, s);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
554 putc ('\n', stderr);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
555 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
556
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
557
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
558 /* Like malloc but print an error and exit if not enough memory is
33384
2a6bbd7e52a1 Fix comment.
Dave Love <fx@gnu.org>
parents: 30232
diff changeset
559 available. */
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
560
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
561 void *
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
562 xmalloc (nbytes)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
563 int nbytes;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
564 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
565 void *p = malloc (nbytes);
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
566 if (p == NULL)
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
567 {
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
568 yyerror ("out of memory", NULL);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
569 exit (EXIT_FAILURE);
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
570 }
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
571 return p;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
572 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
573
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
574
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
575 /* Like realloc but print an error and exit if out of memory. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
576
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
577 void *
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
578 xrealloc (p, sz)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
579 void *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
580 int sz;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
581 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
582 p = realloc (p, sz);
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
583 if (p == NULL)
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
584 {
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
585 yyerror ("out of memory", NULL);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
586 exit (EXIT_FAILURE);
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
587 }
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
588 return p;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
589 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
590
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
591
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
592 /* Like strdup, but print an error and exit if not enough memory is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
593 available.. If S is null, return null. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
594
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
595 char *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
596 xstrdup (s)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
597 char *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
598 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
599 if (s)
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
600 s = strcpy (xmalloc (strlen (s) + 1), s);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
601 return s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
602 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
603
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
604
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
605
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
606 /***********************************************************************
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
607 Symbols
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
608 ***********************************************************************/
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
609
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
610 /* Initialize the symbol table. This currently only sets up the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
611 special symbol for globals (`*Globals*'). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
612
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
613 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
614 init_sym ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
615 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
616 global_symbols = add_sym (GLOBALS_NAME, NULL);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
617 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
618
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
619
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
620 /* Add a symbol for class NAME to the symbol table. NESTED_IN_CLASS
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
621 is the class in which class NAME was found. If it is null,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
622 this means the scope of NAME is the current namespace.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
623
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
624 If a symbol for NAME already exists, return that. Otherwise
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
625 create a new symbol and set it to default values. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
626
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
627 struct sym *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
628 add_sym (name, nested_in_class)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
629 char *name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
630 struct sym *nested_in_class;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
631 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
632 struct sym *sym;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
633 unsigned h;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
634 char *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
635 struct sym *scope = nested_in_class ? nested_in_class : current_namespace;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
636
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
637 for (s = name, h = 0; *s; ++s)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
638 h = (h << 1) ^ *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
639 h %= TABLE_SIZE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
640
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
641 for (sym = class_table[h]; sym; sym = sym->next)
65626
69a9e146ef35 (add_sym): Compare namespace names instead of namespace objects. This
Chong Yidong <cyd@stupidchicken.com>
parents: 64769
diff changeset
642 if (streq (name, sym->name)
69a9e146ef35 (add_sym): Compare namespace names instead of namespace objects. This
Chong Yidong <cyd@stupidchicken.com>
parents: 64769
diff changeset
643 && ((!sym->namesp && !scope)
69a9e146ef35 (add_sym): Compare namespace names instead of namespace objects. This
Chong Yidong <cyd@stupidchicken.com>
parents: 64769
diff changeset
644 || (sym->namesp && scope
69a9e146ef35 (add_sym): Compare namespace names instead of namespace objects. This
Chong Yidong <cyd@stupidchicken.com>
parents: 64769
diff changeset
645 && streq (sym->namesp->name, scope->name))))
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
646 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
647
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
648 if (sym == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
649 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
650 if (f_very_verbose)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
651 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
652 putchar ('\t');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
653 puts (name);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
654 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
655
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
656 sym = (struct sym *) xmalloc (sizeof *sym + strlen (name));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
657 bzero (sym, sizeof *sym);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
658 strcpy (sym->name, name);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
659 sym->namesp = scope;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
660 sym->next = class_table[h];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
661 class_table[h] = sym;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
662 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
663
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
664 return sym;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
665 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
666
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
667
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
668 /* Add links between superclass SUPER and subclass SUB. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
669
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
670 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
671 add_link (super, sub)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
672 struct sym *super, *sub;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
673 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
674 struct link *lnk, *lnk2, *p, *prev;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
675
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
676 /* See if a link already exists. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
677 for (p = super->subs, prev = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
678 p && strcmp (sub->name, p->sym->name) > 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
679 prev = p, p = p->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
680 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
681
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
682 /* Avoid duplicates. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
683 if (p == NULL || p->sym != sub)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
684 {
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
685 lnk = (struct link *) xmalloc (sizeof *lnk);
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
686 lnk2 = (struct link *) xmalloc (sizeof *lnk2);
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
687
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
688 lnk->sym = sub;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
689 lnk->next = p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
690
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
691 if (prev)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
692 prev->next = lnk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
693 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
694 super->subs = lnk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
695
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
696 lnk2->sym = super;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
697 lnk2->next = sub->supers;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
698 sub->supers = lnk2;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
699 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
700 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
701
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
702
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
703 /* Find in class CLS member NAME.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
704
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
705 VAR non-zero means look for a member variable; otherwise a function
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
706 is searched. SC specifies what kind of member is searched---a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
707 static, or per-instance member etc. HASH is a hash code for the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
708 parameter types of functions. Value is a pointer to the member
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
709 found or null if not found. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
710
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
711 struct member *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
712 find_member (cls, name, var, sc, hash)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
713 struct sym *cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
714 char *name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
715 int var, sc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
716 unsigned hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
717 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
718 struct member **list;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
719 struct member *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
720 unsigned name_hash = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
721 char *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
722 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
723
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
724 switch (sc)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
725 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
726 case SC_FRIEND:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
727 list = &cls->friends;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
728 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
729
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
730 case SC_TYPE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
731 list = &cls->types;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
732 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
733
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
734 case SC_STATIC:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
735 list = var ? &cls->static_vars : &cls->static_fns;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
736 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
737
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
738 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
739 list = var ? &cls->vars : &cls->fns;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
740 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
741 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
742
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
743 for (s = name; *s; ++s)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
744 name_hash = (name_hash << 1) ^ *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
745 i = name_hash % TABLE_SIZE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
746
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
747 for (p = member_table[i]; p; p = p->anext)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
748 if (p->list == list && p->param_hash == hash && streq (name, p->name))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
749 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
750
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
751 return p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
752 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
753
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
754
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
755 /* Add to class CLS information for the declaration of member NAME.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
756 REGEXP is a regexp matching the declaration, if non-null. POS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
757 the position in the source where the declaration is found. HASH is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
758 a hash code for the parameter list of the member, if it's a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
759 function. VAR non-zero means member is a variable or type. SC
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
760 specifies the type of member (instance member, static, ...). VIS
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
761 is the member's visibility (public, protected, private). FLAGS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
762 a bit set giving additional information about the member (see the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
763 F_* defines). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
764
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
765 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
766 add_member_decl (cls, name, regexp, pos, hash, var, sc, vis, flags)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
767 struct sym *cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
768 char *name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
769 char *regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
770 int pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
771 unsigned hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
772 int var;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
773 int sc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
774 int vis;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
775 int flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
776 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
777 struct member *m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
778
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
779 m = find_member (cls, name, var, sc, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
780 if (m == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
781 m = add_member (cls, name, var, sc, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
782
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
783 /* Have we seen a new filename? If so record that. */
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
784 if (!cls->filename || !FILENAME_EQ (cls->filename, filename))
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
785 m->filename = filename;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
786
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
787 m->regexp = regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
788 m->pos = pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
789 m->flags = flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
790
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
791 switch (vis)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
792 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
793 case PRIVATE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
794 m->vis = V_PRIVATE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
795 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
796
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
797 case PROTECTED:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
798 m->vis = V_PROTECTED;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
799 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
800
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
801 case PUBLIC:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
802 m->vis = V_PUBLIC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
803 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
804 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
805
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
806 info_where = P_DECL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
807 info_cls = cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
808 info_member = m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
809 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
810
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
811
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
812 /* Add to class CLS information for the definition of member NAME.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
813 REGEXP is a regexp matching the declaration, if non-null. POS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
814 the position in the source where the declaration is found. HASH is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
815 a hash code for the parameter list of the member, if it's a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
816 function. VAR non-zero means member is a variable or type. SC
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
817 specifies the type of member (instance member, static, ...). VIS
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
818 is the member's visibility (public, protected, private). FLAGS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
819 a bit set giving additional information about the member (see the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
820 F_* defines). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
821
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
822 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
823 add_member_defn (cls, name, regexp, pos, hash, var, sc, flags)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
824 struct sym *cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
825 char *name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
826 char *regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
827 int pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
828 unsigned hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
829 int var;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
830 int sc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
831 int flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
832 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
833 struct member *m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
834
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
835 if (sc == SC_UNKNOWN)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
836 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
837 m = find_member (cls, name, var, SC_MEMBER, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
838 if (m == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
839 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
840 m = find_member (cls, name, var, SC_STATIC, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
841 if (m == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
842 m = add_member (cls, name, var, sc, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
843 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
844 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
845 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
846 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
847 m = find_member (cls, name, var, sc, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
848 if (m == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
849 m = add_member (cls, name, var, sc, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
850 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
851
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
852 if (!cls->sfilename)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
853 cls->sfilename = filename;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
854
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
855 if (!FILENAME_EQ (cls->sfilename, filename))
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
856 m->def_filename = filename;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
857
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
858 m->def_regexp = regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
859 m->def_pos = pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
860 m->flags |= flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
861
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
862 info_where = P_DEFN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
863 info_cls = cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
864 info_member = m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
865 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
866
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
867
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
868 /* Add a symbol for a define named NAME to the symbol table.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
869 REGEXP is a regular expression matching the define in the source,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
870 if it is non-null. POS is the position in the file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
871
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
872 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
873 add_define (name, regexp, pos)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
874 char *name, *regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
875 int pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
876 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
877 add_global_defn (name, regexp, pos, 0, 1, SC_FRIEND, F_DEFINE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
878 add_global_decl (name, regexp, pos, 0, 1, SC_FRIEND, F_DEFINE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
879 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
880
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
881
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
882 /* Add information for the global definition of NAME.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
883 REGEXP is a regexp matching the declaration, if non-null. POS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
884 the position in the source where the declaration is found. HASH is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
885 a hash code for the parameter list of the member, if it's a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
886 function. VAR non-zero means member is a variable or type. SC
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
887 specifies the type of member (instance member, static, ...). VIS
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
888 is the member's visibility (public, protected, private). FLAGS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
889 a bit set giving additional information about the member (see the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
890 F_* defines). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
891
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
892 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
893 add_global_defn (name, regexp, pos, hash, var, sc, flags)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
894 char *name, *regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
895 int pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
896 unsigned hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
897 int var;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
898 int sc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
899 int flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
900 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
901 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
902 struct sym *sym;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
903
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
904 /* Try to find out for which classes a function is a friend, and add
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
905 what we know about it to them. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
906 if (!var)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
907 for (i = 0; i < TABLE_SIZE; ++i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
908 for (sym = class_table[i]; sym; sym = sym->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
909 if (sym != global_symbols && sym->friends)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
910 if (find_member (sym, name, 0, SC_FRIEND, hash))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
911 add_member_defn (sym, name, regexp, pos, hash, 0,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
912 SC_FRIEND, flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
913
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
914 /* Add to global symbols. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
915 add_member_defn (global_symbols, name, regexp, pos, hash, var, sc, flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
916 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
917
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
918
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
919 /* Add information for the global declaration of NAME.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
920 REGEXP is a regexp matching the declaration, if non-null. POS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
921 the position in the source where the declaration is found. HASH is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
922 a hash code for the parameter list of the member, if it's a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
923 function. VAR non-zero means member is a variable or type. SC
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
924 specifies the type of member (instance member, static, ...). VIS
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
925 is the member's visibility (public, protected, private). FLAGS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
926 a bit set giving additional information about the member (see the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
927 F_* defines). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
928
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
929 void
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
930 add_global_decl (name, regexp, pos, hash, var, sc, flags)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
931 char *name, *regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
932 int pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
933 unsigned hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
934 int var;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
935 int sc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
936 int flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
937 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
938 /* Add declaration only if not already declared. Header files must
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
939 be processed before source files for this to have the right effect.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
940 I do not want to handle implicit declarations at the moment. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
941 struct member *m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
942 struct member *found;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
943
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
944 m = found = find_member (global_symbols, name, var, sc, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
945 if (m == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
946 m = add_member (global_symbols, name, var, sc, hash);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
947
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
948 /* Definition already seen => probably last declaration implicit.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
949 Override. This means that declarations must always be added to
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
950 the symbol table before definitions. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
951 if (!found)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
952 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
953 if (!global_symbols->filename
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
954 || !FILENAME_EQ (global_symbols->filename, filename))
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
955 m->filename = filename;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
956
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
957 m->regexp = regexp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
958 m->pos = pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
959 m->vis = V_PUBLIC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
960 m->flags = flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
961
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
962 info_where = P_DECL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
963 info_cls = global_symbols;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
964 info_member = m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
965 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
966 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
967
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
968
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
969 /* Add a symbol for member NAME to class CLS.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
970 VAR non-zero means it's a variable. SC specifies the kind of
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
971 member. HASH is a hash code for the parameter types of a function.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
972 Value is a pointer to the member's structure. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
973
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
974 struct member *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
975 add_member (cls, name, var, sc, hash)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
976 struct sym *cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
977 char *name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
978 int var;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
979 int sc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
980 unsigned hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
981 {
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
982 struct member *m = (struct member *) xmalloc (sizeof *m + strlen (name));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
983 struct member **list;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
984 struct member *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
985 struct member *prev;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
986 unsigned name_hash = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
987 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
988 char *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
989
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
990 strcpy (m->name, name);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
991 m->param_hash = hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
992
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
993 m->vis = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
994 m->flags = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
995 m->regexp = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
996 m->filename = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
997 m->pos = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
998 m->def_regexp = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
999 m->def_filename = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1000 m->def_pos = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1001
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1002 assert (cls != NULL);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1003
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1004 switch (sc)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1005 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1006 case SC_FRIEND:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1007 list = &cls->friends;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1008 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1009
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1010 case SC_TYPE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1011 list = &cls->types;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1012 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1013
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1014 case SC_STATIC:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1015 list = var ? &cls->static_vars : &cls->static_fns;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1016 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1017
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1018 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1019 list = var ? &cls->vars : &cls->fns;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1020 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1021 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1022
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1023 for (s = name; *s; ++s)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1024 name_hash = (name_hash << 1) ^ *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1025 i = name_hash % TABLE_SIZE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1026 m->anext = member_table[i];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1027 member_table[i] = m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1028 m->list = list;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1029
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1030 /* Keep the member list sorted. It's cheaper to do it here than to
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1031 sort them in Lisp. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1032 for (prev = NULL, p = *list;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1033 p && strcmp (name, p->name) > 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1034 prev = p, p = p->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1035 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1036
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1037 m->next = p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1038 if (prev)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1039 prev->next = m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1040 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1041 *list = m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1042 return m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1043 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1044
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1045
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1046 /* Given the root R of a class tree, step through all subclasses
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1047 recursively, marking functions as virtual that are declared virtual
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1048 in base classes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1049
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1050 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1051 mark_virtual (r)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1052 struct sym *r;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1053 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1054 struct link *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1055 struct member *m, *m2;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1056
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1057 for (p = r->subs; p; p = p->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1058 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1059 for (m = r->fns; m; m = m->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1060 if (HAS_FLAG (m->flags, F_VIRTUAL))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1061 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1062 for (m2 = p->sym->fns; m2; m2 = m2->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1063 if (m->param_hash == m2->param_hash && streq (m->name, m2->name))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1064 SET_FLAG (m2->flags, F_VIRTUAL);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1065 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1066
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1067 mark_virtual (p->sym);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1068 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1069 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1070
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1071
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1072 /* For all roots of the class tree, mark functions as virtual that
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1073 are virtual because of a virtual declaration in a base class. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1074
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1075 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1076 mark_inherited_virtual ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1077 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1078 struct sym *r;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1079 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1080
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1081 for (i = 0; i < TABLE_SIZE; ++i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1082 for (r = class_table[i]; r; r = r->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1083 if (r->supers == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1084 mark_virtual (r);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1085 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1086
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1087
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1088 /* Create and return a symbol for a namespace with name NAME. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1089
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1090 struct sym *
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1091 make_namespace (name, context)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1092 char *name;
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1093 struct sym *context;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1094 {
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
1095 struct sym *s = (struct sym *) xmalloc (sizeof *s + strlen (name));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1096 bzero (s, sizeof *s);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1097 strcpy (s->name, name);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1098 s->next = all_namespaces;
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1099 s->namesp = context;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1100 all_namespaces = s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1101 return s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1102 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1103
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1104
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1105 /* Find the symbol for namespace NAME. If not found, retrun NULL */
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1106
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1107 struct sym *
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1108 check_namespace (name, context)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1109 char *name;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1110 struct sym *context;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1111 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1112 struct sym *p = NULL;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1113
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1114 for (p = all_namespaces; p; p = p->next)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1115 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1116 if (streq (p->name, name) && (p->namesp == context))
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1117 break;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1118 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1119
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1120 return p;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1121 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1122
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1123 /* Find the symbol for namespace NAME. If not found, add a new symbol
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1124 for NAME to all_namespaces. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1125
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1126 struct sym *
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1127 find_namespace (name, context)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1128 char *name;
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1129 struct sym *context;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1130 {
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1131 struct sym *p = check_namespace (name, context);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1132
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1133 if (p == NULL)
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1134 p = make_namespace (name, context);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1135
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1136 return p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1137 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1138
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1139
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1140 /* Find namespace alias with name NAME. If not found return NULL. */
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1141
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1142 struct link *
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1143 check_namespace_alias (name)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1144 char *name;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1145 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1146 struct link *p = NULL;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1147 struct alias *al;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1148 unsigned h;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1149 char *s;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1150
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1151 for (s = name, h = 0; *s; ++s)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1152 h = (h << 1) ^ *s;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1153 h %= TABLE_SIZE;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1154
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1155 for (al = namespace_alias_table[h]; al; al = al->next)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1156 if (streq (name, al->name) && (al->namesp == current_namespace))
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1157 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1158 p = al->aliasee;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1159 break;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1160 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1161
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1162 return p;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1163 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1164
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1165 /* Register the name NEW_NAME as an alias for namespace list OLD_NAME. */
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1166
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1167 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1168 register_namespace_alias (new_name, old_name)
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1169 char *new_name;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1170 struct link *old_name;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1171 {
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1172 unsigned h;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1173 char *s;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1174 struct alias *al;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1175
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1176 for (s = new_name, h = 0; *s; ++s)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1177 h = (h << 1) ^ *s;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1178 h %= TABLE_SIZE;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1179
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1180
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1181 /* Is it already in the table of aliases? */
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1182 for (al = namespace_alias_table[h]; al; al = al->next)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1183 if (streq (new_name, al->name) && (al->namesp == current_namespace))
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1184 return;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1185
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
1186 al = (struct alias *) xmalloc (sizeof *al + strlen (new_name));
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1187 strcpy (al->name, new_name);
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1188 al->next = namespace_alias_table[h];
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1189 al->namesp = current_namespace;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1190 al->aliasee = old_name;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1191 namespace_alias_table[h] = al;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1192 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1193
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1194
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1195 /* Enter namespace with name NAME. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1196
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1197 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1198 enter_namespace (name)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1199 char *name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1200 {
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
1201 struct sym *p = find_namespace (name, current_namespace);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1202
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1203 if (namespace_sp == namespace_stack_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1204 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1205 int size = max (10, 2 * namespace_stack_size);
37615
ceb79feb93aa (enter_namespace): Fix reallocation of
Gerd Moellmann <gerd@gnu.org>
parents: 37594
diff changeset
1206 namespace_stack
ceb79feb93aa (enter_namespace): Fix reallocation of
Gerd Moellmann <gerd@gnu.org>
parents: 37594
diff changeset
1207 = (struct sym **) xrealloc ((void *)namespace_stack,
ceb79feb93aa (enter_namespace): Fix reallocation of
Gerd Moellmann <gerd@gnu.org>
parents: 37594
diff changeset
1208 size * sizeof *namespace_stack);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1209 namespace_stack_size = size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1210 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1211
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1212 namespace_stack[namespace_sp++] = current_namespace;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1213 current_namespace = p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1214 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1215
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1216
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1217 /* Leave the current namespace. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1218
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1219 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1220 leave_namespace ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1221 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1222 assert (namespace_sp > 0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1223 current_namespace = namespace_stack[--namespace_sp];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1224 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1225
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1226
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1227
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1228 /***********************************************************************
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1229 Writing the Output File
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1230 ***********************************************************************/
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1231
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1232 /* Write string S to the output file FP in a Lisp-readable form.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1233 If S is null, write out `()'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1234
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1235 #define PUTSTR(s, fp) \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1236 do { \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1237 if (!s) \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1238 { \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1239 putc ('(', fp); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1240 putc (')', fp); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1241 putc (' ', fp); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1242 } \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1243 else \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1244 { \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1245 putc ('"', fp); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1246 fputs (s, fp); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1247 putc ('"', fp); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1248 putc (' ', fp); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1249 } \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1250 } while (0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1251
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1252 /* A dynamically allocated buffer for constructing a scope name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1253
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1254 char *scope_buffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1255 int scope_buffer_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1256 int scope_buffer_len;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1257
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1258
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1259 /* Make sure scope_buffer has enough room to add LEN chars to it. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1260
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1261 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1262 ensure_scope_buffer_room (len)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1263 int len;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1264 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1265 if (scope_buffer_len + len >= scope_buffer_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1266 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1267 int new_size = max (2 * scope_buffer_size, scope_buffer_len + len);
34522
db980c0e762d (ensure_scope_buffer_room): Fix xrealloc call.
Dave Love <fx@gnu.org>
parents: 34304
diff changeset
1268 scope_buffer = (char *) xrealloc (scope_buffer, new_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1269 scope_buffer_size = new_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1270 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1271 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1272
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1273
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1274 /* Recursively add the scope names of symbol P and the scopes of its
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1275 namespaces to scope_buffer. Value is a pointer to the complete
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1276 scope name constructed. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1277
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1278 char *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1279 sym_scope_1 (p)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1280 struct sym *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1281 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1282 int len;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1283
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1284 if (p->namesp)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1285 sym_scope_1 (p->namesp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1286
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1287 if (*scope_buffer)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1288 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1289 ensure_scope_buffer_room (3);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1290 strcat (scope_buffer, "::");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1291 scope_buffer_len += 2;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1292 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1293
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1294 len = strlen (p->name);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1295 ensure_scope_buffer_room (len + 1);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1296 strcat (scope_buffer, p->name);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1297 scope_buffer_len += len;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1298
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1299 if (HAS_FLAG (p->flags, F_TEMPLATE))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1300 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1301 ensure_scope_buffer_room (3);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1302 strcat (scope_buffer, "<>");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1303 scope_buffer_len += 2;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1304 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1305
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1306 return scope_buffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1307 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1308
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1309
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1310 /* Return the scope of symbol P in printed representation, i.e.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1311 as it would appear in a C*+ source file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1312
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1313 char *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1314 sym_scope (p)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1315 struct sym *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1316 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1317 if (!scope_buffer)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1318 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1319 scope_buffer_size = 1024;
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
1320 scope_buffer = (char *) xmalloc (scope_buffer_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1321 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1322
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1323 *scope_buffer = '\0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1324 scope_buffer_len = 0;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1325
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1326 if (p->namesp)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1327 sym_scope_1 (p->namesp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1328
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1329 return scope_buffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1330 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1331
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1332
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1333 /* Dump the list of members M to file FP. Value is the length of the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1334 list. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1335
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1336 int
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1337 dump_members (fp, m)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1338 FILE *fp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1339 struct member *m;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1340 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1341 int n;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1342
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1343 putc ('(', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1344
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1345 for (n = 0; m; m = m->next, ++n)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1346 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1347 fputs (MEMBER_STRUCT, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1348 PUTSTR (m->name, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1349 PUTSTR (NULL, fp); /* FIXME? scope for globals */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1350 fprintf (fp, "%u ", (unsigned) m->flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1351 PUTSTR (m->filename, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1352 PUTSTR (m->regexp, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1353 fprintf (fp, "%u ", (unsigned) m->pos);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1354 fprintf (fp, "%u ", (unsigned) m->vis);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1355 putc (' ', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1356 PUTSTR (m->def_filename, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1357 PUTSTR (m->def_regexp, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1358 fprintf (fp, "%u", (unsigned) m->def_pos);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1359 putc (']', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1360 putc ('\n', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1361 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1362
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1363 putc (')', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1364 putc ('\n', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1365 return n;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1366 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1367
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1368
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1369 /* Dump class ROOT to stream FP. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1370
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1371 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1372 dump_sym (fp, root)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1373 FILE *fp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1374 struct sym *root;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1375 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1376 fputs (CLASS_STRUCT, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1377 PUTSTR (root->name, fp);
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1378
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1379 /* Print scope, if any. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1380 if (root->namesp)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1381 PUTSTR (sym_scope (root), fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1382 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1383 PUTSTR (NULL, fp);
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1384
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1385 /* Print flags. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1386 fprintf (fp, "%u", root->flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1387 PUTSTR (root->filename, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1388 PUTSTR (root->regexp, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1389 fprintf (fp, "%u", (unsigned) root->pos);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1390 PUTSTR (root->sfilename, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1391 putc (']', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1392 putc ('\n', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1393 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1394
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1395
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1396 /* Dump class ROOT and its subclasses to file FP. Value is the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1397 number of classes written. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1398
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1399 int
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1400 dump_tree (fp, root)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1401 FILE *fp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1402 struct sym *root;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1403 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1404 struct link *lk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1405 unsigned n = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1406
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1407 dump_sym (fp, root);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1408
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1409 if (f_verbose)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1410 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1411 putchar ('+');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1412 fflush (stdout);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1413 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1414
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1415 putc ('(', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1416
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1417 for (lk = root->subs; lk; lk = lk->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1418 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1419 fputs (TREE_STRUCT, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1420 n += dump_tree (fp, lk->sym);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1421 putc (']', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1422 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1423
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1424 putc (')', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1425
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1426 dump_members (fp, root->vars);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1427 n += dump_members (fp, root->fns);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1428 dump_members (fp, root->static_vars);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1429 n += dump_members (fp, root->static_fns);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1430 n += dump_members (fp, root->friends);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1431 dump_members (fp, root->types);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1432
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1433 /* Superclasses. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1434 putc ('(', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1435 putc (')', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1436
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1437 /* Mark slot. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1438 putc ('(', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1439 putc (')', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1440
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1441 putc ('\n', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1442 return n;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1443 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1444
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1445
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1446 /* Dump the entire class tree to file FP. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1447
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1448 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1449 dump_roots (fp)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1450 FILE *fp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1451 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1452 int i, n = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1453 struct sym *r;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1454
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1455 /* Output file header containing version string, command line
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1456 options etc. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1457 if (!f_append)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1458 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1459 fputs (TREE_HEADER_STRUCT, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1460 PUTSTR (EBROWSE_FILE_VERSION, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1461
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1462 putc ('\"', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1463 if (!f_structs)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1464 fputs (" -s", fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1465 if (f_regexps)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1466 fputs (" -x", fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1467 putc ('\"', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1468 fputs (" ()", fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1469 fputs (" ()", fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1470 putc (']', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1471 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1472
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1473 /* Mark functions as virtual that are so because of functions
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1474 declared virtual in base classes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1475 mark_inherited_virtual ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1476
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1477 /* Dump the roots of the graph. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1478 for (i = 0; i < TABLE_SIZE; ++i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1479 for (r = class_table[i]; r; r = r->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1480 if (!r->supers)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1481 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1482 fputs (TREE_STRUCT, fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1483 n += dump_tree (fp, r);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1484 putc (']', fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1485 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1486
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1487 if (f_verbose)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1488 putchar ('\n');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1489 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1490
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1491
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1492
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1493 /***********************************************************************
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1494 Scanner
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1495 ***********************************************************************/
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1496
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1497 #ifdef DEBUG
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1498 #define INCREMENT_LINENO \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1499 do { \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1500 if (f_very_verbose) \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1501 { \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1502 ++yyline; \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1503 printf ("%d:\n", yyline); \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1504 } \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1505 else \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1506 ++yyline; \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1507 } while (0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1508 #else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1509 #define INCREMENT_LINENO ++yyline
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1510 #endif
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1511
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1512 /* Define two macros for accessing the input buffer (current input
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1513 file). GET(C) sets C to the next input character and advances the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1514 input pointer. UNGET retracts the input pointer. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1515
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1516 #define GET(C) ((C) = *in++)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1517 #define UNGET() (--in)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1518
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1519
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1520 /* Process a preprocessor line. Value is the next character from the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1521 input buffer not consumed. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1522
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1523 int
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1524 process_pp_line ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1525 {
30138
d00767029418 (yylex): Accept string literals with newlines in them.
Gerd Moellmann <gerd@gnu.org>
parents: 29994
diff changeset
1526 int in_comment = 0, in_string = 0;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1527 int c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1528 char *p = yytext;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1529
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1530 /* Skip over white space. The `#' has been consumed already. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1531 while (WHITEP (GET (c)))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1532 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1533
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1534 /* Read the preprocessor command (if any). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1535 while (IDENTP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1536 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1537 *p++ = c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1538 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1539 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1540
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1541 /* Is it a `define'? */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1542 *p = '\0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1543
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1544 if (*yytext && streq (yytext, "define"))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1545 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1546 p = yytext;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1547 while (WHITEP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1548 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1549 while (IDENTP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1550 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1551 *p++ = c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1552 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1553 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1554
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1555 *p = '\0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1556
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1557 if (*yytext)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1558 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1559 char *regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1560 int pos = BUFFER_POS ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1561 add_define (yytext, regexp, pos);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1562 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1563 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1564
30138
d00767029418 (yylex): Accept string literals with newlines in them.
Gerd Moellmann <gerd@gnu.org>
parents: 29994
diff changeset
1565 while (c && (c != '\n' || in_comment || in_string))
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1566 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1567 if (c == '\\')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1568 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1569 else if (c == '/' && !in_comment)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1570 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1571 if (GET (c) == '*')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1572 in_comment = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1573 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1574 else if (c == '*' && in_comment)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1575 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1576 if (GET (c) == '/')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1577 in_comment = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1578 }
30138
d00767029418 (yylex): Accept string literals with newlines in them.
Gerd Moellmann <gerd@gnu.org>
parents: 29994
diff changeset
1579 else if (c == '"')
d00767029418 (yylex): Accept string literals with newlines in them.
Gerd Moellmann <gerd@gnu.org>
parents: 29994
diff changeset
1580 in_string = !in_string;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
1581
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1582 if (c == '\n')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1583 INCREMENT_LINENO;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1584
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1585 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1586 }
30138
d00767029418 (yylex): Accept string literals with newlines in them.
Gerd Moellmann <gerd@gnu.org>
parents: 29994
diff changeset
1587
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1588 return c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1589 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1590
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1591
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1592 /* Value is the next token from the input buffer. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1593
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1594 int
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1595 yylex ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1596 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1597 int c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1598 char end_char;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1599 char *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1600
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1601 for (;;)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1602 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1603 while (WHITEP (GET (c)))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1604 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1605
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1606 switch (c)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1607 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1608 case '\n':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1609 INCREMENT_LINENO;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1610 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1611
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1612 case '\r':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1613 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1614
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1615 case 0:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1616 /* End of file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1617 return YYEOF;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1618
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1619 case '\\':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1620 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1621 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1622
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1623 case '"':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1624 case '\'':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1625 /* String and character constants. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1626 end_char = c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1627 string_start = in;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1628 while (GET (c) && c != end_char)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1629 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1630 switch (c)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1631 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1632 case '\\':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1633 /* Escape sequences. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1634 if (!GET (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1635 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1636 if (end_char == '\'')
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
1637 yyerror ("EOF in character constant", NULL);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1638 else
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
1639 yyerror ("EOF in string constant", NULL);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1640 goto end_string;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1641 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1642 else switch (c)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1643 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1644 case '\n':
30138
d00767029418 (yylex): Accept string literals with newlines in them.
Gerd Moellmann <gerd@gnu.org>
parents: 29994
diff changeset
1645 INCREMENT_LINENO;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1646 case 'a':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1647 case 'b':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1648 case 'f':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1649 case 'n':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1650 case 'r':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1651 case 't':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1652 case 'v':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1653 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1654
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1655 case 'x':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1656 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1657 /* Hexadecimal escape sequence. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1658 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1659 for (i = 0; i < 2; ++i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1660 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1661 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1662
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1663 if (c >= '0' && c <= '7')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1664 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1665 else if (c >= 'a' && c <= 'f')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1666 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1667 else if (c >= 'A' && c <= 'F')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1668 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1669 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1670 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1671 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1672 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1673 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1674 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1675 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1676 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1677
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1678 case '0':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1679 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1680 /* Octal escape sequence. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1681 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1682 for (i = 0; i < 3; ++i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1683 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1684 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1685
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1686 if (c >= '0' && c <= '7')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1687 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1688 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1689 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1690 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1691 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1692 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1693 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1694 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1695 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1696
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1697 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1698 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1699 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1700 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1701
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1702 case '\n':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1703 if (end_char == '\'')
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
1704 yyerror ("newline in character constant", NULL);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1705 else
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
1706 yyerror ("newline in string constant", NULL);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1707 INCREMENT_LINENO;
30138
d00767029418 (yylex): Accept string literals with newlines in them.
Gerd Moellmann <gerd@gnu.org>
parents: 29994
diff changeset
1708 break;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1709
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1710 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1711 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1712 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1713 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1714
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1715 end_string:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1716 return end_char == '\'' ? CCHAR : CSTRING;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1717
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1718 case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1719 case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1720 case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1721 case 'v': case 'w': case 'x': case 'y': case 'z':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1722 case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1723 case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1724 case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1725 case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1726 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1727 /* Identifier and keywords. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1728 unsigned hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1729 struct kw *k;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1730
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1731 p = yytext;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1732 *p++ = hash = c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1733
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1734 while (IDENTP (GET (*p)))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1735 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1736 hash = (hash << 1) ^ *p++;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1737 if (p == yytext_end - 1)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1738 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1739 int size = yytext_end - yytext;
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
1740 yytext = (char *) xrealloc (yytext, 2 * size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1741 yytext_end = yytext + 2 * size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1742 p = yytext + size - 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1743 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1744 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1745
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1746 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1747 *p = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1748
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1749 for (k = keyword_table[hash % KEYWORD_TABLE_SIZE]; k; k = k->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1750 if (streq (k->name, yytext))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1751 return k->tk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1752
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1753 return IDENT;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1754 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1755
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1756 case '/':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1757 /* C and C++ comments, '/' and '/='. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1758 switch (GET (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1759 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1760 case '*':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1761 while (GET (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1762 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1763 switch (c)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1764 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1765 case '*':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1766 if (GET (c) == '/')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1767 goto comment_end;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1768 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1769 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1770 case '\\':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1771 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1772 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1773 case '\n':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1774 INCREMENT_LINENO;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1775 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1776 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1777 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1778 comment_end:;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1779 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1780
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1781 case '=':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1782 return DIVASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1783
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1784 case '/':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1785 while (GET (c) && c != '\n')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1786 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1787 INCREMENT_LINENO;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1788 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1789
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1790 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1791 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1792 return '/';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1793 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1794 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1795
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1796 case '+':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1797 if (GET (c) == '+')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1798 return INC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1799 else if (c == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1800 return ADDASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1801 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1802 return '+';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1803
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1804 case '-':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1805 switch (GET (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1806 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1807 case '-':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1808 return DEC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1809 case '>':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1810 if (GET (c) == '*')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1811 return ARROWSTAR;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1812 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1813 return ARROW;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1814 case '=':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1815 return SUBASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1816 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1817 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1818 return '-';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1819
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1820 case '*':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1821 if (GET (c) == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1822 return MULASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1823 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1824 return '*';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1825
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1826 case '%':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1827 if (GET (c) == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1828 return MODASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1829 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1830 return '%';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1831
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1832 case '|':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1833 if (GET (c) == '|')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1834 return LOR;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1835 else if (c == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1836 return ORASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1837 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1838 return '|';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1839
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1840 case '&':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1841 if (GET (c) == '&')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1842 return LAND;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1843 else if (c == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1844 return ANDASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1845 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1846 return '&';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1847
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1848 case '^':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1849 if (GET (c) == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1850 return XORASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1851 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1852 return '^';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1853
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1854 case '.':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1855 if (GET (c) == '*')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1856 return POINTSTAR;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1857 else if (c == '.')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1858 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1859 if (GET (c) != '.')
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
1860 yyerror ("invalid token '..' ('...' assumed)", NULL);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1861 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1862 return ELLIPSIS;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1863 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1864 else if (!DIGITP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1865 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1866 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1867 return '.';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1868 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1869 goto mantissa;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1870
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1871 case ':':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1872 if (GET (c) == ':')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1873 return DCOLON;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1874 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1875 return ':';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1876
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1877 case '=':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1878 if (GET (c) == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1879 return EQ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1880 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1881 return '=';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1882
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1883 case '!':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1884 if (GET (c) == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1885 return NE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1886 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1887 return '!';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1888
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1889 case '<':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1890 switch (GET (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1891 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1892 case '=':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1893 return LE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1894 case '<':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1895 if (GET (c) == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1896 return LSHIFTASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1897 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1898 return LSHIFT;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1899 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1900 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1901 return '<';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1902
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1903 case '>':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1904 switch (GET (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1905 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1906 case '=':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1907 return GE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1908 case '>':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1909 if (GET (c) == '=')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1910 return RSHIFTASGN;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1911 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1912 return RSHIFT;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1913 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1914 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1915 return '>';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1916
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1917 case '#':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1918 c = process_pp_line ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1919 if (c == 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1920 return YYEOF;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1921 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1922
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1923 case '(': case ')': case '[': case ']': case '{': case '}':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1924 case ';': case ',': case '?': case '~':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1925 return c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1926
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1927 case '0':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1928 yyival = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1929
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1930 if (GET (c) == 'x' || c == 'X')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1931 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1932 while (GET (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1933 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1934 if (DIGITP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1935 yyival = yyival * 16 + c - '0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1936 else if (c >= 'a' && c <= 'f')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1937 yyival = yyival * 16 + c - 'a' + 10;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1938 else if (c >= 'A' && c <= 'F')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1939 yyival = yyival * 16 + c - 'A' + 10;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1940 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1941 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1942 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1943
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1944 goto int_suffixes;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1945 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1946 else if (c == '.')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1947 goto mantissa;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1948
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1949 while (c >= '0' && c <= '7')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1950 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1951 yyival = (yyival << 3) + c - '0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1952 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1953 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1954
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1955 int_suffixes:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1956 /* Integer suffixes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1957 while (isalpha (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1958 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1959 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1960 return CINT;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1961
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1962 case '1': case '2': case '3': case '4': case '5': case '6':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1963 case '7': case '8': case '9':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1964 /* Integer or floating constant, part before '.'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1965 yyival = c - '0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1966
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1967 while (GET (c) && DIGITP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1968 yyival = 10 * yyival + c - '0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1969
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1970 if (c != '.')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1971 goto int_suffixes;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1972
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1973 mantissa:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1974 /* Digits following '.'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1975 while (DIGITP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1976 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1977
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1978 /* Optional exponent. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1979 if (c == 'E' || c == 'e')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1980 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1981 if (GET (c) == '-' || c == '+')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1982 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1983
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1984 while (DIGITP (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1985 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1986 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1987
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1988 /* Optional type suffixes. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1989 while (isalpha (c))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1990 GET (c);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1991 UNGET ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1992 return CFLOAT;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1993
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1994 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1995 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1996 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1997 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1998 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
1999
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2000
35591
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2001 /* Actually local to matching_regexp. These variables must be in
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2002 global scope for the case that `static' get's defined away. */
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2003
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2004 static char *matching_regexp_buffer, *matching_regexp_end_buf;
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2005
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2006
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2007 /* Value is the string from the start of the line to the current
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2008 position in the input buffer, or maybe a bit more if that string is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2009 shorter than min_regexp. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2010
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2011 char *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2012 matching_regexp ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2013 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2014 char *p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2015 char *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2016 char *t;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2017
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2018 if (!f_regexps)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2019 return NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2020
35591
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2021 if (matching_regexp_buffer == NULL)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2022 {
35591
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2023 matching_regexp_buffer = (char *) xmalloc (max_regexp);
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2024 matching_regexp_end_buf = &matching_regexp_buffer[max_regexp] - 1;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2025 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2026
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2027 /* Scan back to previous newline of buffer start. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2028 for (p = in - 1; p > inbuffer && *p != '\n'; --p)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2029 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2030
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2031 if (*p == '\n')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2032 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2033 while (in - p < min_regexp && p > inbuffer)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2034 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2035 /* Line probably not significant enough */
101177
e3098e61557d (matching_regexp): Fix OB1 error.
Chong Yidong <cyd@stupidchicken.com>
parents: 100896
diff changeset
2036 for (--p; p > inbuffer && *p != '\n'; --p)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2037 ;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2038 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2039 if (*p == '\n')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2040 ++p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2041 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2042
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2043 /* Copy from end to make sure significant portions are included.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2044 This implies that in the browser a regular expressing of the form
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2045 `^.*{regexp}' has to be used. */
35591
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2046 for (s = matching_regexp_end_buf - 1, t = in;
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2047 s > matching_regexp_buffer && t > p;)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2048 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2049 *--s = *--t;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2050
41112
1ba618f8fdb5 (matching_regexp): Escape '\\'.
Gerd Moellmann <gerd@gnu.org>
parents: 39514
diff changeset
2051 if (*s == '"' || *s == '\\')
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2052 *--s = '\\';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2053 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2054
35591
92a64125d228 (matching_regexp_buffer, matching_regexp_end_buf):
Gerd Moellmann <gerd@gnu.org>
parents: 35459
diff changeset
2055 *(matching_regexp_end_buf - 1) = '\0';
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2056 return xstrdup (s);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2057 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2058
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2059
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2060 /* Return a printable representation of token T. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2061
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2062 char *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2063 token_string (t)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2064 int t;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2065 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2066 static char b[3];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2067
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2068 switch (t)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2069 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2070 case CSTRING: return "string constant";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2071 case CCHAR: return "char constant";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2072 case CINT: return "int constant";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2073 case CFLOAT: return "floating constant";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2074 case ELLIPSIS: return "...";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2075 case LSHIFTASGN: return "<<=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2076 case RSHIFTASGN: return ">>=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2077 case ARROWSTAR: return "->*";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2078 case IDENT: return "identifier";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2079 case DIVASGN: return "/=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2080 case INC: return "++";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2081 case ADDASGN: return "+=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2082 case DEC: return "--";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2083 case ARROW: return "->";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2084 case SUBASGN: return "-=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2085 case MULASGN: return "*=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2086 case MODASGN: return "%=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2087 case LOR: return "||";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2088 case ORASGN: return "|=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2089 case LAND: return "&&";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2090 case ANDASGN: return "&=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2091 case XORASGN: return "^=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2092 case POINTSTAR: return ".*";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2093 case DCOLON: return "::";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2094 case EQ: return "==";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2095 case NE: return "!=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2096 case LE: return "<=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2097 case LSHIFT: return "<<";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2098 case GE: return ">=";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2099 case RSHIFT: return ">>";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2100 case ASM: return "asm";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2101 case AUTO: return "auto";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2102 case BREAK: return "break";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2103 case CASE: return "case";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2104 case CATCH: return "catch";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2105 case CHAR: return "char";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2106 case CLASS: return "class";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2107 case CONST: return "const";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2108 case CONTINUE: return "continue";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2109 case DEFAULT: return "default";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2110 case DELETE: return "delete";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2111 case DO: return "do";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2112 case DOUBLE: return "double";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2113 case ELSE: return "else";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2114 case ENUM: return "enum";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2115 case EXTERN: return "extern";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2116 case FLOAT: return "float";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2117 case FOR: return "for";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2118 case FRIEND: return "friend";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2119 case GOTO: return "goto";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2120 case IF: return "if";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2121 case T_INLINE: return "inline";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2122 case INT: return "int";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2123 case LONG: return "long";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2124 case NEW: return "new";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2125 case OPERATOR: return "operator";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2126 case PRIVATE: return "private";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2127 case PROTECTED: return "protected";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2128 case PUBLIC: return "public";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2129 case REGISTER: return "register";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2130 case RETURN: return "return";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2131 case SHORT: return "short";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2132 case SIGNED: return "signed";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2133 case SIZEOF: return "sizeof";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2134 case STATIC: return "static";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2135 case STRUCT: return "struct";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2136 case SWITCH: return "switch";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2137 case TEMPLATE: return "template";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2138 case THIS: return "this";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2139 case THROW: return "throw";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2140 case TRY: return "try";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2141 case TYPEDEF: return "typedef";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2142 case UNION: return "union";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2143 case UNSIGNED: return "unsigned";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2144 case VIRTUAL: return "virtual";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2145 case VOID: return "void";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2146 case VOLATILE: return "volatile";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2147 case WHILE: return "while";
29994
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2148 case MUTABLE: return "mutable";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2149 case BOOL: return "bool";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2150 case TRUE: return "true";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2151 case FALSE: return "false";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2152 case SIGNATURE: return "signature";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2153 case NAMESPACE: return "namespace";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2154 case EXPLICIT: return "explicit";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2155 case TYPENAME: return "typename";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2156 case CONST_CAST: return "const_cast";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2157 case DYNAMIC_CAST: return "dynamic_cast";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2158 case REINTERPRET_CAST: return "reinterpret_cast";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2159 case STATIC_CAST: return "static_cast";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2160 case TYPEID: return "typeid";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2161 case USING: return "using";
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2162 case WCHAR: return "wchar_t";
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2163 case YYEOF: return "EOF";
29994
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2164
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2165 default:
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2166 if (t < 255)
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2167 {
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2168 b[0] = t;
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2169 b[1] = '\0';
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2170 return b;
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2171 }
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2172 else
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2173 return "???";
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2174 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2175 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2176
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2177
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2178 /* Reinitialize the scanner for a new input file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2179
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2180 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2181 re_init_scanner ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2182 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2183 in = inbuffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2184 yyline = 1;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2185
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2186 if (yytext == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2187 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2188 int size = 256;
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
2189 yytext = (char *) xmalloc (size * sizeof *yytext);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2190 yytext_end = yytext + size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2191 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2192 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2193
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2194
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2195 /* Insert a keyword NAME with token value TK into the keyword hash
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2196 table. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2197
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2198 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2199 insert_keyword (name, tk)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2200 char *name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2201 int tk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2202 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2203 char *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2204 unsigned h = 0;
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
2205 struct kw *k = (struct kw *) xmalloc (sizeof *k);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2206
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2207 for (s = name; *s; ++s)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2208 h = (h << 1) ^ *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2209
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2210 h %= KEYWORD_TABLE_SIZE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2211 k->name = name;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2212 k->tk = tk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2213 k->next = keyword_table[h];
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2214 keyword_table[h] = k;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2215 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2216
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2217
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2218 /* Initialize the scanner for the first file. This sets up the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2219 character class vectors and fills the keyword hash table. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2220
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2221 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2222 init_scanner ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2223 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2224 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2225
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2226 /* Allocate the input buffer */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2227 inbuffer_size = READ_CHUNK_SIZE + 1;
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
2228 inbuffer = in = (char *) xmalloc (inbuffer_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2229 yyline = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2230
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2231 /* Set up character class vectors. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2232 for (i = 0; i < sizeof is_ident; ++i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2233 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2234 if (i == '_' || isalnum (i))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2235 is_ident[i] = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2236
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2237 if (i >= '0' && i <= '9')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2238 is_digit[i] = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2239
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2240 if (i == ' ' || i == '\t' || i == '\f' || i == '\v')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2241 is_white[i] = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2242 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2243
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2244 /* Fill keyword hash table. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2245 insert_keyword ("and", LAND);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2246 insert_keyword ("and_eq", ANDASGN);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2247 insert_keyword ("asm", ASM);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2248 insert_keyword ("auto", AUTO);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2249 insert_keyword ("bitand", '&');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2250 insert_keyword ("bitor", '|');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2251 insert_keyword ("bool", BOOL);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2252 insert_keyword ("break", BREAK);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2253 insert_keyword ("case", CASE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2254 insert_keyword ("catch", CATCH);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2255 insert_keyword ("char", CHAR);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2256 insert_keyword ("class", CLASS);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2257 insert_keyword ("compl", '~');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2258 insert_keyword ("const", CONST);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2259 insert_keyword ("const_cast", CONST_CAST);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2260 insert_keyword ("continue", CONTINUE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2261 insert_keyword ("default", DEFAULT);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2262 insert_keyword ("delete", DELETE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2263 insert_keyword ("do", DO);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2264 insert_keyword ("double", DOUBLE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2265 insert_keyword ("dynamic_cast", DYNAMIC_CAST);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2266 insert_keyword ("else", ELSE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2267 insert_keyword ("enum", ENUM);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2268 insert_keyword ("explicit", EXPLICIT);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2269 insert_keyword ("extern", EXTERN);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2270 insert_keyword ("false", FALSE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2271 insert_keyword ("float", FLOAT);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2272 insert_keyword ("for", FOR);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2273 insert_keyword ("friend", FRIEND);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2274 insert_keyword ("goto", GOTO);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2275 insert_keyword ("if", IF);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2276 insert_keyword ("inline", T_INLINE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2277 insert_keyword ("int", INT);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2278 insert_keyword ("long", LONG);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2279 insert_keyword ("mutable", MUTABLE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2280 insert_keyword ("namespace", NAMESPACE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2281 insert_keyword ("new", NEW);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2282 insert_keyword ("not", '!');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2283 insert_keyword ("not_eq", NE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2284 insert_keyword ("operator", OPERATOR);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2285 insert_keyword ("or", LOR);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2286 insert_keyword ("or_eq", ORASGN);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2287 insert_keyword ("private", PRIVATE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2288 insert_keyword ("protected", PROTECTED);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2289 insert_keyword ("public", PUBLIC);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2290 insert_keyword ("register", REGISTER);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2291 insert_keyword ("reinterpret_cast", REINTERPRET_CAST);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2292 insert_keyword ("return", RETURN);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2293 insert_keyword ("short", SHORT);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2294 insert_keyword ("signed", SIGNED);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2295 insert_keyword ("sizeof", SIZEOF);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2296 insert_keyword ("static", STATIC);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2297 insert_keyword ("static_cast", STATIC_CAST);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2298 insert_keyword ("struct", STRUCT);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2299 insert_keyword ("switch", SWITCH);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2300 insert_keyword ("template", TEMPLATE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2301 insert_keyword ("this", THIS);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2302 insert_keyword ("throw", THROW);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2303 insert_keyword ("true", TRUE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2304 insert_keyword ("try", TRY);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2305 insert_keyword ("typedef", TYPEDEF);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2306 insert_keyword ("typeid", TYPEID);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2307 insert_keyword ("typename", TYPENAME);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2308 insert_keyword ("union", UNION);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2309 insert_keyword ("unsigned", UNSIGNED);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2310 insert_keyword ("using", USING);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2311 insert_keyword ("virtual", VIRTUAL);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2312 insert_keyword ("void", VOID);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2313 insert_keyword ("volatile", VOLATILE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2314 insert_keyword ("wchar_t", WCHAR);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2315 insert_keyword ("while", WHILE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2316 insert_keyword ("xor", '^');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2317 insert_keyword ("xor_eq", XORASGN);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2318 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2319
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2320
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2321
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2322 /***********************************************************************
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2323 Parser
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2324 ***********************************************************************/
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2325
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2326 /* Match the current lookahead token and set it to the next token. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2327
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2328 #define MATCH() (tk = yylex ())
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2329
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2330 /* Return the lookahead token. If current lookahead token is cleared,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2331 read a new token. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2332
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2333 #define LA1 (tk == -1 ? (tk = yylex ()) : tk)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2334
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2335 /* Is the current lookahead equal to the token T? */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2336
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2337 #define LOOKING_AT(T) (tk == (T))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2338
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2339 /* Is the current lookahead one of T1 or T2? */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2340
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2341 #define LOOKING_AT2(T1, T2) (tk == (T1) || tk == (T2))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2342
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2343 /* Is the current lookahead one of T1, T2 or T3? */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2344
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2345 #define LOOKING_AT3(T1, T2, T3) (tk == (T1) || tk == (T2) || tk == (T3))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2346
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2347 /* Is the current lookahead one of T1...T4? */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2348
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2349 #define LOOKING_AT4(T1, T2, T3, T4) \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2350 (tk == (T1) || tk == (T2) || tk == (T3) || tk == (T4))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2351
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2352 /* Match token T if current lookahead is T. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2353
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2354 #define MATCH_IF(T) if (LOOKING_AT (T)) MATCH (); else ((void) 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2355
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2356 /* Skip to matching token if current token is T. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2357
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2358 #define SKIP_MATCHING_IF(T) \
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2359 if (LOOKING_AT (T)) skip_matching (); else ((void) 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2360
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2361
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2362 /* Skip forward until a given token TOKEN or YYEOF is seen and return
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2363 the current lookahead token after skipping. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2364
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2365 int
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2366 skip_to (token)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2367 int token;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2368 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2369 while (!LOOKING_AT2 (YYEOF, token))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2370 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2371 return tk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2372 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2373
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2374 /* Skip over pairs of tokens (parentheses, square brackets,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2375 angle brackets, curly brackets) matching the current lookahead. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2376
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2377 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2378 skip_matching ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2379 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2380 int open, close, n;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2381
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2382 switch (open = LA1)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2383 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2384 case '{':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2385 close = '}';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2386 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2387
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2388 case '(':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2389 close = ')';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2390 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2391
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2392 case '<':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2393 close = '>';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2394 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2395
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2396 case '[':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2397 close = ']';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2398 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2399
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2400 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2401 abort ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2402 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2403
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2404 for (n = 0;;)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2405 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2406 if (LOOKING_AT (open))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2407 ++n;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2408 else if (LOOKING_AT (close))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2409 --n;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2410 else if (LOOKING_AT (YYEOF))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2411 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2412
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2413 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2414
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2415 if (n == 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2416 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2417 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2418 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2419
44819
9ce753124d1b (skip_initializer): Return void.
Pavel Janík <Pavel@Janik.cz>
parents: 44719
diff changeset
2420 void
44220
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2421 skip_initializer ()
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2422 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2423 for (;;)
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2424 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2425 switch (LA1)
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2426 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2427 case ';':
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2428 case ',':
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2429 case YYEOF:
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2430 return;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2431
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2432 case '{':
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2433 case '[':
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2434 case '(':
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2435 skip_matching ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2436 break;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2437
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2438 default:
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2439 MATCH ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2440 break;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2441 }
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2442 }
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
2443 }
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2444
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2445 /* Build qualified namespace alias (A::B::c) and return it. */
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2446
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2447 struct link *
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2448 match_qualified_namespace_alias ()
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2449 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2450 struct link *head = NULL;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2451 struct link *cur = NULL;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2452 struct link *tmp = NULL;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2453
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2454 for (;;)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2455 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2456 MATCH ();
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2457 switch (LA1)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2458 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2459 case IDENT:
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2460 tmp = (struct link *) xmalloc (sizeof *cur);
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2461 tmp->sym = find_namespace (yytext, cur);
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2462 tmp->next = NULL;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2463 if (head)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2464 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2465 cur = cur->next = tmp;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2466 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2467 else
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2468 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2469 head = cur = tmp;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2470 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2471 break;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2472 case DCOLON:
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2473 /* Just skip */
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2474 break;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2475 default:
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2476 return head;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2477 break;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2478 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2479 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2480 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
2481
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2482 /* Re-initialize the parser by resetting the lookahead token. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2483
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2484 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2485 re_init_parser ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2486 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2487 tk = -1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2488 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2489
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2490
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2491 /* Parse a parameter list, including the const-specifier,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2492 pure-specifier, and throw-list that may follow a parameter list.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2493 Return in FLAGS what was seen following the parameter list.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2494 Returns a hash code for the parameter types. This value is used to
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2495 distinguish between overloaded functions. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2496
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2497 unsigned
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2498 parm_list (flags)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2499 int *flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2500 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2501 unsigned hash = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2502 int type_seen = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2503
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2504 while (!LOOKING_AT2 (YYEOF, ')'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2505 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2506 switch (LA1)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2507 {
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44819
diff changeset
2508 /* Skip over grouping parens or parameter lists in parameter
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2509 declarations. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2510 case '(':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2511 skip_matching ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2512 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2513
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2514 /* Next parameter. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2515 case ',':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2516 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2517 type_seen = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2518 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2519
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2520 /* Ignore the scope part of types, if any. This is because
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2521 some types need scopes when defined outside of a class body,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2522 and don't need them inside the class body. This means that
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2523 we have to look for the last IDENT in a sequence of
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2524 IDENT::IDENT::... */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2525 case IDENT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2526 if (!type_seen)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2527 {
29994
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2528 char *last_id;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2529 unsigned ident_type_hash = 0;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2530
29994
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2531 parse_qualified_param_ident_or_type (&last_id);
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2532 if (last_id)
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2533 {
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2534 /* LAST_ID null means something like `X::*'. */
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2535 for (; *last_id; ++last_id)
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2536 ident_type_hash = (ident_type_hash << 1) ^ *last_id;
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2537 hash = (hash << 1) ^ ident_type_hash;
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2538 type_seen = 1;
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
2539 }
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2540 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2541 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2542 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2543 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2544
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2545 case VOID:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2546 /* This distinction is made to make `func (void)' equivalent
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2547 to `func ()'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2548 type_seen = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2549 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2550 if (!LOOKING_AT (')'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2551 hash = (hash << 1) ^ VOID;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2552 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2553
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2554 case BOOL: case CHAR: case CLASS: case CONST:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2555 case DOUBLE: case ENUM: case FLOAT: case INT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2556 case LONG: case SHORT: case SIGNED: case STRUCT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2557 case UNION: case UNSIGNED: case VOLATILE: case WCHAR:
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2558 case ELLIPSIS:
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2559 type_seen = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2560 hash = (hash << 1) ^ LA1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2561 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2562 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2563
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2564 case '*': case '&': case '[': case ']':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2565 hash = (hash << 1) ^ LA1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2566 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2567 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2568
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2569 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2570 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2571 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2572 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2573 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2574
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2575 if (LOOKING_AT (')'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2576 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2577 MATCH ();
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2578
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2579 if (LOOKING_AT (CONST))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2580 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2581 /* We can overload the same function on `const' */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2582 hash = (hash << 1) ^ CONST;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2583 SET_FLAG (*flags, F_CONST);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2584 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2585 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2586
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2587 if (LOOKING_AT (THROW))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2588 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2589 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2590 SKIP_MATCHING_IF ('(');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2591 SET_FLAG (*flags, F_THROW);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2592 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2593
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2594 if (LOOKING_AT ('='))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2595 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2596 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2597 if (LOOKING_AT (CINT) && yyival == 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2598 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2599 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2600 SET_FLAG (*flags, F_PURE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2601 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2602 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2603 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2604
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2605 return hash;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2606 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2607
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2608
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2609 /* Print position info to stdout. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2610
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2611 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2612 print_info ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2613 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2614 if (info_position >= 0 && BUFFER_POS () <= info_position)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2615 if (info_cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2616 printf ("(\"%s\" \"%s\" \"%s\" %d)\n",
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2617 info_cls->name, sym_scope (info_cls),
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2618 info_member->name, info_where);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2619 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2620
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2621
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2622 /* Parse a member declaration within the class body of CLS. VIS is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2623 the access specifier for the member (private, protected,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2624 public). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2625
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2626 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2627 member (cls, vis)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2628 struct sym *cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2629 int vis;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2630 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2631 char *id = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2632 int sc = SC_MEMBER;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2633 char *regexp = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2634 int pos;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2635 int is_constructor;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2636 int anonymous = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2637 int flags = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2638 int class_tag;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2639 int type_seen = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2640 int paren_seen = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2641 unsigned hash = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2642 int tilde = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2643
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2644 while (!LOOKING_AT4 (';', '{', '}', YYEOF))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2645 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2646 switch (LA1)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2647 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2648 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2649 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2650 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2651
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2652 /* A function or class may follow. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2653 case TEMPLATE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2654 MATCH();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2655 SET_FLAG (flags, F_TEMPLATE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2656 /* Skip over template argument list */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2657 SKIP_MATCHING_IF ('<');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2658 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2659
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2660 case EXPLICIT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2661 SET_FLAG (flags, F_EXPLICIT);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2662 goto typeseen;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2663
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2664 case MUTABLE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2665 SET_FLAG (flags, F_MUTABLE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2666 goto typeseen;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2667
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2668 case T_INLINE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2669 SET_FLAG (flags, F_INLINE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2670 goto typeseen;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2671
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2672 case VIRTUAL:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2673 SET_FLAG (flags, F_VIRTUAL);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2674 goto typeseen;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2675
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2676 case '[':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2677 skip_matching ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2678 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2679
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2680 case ENUM:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2681 sc = SC_TYPE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2682 goto typeseen;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2683
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2684 case TYPEDEF:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2685 sc = SC_TYPE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2686 goto typeseen;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2687
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2688 case FRIEND:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2689 sc = SC_FRIEND;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2690 goto typeseen;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2691
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2692 case STATIC:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2693 sc = SC_STATIC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2694 goto typeseen;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2695
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2696 case '~':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2697 tilde = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2698 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2699 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2700
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2701 case IDENT:
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2702 /* Remember IDENTS seen so far. Among these will be the member
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2703 name. */
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2704 id = (char *) xrealloc (id, strlen (yytext) + 2);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2705 if (tilde)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2706 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2707 *id = '~';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2708 strcpy (id + 1, yytext);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2709 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2710 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2711 strcpy (id, yytext);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2712 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2713 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2714
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2715 case OPERATOR:
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2716 {
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2717 char *s = operator_name (&sc);
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2718 id = (char *) xrealloc (id, strlen (s) + 1);
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2719 strcpy (id, s);
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2720 }
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2721 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2722
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2723 case '(':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2724 /* Most probably the beginning of a parameter list. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2725 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2726 paren_seen = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2727
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2728 if (id && cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2729 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2730 if (!(is_constructor = streq (id, cls->name)))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2731 regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2732 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2733 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2734 is_constructor = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2735
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2736 pos = BUFFER_POS ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2737 hash = parm_list (&flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2738
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2739 if (is_constructor)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2740 regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2741
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2742 if (id && cls != NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2743 add_member_decl (cls, id, regexp, pos, hash, 0, sc, vis, flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2744
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2745 while (!LOOKING_AT3 (';', '{', YYEOF))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2746 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2747
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2748 if (LOOKING_AT ('{') && id && cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2749 add_member_defn (cls, id, regexp, pos, hash, 0, sc, flags);
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2750
95480
1c16540a2329 * lib-src/ebrowse.c (xfree): Remove definition; s/xfree/free/
Jim Meyering <jim@meyering.net>
parents: 95479
diff changeset
2751 free (id);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2752 id = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2753 sc = SC_MEMBER;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2754 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2755
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2756 case STRUCT: case UNION: case CLASS:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2757 /* Nested class */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2758 class_tag = LA1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2759 type_seen = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2760 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2761 anonymous = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2762
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2763 /* More than one ident here to allow for MS-DOS specialties
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2764 like `_export class' etc. The last IDENT seen counts
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2765 as the class name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2766 while (!LOOKING_AT4 (YYEOF, ';', ':', '{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2767 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2768 if (LOOKING_AT (IDENT))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2769 anonymous = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2770 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2771 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2772
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2773 if (LOOKING_AT2 (':', '{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2774 class_definition (anonymous ? NULL : cls, class_tag, flags, 1);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2775 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2776 skip_to (';');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2777 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2778
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2779 case INT: case CHAR: case LONG: case UNSIGNED:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2780 case SIGNED: case CONST: case DOUBLE: case VOID:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2781 case SHORT: case VOLATILE: case BOOL: case WCHAR:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2782 case TYPENAME:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2783 typeseen:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2784 type_seen = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2785 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2786 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2787 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2788 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2789
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2790 if (LOOKING_AT (';'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2791 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2792 /* The end of a member variable, a friend declaration or an access
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2793 declaration. We don't want to add friend classes as members. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2794 if (id && sc != SC_FRIEND && cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2795 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2796 regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2797 pos = BUFFER_POS ();
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2798
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2799 if (cls != NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2800 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2801 if (type_seen || !paren_seen)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2802 add_member_decl (cls, id, regexp, pos, 0, 1, sc, vis, 0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2803 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2804 add_member_decl (cls, id, regexp, pos, hash, 0, sc, vis, 0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2805 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2806 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2807
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2808 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2809 print_info ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2810 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2811 else if (LOOKING_AT ('{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2812 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2813 /* A named enum. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2814 if (sc == SC_TYPE && id && cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2815 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2816 regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2817 pos = BUFFER_POS ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2818
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2819 if (cls != NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2820 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2821 add_member_decl (cls, id, regexp, pos, 0, 1, sc, vis, 0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2822 add_member_defn (cls, id, regexp, pos, 0, 1, sc, 0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2823 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2824 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2825
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2826 skip_matching ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2827 print_info ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2828 }
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
2829
95480
1c16540a2329 * lib-src/ebrowse.c (xfree): Remove definition; s/xfree/free/
Jim Meyering <jim@meyering.net>
parents: 95479
diff changeset
2830 free (id);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2831 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2832
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2833
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2834 /* Parse the body of class CLS. TAG is the tag of the class (struct,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2835 union, class). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2836
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2837 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2838 class_body (cls, tag)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2839 struct sym *cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2840 int tag;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2841 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2842 int vis = tag == CLASS ? PRIVATE : PUBLIC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2843 int temp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2844
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2845 while (!LOOKING_AT2 (YYEOF, '}'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2846 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2847 switch (LA1)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2848 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2849 case PRIVATE: case PROTECTED: case PUBLIC:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2850 temp = LA1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2851 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2852
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2853 if (LOOKING_AT (':'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2854 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2855 vis = temp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2856 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2857 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2858 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2859 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2860 /* Probably conditional compilation for inheritance list.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2861 We don't known whether there comes more of this.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2862 This is only a crude fix that works most of the time. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2863 do
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2864 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2865 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2866 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2867 while (LOOKING_AT2 (IDENT, ',')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2868 || LOOKING_AT3 (PUBLIC, PROTECTED, PRIVATE));
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2869 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2870 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2871
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2872 case TYPENAME:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2873 case USING:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2874 skip_to (';');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2875 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2876
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2877 /* Try to synchronize */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2878 case CHAR: case CLASS: case CONST:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2879 case DOUBLE: case ENUM: case FLOAT: case INT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2880 case LONG: case SHORT: case SIGNED: case STRUCT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2881 case UNION: case UNSIGNED: case VOID: case VOLATILE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2882 case TYPEDEF: case STATIC: case T_INLINE: case FRIEND:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2883 case VIRTUAL: case TEMPLATE: case IDENT: case '~':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2884 case BOOL: case WCHAR: case EXPLICIT: case MUTABLE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2885 member (cls, vis);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2886 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2887
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2888 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2889 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2890 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2891 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2892 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2893 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2894
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2895
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2896 /* Parse a qualified identifier. Current lookahead is IDENT. A
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2897 qualified ident has the form `X<..>::Y<...>::T<...>. Returns a
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2898 symbol for that class. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2899
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2900 struct sym *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2901 parse_classname ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2902 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2903 struct sym *last_class = NULL;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2904
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2905 while (LOOKING_AT (IDENT))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2906 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2907 last_class = add_sym (yytext, last_class);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2908 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2909
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2910 if (LOOKING_AT ('<'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2911 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2912 skip_matching ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2913 SET_FLAG (last_class->flags, F_TEMPLATE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2914 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2915
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2916 if (!LOOKING_AT (DCOLON))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2917 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2918
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2919 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2920 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2921
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2922 return last_class;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2923 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2924
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2925
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2926 /* Parse an operator name. Add the `static' flag to *SC if an
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2927 implicitly static operator has been parsed. Value is a pointer to
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2928 a static buffer holding the constructed operator name string. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2929
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2930 char *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2931 operator_name (sc)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2932 int *sc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2933 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2934 static int id_size = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2935 static char *id = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2936 char *s;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2937 int len;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2938
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2939 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2940
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2941 if (LOOKING_AT2 (NEW, DELETE))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2942 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2943 /* `new' and `delete' are implicitly static. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2944 if (*sc != SC_FRIEND)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2945 *sc = SC_STATIC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2946
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2947 s = token_string (LA1);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2948 MATCH ();
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2949
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2950 len = strlen (s) + 10;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2951 if (len > id_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2952 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2953 int new_size = max (len, 2 * id_size);
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
2954 id = (char *) xrealloc (id, new_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2955 id_size = new_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2956 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2957 strcpy (id, s);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2958
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2959 /* Vector new or delete? */
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2960 if (LOOKING_AT ('['))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2961 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2962 strcat (id, "[");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2963 MATCH ();
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
2964
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2965 if (LOOKING_AT (']'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2966 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2967 strcat (id, "]");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2968 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2969 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2970 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2971 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2972 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2973 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2974 int tokens_matched = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2975
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2976 len = 20;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2977 if (len > id_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2978 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2979 int new_size = max (len, 2 * id_size);
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
2980 id = (char *) xrealloc (id, new_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2981 id_size = new_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2982 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2983 strcpy (id, "operator");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2984
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2985 /* Beware access declarations of the form "X::f;" Beware of
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2986 `operator () ()'. Yet another difficulty is found in
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2987 GCC 2.95's STL: `operator == __STL_NULL_TMPL_ARGS (...'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2988 while (!(LOOKING_AT ('(') && tokens_matched)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2989 && !LOOKING_AT2 (';', YYEOF))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2990 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2991 s = token_string (LA1);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2992 len += strlen (s) + 2;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2993 if (len > id_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2994 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2995 int new_size = max (len, 2 * id_size);
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
2996 id = (char *) xrealloc (id, new_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2997 id_size = new_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2998 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
2999
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3000 if (*s != ')' && *s != ']')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3001 strcat (id, " ");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3002 strcat (id, s);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3003 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3004
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3005 /* If this is a simple operator like `+', stop now. */
34610
beea10bab07e (operator_name): Cast argument of isalpha to
Gerd Moellmann <gerd@gnu.org>
parents: 34522
diff changeset
3006 if (!isalpha ((unsigned char) *s) && *s != '(' && *s != '[')
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3007 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3008
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3009 ++tokens_matched;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3010 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3011 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3012
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3013 return id;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3014 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3015
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3016
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3017 /* This one consumes the last IDENT of a qualified member name like
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3018 `X::Y::z'. This IDENT is returned in LAST_ID. Value is the
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3019 symbol structure for the ident. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3020
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3021 struct sym *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3022 parse_qualified_ident_or_type (last_id)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3023 char **last_id;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3024 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3025 struct sym *cls = NULL;
36478
742df7c33f75 (parse_qualified_param_ident_or_type): Return a
Gerd Moellmann <gerd@gnu.org>
parents: 35591
diff changeset
3026 char *id = NULL;
742df7c33f75 (parse_qualified_param_ident_or_type): Return a
Gerd Moellmann <gerd@gnu.org>
parents: 35591
diff changeset
3027 size_t id_size = 0;
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3028 int enter = 0;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3029
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3030 while (LOOKING_AT (IDENT))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3031 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3032 int len = strlen (yytext) + 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3033 if (len > id_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3034 {
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3035 id = (char *) xrealloc (id, len);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3036 id_size = len;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3037 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3038 strcpy (id, yytext);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3039 *last_id = id;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3040 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3041
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3042 SKIP_MATCHING_IF ('<');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3043
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3044 if (LOOKING_AT (DCOLON))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3045 {
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3046 struct sym *pcn = NULL;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3047 struct link *pna = check_namespace_alias (id);
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3048 if (pna)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3049 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3050 do
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3051 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3052 enter_namespace (pna->sym->name);
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3053 enter++;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3054 pna = pna->next;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3055 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3056 while (pna);
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3057 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3058 else if ((pcn = check_namespace (id, current_namespace)))
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3059 {
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3060 enter_namespace (pcn->name);
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3061 enter++;
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3062 }
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3063 else
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3064 cls = add_sym (id, cls);
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3065
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3066 *last_id = NULL;
95480
1c16540a2329 * lib-src/ebrowse.c (xfree): Remove definition; s/xfree/free/
Jim Meyering <jim@meyering.net>
parents: 95479
diff changeset
3067 free (id);
36478
742df7c33f75 (parse_qualified_param_ident_or_type): Return a
Gerd Moellmann <gerd@gnu.org>
parents: 35591
diff changeset
3068 id = NULL;
742df7c33f75 (parse_qualified_param_ident_or_type): Return a
Gerd Moellmann <gerd@gnu.org>
parents: 35591
diff changeset
3069 id_size = 0;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3070 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3071 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3072 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3073 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3074 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3075
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3076 while (enter--)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3077 leave_namespace();
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3078
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3079 return cls;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3080 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3081
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3082
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3083 /* This one consumes the last IDENT of a qualified member name like
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3084 `X::Y::z'. This IDENT is returned in LAST_ID. Value is the
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3085 symbol structure for the ident. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3086
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3087 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3088 parse_qualified_param_ident_or_type (last_id)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3089 char **last_id;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3090 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3091 struct sym *cls = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3092 static char *id = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3093 static int id_size = 0;
29994
b5da88c41066 (token_string): Add missing tokens.
Gerd Moellmann <gerd@gnu.org>
parents: 29889
diff changeset
3094
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3095 while (LOOKING_AT (IDENT))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3096 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3097 int len = strlen (yytext) + 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3098 if (len > id_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3099 {
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3100 id = (char *) xrealloc (id, len);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3101 id_size = len;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3102 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3103 strcpy (id, yytext);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3104 *last_id = id;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3105 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3106
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3107 SKIP_MATCHING_IF ('<');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3108
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3109 if (LOOKING_AT (DCOLON))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3110 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3111 cls = add_sym (id, cls);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3112 *last_id = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3113 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3114 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3115 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3116 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3117 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3118 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3119
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3120
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3121 /* Parse a class definition.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3122
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3123 CONTAINING is the class containing the class being parsed or null.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3124 This may also be null if NESTED != 0 if the containing class is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3125 anonymous. TAG is the tag of the class (struct, union, class).
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3126 NESTED is non-zero if we are parsing a nested class.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3127
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3128 Current lookahead is the class name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3129
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3130 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3131 class_definition (containing, tag, flags, nested)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3132 struct sym *containing;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3133 int tag;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3134 int flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3135 int nested;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3136 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3137 struct sym *current;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3138 struct sym *base_class;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3139
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3140 /* Set CURRENT to null if no entry has to be made for the class
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3141 parsed. This is the case for certain command line flag
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3142 settings. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3143 if ((tag != CLASS && !f_structs) || (nested && !f_nested_classes))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3144 current = NULL;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44819
diff changeset
3145 else
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3146 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3147 current = add_sym (yytext, containing);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3148 current->pos = BUFFER_POS ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3149 current->regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3150 current->filename = filename;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3151 current->flags = flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3152 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3153
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3154 /* If at ':', base class list follows. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3155 if (LOOKING_AT (':'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3156 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3157 int done = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3158 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3159
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3160 while (!done)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3161 {
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
3162 switch (LA1)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3163 {
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 44819
diff changeset
3164 case VIRTUAL: case PUBLIC: case PROTECTED: case PRIVATE:
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3165 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3166 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3167
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3168 case IDENT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3169 base_class = parse_classname ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3170 if (base_class && current && base_class != current)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3171 add_link (base_class, current);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3172 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3173
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3174 /* The `,' between base classes or the end of the base
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3175 class list. Add the previously found base class.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3176 It's done this way to skip over sequences of
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3177 `A::B::C' until we reach the end.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3178
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3179 FIXME: it is now possible to handle `class X : public B::X'
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3180 because we have enough information. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3181 case ',':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3182 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3183 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3184
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3185 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3186 /* A syntax error, possibly due to preprocessor constructs
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3187 like
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3188
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3189 #ifdef SOMETHING
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3190 class A : public B
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3191 #else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3192 class A : private B.
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3193
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3194 MATCH until we see something like `;' or `{'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3195 while (!LOOKING_AT3 (';', YYEOF, '{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3196 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3197 done = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3198
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3199 case '{':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3200 done = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3201 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3202 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3203 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3204 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3205
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3206 /* Parse the class body if there is one. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3207 if (LOOKING_AT ('{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3208 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3209 if (tag != CLASS && !f_structs)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3210 skip_matching ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3211 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3212 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3213 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3214 class_body (current, tag);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3215
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3216 if (LOOKING_AT ('}'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3217 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3218 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3219 if (LOOKING_AT (';') && !nested)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3220 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3221 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3222 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3223 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3224 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3225
44220
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3226 /* Add to class *CLS information for the declaration of variable or
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3227 type *ID. If *CLS is null, this means a global declaration. SC is
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3228 the storage class of *ID. FLAGS is a bit set giving additional
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3229 information about the member (see the F_* defines). */
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3230
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3231 void
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3232 add_declarator (cls, id, flags, sc)
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3233 struct sym **cls;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3234 char **id;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3235 int flags, sc;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3236 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3237 if (LOOKING_AT2 (';', ','))
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3238 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3239 /* The end of a member variable or of an access declaration
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3240 `X::f'. To distinguish between them we have to know whether
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3241 type information has been seen. */
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3242 if (*id)
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3243 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3244 char *regexp = matching_regexp ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3245 int pos = BUFFER_POS ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3246
44719
dfc7601deedf (add_declarator): Test *CLS instead of CLS.
Gerd Moellmann <gerd@gnu.org>
parents: 44254
diff changeset
3247 if (*cls)
44254
2bc6f0ac1394 (add_declarator): Fix the first call to add_member_defn.
Eli Zaretskii <eliz@gnu.org>
parents: 44220
diff changeset
3248 add_member_defn (*cls, *id, regexp, pos, 0, 1, SC_UNKNOWN, flags);
44220
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3249 else
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3250 add_global_defn (*id, regexp, pos, 0, 1, sc, flags);
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3251 }
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3252
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3253 MATCH ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3254 print_info ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3255 }
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3256 else if (LOOKING_AT ('{'))
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3257 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3258 if (sc == SC_TYPE && *id)
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3259 {
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3260 /* A named enumeration. */
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3261 char *regexp = matching_regexp ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3262 int pos = BUFFER_POS ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3263 add_global_defn (*id, regexp, pos, 0, 1, sc, flags);
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3264 }
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3265
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3266 skip_matching ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3267 print_info ();
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3268 }
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3269
95480
1c16540a2329 * lib-src/ebrowse.c (xfree): Remove definition; s/xfree/free/
Jim Meyering <jim@meyering.net>
parents: 95479
diff changeset
3270 free (*id);
44220
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3271 *id = NULL;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3272 *cls = NULL;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3273 }
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3274
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3275 /* Parse a declaration. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3276
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3277 void
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
3278 declaration (flags)
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3279 int flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3280 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3281 char *id = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3282 struct sym *cls = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3283 char *regexp = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3284 int pos = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3285 unsigned hash = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3286 int is_constructor;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3287 int sc = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3288
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3289 while (!LOOKING_AT3 (';', '{', YYEOF))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3290 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3291 switch (LA1)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3292 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3293 default:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3294 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3295 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3296
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3297 case '[':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3298 skip_matching ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3299 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3300
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3301 case ENUM:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3302 case TYPEDEF:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3303 sc = SC_TYPE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3304 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3305 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3306
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3307 case STATIC:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3308 sc = SC_STATIC;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3309 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3310 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3311
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3312 case INT: case CHAR: case LONG: case UNSIGNED:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3313 case SIGNED: case CONST: case DOUBLE: case VOID:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3314 case SHORT: case VOLATILE: case BOOL: case WCHAR:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3315 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3316 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3317
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3318 case CLASS: case STRUCT: case UNION:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3319 /* This is for the case `STARTWRAP class X : ...' or
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3320 `declare (X, Y)\n class A : ...'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3321 if (id)
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3322 {
95480
1c16540a2329 * lib-src/ebrowse.c (xfree): Remove definition; s/xfree/free/
Jim Meyering <jim@meyering.net>
parents: 95479
diff changeset
3323 free (id);
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3324 return;
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3325 }
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3326
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3327 case '=':
44220
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3328 /* Assumed to be the start of an initialization in this
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3329 context. */
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3330 skip_initializer ();
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3331 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3332
44220
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3333 case ',':
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3334 add_declarator (&cls, &id, flags, sc);
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3335 break;
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3336
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3337 case OPERATOR:
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3338 {
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3339 char *s = operator_name (&sc);
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3340 id = (char *) xrealloc (id, strlen (s) + 1);
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3341 strcpy (id, s);
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3342 }
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3343 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3344
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3345 case T_INLINE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3346 SET_FLAG (flags, F_INLINE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3347 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3348 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3349
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3350 case '~':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3351 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3352 if (LOOKING_AT (IDENT))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3353 {
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3354 id = (char *) xrealloc (id, strlen (yytext) + 2);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3355 *id = '~';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3356 strcpy (id + 1, yytext);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3357 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3358 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3359 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3360
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3361 case IDENT:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3362 cls = parse_qualified_ident_or_type (&id);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3363 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3364
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3365 case '(':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3366 /* Most probably the beginning of a parameter list. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3367 if (cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3368 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3369 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3370
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3371 if (id && cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3372 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3373 if (!(is_constructor = streq (id, cls->name)))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3374 regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3375 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3376 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3377 is_constructor = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3378
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3379 pos = BUFFER_POS ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3380 hash = parm_list (&flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3381
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3382 if (is_constructor)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3383 regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3384
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3385 if (id && cls)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3386 add_member_defn (cls, id, regexp, pos, hash, 0,
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3387 SC_UNKNOWN, flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3388 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3389 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3390 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3391 /* This may be a C functions, but also a macro
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3392 call of the form `declare (A, B)' --- such macros
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3393 can be found in some class libraries. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3394 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3395
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3396 if (id)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3397 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3398 regexp = matching_regexp ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3399 pos = BUFFER_POS ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3400 hash = parm_list (&flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3401 add_global_decl (id, regexp, pos, hash, 0, sc, flags);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3402 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3403
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3404 /* This is for the case that the function really is
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3405 a macro with no `;' following it. If a CLASS directly
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3406 follows, we would miss it otherwise. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3407 if (LOOKING_AT3 (CLASS, STRUCT, UNION))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3408 return;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3409 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3410
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3411 while (!LOOKING_AT3 (';', '{', YYEOF))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3412 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3413
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3414 if (!cls && id && LOOKING_AT ('{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3415 add_global_defn (id, regexp, pos, hash, 0, sc, flags);
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3416
95480
1c16540a2329 * lib-src/ebrowse.c (xfree): Remove definition; s/xfree/free/
Jim Meyering <jim@meyering.net>
parents: 95479
diff changeset
3417 free (id);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3418 id = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3419 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3420 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3421 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3422
44220
69735f5e2a07 (add_declarator, skip_initializer): New functions.
Gerd Moellmann <gerd@gnu.org>
parents: 42259
diff changeset
3423 add_declarator (&cls, &id, flags, sc);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3424 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3425
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3426
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3427 /* Parse a list of top-level declarations/definitions. START_FLAGS
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3428 says in which context we are parsing. If it is F_EXTERNC, we are
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3429 parsing in an `extern "C"' block. Value is 1 if EOF is reached, 0
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3430 otherwise. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3431
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3432 int
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3433 globals (start_flags)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3434 int start_flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3435 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3436 int anonymous;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3437 int class_tk;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3438 int flags = start_flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3439
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3440 for (;;)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3441 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3442 char *prev_in = in;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3443
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3444 switch (LA1)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3445 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3446 case NAMESPACE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3447 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3448 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3449
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3450 if (LOOKING_AT (IDENT))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3451 {
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3452 char *namespace_name = xstrdup (yytext);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3453 MATCH ();
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3454
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3455 if (LOOKING_AT ('='))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3456 {
39514
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3457 struct link *qna = match_qualified_namespace_alias ();
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3458 if (qna)
542ef74db0d2 (struct alias): Add two new struct members: NAMESP and
Gerd Moellmann <gerd@gnu.org>
parents: 39076
diff changeset
3459 register_namespace_alias (namespace_name, qna);
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3460
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3461 if (skip_to (';') == ';')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3462 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3463 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3464 else if (LOOKING_AT ('{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3465 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3466 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3467 enter_namespace (namespace_name);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3468 globals (0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3469 leave_namespace ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3470 MATCH_IF ('}');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3471 }
35459
a5db73d46825 (xfree): New function.
Gerd Moellmann <gerd@gnu.org>
parents: 34990
diff changeset
3472
95480
1c16540a2329 * lib-src/ebrowse.c (xfree): Remove definition; s/xfree/free/
Jim Meyering <jim@meyering.net>
parents: 95479
diff changeset
3473 free (namespace_name);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3474 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3475 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3476 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3477
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3478 case EXTERN:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3479 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3480 if (LOOKING_AT (CSTRING) && *string_start == 'C'
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3481 && *(string_start + 1) == '"')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3482 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3483 /* This is `extern "C"'. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3484 MATCH ();
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3485
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3486 if (LOOKING_AT ('{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3487 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3488 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3489 globals (F_EXTERNC);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3490 MATCH_IF ('}');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3491 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3492 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3493 SET_FLAG (flags, F_EXTERNC);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3494 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3495 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3496
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3497 case TEMPLATE:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3498 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3499 SKIP_MATCHING_IF ('<');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3500 SET_FLAG (flags, F_TEMPLATE);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3501 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3502
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3503 case CLASS: case STRUCT: case UNION:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3504 class_tk = LA1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3505 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3506 anonymous = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3507
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3508 /* More than one ident here to allow for MS-DOS and OS/2
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3509 specialties like `far', `_Export' etc. Some C++ libs
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3510 have constructs like `_OS_DLLIMPORT(_OS_CLIENT)' in front
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3511 of the class name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3512 while (!LOOKING_AT4 (YYEOF, ';', ':', '{'))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3513 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3514 if (LOOKING_AT (IDENT))
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3515 anonymous = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3516 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3517 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3518
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3519 /* Don't add anonymous unions. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3520 if (LOOKING_AT2 (':', '{') && !anonymous)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3521 class_definition (NULL, class_tk, flags, 0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3522 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3523 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3524 if (skip_to (';') == ';')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3525 MATCH ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3526 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3527
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3528 flags = start_flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3529 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3530
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3531 case YYEOF:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3532 return 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3533
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3534 case '}':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3535 return 0;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3536
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3537 default:
28645
0813367c7810 (xmalloc, xrealloc): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents: 28523
diff changeset
3538 declaration (flags);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3539 flags = start_flags;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3540 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3541 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3542
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3543 if (prev_in == in)
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
3544 yyerror ("parse error", NULL);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3545 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3546 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3547
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3548
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3549 /* Parse the current input file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3550
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3551 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3552 yyparse ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3553 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3554 while (globals (0) == 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3555 MATCH_IF ('}');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3556 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3557
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3558
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3559
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3560 /***********************************************************************
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3561 Main Program
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3562 ***********************************************************************/
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3563
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3564 /* Add the list of paths PATH_LIST to the current search path for
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3565 input files. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3566
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3567 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3568 add_search_path (path_list)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3569 char *path_list;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3570 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3571 while (*path_list)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3572 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3573 char *start = path_list;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3574 struct search_path *p;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3575
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3576 while (*path_list && *path_list != PATH_LIST_SEPARATOR)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3577 ++path_list;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3578
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3579 p = (struct search_path *) xmalloc (sizeof *p);
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3580 p->path = (char *) xmalloc (path_list - start + 1);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3581 memcpy (p->path, start, path_list - start);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3582 p->path[path_list - start] = '\0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3583 p->next = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3584
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3585 if (search_path_tail)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3586 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3587 search_path_tail->next = p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3588 search_path_tail = p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3589 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3590 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3591 search_path = search_path_tail = p;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3592
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3593 while (*path_list == PATH_LIST_SEPARATOR)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3594 ++path_list;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3595 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3596 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3597
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3598
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3599 /* Open FILE and return a file handle for it, or -1 if FILE cannot be
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3600 opened. Try to find FILE in search_path first, then try the
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3601 unchanged file name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3602
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3603 FILE *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3604 open_file (file)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3605 char *file;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3606 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3607 FILE *fp = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3608 static char *buffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3609 static int buffer_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3610 struct search_path *path;
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
3611 int flen = strlen (file) + 1; /* +1 for the slash */
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3612
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3613 filename = xstrdup (file);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3614
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3615 for (path = search_path; path && fp == NULL; path = path->next)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3616 {
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
3617 int len = strlen (path->path) + flen;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3618
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3619 if (len + 1 >= buffer_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3620 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3621 buffer_size = max (len + 1, 2 * buffer_size);
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3622 buffer = (char *) xrealloc (buffer, buffer_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3623 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3624
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3625 strcpy (buffer, path->path);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3626 strcat (buffer, "/");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3627 strcat (buffer, file);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3628 fp = fopen (buffer, "r");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3629 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3630
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3631 /* Try the original file name. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3632 if (fp == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3633 fp = fopen (file, "r");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3634
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3635 if (fp == NULL)
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
3636 yyerror ("cannot open", NULL);
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3637
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3638 return fp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3639 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3640
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3641
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3642 /* Display usage information and exit program. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3643
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3644 #define USAGE "\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3645 Usage: ebrowse [options] {files}\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3646 \n\
38429
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3647 -a, --append append output to existing file\n\
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3648 -f, --files=FILES read input file names from FILE\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3649 -I, --search-path=LIST set search path for input files\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3650 -m, --min-regexp-length=N set minimum regexp length to N\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3651 -M, --max-regexp-length=N set maximum regexp length to N\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3652 -n, --no-nested-classes exclude nested classes\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3653 -o, --output-file=FILE set output file name to FILE\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3654 -p, --position-info print info about position in file\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3655 -s, --no-structs-or-unions don't record structs or unions\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3656 -v, --verbose be verbose\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3657 -V, --very-verbose be very verbose\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3658 -x, --no-regexps don't record regular expressions\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3659 --help display this help\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3660 --version display version info\n\
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3661 "
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3662
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3663 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3664 usage (error)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3665 int error;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3666 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3667 puts (USAGE);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
3668 exit (error ? EXIT_FAILURE : EXIT_SUCCESS);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3669 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3670
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3671
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3672 /* Display version and copyright info. The VERSION macro is set
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3673 from the Makefile and contains the Emacs version. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3674
34258
6894bd47e0e0 (VERSION): Provide default definition, like etags.c
Andrew Innes <andrewi@gnu.org>
parents: 33384
diff changeset
3675 #ifndef VERSION
6894bd47e0e0 (VERSION): Provide default definition, like etags.c
Andrew Innes <andrewi@gnu.org>
parents: 33384
diff changeset
3676 # define VERSION "21"
6894bd47e0e0 (VERSION): Provide default definition, like etags.c
Andrew Innes <andrewi@gnu.org>
parents: 33384
diff changeset
3677 #endif
6894bd47e0e0 (VERSION): Provide default definition, like etags.c
Andrew Innes <andrewi@gnu.org>
parents: 33384
diff changeset
3678
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3679 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3680 version ()
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3681 {
87550
8ae4fbed2ac6 (version) <emacs_copyright>: New variable. Just use current year for copyright.
Glenn Morris <rgm@gnu.org>
parents: 78257
diff changeset
3682 /* Makes it easier to update automatically. */
106790
f039ef236594 Set copyright year to 2010.
Glenn Morris <rgm@gnu.org>
parents: 101177
diff changeset
3683 char emacs_copyright[] = "Copyright (C) 2010 Free Software Foundation, Inc.";
87550
8ae4fbed2ac6 (version) <emacs_copyright>: New variable. Just use current year for copyright.
Glenn Morris <rgm@gnu.org>
parents: 78257
diff changeset
3684
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3685 printf ("ebrowse %s\n", VERSION);
87550
8ae4fbed2ac6 (version) <emacs_copyright>: New variable. Just use current year for copyright.
Glenn Morris <rgm@gnu.org>
parents: 78257
diff changeset
3686 puts (emacs_copyright);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3687 puts ("This program is distributed under the same terms as Emacs.");
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
3688 exit (EXIT_SUCCESS);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3689 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3690
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3691
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3692 /* Parse one input file FILE, adding classes and members to the symbol
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3693 table. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3694
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3695 void
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3696 process_file (file)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3697 char *file;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3698 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3699 FILE *fp;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3700
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3701 fp = open_file (file);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3702 if (fp)
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3703 {
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3704 int nread, nbytes;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3705
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3706 /* Give a progress indication if needed. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3707 if (f_very_verbose)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3708 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3709 puts (filename);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3710 fflush (stdout);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3711 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3712 else if (f_verbose)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3713 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3714 putchar ('.');
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3715 fflush (stdout);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3716 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3717
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3718 /* Read file to inbuffer. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3719 for (nread = 0;;)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3720 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3721 if (nread + READ_CHUNK_SIZE >= inbuffer_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3722 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3723 inbuffer_size = nread + READ_CHUNK_SIZE + 1;
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3724 inbuffer = (char *) xrealloc (inbuffer, inbuffer_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3725 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3726
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3727 nbytes = fread (inbuffer + nread, 1, READ_CHUNK_SIZE, fp);
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
3728 if (nbytes <= 0)
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
3729 break;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3730 nread += nbytes;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3731 }
28773
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
3732 if (nread < 0)
9afdf8a67091 (PATH_LIST_SEPARATOR) [__MSDOS__ || WINDOWSNT]: Define
Eli Zaretskii <eliz@gnu.org>
parents: 28645
diff changeset
3733 nread = 0;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3734 inbuffer[nread] = '\0';
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3735
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3736 /* Reinitialize scanner and parser for the new input file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3737 re_init_scanner ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3738 re_init_parser ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3739
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3740 /* Parse it and close the file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3741 yyparse ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3742 fclose (fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3743 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3744 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3745
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3746
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3747 /* Read a line from stream FP and return a pointer to a static buffer
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3748 containing its contents without the terminating newline. Value
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3749 is null when EOF is reached. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3750
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3751 char *
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3752 read_line (fp)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3753 FILE *fp;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3754 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3755 static char *buffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3756 static int buffer_size;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3757 int i = 0, c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3758
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3759 while ((c = getc (fp)) != EOF && c != '\n')
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3760 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3761 if (i >= buffer_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3762 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3763 buffer_size = max (100, buffer_size * 2);
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3764 buffer = (char *) xrealloc (buffer, buffer_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3765 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3766
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3767 buffer[i++] = c;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3768 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3769
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3770 if (c == EOF && i == 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3771 return NULL;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3772
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3773 if (i == buffer_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3774 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3775 buffer_size = max (100, buffer_size * 2);
30232
ad501fc526c2 (xrealloc, xmalloc): Renamed from yrealloc and
Gerd Moellmann <gerd@gnu.org>
parents: 30138
diff changeset
3776 buffer = (char *) xrealloc (buffer, buffer_size);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3777 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3778
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3779 buffer[i] = '\0';
36478
742df7c33f75 (parse_qualified_param_ident_or_type): Return a
Gerd Moellmann <gerd@gnu.org>
parents: 35591
diff changeset
3780 if (i > 0 && buffer[i - 1] == '\r')
742df7c33f75 (parse_qualified_param_ident_or_type): Return a
Gerd Moellmann <gerd@gnu.org>
parents: 35591
diff changeset
3781 buffer[i - 1] = '\0';
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3782 return buffer;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3783 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3784
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3785
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3786 /* Main entry point. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3787
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3788 int
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3789 main (argc, argv)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3790 int argc;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3791 char **argv;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3792 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3793 int i;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3794 int any_inputfiles = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3795 static char *out_filename = DEFAULT_OUTFILE;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3796 static char **input_filenames = NULL;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3797 static int input_filenames_size = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3798 static int n_input_files;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3799
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3800 filename = "command line";
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3801 yyout = stdout;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3802
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3803 while ((i = getopt_long (argc, argv, "af:I:m:M:no:p:svVx",
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3804 options, NULL)) != EOF)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3805 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3806 switch (i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3807 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3808 /* Experimental. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3809 case 'p':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3810 info_position = atoi (optarg);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3811 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3812
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3813 case 'n':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3814 f_nested_classes = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3815 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3816
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3817 case 'x':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3818 f_regexps = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3819 break;
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3820
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3821 /* Add the name of a file containing more input files. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3822 case 'f':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3823 if (n_input_files == input_filenames_size)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3824 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3825 input_filenames_size = max (10, 2 * input_filenames_size);
34954
ff4771c51345 (enter_namespace, main): Cast variables to shut up
Eli Zaretskii <eliz@gnu.org>
parents: 34610
diff changeset
3826 input_filenames = (char **) xrealloc ((void *)input_filenames,
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3827 input_filenames_size);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3828 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3829 input_filenames[n_input_files++] = xstrdup (optarg);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3830 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3831
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3832 /* Append new output to output file instead of truncating it. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3833 case 'a':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3834 f_append = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3835 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3836
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3837 /* Include structs in the output */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3838 case 's':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3839 f_structs = 0;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3840 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3841
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3842 /* Be verbose (give a progress indication). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3843 case 'v':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3844 f_verbose = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3845 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3846
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3847 /* Be very verbose (print file names as they are processed). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3848 case 'V':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3849 f_verbose = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3850 f_very_verbose = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3851 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3852
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3853 /* Change the name of the output file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3854 case 'o':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3855 out_filename = optarg;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3856 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3857
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3858 /* Set minimum length for regular expression strings
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3859 when recorded in the output file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3860 case 'm':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3861 min_regexp = atoi (optarg);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3862 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3863
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3864 /* Set maximum length for regular expression strings
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3865 when recorded in the output file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3866 case 'M':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3867 max_regexp = atoi (optarg);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3868 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3869
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3870 /* Add to search path. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3871 case 'I':
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3872 add_search_path (optarg);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3873 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3874
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3875 /* Display help */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3876 case -2:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3877 usage (0);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3878 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3879
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3880 case -3:
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3881 version ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3882 break;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3883 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3884 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3885
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3886 /* Call init_scanner after command line flags have been processed to be
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3887 able to add keywords depending on command line (not yet
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3888 implemented). */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3889 init_scanner ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3890 init_sym ();
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3891
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3892 /* Open output file */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3893 if (*out_filename)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3894 {
38429
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3895 if (f_append)
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3896 {
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3897 /* Check that the file to append to exists, and is not
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3898 empty. More specifically, it should be a valid file
38769
99864bb6de1e Fix a typo in a comment.
Eli Zaretskii <eliz@gnu.org>
parents: 38429
diff changeset
3899 produced by a previous run of ebrowse, but that's too
38429
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3900 difficult to check. */
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3901 FILE *fp;
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3902 int rc;
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3903
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3904 fp = fopen (out_filename, "r");
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3905 if (fp == NULL)
71199
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3906 {
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3907 yyerror ("file `%s' must exist for --append", out_filename);
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3908 exit (EXIT_FAILURE);
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3909 }
38429
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3910
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3911 rc = fseek (fp, 0, SEEK_END);
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3912 if (rc == -1)
71199
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3913 {
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3914 yyerror ("error seeking in file `%s'", out_filename);
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3915 exit (EXIT_FAILURE);
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3916 }
38429
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3917
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3918 rc = ftell (fp);
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3919 if (rc == -1)
71199
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3920 {
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3921 yyerror ("error getting size of file `%s'", out_filename);
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3922 exit (EXIT_FAILURE);
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3923 }
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3924
38429
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3925 else if (rc == 0)
71199
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3926 {
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3927 yyerror ("file `%s' is empty", out_filename);
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3928 /* It may be ok to use an empty file for appending.
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3929 exit (EXIT_FAILURE); */
c54897eb4a35 (main): Exit with EXIT_FAILURE if BROWSE file doesn't exist, is not seekable, not is failed in ftall.
Masatake YAMATO <jet@gyve.org>
parents: 68647
diff changeset
3930 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3931
38429
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3932 fclose (fp);
3960fdb54cfd (main): Check that the output file exists and
Gerd Moellmann <gerd@gnu.org>
parents: 37615
diff changeset
3933 }
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3934
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3935 yyout = fopen (out_filename, f_append ? "a" : "w");
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3936 if (yyout == NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3937 {
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
3938 yyerror ("cannot open output file `%s'", out_filename);
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
3939 exit (EXIT_FAILURE);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3940 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3941 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3942
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3943 /* Process input files specified on the command line. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3944 while (optind < argc)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3945 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3946 process_file (argv[optind++]);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3947 any_inputfiles = 1;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3948 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3949
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3950 /* Process files given on stdin if no files specified. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3951 if (!any_inputfiles && n_input_files == 0)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3952 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3953 char *file;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3954 while ((file = read_line (stdin)) != NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3955 process_file (file);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3956 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3957 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3958 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3959 /* Process files from `--files=FILE'. Every line in FILE names
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3960 one input file to process. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3961 for (i = 0; i < n_input_files; ++i)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3962 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3963 FILE *fp = fopen (input_filenames[i], "r");
42174
e3b97ef49aee Include stdlib.h and string.h conditionally.
Pavel Janík <Pavel@Janik.cz>
parents: 41112
diff changeset
3964
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3965 if (fp == NULL)
34990
49cf406a0cab (yyerror): Changed to take two arguments. Prototype
Gerd Moellmann <gerd@gnu.org>
parents: 34954
diff changeset
3966 yyerror ("cannot open input file `%s'", input_filenames[i]);
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3967 else
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3968 {
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3969 char *file;
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3970 while ((file = read_line (fp)) != NULL)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3971 process_file (file);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3972 fclose (fp);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3973 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3974 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3975 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3976
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3977 /* Write output file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3978 dump_roots (yyout);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3979
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3980 /* Close output file. */
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3981 if (yyout != stdout)
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3982 fclose (yyout);
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3983
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
3984 return EXIT_SUCCESS;
28523
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3985 }
47e1a131eef3 *** empty log message ***
Gerd Moellmann <gerd@gnu.org>
parents:
diff changeset
3986
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
3987 /* arch-tag: fc03b4bc-91a9-4c3d-b3b9-12a77fa86dd8
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
3988 (do not change this comment) */
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
3989
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
3990 /* ebrowse.c ends here */