summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addon/doxmlparser/Doxyfile309
-rw-r--r--addon/doxmlparser/Doxyfile.impl307
-rw-r--r--addon/doxmlparser/include/doxmlintf.h2
-rw-r--r--addon/doxmlparser/src/basehandler.h10
-rw-r--r--addon/doxmlparser/src/compoundhandler.cpp2
-rw-r--r--addon/doxmlparser/src/compoundhandler.h40
-rw-r--r--addon/doxmlparser/src/linkedtexthandler.cpp2
-rw-r--r--addon/doxmlparser/test/main.cpp2
-rw-r--r--addon/doxyapp/doxyapp.cpp6
-rw-r--r--addon/doxyparse/doxyparse.cpp66
-rw-r--r--addon/doxywizard/wizard.h114
-rwxr-xr-xcmake/FindJavacc.cmake10
-rw-r--r--doc/changelog.doc300
-rw-r--r--doc/commands.doc8
-rw-r--r--doc/doxygen.128
-rw-r--r--doc/extsearch.doc9
-rw-r--r--doc/htmlcmds.doc2
-rw-r--r--doc/translator.py4
-rw-r--r--examples/templ.cpp4
-rw-r--r--libmscgen/gd.h4
-rw-r--r--libmscgen/mscgen_adraw.h2
-rw-r--r--libmscgen/mscgen_adraw_int.h2
-rw-r--r--libmscgen/mscgen_api.c8
-rw-r--r--libmscgen/mscgen_gd_out.c2
-rw-r--r--libmscgen/mscgen_lexer.l2
-rw-r--r--libmscgen/mscgen_msc.h4
-rw-r--r--libmscgen/mscgen_usage.c2
-rw-r--r--libmscgen/mscgen_utf8.c2
-rw-r--r--qtools/qcstring.h2
-rw-r--r--qtools/qdict.doc2
-rw-r--r--qtools/qglobal.h2
-rw-r--r--qtools/qlist.doc2
-rw-r--r--qtools/qstring.cpp2
-rw-r--r--qtools/qtextcodec.cpp2
-rw-r--r--qtools/qtl.doc2
-rw-r--r--qtools/qvaluelist.doc6
-rw-r--r--qtools/qxml.cpp14
-rw-r--r--src/arguments.cpp48
-rw-r--r--src/arguments.h83
-rw-r--r--src/cite.cpp10
-rw-r--r--src/clangparser.cpp2
-rw-r--r--src/classdef.cpp524
-rw-r--r--src/classdef.h18
-rw-r--r--src/classlist.cpp14
-rw-r--r--src/code.h35
-rw-r--r--src/code.l5178
-rw-r--r--src/commentcnv.l977
-rw-r--r--src/commentscan.h4
-rw-r--r--src/commentscan.l50
-rw-r--r--src/condparser.cpp2
-rw-r--r--src/condparser.h2
-rw-r--r--src/config.xml2
-rw-r--r--src/configimpl.l16
-rw-r--r--src/constexp.h23
-rw-r--r--src/constexp.l57
-rw-r--r--src/constexp.y21
-rw-r--r--src/constexp_p.h44
-rw-r--r--src/context.cpp176
-rw-r--r--src/context.h8
-rw-r--r--src/declinfo.l15
-rw-r--r--src/defargs.h2
-rw-r--r--src/defargs.l85
-rw-r--r--src/defgen.cpp97
-rw-r--r--src/definition.cpp189
-rw-r--r--src/definition.h12
-rw-r--r--src/definitionimpl.h15
-rw-r--r--src/dia.cpp18
-rw-r--r--src/diagram.cpp12
-rw-r--r--src/dirdef.cpp2
-rw-r--r--src/docbookgen.cpp2
-rw-r--r--src/docbookvisitor.cpp48
-rw-r--r--src/docgroup.cpp21
-rw-r--r--src/docgroup.h8
-rw-r--r--src/docparser.cpp119
-rw-r--r--src/docparser.h122
-rw-r--r--src/doctokenizer.h14
-rw-r--r--src/doctokenizer.l11
-rw-r--r--src/dot.cpp18
-rw-r--r--src/dotcallgraph.cpp9
-rw-r--r--src/dotcallgraph.h1
-rw-r--r--src/dotclassgraph.cpp7
-rw-r--r--src/dotclassgraph.h1
-rw-r--r--src/dotdirdeps.cpp4
-rw-r--r--src/dotdirdeps.h4
-rw-r--r--src/dotgraph.cpp2
-rw-r--r--src/dotgraph.h18
-rw-r--r--src/dotgroupcollaboration.cpp10
-rw-r--r--src/dotincldepgraph.cpp8
-rw-r--r--src/dotincldepgraph.h1
-rw-r--r--src/dotrunner.cpp14
-rw-r--r--src/doxygen.cpp978
-rw-r--r--src/doxygen.h2
-rw-r--r--src/entry.cpp155
-rw-r--r--src/entry.h45
-rw-r--r--src/filedef.cpp28
-rw-r--r--src/fileparser.cpp2
-rw-r--r--src/fileparser.h12
-rw-r--r--src/formula.cpp36
-rw-r--r--src/fortrancode.h46
-rw-r--r--src/fortrancode.l38
-rw-r--r--src/fortranscanner.h34
-rw-r--r--src/fortranscanner.l197
-rw-r--r--src/groupdef.cpp67
-rw-r--r--src/htags.cpp6
-rw-r--r--src/htmldocvisitor.cpp24
-rw-r--r--src/htmlgen.cpp1
-rw-r--r--src/htmlhelp.cpp2
-rw-r--r--src/index.cpp6
-rwxr-xr-xsrc/languages.py2
-rw-r--r--src/latexdocvisitor.cpp24
-rw-r--r--src/latexgen.cpp3
-rw-r--r--src/layout.cpp1
-rw-r--r--src/mandocvisitor.cpp24
-rw-r--r--src/mangen.h2
-rw-r--r--src/markdown.cpp55
-rw-r--r--src/markdown.h26
-rw-r--r--src/memberdef.cpp671
-rw-r--r--src/memberdef.h32
-rw-r--r--src/membergroup.cpp36
-rw-r--r--src/membergroup.h31
-rw-r--r--src/memberlist.h1
-rw-r--r--src/message.cpp2
-rw-r--r--src/msc.cpp8
-rw-r--r--src/namespacedef.cpp30
-rw-r--r--src/parserintf.h119
-rw-r--r--src/perlmodgen.cpp80
-rw-r--r--src/plantuml.cpp16
-rw-r--r--src/portable.cpp247
-rw-r--r--src/portable.h55
-rw-r--r--src/pre.h16
-rw-r--r--src/pre.l3380
-rw-r--r--src/pycode.h29
-rw-r--r--src/pycode.l34
-rw-r--r--src/pyscanner.h23
-rw-r--r--src/pyscanner.l103
-rw-r--r--src/reflist.cpp2
-rw-r--r--src/rtfdocvisitor.cpp24
-rw-r--r--src/rtfgen.cpp3
-rw-r--r--src/rtfgen.h2
-rw-r--r--src/scanner.h29
-rw-r--r--src/scanner.l6991
-rw-r--r--src/searchindex.cpp4
-rw-r--r--src/searchindex.h2
-rw-r--r--src/section.h27
-rw-r--r--src/sortdict.h4
-rw-r--r--src/sqlcode.h31
-rw-r--r--src/sqlcode.l36
-rw-r--r--src/sqlite3gen.cpp143
-rw-r--r--src/sqlscanner.h65
-rw-r--r--src/tagreader.cpp151
-rw-r--r--src/tagreader.h2
-rw-r--r--src/tclscanner.h14
-rw-r--r--src/tclscanner.l131
-rw-r--r--src/template.cpp122
-rw-r--r--src/tooltip.cpp5
-rw-r--r--src/types.h1
-rw-r--r--src/util.cpp728
-rw-r--r--src/util.h29
-rw-r--r--src/vhdlcode.h31
-rw-r--r--src/vhdlcode.l45
-rw-r--r--src/vhdldocgen.cpp248
-rw-r--r--src/vhdldocgen.h31
-rw-r--r--src/vhdljjparser.cpp56
-rw-r--r--src/vhdljjparser.h37
-rw-r--r--src/xmlcode.h31
-rw-r--r--src/xmlcode.l32
-rw-r--r--src/xmldocvisitor.cpp24
-rw-r--r--src/xmlgen.cpp132
-rw-r--r--src/xmlscanner.h65
-rw-r--r--templates/html/doxygen.css5
-rw-r--r--templates/html/htmllayout.tpl2
-rw-r--r--templates/html/htmltypeconstraints.tpl2
-rw-r--r--testing/012/indexpage.xml2
-rw-r--r--testing/012_cite.dox2
-rw-r--r--testing/071/namespace_a_namespace_1_1_0d0.xml8
-rw-r--r--testing/078/078__xml__namespace__members__in__file__scope_8h.xml4
-rwxr-xr-xtesting/testsqlite3.py2
-rw-r--r--vhdlparser/CMakeLists.txt10
-rw-r--r--vhdlparser/CharStream.cc22
-rw-r--r--vhdlparser/CharStream.h246
-rw-r--r--vhdlparser/ErrorHandler.h25
-rw-r--r--vhdlparser/JavaCC.h47
-rw-r--r--vhdlparser/ParseException.cc54
-rw-r--r--vhdlparser/ParseException.h24
-rw-r--r--vhdlparser/Token.cc37
-rw-r--r--vhdlparser/Token.h21
-rw-r--r--vhdlparser/TokenManager.h21
-rw-r--r--vhdlparser/TokenMgrError.cc29
-rw-r--r--vhdlparser/TokenMgrError.h33
-rw-r--r--vhdlparser/VhdlParser.cc5635
-rw-r--r--vhdlparser/VhdlParser.h1310
-rw-r--r--vhdlparser/VhdlParserConstants.h386
-rw-r--r--vhdlparser/VhdlParserIF.cpp2
-rw-r--r--vhdlparser/VhdlParserTokenManager.cc526
-rw-r--r--vhdlparser/VhdlParserTokenManager.h92
-rw-r--r--vhdlparser/vhdlparser.jj7
196 files changed, 15635 insertions, 18396 deletions
diff --git a/addon/doxmlparser/Doxyfile b/addon/doxmlparser/Doxyfile
index e95ee76..2cef6cf 100644
--- a/addon/doxmlparser/Doxyfile
+++ b/addon/doxmlparser/Doxyfile
@@ -1,176 +1,335 @@
-# Doxyfile 1.2.12-20011209
+# Doxyfile 1.8.17
#---------------------------------------------------------------------------
-# General configuration options
+# Project related configuration options
#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = doxmlparser
-PROJECT_NUMBER =
+PROJECT_NUMBER =
+PROJECT_BRIEF =
+PROJECT_LOGO =
OUTPUT_DIRECTORY = doc
+CREATE_SUBDIRS = NO
+ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
+OUTPUT_TEXT_DIRECTION = None
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = NO
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+JAVADOC_BANNER = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 8
+ALIASES =
+TCL_SUBST =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+OPTIMIZE_OUTPUT_SLICE = NO
+EXTENSION_MAPPING =
+MARKDOWN_SUPPORT = YES
+TOC_INCLUDE_HEADINGS = 5
+AUTOLINK_SUPPORT = YES
+BUILTIN_STL_SUPPORT = NO
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+GROUP_NESTED_COMPOUNDS = NO
+SUBGROUPING = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS = NO
+TYPEDEF_HIDES_STRUCT = NO
+LOOKUP_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
+EXTRACT_PRIV_VIRTUAL = NO
+EXTRACT_PACKAGE = NO
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = NO
-STRIP_FROM_PATH =
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
-STRIP_CODE_COMMENTS = YES
CASE_SENSE_NAMES = YES
-SHORT_NAMES = NO
HIDE_SCOPE_NAMES = NO
-VERBATIM_HEADERS = YES
+HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES = YES
-JAVADOC_AUTOBRIEF = NO
-INHERIT_DOCS = YES
+SHOW_GROUPED_MEMB_INC = NO
+FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
-DISTRIBUTE_GROUP_DOC = NO
-TAB_SIZE = 8
+SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
-ALIASES =
-ENABLED_SECTIONS =
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
-OPTIMIZE_OUTPUT_FOR_C = NO
SHOW_USED_FILES = YES
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
+CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
-WARN_FORMAT =
-WARN_LOGFILE =
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_AS_ERROR = NO
+WARN_FORMAT =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = include
+INPUT_ENCODING = UTF-8
FILE_PATTERNS = *.h
RECURSIVE = NO
-EXCLUDE =
-EXCLUDE_PATTERNS =
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS =
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
-HTML_OUTPUT =
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
-HTML_ALIGN_MEMBERS = YES
+HTML_OUTPUT =
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_EXTRA_STYLESHEET =
+HTML_EXTRA_FILES =
+HTML_COLORSTYLE_HUE = 220
+HTML_COLORSTYLE_SAT = 100
+HTML_COLORSTYLE_GAMMA = 80
+HTML_TIMESTAMP = NO
+HTML_DYNAMIC_MENUS = YES
+HTML_DYNAMIC_SECTIONS = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
+GENERATE_ECLIPSEHELP = NO
+ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
+ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
+EXT_LINKS_IN_WINDOW = NO
+FORMULA_FONTSIZE = 10
+FORMULA_TRANSPARENT = YES
+USE_MATHJAX = NO
+MATHJAX_FORMAT = HTML-CSS
+MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
+MATHJAX_EXTENSIONS =
+MATHJAX_CODEFILE =
+SEARCHENGINE = NO
+SERVER_BASED_SEARCH = NO
+EXTERNAL_SEARCH = NO
+SEARCHENGINE_URL =
+SEARCHDATA_FILE = searchdata.xml
+EXTERNAL_SEARCH_ID =
+EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
-LATEX_OUTPUT =
+LATEX_OUTPUT =
+LATEX_CMD_NAME =
+MAKEINDEX_CMD_NAME = makeindex
+LATEX_MAKEINDEX_CMD = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
+EXTRA_PACKAGES =
+LATEX_HEADER =
+LATEX_FOOTER =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
+LATEX_BIB_STYLE = plain
+LATEX_TIMESTAMP = NO
+LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
-RTF_OUTPUT =
+RTF_OUTPUT =
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
-MAN_OUTPUT =
-MAN_EXTENSION =
+MAN_OUTPUT =
+MAN_EXTENSION =
+MAN_SUBDIR =
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = YES
+XML_OUTPUT = xml
+XML_PROGRAMLISTING = YES
+XML_NS_MEMB_FILE_SCOPE = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK = NO
+DOCBOOK_OUTPUT = docbook
+DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
-EXPAND_AS_DEFINED =
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
+EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::addtions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES = ../../qtools_docs/qtools.tag=../../../../qtools_docs/html
-GENERATE_TAGFILE =
+GENERATE_TAGFILE =
ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
+DIA_PATH =
+HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
+DOT_NUM_THREADS = 0
+DOT_FONTNAME = Helvetica
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = YES
-HIDE_UNDOC_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
-DOT_PATH =
-DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1280
-MAX_DOT_GRAPH_HEIGHT = 1024
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+INTERACTIVE_SVG = NO
+DOT_PATH =
+DOTFILE_DIRS =
+MSCFILE_DIRS =
+DIAFILE_DIRS =
+PLANTUML_JAR_PATH =
+PLANTUML_CFG_FILE =
+PLANTUML_INCLUDE_PATH =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE = NO
-CGI_NAME =
-CGI_URL =
-DOC_URL =
-DOC_ABSPATH =
-BIN_ABSPATH =
-EXT_DOC_PATHS =
diff --git a/addon/doxmlparser/Doxyfile.impl b/addon/doxmlparser/Doxyfile.impl
index 88818ab..5bddcc4 100644
--- a/addon/doxmlparser/Doxyfile.impl
+++ b/addon/doxmlparser/Doxyfile.impl
@@ -1,178 +1,335 @@
-# Doxyfile 1.2.13.1
+# Doxyfile 1.8.17
#---------------------------------------------------------------------------
-# General configuration options
+# Project related configuration options
#---------------------------------------------------------------------------
+DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = doxmlparser
-PROJECT_NUMBER =
+PROJECT_NUMBER =
+PROJECT_BRIEF =
+PROJECT_LOGO =
OUTPUT_DIRECTORY = doc_impl
+CREATE_SUBDIRS = NO
+ALLOW_UNICODE_NAMES = NO
OUTPUT_LANGUAGE = English
+OUTPUT_TEXT_DIRECTION = None
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF = "The $name class" \
+ "The $name widget" \
+ "The $name file" \
+ is \
+ provides \
+ specifies \
+ contains \
+ represents \
+ a \
+ an \
+ the
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = NO
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+JAVADOC_BANNER = NO
+QT_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS = YES
+SEPARATE_MEMBER_PAGES = NO
+TAB_SIZE = 8
+ALIASES =
+TCL_SUBST =
+OPTIMIZE_OUTPUT_FOR_C = NO
+OPTIMIZE_OUTPUT_JAVA = NO
+OPTIMIZE_FOR_FORTRAN = NO
+OPTIMIZE_OUTPUT_VHDL = NO
+OPTIMIZE_OUTPUT_SLICE = NO
+EXTENSION_MAPPING =
+MARKDOWN_SUPPORT = YES
+TOC_INCLUDE_HEADINGS = 5
+AUTOLINK_SUPPORT = YES
+BUILTIN_STL_SUPPORT = NO
+CPP_CLI_SUPPORT = NO
+SIP_SUPPORT = NO
+IDL_PROPERTY_SUPPORT = YES
+DISTRIBUTE_GROUP_DOC = NO
+GROUP_NESTED_COMPOUNDS = NO
+SUBGROUPING = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS = NO
+TYPEDEF_HIDES_STRUCT = NO
+LOOKUP_CACHE_SIZE = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
+EXTRACT_PRIV_VIRTUAL = NO
+EXTRACT_PACKAGE = NO
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_METHODS = NO
+EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = NO
-STRIP_FROM_PATH =
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
-STRIP_CODE_COMMENTS = YES
CASE_SENSE_NAMES = YES
-SHORT_NAMES = NO
HIDE_SCOPE_NAMES = NO
-VERBATIM_HEADERS = YES
+HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES = YES
-JAVADOC_AUTOBRIEF = NO
-INHERIT_DOCS = YES
+SHOW_GROUPED_MEMB_INC = NO
+FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
-DISTRIBUTE_GROUP_DOC = NO
-TAB_SIZE = 8
+SORT_BRIEF_DOCS = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES = NO
+SORT_BY_SCOPE_NAME = NO
+STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
-ALIASES =
-ENABLED_SECTIONS =
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
-OPTIMIZE_OUTPUT_FOR_C = NO
SHOW_USED_FILES = YES
+SHOW_FILES = YES
+SHOW_NAMESPACES = YES
+FILE_VERSION_FILTER =
+LAYOUT_FILE =
+CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
-WARN_FORMAT =
-WARN_LOGFILE =
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_AS_ERROR = NO
+WARN_FORMAT =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = src
-FILE_PATTERNS =
+INPUT_ENCODING = UTF-8
+FILE_PATTERNS =
RECURSIVE = NO
-EXCLUDE =
+EXCLUDE =
EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS =
-EXAMPLE_PATH =
-EXAMPLE_PATTERNS =
+EXCLUDE_PATTERNS =
+EXCLUDE_SYMBOLS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
-IMAGE_PATH =
-INPUT_FILTER =
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS = YES
+USE_HTAGS = NO
+VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
-HTML_OUTPUT =
-HTML_HEADER =
-HTML_FOOTER =
-HTML_STYLESHEET =
-HTML_ALIGN_MEMBERS = YES
+HTML_OUTPUT =
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_EXTRA_STYLESHEET =
+HTML_EXTRA_FILES =
+HTML_COLORSTYLE_HUE = 220
+HTML_COLORSTYLE_SAT = 100
+HTML_COLORSTYLE_GAMMA = 80
+HTML_TIMESTAMP = NO
+HTML_DYNAMIC_MENUS = YES
+HTML_DYNAMIC_SECTIONS = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET = NO
+DOCSET_FEEDNAME = "Doxygen generated docs"
+DOCSET_BUNDLE_ID = org.doxygen.Project
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = NO
+CHM_FILE =
+HHC_LOCATION =
GENERATE_CHI = NO
+CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
+GENERATE_QHP = NO
+QCH_FILE =
+QHP_NAMESPACE = org.doxygen.Project
+QHP_VIRTUAL_FOLDER = doc
+QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
+QHG_LOCATION =
+GENERATE_ECLIPSEHELP = NO
+ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
+ENUM_VALUES_PER_LINE = 4
TREEVIEW_WIDTH = 250
+EXT_LINKS_IN_WINDOW = NO
+FORMULA_FONTSIZE = 10
+FORMULA_TRANSPARENT = YES
+USE_MATHJAX = NO
+MATHJAX_FORMAT = HTML-CSS
+MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
+MATHJAX_EXTENSIONS =
+MATHJAX_CODEFILE =
+SEARCHENGINE = NO
+SERVER_BASED_SEARCH = NO
+EXTERNAL_SEARCH = NO
+SEARCHENGINE_URL =
+SEARCHDATA_FILE = searchdata.xml
+EXTERNAL_SEARCH_ID =
+EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
-LATEX_OUTPUT =
+LATEX_OUTPUT =
+LATEX_CMD_NAME =
+MAKEINDEX_CMD_NAME = makeindex
+LATEX_MAKEINDEX_CMD = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
-EXTRA_PACKAGES =
-LATEX_HEADER =
+EXTRA_PACKAGES =
+LATEX_HEADER =
+LATEX_FOOTER =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+LATEX_SOURCE_CODE = NO
+LATEX_BIB_STYLE = plain
+LATEX_TIMESTAMP = NO
+LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
-RTF_OUTPUT =
+RTF_OUTPUT =
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE =
-RTF_EXTENSIONS_FILE =
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
-MAN_OUTPUT =
-MAN_EXTENSION =
+MAN_OUTPUT =
+MAN_EXTENSION =
+MAN_SUBDIR =
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = YES
+XML_OUTPUT = xml
+XML_PROGRAMLISTING = YES
+XML_NS_MEMB_FILE_SCOPE = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK = NO
+DOCBOOK_OUTPUT = docbook
+DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = YES
EXPAND_ONLY_PREDEF = YES
SEARCH_INCLUDES = YES
-INCLUDE_PATH =
-INCLUDE_FILE_PATTERNS =
-PREDEFINED =
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED =
EXPAND_AS_DEFINED = DEFINE_CLS_IMPL
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::addtions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES = ../../qtools_docs/qtools.tag=../../../../qtools_docs/html
-GENERATE_TAGFILE =
+GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
+EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
+# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
+DIA_PATH =
+HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
+DOT_NUM_THREADS = 0
+DOT_FONTNAME = Helvetica
+DOT_FONTSIZE = 10
+DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+UML_LIMIT_NUM_FIELDS = 10
TEMPLATE_RELATIONS = YES
-HIDE_UNDOC_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
-DOT_PATH =
-DOTFILE_DIRS =
-MAX_DOT_GRAPH_WIDTH = 1280
-MAX_DOT_GRAPH_HEIGHT = 1024
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+INTERACTIVE_SVG = NO
+DOT_PATH =
+DOTFILE_DIRS =
+MSCFILE_DIRS =
+DIAFILE_DIRS =
+PLANTUML_JAR_PATH =
+PLANTUML_CFG_FILE =
+PLANTUML_INCLUDE_PATH =
+DOT_GRAPH_MAX_NODES = 50
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::addtions related to the search engine
-#---------------------------------------------------------------------------
-SEARCHENGINE = NO
-CGI_NAME =
-CGI_URL =
-DOC_URL =
-DOC_ABSPATH =
-BIN_ABSPATH =
-EXT_DOC_PATHS =
diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h
index 22cecdb..cb4a9eb 100644
--- a/addon/doxmlparser/include/doxmlintf.h
+++ b/addon/doxmlparser/include/doxmlintf.h
@@ -1114,7 +1114,7 @@ class IDoxygen
virtual ICompoundIterator *memberByName(const char * name) const = 0;
/*! Releases the memory for the object hierarchy obtained by
- * createdObjecModelFromXML(). First release all iterators before calling
+ * createdObjectModel(). First release all iterators before calling
* this function.
*/
virtual void release() = 0;
diff --git a/addon/doxmlparser/src/basehandler.h b/addon/doxmlparser/src/basehandler.h
index a82114d..1772d8a 100644
--- a/addon/doxmlparser/src/basehandler.h
+++ b/addon/doxmlparser/src/basehandler.h
@@ -57,7 +57,7 @@ template<class T> class ElementMapper
void operator()(const QXmlAttributes &attrib)
{ if (m_parent) (m_parent->*m_handler)(attrib); }
private:
- T *m_parent;
+ T *m_parent = 0;
Handler m_handler;
};
@@ -71,7 +71,7 @@ template<class T> class ElementMapper
void operator()()
{ if (m_parent) (m_parent->*m_handler)(); }
private:
- T *m_parent;
+ T *m_parent = 0;
Handler m_handler;
};
@@ -277,9 +277,9 @@ template<class T> class BaseHandler : public QXmlDefaultHandler,
protected:
QString m_curString;
QString m_skipUntil;
- int m_skipCount;
- QXmlDefaultHandler *m_delegateHandler;
- IFallBackHandler *m_fallBackHandler;
+ int m_skipCount = 0;
+ QXmlDefaultHandler *m_delegateHandler = 0;
+ IFallBackHandler *m_fallBackHandler = 0;
};
//-----------------------------------------------------------------------------
diff --git a/addon/doxmlparser/src/compoundhandler.cpp b/addon/doxmlparser/src/compoundhandler.cpp
index 077c8fb..69fb70c 100644
--- a/addon/doxmlparser/src/compoundhandler.cpp
+++ b/addon/doxmlparser/src/compoundhandler.cpp
@@ -86,7 +86,7 @@ class CompoundIdIterator : public ICompoundIterator,
{ delete this; }
private:
- const MainHandler *m_mainHandler;
+ const MainHandler *m_mainHandler = 0;
};
//----------------------------------------------------------------------------
diff --git a/addon/doxmlparser/src/compoundhandler.h b/addon/doxmlparser/src/compoundhandler.h
index b05ba3d..6f191dc 100644
--- a/addon/doxmlparser/src/compoundhandler.h
+++ b/addon/doxmlparser/src/compoundhandler.h
@@ -54,10 +54,10 @@ class IncludeHandler : public IInclude, public BaseHandler<IncludeHandler>
{ return m_isLocal; }
private:
- IBaseHandler *m_parent;
+ IBaseHandler *m_parent = 0;
StringImpl m_name; // element's content
StringImpl m_refId; // refid
- bool m_isLocal; // local
+ bool m_isLocal = false; // local
};
class IncludeIterator : public BaseIterator<IIncludeIterator,IInclude,IncludeHandler>
@@ -86,10 +86,10 @@ class RelatedCompound : public IRelatedCompound
virtual const IString *name() const { return &m_name; }
private:
- CompoundHandler *m_parent;
+ CompoundHandler *m_parent = 0;
QString m_id; // refid
- Protection m_protection; // prot
- Kind m_kind; // virt
+ Protection m_protection = Public; // prot
+ Kind m_kind = Normal; // virt
StringImpl m_name; // element's content
};
@@ -193,42 +193,42 @@ class CompoundHandler : public IClass,
// XML elements:
// -------------
StringImpl m_name; // compoundname
- TitleHandler* m_titleHandler; // title
+ TitleHandler* m_titleHandler = 0; // title
QList<RelatedCompound> m_subClasses; // basecompoundref
QList<RelatedCompound> m_superClasses; // derivedcompoundref
QList<IncludeHandler> m_includes; // includes
QList<IncludeHandler> m_includedBy; // includedBy
- GraphHandler* m_includeDependencyGraph; // incdepgraph
- GraphHandler* m_includedByDependencyGraph; // invincdepgraph
+ GraphHandler* m_includeDependencyGraph = 0;// incdepgraph
+ GraphHandler* m_includedByDependencyGraph = 0; // invincdepgraph
QList<QString> m_innerCompounds; // innerdir/innerfile/innerclass/innernamespace/innergroup
TemplateParamListHandler* m_templateParamList; // templateparamlist
QList<SectionHandler> m_sections; // sectiondef
- DocHandler* m_brief; // briefdescription
- DocHandler* m_detailed; // detaileddescription
- GraphHandler* m_inheritanceGraph; // inheritancegraph
- GraphHandler* m_collaborationGraph; // collaborationgraph
- ProgramListingHandler* m_programListing; // programlisting
+ DocHandler* m_brief = 0; // briefdescription
+ DocHandler* m_detailed = 0; // detaileddescription
+ GraphHandler* m_inheritanceGraph = 0; // inheritancegraph
+ GraphHandler* m_collaborationGraph = 0; // collaborationgraph
+ ProgramListingHandler* m_programListing = 0; // programlisting
// location
StringImpl m_defFile; // - file
- int m_defLine; // - line
+ int m_defLine = 0; // - line
StringImpl m_defBodyFile; // - bodyfile
- int m_defBodyStart; // - bodystart
- int m_defBodyEnd; // - bodyend
- ListOfAllMembersHandler* m_members; // listofallmember
+ int m_defBodyStart = 0; // - bodystart
+ int m_defBodyEnd = 0; // - bodyend
+ ListOfAllMembersHandler* m_members = 0; // listofallmember
// XML attributes:
// ---------------
StringImpl m_id; // id
- CompoundKind m_kind; // kind
+ CompoundKind m_kind = Invalid; // kind
StringImpl m_kindString; // kind as a string
StringImpl m_protection; // prot
// local variables
QString m_xmlDir; // directory where the info is found
- int m_refCount; // object reference counter
+ int m_refCount = 0; // object reference counter
QDict<MemberHandler> m_memberDict; // id->member lookup
QDict<QList<MemberHandler> > m_memberNameDict; // name->memberlist lookup
- MainHandler* m_mainHandler; // parent object
+ MainHandler* m_mainHandler = 0; // parent object
};
void compoundhandler_init();
diff --git a/addon/doxmlparser/src/linkedtexthandler.cpp b/addon/doxmlparser/src/linkedtexthandler.cpp
index b774f0f..140a48b 100644
--- a/addon/doxmlparser/src/linkedtexthandler.cpp
+++ b/addon/doxmlparser/src/linkedtexthandler.cpp
@@ -51,7 +51,7 @@ class LT_Ref : public LinkedTextImpl, public ILT_Ref
StringImpl m_refId;
StringImpl m_extId;
StringImpl m_text;
- TargetKind m_targetKind;
+ TargetKind m_targetKind = TargetKind::Member;
};
LinkedTextHandler::LinkedTextHandler(IBaseHandler *parent,
diff --git a/addon/doxmlparser/test/main.cpp b/addon/doxmlparser/test/main.cpp
index 70c79da..0d1f95e 100644
--- a/addon/doxmlparser/test/main.cpp
+++ b/addon/doxmlparser/test/main.cpp
@@ -707,7 +707,7 @@ int main(int argc,char **argv)
printf("==== inheritance graph ==== \n");
DumpGraph(cls->inheritanceGraph());
- printf("==== collabration graph ==== \n");
+ printf("==== collaboration graph ==== \n");
DumpGraph(cls->collaborationGraph());
printf("==== base classes ==== \n");
diff --git a/addon/doxyapp/doxyapp.cpp b/addon/doxyapp/doxyapp.cpp
index c18f907..edd39e3 100644
--- a/addon/doxyapp/doxyapp.cpp
+++ b/addon/doxyapp/doxyapp.cpp
@@ -109,19 +109,19 @@ class XRefDummyCodeGenerator : public CodeOutputInterface
static void findXRefSymbols(FileDef *fd)
{
// get the interface to a parser that matches the file extension
- ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension());
+ CodeParserInterface &intf=Doxygen::parserManager->getCodeParser(fd->getDefFileExtension());
// get the programming language from the file name
SrcLangExt lang = getLanguageFromFileName(fd->name());
// reset the parsers state
- pIntf->resetCodeParserState();
+ intf.resetCodeParserState();
// create a new backend object
XRefDummyCodeGenerator *xrefGen = new XRefDummyCodeGenerator(fd);
// parse the source code
- pIntf->parseCode(*xrefGen,
+ intf.parseCode(*xrefGen,
0,
fileToString(fd->absFilePath()),
lang,
diff --git a/addon/doxyparse/doxyparse.cpp b/addon/doxyparse/doxyparse.cpp
index 592ac42..59b560f 100644
--- a/addon/doxyparse/doxyparse.cpp
+++ b/addon/doxyparse/doxyparse.cpp
@@ -89,19 +89,19 @@ static bool is_c_code = true;
static void findXRefSymbols(FileDef *fd)
{
// get the interface to a parser that matches the file extension
- ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension());
+ CodeParserInterface &intf=Doxygen::parserManager->getCodeParser(fd->getDefFileExtension());
// get the programming language from the file name
SrcLangExt lang = getLanguageFromFileName(fd->name());
// reset the parsers state
- pIntf->resetCodeParserState();
+ intf.resetCodeParserState();
// create a new backend object
Doxyparse *parse = new Doxyparse(fd);
// parse the source code
- pIntf->parseCode(*parse, 0, fileToString(fd->absFilePath()), lang, FALSE, 0, fd);
+ intf.parseCode(*parse, 0, fileToString(fd->absFilePath()), lang, FALSE, 0, fd);
// dismiss the object.
delete parse;
@@ -183,28 +183,25 @@ std::string sanitizeString(std::string data) {
return !new_data.isEmpty() ? new_data.data() : "";
}
-std::string argumentData(Argument *argument) {
+std::string argumentData(const Argument &argument) {
std::string data = "";
- if (argument->type != NULL && argument->type.size() > 1)
- data = sanitizeString(argument->type.data());
- else if (argument->name != NULL)
- data = sanitizeString(argument->name.data());
+ if (argument.type.size() > 1)
+ data = sanitizeString(argument.type.data());
+ else if (!argument.name.isEmpty())
+ data = sanitizeString(argument.name.data());
return data;
}
std::string functionSignature(MemberDef* md) {
std::string signature = sanitizeString(md->name().data());
if(md->isFunction()){
- ArgumentList *argList = md->argumentList();
+ const ArgumentList &argList = md->argumentList();
signature += "(";
- if (argList) {
- ArgumentListIterator iterator(*argList);
- Argument * argument = iterator.toFirst();
- if(argument != NULL) {
- signature += argumentData(argument);
- for(++iterator; (argument = iterator.current()); ++iterator) {
- signature += std::string(",") + argumentData(argument);
- }
+ auto it = argList.begin();
+ if(it!=argList.end()) {
+ signature += argumentData(*it);
+ for(++it; it!=argList.end(); ++it) {
+ signature += std::string(",") + argumentData(*it);
}
}
signature += ")";
@@ -255,19 +252,14 @@ void cModule(ClassDef* cd) {
}
}
-static bool checkOverrideArg(ArgumentList *argList, MemberDef *md) {
- ArgumentListIterator iterator(*argList);
- Argument * argument = iterator.toFirst();
-
- if(!md->isFunction() || argList->count() == 0){
- return false;
+static bool checkOverrideArg(const ArgumentList &argList, MemberDef *md) {
+ if(!md->isFunction() || argList.empty()){
+ return false;
}
- if(argument != NULL) {
- for(; (argument = iterator.current()); ++iterator){
- if(md->name() == argument->name) {
- return true;
- }
+ for (const Argument &argument : argList) {
+ if(md->name() == argument.name) {
+ return true;
}
}
@@ -278,17 +270,15 @@ void functionInformation(MemberDef* md) {
std::string temp = "";
int size = md->getEndBodyLine() - md->getStartBodyLine() + 1;
printNumberOfLines(size);
- ArgumentList *argList = md->argumentList();
- if (argList) {
- ArgumentListIterator iterator(*argList);
- Argument * argument = iterator.toFirst();
- if(argument != NULL) {
- temp = argumentData(argument);
+ const ArgumentList &argList = md->argumentList();
+ if (!argList.empty())
+ {
+ temp = argumentData(argList.front());
// TODO: This is a workaround; better not include "void" in argList, in the first place.
- if(temp != "void") {
- printNumberOfArguments(argList->count());
- }
- }
+ if (temp!="void")
+ {
+ printNumberOfArguments(argList.size());
+ }
}
printNumberOfConditionalPaths(md);
diff --git a/addon/doxywizard/wizard.h b/addon/doxywizard/wizard.h
index 02f3f6d..810ab95 100644
--- a/addon/doxywizard/wizard.h
+++ b/addon/doxywizard/wizard.h
@@ -50,11 +50,11 @@ class TuneColorDialog : public QDialog
void updateImage(int hue,int sat,int val);
private:
- QImage *m_image;
- QLabel *m_imageLab;
- int m_hue;
- int m_sat;
- int m_gam;
+ QImage *m_image = 0;
+ QLabel *m_imageLab = 0;
+ int m_hue = 0;
+ int m_sat = 0;
+ int m_gam = 0;
};
class ColorPicker : public QWidget
@@ -89,11 +89,11 @@ private:
void setSat(int v);
void setGam(int v);
- QPixmap *m_pix;
- Mode m_mode;
- int m_gam;
- int m_hue;
- int m_sat;
+ QPixmap *m_pix = 0;
+ Mode m_mode = Hue;
+ int m_gam = 0;
+ int m_hue = 0;
+ int m_sat = 0;
};
@@ -118,16 +118,16 @@ class Step1 : public QWidget
void setRecursiveScan(int);
private:
- QLineEdit *m_projName;
- QLineEdit *m_projBrief;
- QLineEdit *m_projNumber;
- QLineEdit *m_sourceDir;
- QLineEdit *m_destDir;
- QLabel *m_projIconLab;
- QCheckBox *m_recursive;
- QPushButton *m_srcSelectDir;
- QPushButton *m_dstSelectDir;
- Wizard *m_wizard;
+ QLineEdit *m_projName = 0;
+ QLineEdit *m_projBrief = 0;
+ QLineEdit *m_projNumber = 0;
+ QLineEdit *m_sourceDir = 0;
+ QLineEdit *m_destDir = 0;
+ QLabel *m_projIconLab = 0;
+ QCheckBox *m_recursive = 0;
+ QPushButton *m_srcSelectDir = 0;
+ QPushButton *m_dstSelectDir = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -144,12 +144,12 @@ class Step2 : public QWidget
void changeCrossRefState(int choice);
private:
- QGroupBox *m_extractMode;
- QGroupBox *m_optimizeLang;
- QButtonGroup *m_extractModeGroup;
- QButtonGroup *m_optimizeLangGroup;
- QCheckBox *m_crossRef;
- Wizard *m_wizard;
+ QGroupBox *m_extractMode = 0;
+ QGroupBox *m_optimizeLang = 0;
+ QButtonGroup *m_extractModeGroup = 0;
+ QButtonGroup *m_optimizeLangGroup = 0;
+ QCheckBox *m_crossRef = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -173,18 +173,18 @@ class Step3 : public QWidget
void tuneColorDialog();
private:
- QGroupBox *m_texOptions;
- QButtonGroup *m_texOptionsGroup;
- QGroupBox *m_htmlOptions;
- QButtonGroup *m_htmlOptionsGroup;
- QCheckBox *m_htmlEnabled;
- QCheckBox *m_latexEnabled;
- QCheckBox *m_manEnabled;
- QCheckBox *m_rtfEnabled;
- QCheckBox *m_xmlEnabled;
- QCheckBox *m_searchEnabled;
- QPushButton *m_tuneColor;
- Wizard *m_wizard;
+ QGroupBox *m_texOptions = 0;
+ QButtonGroup *m_texOptionsGroup = 0;
+ QGroupBox *m_htmlOptions = 0;
+ QButtonGroup *m_htmlOptionsGroup = 0;
+ QCheckBox *m_htmlEnabled = 0;
+ QCheckBox *m_latexEnabled = 0;
+ QCheckBox *m_manEnabled = 0;
+ QCheckBox *m_rtfEnabled = 0;
+ QCheckBox *m_xmlEnabled = 0;
+ QCheckBox *m_searchEnabled = 0;
+ QPushButton *m_tuneColor = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -207,17 +207,17 @@ class Step4 : public QWidget
void setCallerGraphEnabled(int state);
private:
- QGroupBox *m_diagramMode;
- QButtonGroup *m_diagramModeGroup;
- QGroupBox *m_dotGroup;
- QCheckBox *m_dotClass;
- QCheckBox *m_dotCollaboration;
- QCheckBox *m_dotInclude;
- QCheckBox *m_dotIncludedBy;
- QCheckBox *m_dotInheritance;
- QCheckBox *m_dotCall;
- QCheckBox *m_dotCaller;
- Wizard *m_wizard;
+ QGroupBox *m_diagramMode = 0;
+ QButtonGroup *m_diagramModeGroup = 0;
+ QGroupBox *m_dotGroup = 0;
+ QCheckBox *m_dotClass = 0;
+ QCheckBox *m_dotCollaboration = 0;
+ QCheckBox *m_dotInclude = 0;
+ QCheckBox *m_dotIncludedBy = 0;
+ QCheckBox *m_dotInheritance = 0;
+ QCheckBox *m_dotCall = 0;
+ QCheckBox *m_dotCaller = 0;
+ Wizard *m_wizard = 0;
const QHash<QString,Input *> &m_modelData;
};
@@ -241,14 +241,14 @@ class Wizard : public QSplitter
private:
const QHash<QString,Input *> &m_modelData;
- QTreeWidget *m_treeWidget;
- QStackedWidget *m_topicStack;
- Step1 *m_step1;
- Step2 *m_step2;
- Step3 *m_step3;
- Step4 *m_step4;
- QPushButton *m_next;
- QPushButton *m_prev;
+ QTreeWidget *m_treeWidget = 0;
+ QStackedWidget *m_topicStack = 0;
+ Step1 *m_step1 = 0;
+ Step2 *m_step2 = 0;
+ Step3 *m_step3 = 0;
+ Step4 *m_step4 = 0;
+ QPushButton *m_next = 0;
+ QPushButton *m_prev = 0;
};
#endif
diff --git a/cmake/FindJavacc.cmake b/cmake/FindJavacc.cmake
new file mode 100755
index 0000000..c7de776
--- /dev/null
+++ b/cmake/FindJavacc.cmake
@@ -0,0 +1,10 @@
+
+find_program(JAVACC_EXECUTABLE NAMES javacc javaCC Javacc JavaCC javacc.bat DOC "path to the javacc executable")
+mark_as_advanced(JAVACC_EXECUTABLE)
+if(JAVACC_EXECUTABLE)
+ set(JAVACC_FOUND 1)
+ message(STATUS "The javacc executable: ${JAVACC_EXECUTABLE}")
+else()
+ set(JAVACC_FOUND 0)
+ message(STATUS "The javacc executable not found, using existing files")
+endif()
diff --git a/doc/changelog.doc b/doc/changelog.doc
index e87c7ce..96652eb 100644
--- a/doc/changelog.doc
+++ b/doc/changelog.doc
@@ -178,7 +178,7 @@
<li>Forgot to comment out debug print [<a href="https://github.com/doxygen/doxygen/commit/9ef21db5efbd521c570121cc7638de8d4d487536">view</a>]</li>
<li>Give warning when a retval is used multiple times [<a href="https://github.com/doxygen/doxygen/commit/e6fb6ea2017e3245a6b45b6c8e73472829215b09">view</a>]</li>
<li>Handling digraph versus label [<a href="https://github.com/doxygen/doxygen/commit/f3a08615439a4e82f14a5dc9d1a758b401905e30">view</a>]</li>
-<li>High consequence coverity mesages [<a href="https://github.com/doxygen/doxygen/commit/5059d796ea951d06cebc55f1a9158a8dd001af0e">view</a>]</li>
+<li>High consequence coverity messages [<a href="https://github.com/doxygen/doxygen/commit/5059d796ea951d06cebc55f1a9158a8dd001af0e">view</a>]</li>
<li>Image not seen as svg image [<a href="https://github.com/doxygen/doxygen/commit/a3d574ecf12c71bc25579b38670f17ef663b82a6">view</a>]</li>
<li>Implement a new EXTRACT_PRIVATE_VIRTUAL option. [<a href="https://github.com/doxygen/doxygen/commit/d18b3eaf3486e224fa9de7e77b536883952b40b9">view</a>]</li>
<li>Implementing `&lt;hr&gt;` for LaTeX [<a href="https://github.com/doxygen/doxygen/commit/dbddf36cd10c3e6cd9419a08d688f8cbfd57f9c3">view</a>]</li>
@@ -224,7 +224,7 @@
<li>Option for &#39;input buffer overflow&#39; [<a href="https://github.com/doxygen/doxygen/commit/efc67de9d1a4e36ab94164352778fd19f33652b3">view</a>]</li>
<li>Option syntax for commands is unclear [<a href="https://github.com/doxygen/doxygen/commit/9ecbe35ae2826b2404f37cc7e5d4377e39430b51">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/bd645c0e3ee05582adf30dcd91af5eafec7733c4">view</a>]</li>
<li>PLANTUML_RUN_JAVA_ONCE is working well. But some specific plantuml has error on ver 1.8.15 [<a href="https://github.com/doxygen/doxygen/commit/aeff95e38dca51f4a9ace9af8aa0387ad683f7f0">view</a>]</li>
-<li>Portuguse translators updated to Doxygen 1.8.16. [<a href="https://github.com/doxygen/doxygen/commit/6b4fd5000c6f6787155743dc93d67a249ca2b881">view</a>]</li>
+<li>Portuguese translators updated to Doxygen 1.8.16. [<a href="https://github.com/doxygen/doxygen/commit/6b4fd5000c6f6787155743dc93d67a249ca2b881">view</a>]</li>
<li>Possibility to show converted fixed form [<a href="https://github.com/doxygen/doxygen/commit/1659f94a4c8acff1c2564226db21afbd2bc04736">view</a>]</li>
<li>Problem with just an asterisks on a `\code` line [<a href="https://github.com/doxygen/doxygen/commit/3088ae34eda1fbeab287e2271a7f1804de2c784f">view</a>]</li>
<li>Problem with with comment recognition for group open and closing commands [<a href="https://github.com/doxygen/doxygen/commit/ef5af7618fbec3ac240e7a1099607d9ff2b3cc4f">view</a>]</li>
@@ -306,7 +306,7 @@ href="https://github.com/doxygen/doxygen/commit/9d83d43f0d8b7058e2f89371a6ab276c
<li>constexp.l: group the flex options [<a href="https://github.com/doxygen/doxygen/commit/306e3051b1374cf180b1464700ae79662ced95c2">view</a>]</li>
<li>constexp.y: drop the = from name-prefix [<a href="https://github.com/doxygen/doxygen/commit/a18e967baabf5a9a234627e677d866bcf45741d4">view</a>]</li>
<li>declinfo.l: enable reentrant [<a href="https://github.com/doxygen/doxygen/commit/2513172db2942a364e8af4a0d21d0fb2de328af1">view</a>]</li>
-<li>declinfo.l: group flex options toghether [<a href="https://github.com/doxygen/doxygen/commit/49c97e860a97615995eed4f58dec58d9a2a9339f">view</a>]</li>
+<li>declinfo.l: group flex options together [<a href="https://github.com/doxygen/doxygen/commit/49c97e860a97615995eed4f58dec58d9a2a9339f">view</a>]</li>
<li>declinfo.l: move function declarations before [<a href="https://github.com/doxygen/doxygen/commit/44f678794f5338881620525a5e0fbe25962c7690">view</a>]</li>
<li>delayed creation and update of .md5 files after successful creation of output files [<a href="https://github.com/doxygen/doxygen/commit/572035ffcd0e4f7313bab23d375d63008ebbe5a3">view</a>], [<a href="http://github.com/doxygen/doxygen/commit/9dda0c6ddc5117f800afcb19fb8c6be031fe6c27">view</a>]</li>
<li>do not clobber version placeholder [<a href="https://github.com/doxygen/doxygen/commit/faafe83a69d2f3c27daca0974c9a063bdb81ecdc">view</a>]</li>
@@ -664,7 +664,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Problems and some enhancements for LaTeX tables [<a href="https://github.com/doxygen/doxygen/commit/d984f7dd21863fc01a1a6ede0878d3dd14af157a">view</a>]</li>
<li>RTF layout regarding References and Referenced by [<a href="https://github.com/doxygen/doxygen/commit/c90505681054d51da05fd476d08c610d3e20ca38">view</a>]</li>
<li>RTF lists more levels and removing extra paragraphs [<a href="https://github.com/doxygen/doxygen/commit/8fc23878b4375546bfb6a9149f009fbe0f7da42f">view</a>]</li>
-<li>Readded missing &quot;Span&quot; case to DocStyleChange::styleString [<a href="https://github.com/doxygen/doxygen/commit/6a3d1b3d12e353d0c6ebd642b691e5e2608f8df2">view</a>]</li>
+<li>Re-added missing &quot;Span&quot; case to DocStyleChange::styleString [<a href="https://github.com/doxygen/doxygen/commit/6a3d1b3d12e353d0c6ebd642b691e5e2608f8df2">view</a>]</li>
<li>Redundant whitespace removal breaks some C++ links [with test case and Git bisect] (Origin: bugzilla #791942) [<a href="https://github.com/doxygen/doxygen/commit/449a7e2b4ff114a72be573013558bae19672ebbc">view</a>]</li>
<li>Refactored code a bit [<a href="https://github.com/doxygen/doxygen/commit/4ed08b969b575d6dc1a49bca936a43eb43d337e2">view</a>]</li>
<li>Refactored code a bit (use const references and made global functions members) [<a href="https://github.com/doxygen/doxygen/commit/3820f6a841115bd66ed409221c73824ec41ae6ab">view</a>]</li>
@@ -766,7 +766,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6139">6139</a> - Menu does not work without Javascript [<a href="https://github.com/doxygen/doxygen/commit/1be97720b7820361e85242d08d4cac3e46570bfe">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6141">6141</a> - Too greedy behavior of @ref const matching [<a href="https://github.com/doxygen/doxygen/commit/04001c8926fb0f37dfcf284b3637b182125bba75">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6169">6169</a> - doxygen build fails [<a href="https://github.com/doxygen/doxygen/commit/bb5c8dd29782ecbb05a4ef9788f2507e9a156848">view</a>]</li>
-<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6170">6170</a> - Add &quot;\~&quot; command to internatioalization article [<a href="https://github.com/doxygen/doxygen/commit/e204b982eebd54bd15148a520da6608935e33e50">view</a>]</li>
+<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6170">6170</a> - Add &quot;\~&quot; command to internationalization article [<a href="https://github.com/doxygen/doxygen/commit/e204b982eebd54bd15148a520da6608935e33e50">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6223">6223</a> - Problem RTF output: The class list &quot;classes&quot; within the namespace report is wrong indicated. [<a href="https://github.com/doxygen/doxygen/commit/753c06281f6b2e9172c449157fc9f863063232e3">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/6238">6238</a> - parsing error in Fortran file with preprocessing [<a href="https://github.com/doxygen/doxygen/commit/2f5e22a4be9d237a150d04659bf6abec1349fbd9">view</a>]
, [<a href="https://github.com/doxygen/doxygen/commit/ec12eb659d8c8e78ad4bb15d1a941ac3153a0f66">view</a>]</li>
@@ -844,7 +844,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Use hidden symbol visibility by default [<a href="https://github.com/doxygen/doxygen/commit/dcb3b2d0b888902a062eefd8200ea194ed1c42d6">view</a>]</li>
<li>Use language identifier instead of file extension for language attribute [<a href="https://github.com/doxygen/doxygen/commit/ed9acb6e1bb81a2eec334180f7b8c1bf0598b444">view</a>]</li>
<li>Use language in stead of lang for language name attribute [<a href="https://github.com/doxygen/doxygen/commit/4e4741221f4290412ef4a6b6bbfe9799abafaf6c">view</a>]</li>
-<li>Update of the Brazillian translation [<a href="https://github.com/doxygen/doxygen/commit/d283dfcdcaa0837e84d7995676d436fa04e96d1f">view</a>]</li>
+<li>Update of the Brazilian translation [<a href="https://github.com/doxygen/doxygen/commit/d283dfcdcaa0837e84d7995676d436fa04e96d1f">view</a>]</li>
<li>[preprocessing.doc] typo amended [<a href="https://github.com/doxygen/doxygen/commit/6b67a64bd0bd1c6759294c323433dbd7d37df6ac">view</a>]</li>
<li>add decimal to base identifier [<a href="https://github.com/doxygen/doxygen/commit/9cbc1a04e584e83d91ff3f7501f38b0a825e1953">view</a>]</li>
<li>add the number of conditionals path and bugfix [<a href="https://github.com/doxygen/doxygen/commit/20af63f43e583a31dfe93f78807aa868f9b9ff14">view</a>]</li>
@@ -944,7 +944,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/1662">1662</a> - Fix missing title in non-page docanchors from tag files [<a href="https://github.com/doxygen/doxygen/commit/616b392e9bc8984251d969577a5b63974efb1eef">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/2763">2763</a> - FILTER_PATTERNS won&#39;t take command with arguments [<a href="https://github.com/doxygen/doxygen/commit/ce7a983c2849e4c8fa72189a896e594a8497dd4c">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/4691">4691</a> - Uses &lt;img&gt; instead of &lt;object&gt; html tag for SVG images [<a href="https://github.com/doxygen/doxygen/commit/8ccd98643a3b88aaa3245b76202666900a2cd401">view</a>]</li>
-<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5174">5174</a> - error state 21 with fortran code (fixed format) [<a href="https://github.com/doxygen/doxygen/commit/fdee5e9fade0ff5a578817048c6205f2a9acbced">view</a>]</li>
+<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5174">5174</a> - error state 21 with Fortran code (fixed format) [<a href="https://github.com/doxygen/doxygen/commit/fdee5e9fade0ff5a578817048c6205f2a9acbced">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5323">5323</a> - Missing Page References in the Index Chapters of the LaTex/PDF output [<a href="https://github.com/doxygen/doxygen/commit/efd49dacfbae1ad55d7922a748e2c1d60068b014">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5411">5411</a> - Inherited member of template class issues warning and is not documented [<a href="https://github.com/doxygen/doxygen/commit/4dfc5887660284b345eb93b6c07dc1f91e780fac">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5711">5711</a> - Fortran: attributes after a blank line are ignored / Bug <a href="https://github.com/doxygen/doxygen/issues/3880">3880</a> - FORTRAN: comment in subroutine argument list [<a href="https://github.com/doxygen/doxygen/commit/e9ebf43585bffee80c31dd69538feae2a4525178">view</a>]</li>
@@ -959,7 +959,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5933">5933</a> - Phantom variables/functions in XML, created from non-code files [<a href="https://github.com/doxygen/doxygen/commit/7dc9b378a107b1ccae2245b3f3f3d628db2bd008">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5937">5937</a> - CASE_SENSE_NAMES ignored [<a href="https://github.com/doxygen/doxygen/commit/fab854a10f358c15a69291a59388ea0c184bce20">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5938">5938</a> - Spaces between the closing bracket of the typename and the opening bracket of the parameter list cause detection issues. [<a href="https://github.com/doxygen/doxygen/commit/622d18637f9d633b184e43fd3594b661cf4e9375">view</a>]</li>
-<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5941">5941</a> - python unicode docstrings are ignored [<a href="https://github.com/doxygen/doxygen/commit/936f242956350825d870f7396ae5d6106fe3081d">view</a>]
+<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5941">5941</a> - python Unicode docstrings are ignored [<a href="https://github.com/doxygen/doxygen/commit/936f242956350825d870f7396ae5d6106fe3081d">view</a>]
, [<a href="https://github.com/doxygen/doxygen/commit/be100f882604a23d94025fee6d059bdb5ec28d3e">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5945">5945</a> - Do not allow ligatures in log output [<a href="https://github.com/doxygen/doxygen/commit/894bdfdf268ba24a268fa72d7b33899a9f3a126b">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5958">5958</a> - References for one function can inherit References from subsequent non documented function [<a href="https://github.com/doxygen/doxygen/commit/9abcad810b8d41d338d501ff5b32524e1ced7f33">view</a>]</li>
@@ -977,7 +977,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5981">5981</a> - quick link index in alphabetical class list in classes.html doesn&#39;t work [<a href="https://github.com/doxygen/doxygen/commit/ec1ef7b4971540bbe042b16d7ebd3f2a0e0e57f1">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5982">5982</a> - Bad character escaping scheme in HTML anchor generation. [<a href="https://github.com/doxygen/doxygen/commit/6136cf9e3ad70d58cac4d8022cce8c8729805119">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5983">5983</a> - `@addindex`entries fail to link to the exact location in Compiled HTML Help. [<a href="https://github.com/doxygen/doxygen/commit/8dea6e11faf3969c3b6b17b700533f43c9ca73f8">view</a>]</li>
-<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5985">5985</a> - Java: final keyword on a parameter brakes docs inherinance [<a href="https://github.com/doxygen/doxygen/commit/dfd0336f1a97e189d49e29860db1c43915aced76">view</a>]</li>
+<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5985">5985</a> - Java: final keyword on a parameter brakes docs inheritance [<a href="https://github.com/doxygen/doxygen/commit/dfd0336f1a97e189d49e29860db1c43915aced76">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5991">5991</a> - Using `@page` to add title to Markdown file generates surplus empty page. [<a href="https://github.com/doxygen/doxygen/commit/42c7d88ffc11651d1fb6b997fd23cc938bce4a39">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5998">5998</a> - DOT_PATH not expanded [<a href="https://github.com/doxygen/doxygen/commit/752523cd122d6ffdd72c89955005d77819740675">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5999">5999</a> - Files with incorrect extensions (.doc) are picked up by doxygen [<a href="https://github.com/doxygen/doxygen/commit/14b04be2af279e1093f17d6b933d1e9ab530e128">view</a>]</li>
@@ -1023,17 +1023,17 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Documentation for extensions .f95, .f03 and .f08 [<a href="https://github.com/doxygen/doxygen/commit/4c2e91c10dc6d007c410cd282a00fc7a42d38a0d">view</a>]</li>
<li>Doxygen fails to copy logo image to LaTex output dir [<a href="https://github.com/doxygen/doxygen/commit/711c6c0bee87d47d70b3ffa9ca8b39b704e91723">view</a>]</li>
<li>FORTRAN determination string in preprocessing [<a href="https://github.com/doxygen/doxygen/commit/4a7673fed2f28a24e0c7e8bb94621b0e14ac9ed5">view</a>]</li>
-<li>Feature: Translations for german language (changes since 1.8.4) [<a href="https://github.com/doxygen/doxygen/commit/261077497f2bcc3364e182e338d914c470a0a235">view</a>]</li>
+<li>Feature: Translations for German language (changes since 1.8.4) [<a href="https://github.com/doxygen/doxygen/commit/261077497f2bcc3364e182e338d914c470a0a235">view</a>]</li>
<li>Fix STRIP_FROM_PATH when running from drive root [<a href="https://github.com/doxygen/doxygen/commit/fd808ae3c1e37a8d476d250cf6b4325624a9eccb">view</a>]</li>
<li>Fix Windows build instructions. [<a href="https://github.com/doxygen/doxygen/commit/eec8d0a31161746041fc94ccbba5a54aecd8cf93">view</a>]</li>
<li>Fix documentation typos [<a href="https://github.com/doxygen/doxygen/commit/770adb37b2072bbea5412f9cc2058d98d1de60e4">view</a>]</li>
<li>Fix for HTML output when using server side search and the new menu bar [<a href="https://github.com/doxygen/doxygen/commit/0faf45600c6c640bfaf11b017d43a4b9de193ebf">view</a>]</li>
-<li>Fix for changed references due to different removeRedudantWhiteSpace() implementation [<a href="https://github.com/doxygen/doxygen/commit/f26cc41d0d3d436c809c293a56c66c1f5f953745">view</a>]</li>
+<li>Fix for changed references due to different removeRedundantWhiteSpace() implementation [<a href="https://github.com/doxygen/doxygen/commit/f26cc41d0d3d436c809c293a56c66c1f5f953745">view</a>]</li>
<li>Fix for empty file name [<a href="https://github.com/doxygen/doxygen/commit/0fead5249b8ef2c3c5cbbbd712855bae877aa27b">view</a>]</li>
<li>Fix for error in travis.yml [<a href="https://github.com/doxygen/doxygen/commit/81cf39f249c58db66368d60d596ac164d886ae90">view</a>]</li>
<li>Fix issue escaping backslash inside markdown style code span [<a href="https://github.com/doxygen/doxygen/commit/402970f77f961b85b6371c8e53bd69981435c2d7">view</a>]</li>
<li>Fix linker flags for building with clang on Windows [<a href="https://github.com/doxygen/doxygen/commit/41846b467bea58b904e26ce139394f7371ea5870">view</a>]</li>
-<li>Fix order of member initilaization [<a href="https://github.com/doxygen/doxygen/commit/6b1ebb6bcb345d8997054492c21276dc2dc36416">view</a>]</li>
+<li>Fix order of member initialization [<a href="https://github.com/doxygen/doxygen/commit/6b1ebb6bcb345d8997054492c21276dc2dc36416">view</a>]</li>
<li>Fix return-type warnings with -DNDEBUG [<a href="https://github.com/doxygen/doxygen/commit/f4574baf118da6aa2051b865040a9948bb0d22c9">view</a>]</li>
<li>Fix search box rendering in HTML when menu bar is disabled [<a href="https://github.com/doxygen/doxygen/commit/ee9a0664c03c306d0aeb127295ced29f8078ae03">view</a>]</li>
<li>Fix uppercase letters B-Z being unnecessarily escaped in index HTML anchors. [<a href="https://github.com/doxygen/doxygen/commit/0f699ab17cb88beff0ae4aa9b10042c0ccaff937">view</a>]</li>
@@ -1209,7 +1209,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Moved creation of inline class documentation to separate template file [<a href="https://github.com/doxygen/doxygen/commit/4bd50c9f0dc1d7b1413a6bda587b8a5999cd7a19">view</a>]</li>
<li>RTF improvement: Example section was merged with next function title [<a href="https://github.com/doxygen/doxygen/commit/ca617e1e1cd42ee0080c8c13ce3884c8671629dd">view</a>]</li>
<li>Remove obsolete py files [<a href="https://github.com/doxygen/doxygen/commit/183f36fe97cb95636f1947c2c4be61f7b78f87e0">view</a>]</li>
-<li>Removed BOM marker from greek translator to avoid Visual C warnings [<a href="https://github.com/doxygen/doxygen/commit/9ee8f777f5a4b7a49e644c2da5247fa509038feb">view</a>]</li>
+<li>Removed BOM marker from Greek translator to avoid Visual C warnings [<a href="https://github.com/doxygen/doxygen/commit/9ee8f777f5a4b7a49e644c2da5247fa509038feb">view</a>]</li>
<li>Repaired breaking @include for LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/ab861c197c596f78c7aea4f45c0e1252de10fc1f">view</a>]</li>
<li>Revert &quot;Spelling correction for error message with USE_HTAGS usage&quot; [<a href="https://github.com/doxygen/doxygen/commit/a888543ca5f3fd28121f7eea4dbd25898fa7be57">view</a>]</li>
<li>Revert using container-based infra as sudo is needed :-( [<a href="https://github.com/doxygen/doxygen/commit/f089c3fa4f47dc8bedd25d9d857d004525ee82c0">view</a>]</li>
@@ -1236,7 +1236,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Using tabu package for LaTeX tables [<a href="https://github.com/doxygen/doxygen/commit/647b6ac8669cd8ba1e8c60eeb3c2de961c7d6a1b">view</a>]</li>
<li>[Bug <a href="https://github.com/doxygen/doxygen/issues/5872">5872</a>] On Windows, generated layout is with UNIX EOL [<a href="https://github.com/doxygen/doxygen/commit/78a80001223af290c7c7321ad2d210fb3cd16f11">view</a>]</li>
<li>[Doxygen-users] plugin / filter not behaving as expected [<a href="https://github.com/doxygen/doxygen/commit/0c7f182016c7c2604a484367738e76cb40c0541b">view</a>]</li>
-<li>add spaces like &quot;Doyxgen&quot;CN_SPC-&gt;&quot;Doyxgen&quot; CN_SPC [<a href="https://github.com/doxygen/doxygen/commit/35d1aa8bf9208302601fa96462e246c98aa0b0e5">view</a>]</li>
+<li>add spaces like &quot;Doxygen&quot;CN_SPC-&gt;&quot;Doxygen&quot; CN_SPC [<a href="https://github.com/doxygen/doxygen/commit/35d1aa8bf9208302601fa96462e246c98aa0b0e5">view</a>]</li>
<li>allow building with custom iconv on Windows [<a href="https://github.com/doxygen/doxygen/commit/3d684f6d123abdbf630bb19bc6095cc9d69efb68">view</a>]</li>
<li>doc: generate doxygen&#39;s documentation. [<a href="https://github.com/doxygen/doxygen/commit/3c4a1ea2ee56f2604c2277f13737d53b3a0b0353">view</a>]</li>
<li>doc: put man pages under share/man/man1 [<a href="https://github.com/doxygen/doxygen/commit/95d28153779810dc95afafa38ed838f32516a1f4">view</a>]</li>
@@ -1293,7 +1293,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5720">5720</a> - &lt;CAPTION&gt; inside &lt;TABLE&gt; no longer works for LaTex output [<a href="https://github.com/doxygen/doxygen/commit/0599f92d06ff433446f34136ffe2f3d65d6bd109">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5726">5726</a> - Duplicate anchors from tagfiles [<a href="https://github.com/doxygen/doxygen/commit/1f21c23c57c91ba6901c0de38bb236f7246e88c9">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5727">5727</a> - Tagfile anchors not generated for enumeration values [<a href="https://github.com/doxygen/doxygen/commit/1d4f37cb13a75ca8bdc49be3558438104e7eef19">view</a>]</li>
-<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5728">5728</a> - Non-ascii characters are not emphasised [<a href="https://github.com/doxygen/doxygen/commit/8f67d4f63efd45b0d38502bdf68987d7fc1e92e9">view</a>]</li>
+<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5728">5728</a> - Non-ascii characters are not emphasized [<a href="https://github.com/doxygen/doxygen/commit/8f67d4f63efd45b0d38502bdf68987d7fc1e92e9">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5744">5744</a> - Using TAGFILES prevents symbol extraction [<a href="https://github.com/doxygen/doxygen/commit/a735498be5a572236755cc3da65bf4774cbac25c">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5753">5753</a> - PATCH: please consider making doxygen output byte for byte identical between individual runs by default [<a href="https://github.com/doxygen/doxygen/commit/3f2e8a3067712b025623e4420e6eb161febfd42b">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5754">5754</a> - Doxygen generates bad &quot;More...&quot; file links for functions within a namespace [<a href="https://github.com/doxygen/doxygen/commit/ea202be55d68af33917658e3fec169da3a7fa7a8">view</a>]</li>
@@ -1518,9 +1518,9 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5690">5690</a> - Crash when building gtkmm documentation [<a href="https://github.com/doxygen/doxygen/commit/050fce2b73d6e4455808ab86da2fddcf2f26e9b5">view</a>]</li>
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5694">5694</a> - \cite confused by labels ending with a dot (improved warning message) [<a href="https://github.com/doxygen/doxygen/commit/78fd02dc41384d81baddf17ff0bb3431267452fc">view</a>]</li>
<li>fix docbook output [<a href="https://github.com/doxygen/doxygen/commit/1a403d80160458091bab7c442e54f836c0b90bca">view</a>]
- <ol><li>support other than english</li>
+ <ol><li>support other than English</li>
<li>fix broken example link id</li>
- <li>fix incomplete TOC : no Classe etc.</li>
+ <li>fix incomplete TOC : no Classes etc.</li>
<li>add brief description for Functions etc.</li>
<li>Comply with REPEAT_BRIEF </li>
<li>Do not output duplicated contents when detailed description is missing.</li>
@@ -1793,7 +1793,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Bug <a href="https://github.com/doxygen/doxygen/issues/5456">5456</a> - Crash on \addindex \term [<a href="https://github.com/doxygen/doxygen/commit/653a2a8b123b79835af9f684f8b92ef7f88712aa">view</a>]</li>
<li>A new files have been added but is not incorporated in the windows build part [<a href="https://github.com/doxygen/doxygen/commit/d9dd873e25fba968ddcbcc79d6643f5df669b626">view</a>]</li>
<li>Add docbook directory to be removed as well [<a href="https://github.com/doxygen/doxygen/commit/08ea10029e705a388ab14ee29544d496a203f23f">view</a>]</li>
-<li>Add extra (documenattion) directories to ignore pattern [<a href="https://github.com/doxygen/doxygen/commit/db358b1f219fecf0d7df96d8c70b47b245471c66">view</a>]</li>
+<li>Add extra (documentation) directories to ignore pattern [<a href="https://github.com/doxygen/doxygen/commit/db358b1f219fecf0d7df96d8c70b47b245471c66">view</a>]</li>
<li>Add index support to context [<a href="https://github.com/doxygen/doxygen/commit/12cd22f4c32ed8b92da7b5a03181aa6735018a5b">view</a>]</li>
<li>Add line numbers in case comment is not closed properly. [<a href="https://github.com/doxygen/doxygen/commit/b1d513b2ac65fe26ceec2fa494867713efa01cd5">view</a>]</li>
<li>Add template context for annotated class index [<a href="https://github.com/doxygen/doxygen/commit/9434ecb13e1f3e2901b78d3e41e7f1d7d9469434">view</a>]</li>
@@ -1832,7 +1832,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Fix id parsing for atx markdown headers [<a href="https://github.com/doxygen/doxygen/commit/ee830bb8888535ac48c0c4fd90580542e7f70481">view</a>]</li>
<li>Fix segfault on invalid bounding FIG when patching dot [<a href="https://github.com/doxygen/doxygen/commit/1bd2e38a2ce2d0823557381c48fe47cb53d6fba8">view</a>]</li>
<li>Fix to VHDL scanner. [<a href="https://github.com/doxygen/doxygen/commit/5ca7d423a11337d5c31082f52a287a3dc0986642">view</a>]</li>
-<li>Fix typos in russian translation [<a href="https://github.com/doxygen/doxygen/commit/8ce2b0d7aec1d4398b5b4f365a7d3abbe75daf5f">view</a>]</li>
+<li>Fix typos in Russian translation [<a href="https://github.com/doxygen/doxygen/commit/8ce2b0d7aec1d4398b5b4f365a7d3abbe75daf5f">view</a>]</li>
<li>Fixed Tidy&#39;s &#39;empty span&#39; warning in HTML output [<a href="https://github.com/doxygen/doxygen/commit/8cfac90d6c8632436db1a6b650a05a8dfcfab5d0">view</a>]</li>
<li>Fixed compiler warnings in section.h [<a href="https://github.com/doxygen/doxygen/commit/683ef76f7bf1ba929f9c263064bb5f6c8e377275">view</a>]</li>
<li>Fixed difference between generated XML schema and XML files for HTML entities [<a href="https://github.com/doxygen/doxygen/commit/836af2f9510d10f2dd7d832025f214983387b3c6">view</a>]</li>
@@ -1847,7 +1847,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Fixed typo in doxyindexer.vcproj [<a href="https://github.com/doxygen/doxygen/commit/2bc8a820b3e2fefaedb10a3129eed35581a1ea5b">view</a>]</li>
<li>Fixes for missing build dependencies [<a href="https://github.com/doxygen/doxygen/commit/62379ff8fdb13d95c7651419d92db47150e15bcc">view</a>]</li>
<li>Give message when PROJECT_LOGO cannot be found or cannot be converted [<a href="https://github.com/doxygen/doxygen/commit/164864d9bc8ea7e32a69fbc0e47cff54dc678a48">view</a>]</li>
-<li>Handlingh of -- by \c and &lt;code&gt; results in - adjusted documentation [<a href="https://github.com/doxygen/doxygen/commit/73d12cc5cf0656e94125baea62cdb19b67908b3d">view</a>]</li>
+<li>Handling of -- by \c and &lt;code&gt; results in - adjusted documentation [<a href="https://github.com/doxygen/doxygen/commit/73d12cc5cf0656e94125baea62cdb19b67908b3d">view</a>]</li>
<li>Improve rendering of sub and superscripts in LaTeX [<a href="https://github.com/doxygen/doxygen/commit/a7c7f36ea2a67969bf3916c7600fe487e34438c0">view</a>]</li>
<li>Improved handling of percent symbol [<a href="https://github.com/doxygen/doxygen/commit/0e080f486f67008ef427c834f6ab6ebca7578124">view</a>]</li>
<li>Improved performance of rendering large index pages, by replacing images in the tables by spans [<a href="https://github.com/doxygen/doxygen/commit/956a7fb004e72923f737e387d053812f99b7bda2">view</a>]</li>
@@ -1893,7 +1893,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li>Use hook arrow for hyphens in symbol names in the LaTeX output. [<a href="https://github.com/doxygen/doxygen/commit/ac813134a85ba9bd999fb4cf8271c74e02cd4ebb">view</a>]</li>
<li>Wrong UTF 8 codes [<a href="https://github.com/doxygen/doxygen/commit/fd4beb272e5f1a760a71ab8d85463b8356c6f786">view</a>]</li>
<li>Fix broken links to subpages in LaTeX output [<a href="https://github.com/doxygen/doxygen/commit/10189681dcb46e543a287827e2096cef3dbc42ae">view</a>]</li>
-<li>\xmlonly aoppeared twice in see also section of \htmlonly and \docbookonly [<a href="https://github.com/doxygen/doxygen/commit/f1cdb27194dd180f1bff1fbdd87874bb0d15758d">view</a>]</li>
+<li>\xmlonly appeared twice in see also section of \htmlonly and \docbookonly [<a href="https://github.com/doxygen/doxygen/commit/f1cdb27194dd180f1bff1fbdd87874bb0d15758d">view</a>]</li>
<li>add css-escape to avoid jquery based xss [<a href="https://github.com/doxygen/doxygen/commit/7fea82094723ecfb4e9b3ea6819137b99d7dfa9c">view</a>]</li>
<li>add parameter [<a href="https://github.com/doxygen/doxygen/commit/c5bc9fc8c407aac845d594b2685d0c92699727d8">view</a>]</li>
<li>add search.py, a client for doxygen_sqlite3.db [<a href="https://github.com/doxygen/doxygen/commit/697ac97aad7fa045b6cc205050b69cf3f22408ad">view</a>]</li>
@@ -2004,7 +2004,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li> Allow links to other markdown pages of the form [link text](page.md)</li>
<li> Avoid accessing uninitialized memory in fileToString</li>
<li> Build problem with unistd.h and Cygwin The standard g++ compiler under windows (win32-g++) has unistd.gh file; Microsoft windows does not have it, therefore it is better to use the winbuild directory in case of windows and no dependency otherwise</li>
-<li> Consistency in language part of the documentation Made documentation more inline with other parts of the documentation (regarding the way e.g. filenames are presented) Corrected some spelling errors Corrected the warning in the language.doc by placing ta reference to the files from which language.doc is generated Corrected the color for the languages that are still v1.4.6 (language name now also red in stead of a pink background, was confusing with languages that were 1.5 / 1.6 compatible)</li>
+<li> Consistency in language part of the documentation Made documentation more inline with other parts of the documentation (regarding the way e.g. filenames are presented) Corrected some spelling errors Corrected the warning in the language.doc by placing a reference to the files from which language.doc is generated Corrected the color for the languages that are still v1.4.6 (language name now also red in stead of a pink background, was confusing with languages that were 1.5 / 1.6 compatible)</li>
<li> Corrected some inconsistencies in the comments</li>
<li> Debug output for lexical analyzer</li>
<li> Deleted generated files from source repository</li>
@@ -2109,7 +2109,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5225">5225</a> - Segmentation fault parsing a fortran file</li>
<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5226">5226</a> - Can't use @ref instead of \ref with msc</li>
<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5228">5228</a> - Misleading warning about DOT font</li>
-<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5233">5233</a> - Out-of-line docs for class template specialisations failing</li>
+<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5233">5233</a> - Out-of-line docs for class template specializations failing</li>
<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5234">5234</a> - Generated XML is malformed</li>
<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5239">5239</a> - Nested Aliases fail when the nested alias has two or more arguments.</li>
<li> Bug <a href="https://github.com/doxygen/doxygen/issues/5242">5242</a> - doxygen don't hide private Inherited Members</li>
@@ -2206,7 +2206,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li> id <a href="https://github.com/doxygen/doxygen/issues/5056">5056</a>: Added support for processing DocSets with Dash (thanks to
Bogdan Popescu for the patch </li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4900">4900</a>: Added option EXTERNAL_PAGES which can be used to determine
- whether or not pages importated via tags will appear under related
+ whether or not pages imported via tags will appear under related
pages (similar to EXTERNAL_GROUPS).</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/5042">5042</a>: Added new MathJax command MATHJAX_CODEFILE which supports
including a file with MathJax related scripting to be inserted before
@@ -2253,7 +2253,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li> id <a href="https://github.com/doxygen/doxygen/issues/4650">4650</a>: Replaced "echo -n" with "printf" in the configure script.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4684">4684</a>: Removed warning when using \endinternal</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4696">4696</a>: Added &amp;, @, and # as allowed characters for commands that</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/4788">4788</a>: Included patch by Abert to correctly link pages in the manual</li>
+<li> id <a href="https://github.com/doxygen/doxygen/issues/4788">4788</a>: Included patch by Albert to correctly link pages in the manual</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4850">4850</a>: Added support for single column Markdown tables.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4855">4855</a>: Incomplete documentation on doxygen -w latex</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4877">4877</a>: Doxygen crashed when structural commands (like \var) appeared
@@ -2267,7 +2267,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
rather than the file name.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/5059">5059</a>: build using ./configure ; make did not work if the path
contained a space.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/5060">5060</a>: Tag files are now identfied by the full path instead of
+<li> id <a href="https://github.com/doxygen/doxygen/issues/5060">5060</a>: Tag files are now identified by the full path instead of
only the name of the tag file.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/5086">5086</a>: In some cases members were missing from the tag file.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/5079">5079</a>: Fortran: derive intent from documentation in case no
@@ -2501,7 +2501,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li> id <a href="https://github.com/doxygen/doxygen/issues/5001">5001</a>: Fixed case where doxygen would during preprocessing.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/5002">5002</a>: A file specified using HTML_EXTRA_STYLEHSHEET did not end
up in the Qt Help index.</li>
-<li> Improved the way enum's are rendered in the HTML output.</li>
+<li> Improved the way enums are rendered in the HTML output.</li>
<li> When inlining structs (INLINE_SIMPLE_STRUCTS=YES) a &lt;p&gt; was missing
for members with a detailed description, causing invalid XHTML.</li>
<li> Fixed problem loading the navigation tree when using .xhtml as the
@@ -2583,7 +2583,7 @@ href="https://github.com/doxygen/doxygen/commit/a697caadf1912d0d74faa208f4cff887
<li> Added option AUTOLINK_SUPPORT which can be used to enable/disable
autolinking globally.</li>
<li> Included language updates for Czech, Spanish, Greek, Slovak, and
- Esparanto.</li>
+ Esperanto.</li>
</ul>
<h3>Bug fixes</h3>
<ul>
@@ -2870,8 +2870,8 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/4651">4651</a>: Included patch by Ryan Schmidt to make the Mac versions
in qglobal.h match that of Apple header files.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4659">4659</a>: Added C++11 classes when BUILTIN_STL_SUPPORT is enabled.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/4662">4662</a>: Using a backslash in a section cause 026E30F to appear in the
- latex TOC.</li>
+<li> id <a href="https://github.com/doxygen/doxygen/issues/4662">4662</a>: Using a backslash in a section causes 026E30F to appear in the
+ LaTeX TOC.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4675">4675</a>: Fortran: case sensitiveness for routines and functions
did not work</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4676">4676</a>: Fortran: continuation by ampersand not placed in code output.</li>
@@ -2934,7 +2934,7 @@ make sure you add the following:
(amount of &gt;'s determine the indentation level).</li>
<li> emphasis using *emphasize this* or _emphasis this_ or
strong emphasis using **emphasis this**. Unlike classic
- Markdown 'some_great_indentifier' is not touched.</li>
+ Markdown 'some_great_identifier' is not touched.</li>
<li> code spans can be created using back-ticks, i.e. `here's an example`</li>
<li> Using three or more -'s or *'s alone on a line with only spaces
will produce a horizontal ruler.</li>
@@ -3254,7 +3254,7 @@ make sure you add the following:
depending on the code page (thanks to Hirao for the patch).</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/2867">2867</a>: The .spec file in the source distribution did not get
updated to the latest version.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/2872">2872</a>: Fortran: Continuation character was not recognised in
+<li> id <a href="https://github.com/doxygen/doxygen/issues/2872">2872</a>: Fortran: Continuation character was not recognized in
fixed format code.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/2887">2887</a>: Fortran: @param checking was not case insensitive.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3168">3168</a>: Fixed problem combining @cond with preprocessor directives.</li>
@@ -3290,7 +3290,7 @@ make sure you add the following:
GENERATE_TREEVIEW was enabled.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4242">4242</a>: Linking to a section on the main page could result in a
broken link when GENERATE_TREEVIEW was enabled.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/4243">4243</a>: Fixed invalid warning when using @deparated method with
+<li> id <a href="https://github.com/doxygen/doxygen/issues/4243">4243</a>: Fixed invalid warning when using @deprecated method with
default values for parameters.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4245">4245</a>: A function made related using @relates could end up in
the wrong class if there was already a method with a matching
@@ -3378,7 +3378,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/4085">4085</a>: using @dot...@endot produced an image referenced with
absolute path.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4091">4091</a>: \mscfile did not work properly for LaTeX output.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/4095">4095</a>: Fixed problem where #include's could cause phantom __pad__
+<li> id <a href="https://github.com/doxygen/doxygen/issues/4095">4095</a>: Fixed problem where #include could cause phantom __pad__
members to appear in the output (appeared on Windows only).</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4103">4103</a>: Options PROJECT_LOGO and PROJECT_BRIEF were missing
from the manual.</li>
@@ -3402,7 +3402,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/4128">4128</a>: Included patch to fix broken hyperlink to page entry
in xreflists.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4136">4136</a>: Header of \page was wrong in Man page output.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/4137">4137</a>: #include's to other directories were not always linked.</li>
+<li> id <a href="https://github.com/doxygen/doxygen/issues/4137">4137</a>: #include to other directories were not always linked.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4140">4140</a>: Using "use Foo\Foo;" in PHP could cause doxygen to hang.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4142">4142</a>: In some cases the HTML output could contain an extra &lt;/p&gt;.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/4147">4147</a>: Tooltips with HTML entities could be wrongly truncated.</li>
@@ -3428,7 +3428,7 @@ make sure you add the following:
<h3>Changes</h3>
<ul>
<li> Added a header for each HTML page above the navigation menu,
- showing the project name and logo and a short descriptin (all optional).
+ showing the project name and logo and a short description (all optional).
Disabling the index (with DISABLE_INDEX) still shows the new header
(you can still customize this using HTML_HEADER). This now works
nicely in combination with GENERATE_TREEVIEW = YES and/or
@@ -3471,7 +3471,7 @@ make sure you add the following:
(thanks to Albert).</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3731">3731</a>: Fixed problem handling @cond..@endcond in Fortran code.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3779">3779</a>: Scope was missing in Tokens.xml when using docsets.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/3870">3870</a>, <a href="https://github.com/doxygen/doxygen/issues/2891">2891</a>: Applied patch tp avoid stripping prefixes for Fortran
+<li> id <a href="https://github.com/doxygen/doxygen/issues/3870">3870</a>, <a href="https://github.com/doxygen/doxygen/issues/2891">2891</a>: Applied patch to avoid stripping prefixes for Fortran
subroutines.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3895">3895</a>: allow label before end statement in Fortran</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3956">3956</a>: &lt;/see&gt; was not handled properly in comment block.</li>
@@ -3543,7 +3543,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/2097">2097</a>, <a href="https://github.com/doxygen/doxygen/issues/2669">2669</a>: /// were not stripped from formulas and \dot..\enddot</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3190">3190</a>: dropped support for a4wide paper format for LaTeX, since
it is on the LaTeX taboo list.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/3261">3261</a>: Behaviour of CLASS_DIAGRAM=NO in combination with
+<li> id <a href="https://github.com/doxygen/doxygen/issues/3261">3261</a>: Behavior of CLASS_DIAGRAM=NO in combination with
HAVE_DOT=YES, was not properly documented.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3332">3332</a>: Python comments for next class or method could end up in
code of a method/class when enabling INLINE_SOURCES.</li>
@@ -3583,7 +3583,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/3877">3877</a>: In the HTML output &lt;/div&gt; was missing for built-in
class diagrams.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3876">3876</a>: References in example files with underscores were wrong.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/"></a>: When using Japanese characters mixed with ascii characters
+<li> id <a href="https://github.com/doxygen/doxygen/issues/"></a>: When using Japanese characters mixed with ASCII characters
doxygen incorrectly ended the brief description with a dot.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3886">3886</a>: setting MULTILINE_CPP_IS_BRIEF to YES, cause /// to appear
in the output.</li>
@@ -3595,7 +3595,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/3898">3898</a>: \copydoc did not work for array type arguments (e.g. int[]).</li>
<li> Use \dotfile did not produce the correct map file, so URLs in dot
files did not work.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/3907">3907</a>: #define's in files only found via INCLUDE_PATH were not
+<li> id <a href="https://github.com/doxygen/doxygen/issues/3907">3907</a>: #define in files only found via INCLUDE_PATH were not
correctly handled.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3918">3918</a>: auto brief description ending with .) cause the ) to
end up in the detailed part.</li>
@@ -3607,7 +3607,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/3937">3937</a>: Latex makefile clean target used rm command also for Windows.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3939">3939</a>: the EXCLUDE_SYMBOLS option was missing form the online docs.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3962">3962</a>: \htmlinclude and \verbinclude ended the brief description.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/3963">3963</a>: Inconsistent behaviour when a brief description was given
+<li> id <a href="https://github.com/doxygen/doxygen/issues/3963">3963</a>: Inconsistent behavior when a brief description was given
following by a detailed comment block with JAVADOC_AUTOBRIEF enabled.</li>
<li> Fixed a number of typos in the documentation
(thanks to Albert)</li>
@@ -3683,7 +3683,7 @@ make sure you add the following:
and HTML_COLORSTYLE_GAMMA, which control respectively the hue,
saturation, and gamma of all elements in the HTML output.</li>
<li> Moved dot invocations to the end of a doxygen run. Doxygen will now
- run multiple instances of dot in parallel (for better CPU utilisation
+ run multiple instances of dot in parallel (for better CPU utilization
on multi-core systems). The new config option DOT_NUM_THREADS
determines the number of threads used (were 0 is auto-detect).</li>
<li> Added option EXT_LINKS_IN_WINDOW which controls whether or not
@@ -3698,7 +3698,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/2255">2255</a>, <a href="https://github.com/doxygen/doxygen/issues/3796">3796</a>: \if and \endif did not work properly inside auto lists.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3139">3139</a>: No warning for missing return type documentation even though
WARN_NO_PARAMDOC was set to YES.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/3341">3341</a>: Handling of nesting \defgroup's was not always working
+<li> id <a href="https://github.com/doxygen/doxygen/issues/3341">3341</a>: Handling of nesting \defgroup was not always working
properly.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3355">3355</a>: &oslash; was not translated correctly in the LaTeX output.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3401">3401</a>: Use relative paths for mscgen diagrams to avoid errors in the
@@ -4063,7 +4063,7 @@ make sure you add the following:
<li> id <a href="https://github.com/doxygen/doxygen/issues/3457">3457</a>: Fixed problem handling strings like a"\b" within a comment.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3459">3459</a>: Fixed problem matching explicitly scoped parameter in a
template class.</li>
-<li> id <a href="https://github.com/doxygen/doxygen/issues/3473">3473</a>: A namespaced with name "internal" (C++/CLI keyword)
+<li> id <a href="https://github.com/doxygen/doxygen/issues/3473">3473</a>: A namespace with name "internal" (C++/CLI keyword)
could confuse doxygen's C++ parser.</li>
<li> id <a href="https://github.com/doxygen/doxygen/issues/3477">3477</a>: @optional/@required attributes for Objective-C were missing
from the XML output.</li>
@@ -4183,8 +4183,8 @@ make sure you add the following:
<li> id 437346: Fixed issue handling multibyte characters in the RTF output.</li>
<li> id 475377: Improved error handling in case of character encoding
problems.</li>
-<li> id 486747: Inherited typedefs were not resolved propertly.</li>
-<li> id 508752: Add support for BLOCK DATA to the fortran parser.</li>
+<li> id 486747: Inherited typedefs were not resolved properly.</li>
+<li> id 508752: Add support for BLOCK DATA to the Fortran parser.</li>
<li> id 532695: included documentation update about the use of \public
and friends for object-oriented programming in C.</li>
<li> id 532808: References to class variables in PHP code did not already work.</li>
@@ -4206,7 +4206,7 @@ make sure you add the following:
wrong line counting and missing cross-references.</li>
<li> id 545128: \overload didn't work if it was the last statement in a
comment and not followed by a newline.</li>
-<li> id 553380: Removed bogus warning refering to a namespace member from
+<li> id 553380: Removed bogus warning referring to a namespace member from
with a brief description that was converted to a tooltip.</li>
<li> id 553968: Added support for JavaDoc command {@code ... }</li>
<li> id 554444: Bullet lists were no longer correctly indented when using
@@ -4318,7 +4318,7 @@ make sure you add the following:
<code>INCLUDED_BY_GRAPH</code>.
Run doxygen with the -l option to generate the default layout file.</li>
<li> Included update for the Macedonian, Catalan, Brazilian, and Serbian
- translation and also support for Serbian with Cyrilic characters.</li>
+ translation and also support for Serbian with Cyrillic characters.</li>
</ul>
<h3>Bug fixes</h3>
<ul>
@@ -4358,14 +4358,14 @@ make sure you add the following:
from multi-byte UTF-8 characters.</li>
<li> id 544479: <code>SORT_MEMBER_DOCS</code> did not work for class members.</li>
<li> id 546621: Fixed makefile so that .svn stuff is removed from the
- tarball when doing "make archive".</li>
+ tar-ball when doing "make archive".</li>
<li> id 546812: Using a table with row span greater than 1 did not
produce correct LaTeX output.</li>
<li> id 545098: Fixed problem parsing where clauses in combination with C#
generics.</li>
<li> id 545503: Nameless parameters of type "struct A" could end up wrongly
in the XML output.</li>
-<li> id 545970: Refering to the main page did not work as advertised.</li>
+<li> id 545970: Referring to the main page did not work as advertised.</li>
<li> id 546158: The variable defined inside a foreach statement in C# code
was not considered for source linking, cause potentially incomplete call
graphs.</li>
@@ -4396,7 +4396,7 @@ make sure you add the following:
<li> id 553616: One can now remove the automatic line breaks in the type
part of a declaration by using a custom stylesheet with
BR.typebreak { display: none; }</li>
-<li> id 553663: Aliases did not work in Fortan comments.</li>
+<li> id 553663: Aliases did not work in Fortran comments.</li>
<li> id 549022: Reimplemented in links could be wrong in case of
overloaded members.</li>
<li> id 553225: Parser was confused by arrays inside an Obj-C message.</li>
@@ -4432,7 +4432,7 @@ make sure you add the following:
<li> id 519573: Included patch to make the font-size button visible in the
CHM output.</li>
<li> id 521288: Added new options SHOW_NAMESPACES and SHOW_FILES to
- Suppress Namepace and Files Pages.</li>
+ Suppress Namespace and Files Pages.</li>
<li> id 521495: Included a patch that makes it easy to modify the root of
the html treeview with an image using style sheets.</li>
<li> id 522300: Added option IDL_PROPERTY_SUPPORT to enable/disable special
@@ -4461,8 +4461,8 @@ make sure you add the following:
<li> id 495687: Replaced MAX_DOT_GRAPH_MAX_NODES with DOT_GRAPH_MAX_NODES
in the docs &amp; config file.</li>
<li> id 508694 Fixed problem with mixed simple and double quotes in
- fortran format declaration</li>
-<li> id 508752: Fixed problem where the fortran scanner didn't recognize END</li>
+ Fortran format declaration</li>
+<li> id 508752: Fixed problem where the Fortran scanner didn't recognize END</li>
<li> id 510971: Fortran: parser was confused by double REAL() in processed
statements.</li>
<li> id 514488: Fixed problem matching argument lists with const qualifiers.</li>
@@ -4503,7 +4503,7 @@ make sure you add the following:
<li> id 524473: Removed incorrect warnings about parameters in VHDL.</li>
<li> id 525140: Improved handling of Objective-C 2.0 properties.</li>
<li> id 525143: Properties are now listed as attributes in the UML diagrams.</li>
-<li> id 525144: GENERATE_DOCSET option greyed out in doxywizard.</li>
+<li> id 525144: GENERATE_DOCSET option grayed out in doxywizard.</li>
<li> id 526155: Removed warning about QFile::setName when parsing VHDL files.</li>
<li> id 527781: Template arguments for bases class not shown in a consistent
way.</li>
@@ -4545,7 +4545,7 @@ make sure you add the following:
#define C(S,m) /** container S */ struct S { /** value m */ int m; }
</code></li>
<li> id 493923: The options SOURCE_BROWSER, CALL_GRAPH, CALLER_GRAPH,
- REFERENCES_RELATION, and REFERENCED_BY_RELATION can now be indepently
+ REFERENCES_RELATION, and REFERENCED_BY_RELATION can now be independently
enabled and disabled. By default the relations are now disabled.</li>
</ul>
<h3>New features</h3>
@@ -4553,7 +4553,7 @@ make sure you add the following:
<li> Added support for VHDL (.vhd or .vhdl extension) based on a patch by
Martin Kreis. Use OPTIMIZE_OUTPUT_VHDL when parsing VHDL code. </li>
<li> id 374699: Added support for Objective-C 2.0 properties.</li>
-<li> Added compilation support for MacOSX 10.5 (Leopard) incombination with
+<li> Added compilation support for MacOSX 10.5 (Leopard) in combination with
Xcode 3</li>
<li> Added support for docsets, which allow integration of doxygen generated
API documentation in Xcode 3. new options:
@@ -4572,7 +4572,7 @@ make sure you add the following:
the second and third argument of a \class command, when
the documentation is already in front of a class definition.</li>
<li> Added translator support for Macedonian.</li>
-<li> Added language updates for German, Perian, Spanish, Taiwanese,
+<li> Added language updates for German, Persian, Spanish, Taiwanese,
and Chinese, Korean, Croatian.</li>
</ul>
<h3>Bug fixes</h3>
@@ -4607,7 +4607,7 @@ make sure you add the following:
some compilers.</li>
<li> id 492027: Ampersand (&amp;) in front of parameter stops documenting
of PHP source</li>
-<li> id 493249: using a namespace (or fortran module) caused the namespace
+<li> id 493249: using a namespace (or Fortran module) caused the namespace
to appear in the documentation as if it was defined.</li>
<li> id 493434: Nested C# style XML lists in a comment block were not
handled correctly. </li>
@@ -4631,7 +4631,7 @@ make sure you add the following:
<li> id 500635: Project name is no longer placed before each top level
item in the treeview and other indices.</li>
<li> id 500465: Fixed some issues compiling for AIX.</li>
-<li> id 500928: Fixed parser issue handling a tripple quoted
+<li> id 500928: Fixed parser issue handling a tipple quoted
string when used to initialize a Python variable.</li>
<li> id 500944: Python variables with package scope were only extracted if
EXTRACT_STATIC was enabled.</li>
@@ -4650,7 +4650,7 @@ make sure you add the following:
<li> id 507603: Enabling FILTER_SOURCE_FILES caused strange warnings when
INPUT_FILTER is empty.</li>
<li> id 508740: Using upper case port mode specifiers did not work correctly.</li>
-<li> id 508753: Fortran: Added .f as allowed fortran extension.</li>
+<li> id 508753: Fortran: Added .f as allowed Fortran extension.</li>
<li> id 508759: Fortran: fixed potential memory corruption while scanning
parameter lists.</li>
<li> id 507528: XML output was not correct for pointer arrays.</li>
@@ -4659,7 +4659,7 @@ make sure you add the following:
documentation.</li>
<li> id 509582: Fortran: Spaces in function return type were not parsed
properly.</li>
-<li> id 510387: Fortran scanner didn't parse initialisation of complex type
+<li> id 510387: Fortran scanner didn't parse initialization of complex type
correctly. </li>
<li> id 511921: @file command ended brief description even when
JAVADOC_AUTOBRIEF was enabled.</li>
@@ -4692,7 +4692,7 @@ make sure you add the following:
(used for Python to C++ bindings).</li>
<li> id 475828: Added support for CLI/C++ style indexed properties.</li>
<li> Added config option TYPEDEF_HIDES_STRUCT which when enabled treats a typedef
- of a struct as a struct with the name of the typedef. This behavious was
+ of a struct as a struct with the name of the typedef. This behavior was
coupled to OPTIMIZE_OUTPUT_FOR_C in the previous version and is now an independent
option.</li>
<li> Included updates for the Korean, Brazilian and Chinese translations.</li>
@@ -4784,7 +4784,7 @@ make sure you add the following:
<li> When <code>OPTIMIZE_OUTPUT_FOR_C</code> is enabled then a struct definition of the
form <code>typedef struct _S { ... } S_t</code> will be shown in the output as a
struct of type <code>S_t</code> and the typedef itself is omitted
- (previousily <code>_S</code> was shown
+ (previously <code>_S</code> was shown
as well as a typedef of the form <code>typedef _S S_t</code>). </li>
<li> Improved the line-breaking rules for members whose return types have many characters
(for example a function returning a pointer to a template class).</li>
@@ -4970,7 +4970,7 @@ make sure you add the following:
<li> id 390821: Fixed problem parsing Java 1.5 enums with initializers.</li>
<li> id 391619: When dot produces an non-zero return code, doxygen now prints the
return code and the command it tried to execute.</li>
-<li> id 407815: Doxygen's got confused by certain combinations of " and ' s in PHP code.</li>
+<li> id 407815: Doxygen got confused by certain combinations of " and ' in PHP code.</li>
<li> id 409935: Fixed bug in qcstring.cpp</li>
<li> id 411300: PDF/Latex output was broken for operator[] documentation.</li>
<li> id 411328: Fixed Accessibility/Section 508 Compliance issue.</li>
@@ -5034,7 +5034,7 @@ make sure you add the following:
<li> id 131445: Fixed autolinking for related functions.</li>
<li> id 137236: Updated documentation to make it clear that a lower-case only word
is not a candidate for autolinking.</li>
-<li> id 141758: Fixed a problem parsing &lt;?=...?&gt; contructs outside of functions in PHP.</li>
+<li> id 141758: Fixed a problem parsing &lt;?=...?&gt; constructs outside of functions in PHP.</li>
<li> id 319169: Second level index not shown when DISABLE_INDEX=YES.</li>
<li> id 325337: Added "optimize output for C#" option to Doxywizard.</li>
<li> id 325426: Partial C# class inside a namespace where not handled properly.</li>
@@ -5068,7 +5068,7 @@ make sure you add the following:
an anonymous namespace </li>
<li> id 349867: Fixed issue handling brief and detailed description when
both are positioned after an item. </li>
-<li> id 350168: Doxygen didn't parse C# type contraints properly.</li>
+<li> id 350168: Doxygen didn't parse C# type constraints properly.</li>
<li> id 351890: In some cases C# attributes were treated as properties.</li>
<li> id 353044: C99 style variadic macros were not handled properly by doxygen.</li>
<li> id 353195: Member grouping with SUBGROUPING = YES now works the same for files
@@ -5249,7 +5249,7 @@ make sure you add the following:
set.</li>
<li> id 318460: Multiply-defined labels if two function specializations
differ only on the name of a template parameter.</li>
-<li> id 319219: Spurious space was inserted after inlined math formulae.</li>
+<li> id 319219: Spurious space was inserted after inlined math formulas.</li>
<li> id 319826: The file name for template classes could become too
long causing files that cannot be created by some file systems.</li>
<li> id 320026: undocumented "typedef struct foo baz" causes subsequent
@@ -5362,7 +5362,7 @@ make sure you add the following:
<li> id 311198: If JAVADOC_AUTOBRIEF was set to YES, a \todo or \bug like
command always ended at the first dot.</li>
<li> id 311207: The /* and */ inside a \code ... \endcode code fragment
- were stipped.</li>
+ were stripped.</li>
<li> id 311577: Putting a documentated class name in the title of the main
page caused a LaTeX error if pdf hyperlinks were enabled.</li>
<li> id 311665: Fixed compile issue for Solaris.</li>
@@ -5464,13 +5464,13 @@ make sure you add the following:
<li> id 304598: Using operator-- in resulted in broken HTML output due to the
embedded doxytag that include the end of a HTML comment.</li>
<li> id 304623: Spreading a @fn command over multiple lines didn't work
- anymore without using line-contination characters.</li>
+ anymore without using line-continuation characters.</li>
<li> id 304666: Attributes of the same class appeared separated with \n in
collaboration diagrams</li>
-<li> id 304751: A define "foo()" was indisguishable from a define "foo" in
+<li> id 304751: A define "foo()" was indistinguishable from a define "foo" in
the XML output.</li>
<li> id 304752: XML location tag attribute "file" could have the
- syntactially wrong value "&lt;generated&gt;" in some cases.</li>
+ syntactically wrong value "&lt;generated&gt;" in some cases.</li>
<li> id 305334: INPUT_FILTER tag did not work properly anymore due to
additional quotes.</li>
<li> id 305364: Improved argument matching routine to avoid cases where
@@ -5581,12 +5581,12 @@ make sure you add the following:
CASE_SENSE_NAME was set to NO.</li>
<li> id 170592: Using \ref for Objective-C methods did not work if the
name contained a colon.</li>
-<li> id 171795: Refering to Objective-C methods now follows Apple's
+<li> id 171795: Referring to Objective-C methods now follows Apple's
conventions. </li>
<li> id 171878: When JAVADOC_AUTOBRIEF = YES and there was no blank line
after a page command, the first sentence did not appear in
the documentation.</li>
-<li> id 171923: Doxygen failed to match arguments for a function documentated
+<li> id 171923: Doxygen failed to match arguments for a function documented
out-of-line with @fn and using @relatesalso.</li>
<li> id 172118: Doxywizard now shows the version of doxygen it is for.</li>
<li> id 172133: Doxygen did not longer ignore preceding C++ comments inside a
@@ -5596,7 +5596,7 @@ make sure you add the following:
<li> id 172329: The index of the CHM did not always link to groups correctly.</li>
<li> id 172456: Fixed case where doxygen had problems differentiating const
and non-const member functions.</li>
-<li> id 172494: @code blocks were not poperly ignored by the preprocessor
+<li> id 172494: @code blocks were not properly ignored by the preprocessor
in some cases.</li>
<li> id 172622: Fixed parse problem for Objective-C method implementations
whole declaration part ended with a semicolon.</li>
@@ -5754,7 +5754,7 @@ make sure you add the following:
an anonymous namespace.</li>
<li>id 169549: Previous fixes introduced flattening of the class hierarchy.</li>
<li>id 169640: File suffix check for the D language was broken.</li>
-<li>id 169641: D contructors and destructors were not detected.</li>
+<li>id 169641: D constructors and destructors were not detected.</li>
<li>is 169657: Fixed the way import is treated in D to prevent recursive
lockup.</li>
<li>id 169784: Objective-C methods with a variable number of arguments were
@@ -5881,7 +5881,7 @@ make sure you add the following:
<li> id 155272: Image filenames in RTF output were not quoted causing problem
with custom images whose name contained spaces.</li>
<li> id 155322: Fixed parse problem for php code containing '#'. </li>
-<li> id 155224: Java interfaces did't resolve across packages w/o FQN.</li>
+<li> id 155224: Java interfaces didn't resolve across packages w/o FQN.</li>
<li> id 156411: Return type of a function was not hyperlinked in some cases
(typical with nested namespaces or Java packages).</li>
<li> id 156445: function seen first in header and doc'ed in
@@ -6129,7 +6129,7 @@ make sure you add the following:
<li> Included patch that removes some cosmetic annoyances in the man page
output (thanks to Chris Croughton).</li>
<li> Added internationalization support for Afrikaans and
- Lithanian. Included language updates for Dutch,
+ Lithuanian. Included language updates for Dutch,
Czech, Italian, Brazilian, Croatian, Japanese, Norwegian and
Russian.</li>
</ul>
@@ -6146,7 +6146,7 @@ make sure you add the following:
<li> id 138394: C style comments placed on the same line after a macro
definition appeared as part of the macro's value.</li>
<li> id 138429: Fixed language setting for HTML output when using
- traditional chinese.</li>
+ traditional Chinese.</li>
<li> id 140259: Using @dotfile in a comment block could cause broken @refs
to sections defined after the @dotfile command.</li>
<li> id 141915: Fixed a couple of problems with the RTF output.</li>
@@ -6309,7 +6309,7 @@ make sure you add the following:
<li> Examples (documented via \example) are now included in the XML output.</li>
<li> New option SORT_BRIEF_DOCS which when enabled will list the
declaration section of the documentation (with the brief descriptions)
- in alpabetical order, instead of declaration order (thanks to
+ in alphabetical order, instead of declaration order (thanks to
Akos Kiss for the patch).</li>
<li> Included patch for Hungarian translation (thanks to Akos Kiss)
and for the Serbian language. Added support for mixed Korean/english
@@ -6364,7 +6364,7 @@ make sure you add the following:
<h3>New features</h3>
<ul>
<li> Added support for parsing K&amp;R style function prototypes.
- Please try it on your favourite legacy C project and report any
+ Please try it on your favorite legacy C project and report any
problems.</li>
<li> Included languages updates for Traditional Chinese,
Danish, German, Korian translation.</li>
@@ -6374,7 +6374,7 @@ make sure you add the following:
generating source code listings as part of the XML output (thanks to
Paul Ross for the patch). </li>
<li> Added new config option ABBREVIATE_BRIEF which makes the
- abbration process of brief descriptions configurable and language
+ aberration process of brief descriptions configurable and language
independent (thanks to Jake Colman for the patch).</li>
<li> The alphabetical class list now comes with a quick index
(thanks to Marcin Zukowski for the patch).</li>
@@ -6396,7 +6396,7 @@ make sure you add the following:
was produced.</li>
<li> id 123206: Fixed problem in qtools when opening files in text mode.</li>
<li> id 123322: The search page did not honor DISABLE_INDEX.</li>
-<li> id 123420: Functions with a brief description caused bugus &lt;/em&gt; tags
+<li> id 123420: Functions with a brief description caused bogus &lt;/em&gt; tags
in the HTML output.</li>
<li> id 124114: typo in the generated PHP search script could cause errors
in the search result page.</li>
@@ -6436,7 +6436,7 @@ make sure you add the following:
<li> Fixed problem that HTML image maps ended up in the RTF output.</li>
<li> Fixed bug in code fragment parser that could cause memory corruption
in certain cases.</li>
-<li> Fixed problem matching definition and declation of functions, which
+<li> Fixed problem matching definition and declaration of functions, which
could cause bogus warnings for functions with the same name but in
different namespaces.</li>
<li> Using "/// @file" to document a file quickly was not possible, while
@@ -6679,7 +6679,7 @@ make sure you add the following:
<li> Links to groups imported via tag files were broken.</li>
<li> Fixed problem resolving class relations for nested classes within
namespaces.</li>
-<li> Static members can now be documentated in a separate file using \fn
+<li> Static members can now be documented in a separate file using \fn
as long as they have unique names. If the names are not unique the
documentation must be located in the same file (as was required before).</li>
<li> In arguments and return types of the form NA::A were not linked if NA
@@ -6704,7 +6704,7 @@ make sure you add the following:
<li> Fixed problem handling omission of the optional arguments of
the \image command.</li>
<li> Enabling HIDE_IN_BODY_DOCS did not work properly if C++-style special
- comments were used inside the body of a fucntion.</li>
+ comments were used inside the body of a function.</li>
<li> Fixed problem cross-referencing variables used as a
guard (i.e. if (var) ...) </li>
<li> Setting ENUM_VALUES_PER_LINE to 0 caused a division by 0 error.</li>
@@ -6776,7 +6776,7 @@ make sure you add the following:
<li> Fixed preprocessor problem with parsing /*//*/</li>
<li> URL's in the docs using &lt;a href=""&gt; caused a nested link. </li>
<li> "using namespace A::B;" confused the code parser.</li>
-<li> Interface keyword was not recognised in C# (thanks to Onorio Catenacci
+<li> Interface keyword was not recognized in C# (thanks to Onorio Catenacci
for the patch).</li>
<li> Line counting was incorrect when parsing multi-line formulas.</li>
<li> \section's in a \mainpage are now correctly numbered in the LaTeX
@@ -6829,7 +6829,7 @@ make sure you add the following:
if they were documented.</li>
<li> The treeview page was not rendered with the right character set (it was
always English).</li>
-<li> Explicit template instantations appeared as a variable in the output.</li>
+<li> Explicit template instances appeared as a variable in the output.</li>
<li> Java instance and static initializer blocks are now correctly parsed
and can be documented.</li>
<li> Fixed bug in the LATEX_HIDE_INDICES option.</li>
@@ -6897,7 +6897,7 @@ make sure you add the following:
was already suggested in the docs).</li>
<li> source code line in the XML output didn't escape special characters
like &amp; anymore.</li>
-<li> Fixed small bug in german translation (thanks to Jens Seidel).</li>
+<li> Fixed small bug in German translation (thanks to Jens Seidel).</li>
<li> e-mail addresses with multiple dots got truncated when linked.</li>
<li> Attributes of html commands with value "" where not properly parsed
causing the image in the legend page not to appear.</li>
@@ -6931,7 +6931,7 @@ make sure you add the following:
<li> Fixed problem in code browser that prevented linking to global
variables defined in other files.</li>
<li> When putting a "using namespace X" in a header file doxygen did not
- recognise this in files that included the header file.</li>
+ recognize this in files that included the header file.</li>
<li> Fixed bug in parsing sections without title.</li>
<li> doxytag did not include anchor in the search index. Thanks to
Joerg Schlichenmaier for the fix.</li>
@@ -6978,7 +6978,7 @@ make sure you add the following:
<li> RCS/CVS tags did not appear in the output.</li>
<li> @note section result in section with type "bug" in the XML output.</li>
<li> Dot graphs were truncated too quickly in some cases.</li>
-<li> Files with a .php4 extension are now recognised as PHP files.</li>
+<li> Files with a .php4 extension are now recognized as PHP files.</li>
<li> Source browser could get out of sync causing wrong cross references.</li>
<li> Text after @} could end up in another documentation block.</li>
<li> Putting a style command such as \c or \b at the end of a line, before
@@ -7020,7 +7020,7 @@ make sure you add the following:
<li> Included language updates for French, Czech, and Russian.</li>
<li> Included a number of enhancements to the xml parser (thanks to
a patch by Tree).</li>
-<li> Locally documentated parameters now appear in the XML output
+<li> Locally documented parameters now appear in the XML output
(thanks to Cormac Twomey for the patch). </li>
<li> The preprocessor now inserts line control commands where appropriate.</li>
</ul>
@@ -7028,7 +7028,7 @@ make sure you add the following:
<ul>
<li> Aliased \if .. \endif commands around a \brief section were not handled
properly.</li>
-<li> Warnings for undocumentation members were not generated anymore
+<li> Warnings for undocumented members were not generated anymore
in certain cases.</li>
<li> A member of a group linked with \ref showed the group's title
as link text instead of the member's name.</li>
@@ -7111,7 +7111,7 @@ make sure you add the following:
<li> Undocumented private friend classes no longer cause warnings</li>
<li> Undocumented private classes no longer cause warnings</li>
<li> Undocumented members are now hidden if they are
- default constuctors, destructors or reimplemented.</li>
+ default constructors, destructors or reimplemented.</li>
</ul></li>
<li> Pages introduced via \page are now context aware. This means that
if you put them inside a class or namespace, names do not have
@@ -7126,11 +7126,11 @@ make sure you add the following:
that a list of all deprecated items is generated.
Thanks to Angela Marshall for the patch.</li>
<li> Enum value documentation was added to the XML output.</li>
-<li> Files ending with ".inc" are now recognised as PHP files
+<li> Files ending with ".inc" are now recognized as PHP files
(thanks to Marcus Ahlfors).</li>
<li> Included updated documentation for language translators
(thanks to Petr Prikryl).</li>
-<li> Included language updates for Czech, Slovak, Brazillan, Croatian,
+<li> Included language updates for Czech, Slovak, Brazilian, Croatian,
Portuguese, Russian, Polish, Japanese and Serbian.
Include language support for Catalan (thanks to Albert Mora)</li>
<li> Included .dsp update by Simon Goodwin (already needs to be updated
@@ -7218,12 +7218,12 @@ make sure you add the following:
of some item and paste it in another documentation block.</li>
<li> i18n: Added support for the Serbian language (thanks to Dejan Milosavljevic).
Included a new language option Japanese-en for combined Japanese
- and english.</li>
+ and English.</li>
<li> Included patch for dealing with variable argument macros in @param
(thanks to Alfred Heggestad).</li>
<li> Added new option MULTILINE_CPP_IS_BRIEF to make doxygen treat
a multi-line brief comment block as a brief description. Set this to
- YES to obtain the behaviour of version 1.2.15 and earlier. Default as
+ YES to obtain the behavior of version 1.2.15 and earlier. Default as
of version 1.2.16 is to treat multi-line C++ comment block as a
detailed description.</li>
<li> New option CHM_FILE to set the .chm file (and path) to use for
@@ -7298,7 +7298,7 @@ make sure you add the following:
</ul></li>
<li> operator|() caused invalid entries in the latex index.</li>
<li> Fixed bug parsing URLs with curly braces in documentation blocks.</li>
-<li> Html help output now uses the correct language code if non english
+<li> Html help output now uses the correct language code if non English
language is selected.</li>
<li> Fixed bug in generate makefile for latex output (thanks to Petr
Prikryl)</li>
@@ -7306,7 +7306,7 @@ make sure you add the following:
confused the parser.</li>
<li> Fixed problem handling function typedefs.</li>
<li> \endif appeared in output when used via ALIASES in a brief description.</li>
-<li> Included heuristic to distiguish between a variable definition
+<li> Included heuristic to distinguish between a variable definition
with initialization via a constructor and a function prototype
(e.g. "Test var(initVal);", v.s. "Test func(SomeType);").</li>
<li> Fixed lock-up problem when to @brief were put after each other in a
@@ -7373,10 +7373,10 @@ make sure you add the following:
Please report any problems that remain.</li>
<li> Alias commands put in separate parameter documentation blocks
were not resolved.</li>
-<li> The documentation for arguments, documented with a seperate
+<li> The documentation for arguments, documented with a separate
documentation block, was not consistently shown in source and header
files, depending on the order of the input files. </li>
-<li> The characters '(', ')', '$', ''', and ';' were not recognised
+<li> The characters '(', ')', '$', ''', and ';' were not recognized
as part of an URL.</li>
<li> Grouped enum values could not share the same documentation block
even when DISTRIBUTE_GROUP_DOC is YES. </li>
@@ -7397,7 +7397,7 @@ make sure you add the following:
classes, imported via using declarations, as their parameter type.</li>
<li> Fixed bug in conditional section handling for cases like:
@if guard text @else more text @endif</li>
-<li> The html help files did not honour the HTML_FILE_EXTENSION settings.</li>
+<li> The html help files did not honor the HTML_FILE_EXTENSION settings.</li>
<li> Removed bogus warning when using @param for function-type
parameters.</li>
<li> Include statements in the source browser output now link to the
@@ -7470,7 +7470,7 @@ make sure you add the following:
with full access to documentation blocks.
Made inheritance/collaboration diagrams accessible via the
XML parser API (see addon/doxmlparser/include/doxmlintf.h).
- Reorganised the internals of the XML parser so the API does
+ Reorganized the internals of the XML parser so the API does
not require destructors. Made the parser more portable (it should
compile with gcc and M$ visual C++ now).</li>
</ul>
@@ -7493,7 +7493,7 @@ make sure you add the following:
<li> In some cases the tree view showed leaf elements as non-leafs. </li>
<li> Fixed a number of cases where illegal characters could end up in
the XML output.</li>
-<li> If a function in a base class was (re)implemented by serveral classes
+<li> If a function in a base class was (re)implemented by several classes
only one of them appeared in the "(re)implemented in" list. </li>
<li> graph_legend.gif was hardcoded in translator_*.h files.
Note to translators: this has affected all translator files, so please
@@ -7560,7 +7560,7 @@ make sure you add the following:
this tag switches off the language filter...
*/
</pre>
- Which of the language specific fragments is outputed depends
+ Which of the language specific fragments is outputted depends
on the setting of OUTPUT_LANGUAGE (Thanks to Milan Rusek for the patch).</li>
<li> Added build support for Cygwin (thanks to Ryunosuke Sato). </li>
<li> Added new option HTML_FILE_EXTENSION to allow different file extension
@@ -7595,7 +7595,7 @@ make sure you add the following:
<li> Undocumented classes exposed when setting EXTRACT_ALL to YES, could
result in broken links in the class hierarchy.</li>
<li> Exception specifications in Java were not parsed properly.</li>
-<li> If INLINE_INHERITED_MEMB was YES, pure vitual members of base classes
+<li> If INLINE_INHERITED_MEMB was YES, pure virtual members of base classes
reachable via multiple paths appeared more than once in the
documentation.</li>
<li> Removed potential recursive loop when computing reimplements relations
@@ -7856,7 +7856,7 @@ make sure you add the following:
<li> Fixed a number of XML output bugs (thanks to Christian Hammond).</li>
<li> Fixed bug parsing character literals.</li>
<li> Fixed bug in RTF output (bracket mismatch).</li>
-<li> Inializer of the last enum value of an enum did not always appear.</li>
+<li> Initializer of the last enum value of an enum did not always appear.</li>
<li> Dots were removed from return types in Java.</li>
<li> In some cases a broken "More..." link was generated after
a brief class description.</li>
@@ -7965,10 +7965,10 @@ make sure you add the following:
<ul>
<li> Friend class declarations are now treated as normal members.</li>
<li> Completely rewrote the way templates are handled.
- Doxygen now (internally) computes all template instances it encounters.
+ Doxygen now (internally) computes all template instantiations it encounters.
This has the following advantages:
<ul>
- <li>Template instances are now shown in the hierarchical index
+ <li>Template instantiations are now shown in the hierarchical index
and in all class diagrams in a uniform way.</li>
<li>The list of all members is now correct for classes deriving
from a template.</li>
@@ -7986,7 +7986,7 @@ make sure you add the following:
<li> Added GNU install tool auto detection to the configure script.</li>
<li> Included update for French translation (thanks to Xavier Outhier)
Olexij Tkatchenko has added support for the Ukrainian language.
- Included update for Portuguese and Brazillian.</li>
+ Included update for Portuguese and Brazilian.</li>
<li> Added --docdir option to the configure script.</li>
<li> Using the non-commercial version of Qt for windows, it is now
possible to build doxywizard for windows.</li>
@@ -8001,7 +8001,7 @@ make sure you add the following:
<li> Removed bogus warnings when parsing tag files.</li>
<li> The detailed description in a @name block can now be more than
plain text.</li>
-<li> Included fix for the tree view script for the mozilla browser
+<li> Included fix for the tree view script for the Mozilla browser
(thanks to Alec Panovici).</li>
<li> Grouping members with the same signature but with a different scopes
is now possible.</li>
@@ -8036,7 +8036,7 @@ make sure you add the following:
list of all members, while they were accessible from the derived class.</li>
<li> Reworked part of the template handling. Doxygen should now be
capable of handling nested template classes correctly. Please test
- this if you are using these contructs. Thanks to Christoph Koegl
+ this if you are using these constructs. Thanks to Christoph Koegl
for providing some difficult test cases.</li>
<li> Fixed parse problem when parsing &lt;&lt; as part of the first
argument of a typedef.</li>
@@ -8088,7 +8088,7 @@ make sure you add the following:
<h3>New features</h3>
<ul>
<li> The dot generated inheritance and collaboration graphs for classes
- should now show the proper template instantation for the derived/used
+ should now show the proper template instantiation for the derived/used
classes. For instance it should show that class S uses class V
(indirectly) in the following example:
<pre>
@@ -8127,7 +8127,7 @@ make sure you add the following:
\defgroup must be used exactly once for a group, so you should
provide a title. Without the title you will get a warning and
- doxygen will use the name as title (this is the old behaviour).
+ doxygen will use the name as title (this is the old behavior).
<pre>
/** \addtogroup name */
</pre>
@@ -8176,7 +8176,7 @@ make sure you add the following:
<h3>Bug fixes</h3>
<ul>
<li> Fixed a bug in the LaTeX output generation (empty lists).</li>
-<li> Doxygen can now distiguishing f(const A) from f(const B)
+<li> Doxygen can now distinguishing f(const A) from f(const B)
even though they match from a syntactical point of view.</li>
<li> A template base class that is actually an inherited template
argument of the derived class is no longer shown in the output
@@ -8265,7 +8265,7 @@ make sure you add the following:
<li> Setting OPTIMIZE_OUTPUT_FOR_C still produced some C++-ish
sentences for the list of all struct/union fields.</li>
<li> Undocumented friend functions were listed as friend classes.</li>
-<li> A CORBA IDL union with a switch was not always recognised correctly. </li>
+<li> A CORBA IDL union with a switch was not always recognized correctly. </li>
<li> doxygen did not handle try-function-blocks with multiple catch clauses
properly.</li>
<li> \bug and co. were not working for static members.</li>
@@ -8320,8 +8320,8 @@ make sure you add the following:
<ul>
<li> the addin no longer requires administrator privileges to work
(thanks to Michael Beck)</li>
- <li> the existance of files is now checked (thanks to Pekka Pessi).</li>
- <li> .odl and .inl files are recognised (thanks to Pekka Pessi).</li>
+ <li> the existence of files is now checked (thanks to Pekka Pessi).</li>
+ <li> .odl and .inl files are recognized (thanks to Pekka Pessi).</li>
</ul></li>
</ul>
@@ -8351,7 +8351,7 @@ make sure you add the following:
if EXTRACT_PRIVATE is set to YES, instead of just the non-inherited
private members.</li>
<li> Fixed autolink problem for grouped members.</li>
-<li> Mutliple static global functions with the same name (but in different
+<li> Multiple static global functions with the same name (but in different
files), which were forward declared, could make doxygen put
the wrong documentation block at the wrong global function.</li>
<li> Support for Norwegian was not enabled.</li>
@@ -8378,7 +8378,7 @@ make sure you add the following:
<li> Putting &lt;a href="..."&gt;&lt;img src="..."&gt;&lt;/a&gt; in the
docs will now work as expected for HTML.</li>
<li> Fixed problems with &gt;pre&gt;...&gt;/pre&gt; block in LaTeX.</li>
-<li> Putting &amp;ccedil; in the docs now preduces a c-cedille.</li>
+<li> Putting &amp;ccedil; in the docs now produces a c-cedille.</li>
</ul>
@@ -8430,7 +8430,7 @@ make sure you add the following:
<h3>Bug fixes</h3>
<ul>
<li> Fixed 0-pointer bug that could crash doxygen in some cases.</li>
-<li> Starting a list in a brief JavaDoc-style description splitted
+<li> Starting a list in a brief JavaDoc-style description split
the list into two invalid parts if a list item ended with a dot.</li>
<li> Fixed a problem with linking to grouped class members.</li>
<li> Indenting of code fragment in LaTeX output was not always correct.
@@ -8517,7 +8517,7 @@ make sure you add the following:
<li> \ingroup can now be put in a one line comments (thanks to Patrick Ohly)</li>
<li> \ingroup in a comment block before a comma separated list of
variables is now applied to all variables (as is the documentation
- itself). (thanke to Patrick Ohly for the patch)</li>
+ itself). (thanks to Patrick Ohly for the patch)</li>
<li> @{ .. @} blocks can now be used for normal groups as well
(thanks to Trevor Robinson for the patch). Here is an example:
<pre>
@@ -8623,7 +8623,7 @@ make sure you add the following:
<ul>
<li> Support for the Slovene language (thanks to Matjaz Ostroversnik)</li>
<li> Bit fields for struct members are now shown in the documentation.</li>
-<li> Enabled "favourites" and "Full text-search" for the generated
+<li> Enabled "favorites" and "Full text-search" for the generated
HTML Help browser files. </li>
<li> Added support for M$-IDL properties. The "methods:" section
now also works.</li>
@@ -8678,9 +8678,9 @@ make sure you add the following:
now always pointing to the correct file (thanks to Bill Soudan
for the patch).</li>
<li> Fixed HTML bug in non-indexed namespace member lists. </li>
-<li> Using `:' inside ID's caused problems for some
- XML parsers. I'm now using "__" instead. Also removed @ from appearing
- in the output when annonymous compounds were used.</li>
+<li> Using ':' inside ID's caused problems for some
+ XML parsers, I'm now using "__" instead. Also removed @ from appearing
+ in the output when anonymous compounds were used.</li>
<li> Fixed output bug that is caused by nesting paragraph commands
inside autolists.</li>
<li> Doxygen no longer generates source files for input files that
@@ -8731,7 +8731,7 @@ make sure you add the following:
<li> Added support for namespace aliases.</li>
<li> Added RTF patch from Alexander Bartolich. Here is his description of
the changes:
- "The following patch of rtgen.cpp allows to read *complete* style
+ "The following patch of rtfgen.cpp allows to read *complete* style
definitions from rtfstyle. This includes \sbasedon, \snext, \additive
and actual style names.
@@ -8758,7 +8758,7 @@ make sure you add the following:
and <code>a[2]-&gt;func()</code>.</li>
<li> \em %className did not remove the %</li>
<li> In some cases namespace members ended up multiple times in the
- documentatation.</li>
+ documentation.</li>
<li> Fixed a bug in the auto list generation.</li>
<li> \latexonly inside brief description did not work properly.</li>
<li> "Referenced By" list did not include constructors with
@@ -8785,7 +8785,7 @@ make sure you add the following:
item indicating where the todo item was found. The todo list (and
all todo items) can be disabled by setting GENERATE_TODOLIST to NO.</li>
<li> &lt;pre&gt; ... &lt;/pre&gt; blocks now behave as in plain HTML instead of
- \code ... \endcode blocks. This also works for LaTeX ofcourse.
+ \code ... \endcode blocks. This also works for LaTeX of course.
These blocks differ from \verbatim ... \endverbatim blocks in that
commands can be used inside these blocks.</li>
</ul>
@@ -8824,7 +8824,7 @@ make sure you add the following:
</pre>
Credits go to Joerg Baumann.</li>
<li> Included French and Czech language updates from Mathieu Despriée and
- Petr Prikryl. Also included a language update for german from
+ Petr Prikryl. Also included a language update for German from
Raimund Klein.</li>
<li> Doxygen will now do give proper warnings for formulas that do not
end properly.</li>
@@ -8896,7 +8896,7 @@ make sure you add the following:
graphicx package instead of epsfig to simplify the use of pdflatex
(thanks to Pier Giorgio for showing me how that works).</li>
<li> Reimplemented the <code>system()</code> call for Unix, so doxygen becomes
- interruptable when calling external tools such as dot.</li>
+ interruptible when calling external tools such as dot.</li>
<li> Changed the way <code>-w</code> works. It can now also be used to generate
template header and footers.</li>
</ul>
@@ -8932,7 +8932,7 @@ make sure you add the following:
set the file patterns for the include files (if left empty the
<code>FILE_PATTERNS</code> will be used, which was also the old
behaviour). </li>
-<li> Added a couple of commands for kdoc compatability: <code>@p</code>,
+<li> Added a couple of commands for kdoc compatibility: <code>@p</code>,
<code>@li</code>, <code>@em</code>.
Also made @ref a bit less strict.</li>
<li> Portuguese translation by Rui Lopes. </li>
@@ -8964,12 +8964,12 @@ make sure you add the following:
<li> Global functions within anonymous namespace scopes did appear
in the documentation with the anonymous scope marker used internally
by doxygen.</li>
-<li> "namespace{}",so without space was not recognised as a namespace.</li>
+<li> "namespace{}",so without space was not recognized as a namespace.</li>
<li> If the search engine was used then running installdox on the generated
html resulted in bogus links to the search engine.</li>
<li> Fixed some compiler warning on Solaris.</li>
<li> Changed grey by grey50 in dot.cpp to avoid PDF conversion problems.</li>
-<li> A &lt;/pre&gt; that was not preceeded by a whitespace was ignored </li>
+<li> A &lt;/pre&gt; that was not preceded by a whitespace was ignored </li>
<li> The methods operator&lt;() and operator&lt;&lt;() were not
automatically linked anymore.</li>
<li> Some special characters in LaTeX were eating up the blanks that
@@ -9041,7 +9041,7 @@ make sure you add the following:
which files #include (i.e. depend on) a given file. This graph is
enabled by setting HAVE_DOT and INCLUDED_BY_GRAPH to YES.</li>
<li> added new configuration option EXTRACT_STATIC that can be used
- to enable/disable the extraction of static file members. The behaviour
+ to enable/disable the extraction of static file members. The behavior
of this option used to be linked with EXTRACT_PRIVATE.</li>
<li> Added two new configuration options MAX_DOT_GRAPH_WIDTH and
MAX_DOT_GRAPH_HEIGHT that let the user configure how big the
@@ -9100,7 +9100,7 @@ make sure you add the following:
</ul>
<h3>Bug fixes</h3>
<ul>
-<li> the warning message in case of ambigous file matches was containing
+<li> the warning message in case of ambiguous file matches was containing
a bogus <code>%s</code>, which could even crash doxygen.</li>
<li> An autolist followed by a \retval, \param, or \exception did
produced invalid output, resulting in a compile error in LaTeX. </li>
@@ -9113,7 +9113,7 @@ make sure you add the following:
<li> The hierarchy shown in the "Contents" part of the html help
browser did not properly show the hierarchy when it contained
undocumented classes. </li>
-<li> explict compound specifiers in the return type could lead to
+<li> explicit compound specifiers in the return type could lead to
parse problems. Example:
<pre>
enum SomeEnumType_e Func()
@@ -9128,8 +9128,8 @@ make sure you add the following:
and links to the correct reimplemented member are generated.</li>
<li> \ingroup did not work when grouping enums</li>
<li> members of a module were not cross-referenced with the sources.</li>
-<li> Function pointers like <code>void ( *func )()</code> where not c
- orrectly parsed because of the extra spacing between
+<li> Function pointers like <code>void ( *func )()</code> where not
+ correctly parsed because of the extra spacing between
the `(' and the `*'. </li>
<li> The const in void <code>func(int * const val /*&lt; a value. */);</code>
was named part of the name, instead of the type.</li>
@@ -9389,7 +9389,7 @@ make sure you add the following:
template &lt;class T&gt; class S&lt;C&lt;T&gt; &gt; : public SB&lt;C&lt;T&gt; &gt; {};
</pre> </li>
<li> #includes in code fragments where not hyperlinked. Operator
- methods were also not correctly recognised.</li>
+ methods were also not correctly recognized.</li>
<li> C/C++ comments inside initializers where not handled properly.</li>
<li> If the type of an argument of a member definition was prefixed
with a (redudant) scope name of an indirect base class,
@@ -9418,7 +9418,7 @@ make sure you add the following:
case file names with space were used.</li>
<li> back-references from source-lines to documentation only worked for
those members of a member group that were explicitly documented.</li>
-<li> doxygen did not distriguish between func(int a) and func(int a[])
+<li> doxygen did not distinguish between func(int a) and func(int a[])
which could cause documentation to end up at the wrong member
in case over overloading. </li>
</ul>
@@ -9502,7 +9502,7 @@ make sure you add the following:
<li> Since 1.1.2, environment variable expansion in the config
file always resulted in a single string for each expanded variable
(just as if quotes were put around the environment variable).
- The old behaviour is restored again.</li>
+ The old behavior is restored again.</li>
<li> removed redundant spaces in the man page output and fixed the
tab alignment in code fragments.</li>
<li> <code>typedef ( bla::*proc)();</code> was not properly parsed because of the
@@ -9524,7 +9524,7 @@ make sure you add the following:
dot graphs. The cause was likely to be multiple frees of the same
pointer (but I have not been able to reproduce the crash myself).
I've now reimplemented the deletion routine of the dot graph
- respresentation, which hopefully fixes this problem.</li>
+ representation, which hopefully fixes this problem.</li>
<li> Elements of the configuration options in lists, which used quotes
were broken up into smaller pieces anyway. This most notably broke
PREDEFINED in some cases that worked before.</li>
@@ -9553,7 +9553,7 @@ make sure you add the following:
of the LaTeX output (doxygen.sty a.o.) was not generated
(Thanks to Markus Lepper for reporting this).</li>
<li> Doxygen can now match arguments containing an explicit namespace
- qualifier against arguments containing an implicit qualitifier
+ qualifier against arguments containing an implicit qualifier
(i.e. imported via a using directive).
An example (thanks to Karl Stroetmann):
<pre>
@@ -9619,7 +9619,7 @@ make sure you add the following:
<p>
<b>Usage:</b> A group is defined by a <code>//@{ .. //@}</code> block
(or <code>/*@{*/../*@}*/</code> if
- you're addited to C style comments :-) Nesting of groups is not
+ you're addicted to C style comments :-) Nesting of groups is not
allowed. Before the opening marker of a block a separate comment
block should be placed. This block should contain the @name
(or \name) command to specify the header of the group.
@@ -9757,7 +9757,7 @@ make sure you add the following:
<li> Fixed a bug in structure of the graphical class hierarchy
(thanks to Paul Bohme for pointing me at this bug)</li>
<li> Non-function members can now also be documented if they
- are inside annonymous namespaces, which themselves are nested in
+ are inside anonymous namespaces, which themselves are nested in
named namespaces.</li>
<li> #defines can now grouped with \defgroup and \ingroup as well.</li>
<li> fixed a bug in the latex output of groups (thanks to Gregory Kurz
@@ -9929,7 +9929,7 @@ make sure you add the following:
/*! let's go to the bar */
class foo::bar { };
</pre></li>
-<li> Members inside annonymous namespaces nested inside named namespaces
+<li> Members inside anonymous namespaces nested inside named namespaces
were not properly handled. </li>
<li> When documenting template specializations with the \class command,
the second argument was not interpreted correctly.</li>
@@ -10089,7 +10089,7 @@ make sure you add the following:
</pre></li>
<li> Three new section commands <code>\pre</code>, <code>\post</code> and
<code>\invariant</code> are added to describe
- preconditions, postcondictions and invariants respectively.</li>
+ preconditions, postconditions and invariants respectively.</li>
<li> Variable/enum initializers and define definitions are
now included in documentation (unless the initializer/definition
is more than 30 lines long)</li>
@@ -10113,7 +10113,7 @@ make sure you add the following:
<li> Autolinks to #defines looked like function macro even if they weren't.</li>
<li> Members that were hidden deep in an inheritance tree, got multiple
scope prefixes in the "all members list", while a scope prefix to
- the member in the base class was enough to use it unambiguishly.</li>
+ the member in the base class was enough to use it unambiguously.</li>
<li> <code>\latexonly ... \endlatexonly</code> in the main page produced
erroneous text in refman.tex</li>
<li> The keywords in header and footer were only evaluated once.</li>
diff --git a/doc/commands.doc b/doc/commands.doc
index 4e0a6f9..5c6d067 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -2277,8 +2277,8 @@ Commands for displaying examples
The `option` `lineno` can be used to enable line numbers for the included code if desired.
The `option` `doc` can be used to treat the file as documentation rather than code.
- \note Some that when using the `{doc}` option,
- commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
+ \note When using the `{doc}` option,
+ some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
this command due to the moment of parsing.
\note The included documentation should not have comment signs in it as they will appear
@@ -2409,8 +2409,8 @@ Commands for displaying examples
The `option` `lineno` can be used to enable line numbers for the included code if desired.
The `option` `doc` can be used to treat the file as documentation rather than code.
- \note Some that when using the `{doc}` option,
- commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
+ \note When using the `{doc}` option,
+ some commands like \ref cmdcond "\\cond" and \ref cmdif "\\if" don't work with
this command due to the moment of parsing.
\note The included documentation should not have comment signs in it as they will appear
diff --git a/doc/doxygen.1 b/doc/doxygen.1
index fa0edae..0b02cb2 100644
--- a/doc/doxygen.1
+++ b/doc/doxygen.1
@@ -10,8 +10,6 @@ You can use doxygen in a number of ways:
1) Use doxygen to generate a template configuration file:
.IP
doxygen [-s] \fB\-g\fR [configName]
-.IP
-If - is used for configName doxygen will write to standard output.
.TP
2) Use doxygen to update an old configuration file:
.IP
@@ -20,34 +18,44 @@ doxygen [-s] \fB\-u\fR [configName]
3) Use doxygen to generate documentation using an existing configuration file:
.IP
doxygen [configName]
-.IP
-If - is used for configName doxygen will read from standard input.
.TP
4) Use doxygen to generate a template file controlling the layout of the generated documentation:
.IP
-doxygen -l [layoutFileName.xml]
+doxygen -l [layoutFileName]
+.IP
+In case layoutFileName is omitted layoutFileName.xml will be used as filename.
+If - is used for layoutFileName doxygen will write to standard output.
.TP
5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.
-.TP
+.IP
RTF:
doxygen \fB\-w\fR rtf styleSheetFile
-.TP
+.IP
HTML:
doxygen \fB\-w\fR html headerFile footerFile styleSheetFile [configFile]
-.TP
+.IP
LaTeX: doxygen \fB\-w\fR latex headerFile footerFile styleSheetFile [configFile]
.TP
6) Use doxygen to generate an rtf extensions file
-.TP
+.IP
RTF:
doxygen \fB\-e\fR rtf extensionsFile
+.IP
+If - is used for extensionsFile doxygen will write to standard output.
.TP
7) Use doxygen to compare the used configuration file with the template configuration file
-.TP
+.IP
doxygen \fB\-x\fR [configFile]
+.TP
+8) Use doxygen to show a list of built-in emojis.
+.IP
+doxygen \fB\-f\fR emoji outputFileName
+.IP
+If - is used for outputFileName doxygen will write to standard output.
.PP
If \fB\-s\fR is specified the comments in the config file will be omitted.
If configName is omitted `Doxyfile' will be used as a default.
+If - is used for configFile doxygen will write / read the configuration to /from standard output / input.
.SH AUTHOR
Doxygen version @VERSION@, Copyright Dimitri van Heesch 1997-2019
.SH SEE ALSO
diff --git a/doc/extsearch.doc b/doc/extsearch.doc
index ead7ea8..e139408 100644
--- a/doc/extsearch.doc
+++ b/doc/extsearch.doc
@@ -77,7 +77,7 @@ Since we didn't create or install a doxysearch.db it is OK for the test to
fail for this reason. How to correct this is discussed in the next section.
Before continuing with the next section add the above
-URL (without the `?test` part) to the `SEARCHENGINE_URL` tag in
+URL (without the `?test` part) to the \ref cfg_searchengine_url "SEARCHENGINE_URL" tag in
doxygen's configuration file:
SEARCHENGINE_URL = http://yoursite.com/path/to/cgi/doxysearch.cgi
@@ -135,7 +135,8 @@ and then copy the resulting `doxysearch.db` to the directory where also
The `searchdata.xml` file doesn't contain any absolute paths or links,
so how can the search results from multiple projects be linked back to the right documentation set?
-This is where the `EXTERNAL_SEARCH_ID` and `EXTRA_SEARCH_MAPPINGS` options come into play.
+This is where the \ref cfg_external_search_id "EXTERNAL_SEARCH_ID" and
+\ref cfg_extra_search_mappings "EXTRA_SEARCH_MAPPINGS" options come into play.
To be able to identify the different projects, one needs to
set a unique ID using \ref cfg_external_search_id "EXTERNAL_SEARCH_ID"
@@ -168,8 +169,8 @@ and the search results will link to the right documentation set.
When you modify the source code, you should re-run doxygen to get up to date
documentation again. When using external searching you also need to update the
-search index by re-running `doxyindexer`. You could wrap the call to doxygen
-and doxyindexer together in a script to make this process easier.
+search index by re-running `doxyindexer`. You could wrap the call to `doxygen`
+and `doxyindexer` together in a script to make this process easier.
\section extsearch_api Programming interface
diff --git a/doc/htmlcmds.doc b/doc/htmlcmds.doc
index 605bf5a..57ddf6f 100644
--- a/doc/htmlcmds.doc
+++ b/doc/htmlcmds.doc
@@ -304,7 +304,7 @@ The list of entities with their descriptions has been taken from <a href="http:/
<li><tt>\&notin;</tt>`&nbsp;&nbsp;&nbsp;` not an element of: &notin;
<li><tt>\&ni;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;` contains as member: &ni;
<li><tt>\&prod;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;` n-ary product = product sign: &prod;
-<li><tt>\&sum;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;` n-ary sumation: &sum;
+<li><tt>\&sum;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;` n-ary summation: &sum;
<li><tt>\&minus;</tt>`&nbsp;&nbsp;&nbsp;` minus sign: &minus;
<li><tt>\&lowast;</tt>`&nbsp;&nbsp;` asterisk operator: &lowast;
<li><tt>\&radic;</tt>`&nbsp;&nbsp;&nbsp;` square root = radical sign: &radic;
diff --git a/doc/translator.py b/doc/translator.py
index ed001bb..c04a367 100644
--- a/doc/translator.py
+++ b/doc/translator.py
@@ -141,8 +141,8 @@ class Transl:
self.baseClassId = None
self.readableStatus = None # 'up-to-date', '1.2.3', '1.3', etc.
self.status = None # '', '1.2.03', '1.3.00', etc.
- self.lang = None # like 'Brasilian'
- self.langReadable = None # like 'Brasilian Portuguese'
+ self.lang = None # like 'Brazilian'
+ self.langReadable = None # like 'Brazilian Portuguese'
self.note = None # like 'should be cleaned up'
self.prototypeDic = {} # uniPrototype -> prototype
self.translateMeText = 'translate me!'
diff --git a/examples/templ.cpp b/examples/templ.cpp
index 9ed48fb..e790684 100644
--- a/examples/templ.cpp
+++ b/examples/templ.cpp
@@ -27,9 +27,9 @@ template<class T,int i> Test<T,i>::Test() {}
/*! The copy constructor */
template<class T,int i> Test<T,i>::Test(const Test &t) {}
-/*! The constructor of the partial specilization */
+/*! The constructor of the partial specialization */
template<class T> Test<T *>::Test() {}
-/*! The constructor of the specilization */
+/*! The constructor of the specialization */
template<> Test<void *,200>::Test() {}
diff --git a/libmscgen/gd.h b/libmscgen/gd.h
index d6bbebd..c1a5754 100644
--- a/libmscgen/gd.h
+++ b/libmscgen/gd.h
@@ -333,7 +333,7 @@ typedef double (* interpolation_method )(double);
<Accessor Macros>
(Previous versions of this library encouraged directly manipulating
- the contents ofthe struct but we are attempting to move away from
+ the contents of the struct but we are attempting to move away from
this practice so the fields are no longer documented here. If you
need to poke at the internals of this struct, feel free to look at
*gd.h*.)
@@ -1572,7 +1572,7 @@ BGD_DECLARE(int) gdTransformAffineBoundingBox(gdRectPtr src, const double affine
*
* Constants:
* GD_CMP_IMAGE - Actual image IS different
- * GD_CMP_NUM_COLORS - Number of colors in pallette differ
+ * GD_CMP_NUM_COLORS - Number of colors in palette differ
* GD_CMP_COLOR - Image colors differ
* GD_CMP_SIZE_X - Image width differs
* GD_CMP_SIZE_Y - Image heights differ
diff --git a/libmscgen/mscgen_adraw.h b/libmscgen/mscgen_adraw.h
index b2e11a3..9ac1037 100644
--- a/libmscgen/mscgen_adraw.h
+++ b/libmscgen/mscgen_adraw.h
@@ -253,7 +253,7 @@ ADraw;
* image functions to be executed.
*
* \param[in] w The width of the output image.
- * \param[in] h The height of the ouput image.
+ * \param[in] h The height of the oupput image.
* \param[in] file The file to which the image should be written.
* \param[in] fontName The name of the font to use for rendering.
* \param[in] type The output type to generate.
diff --git a/libmscgen/mscgen_adraw_int.h b/libmscgen/mscgen_adraw_int.h
index 6f79ca4..1912fe1 100644
--- a/libmscgen/mscgen_adraw_int.h
+++ b/libmscgen/mscgen_adraw_int.h
@@ -29,7 +29,7 @@
* Preprocessor Macros
***************************************************************************/
-/* Define macro to supress unused parameter warnings */
+/* Define macro to suppress unused parameter warnings */
#ifndef UNUSED
# ifdef __GNUC__
# define UNUSED __attribute__((unused))
diff --git a/libmscgen/mscgen_api.c b/libmscgen/mscgen_api.c
index 31f5556..c5a9eb3 100644
--- a/libmscgen/mscgen_api.c
+++ b/libmscgen/mscgen_api.c
@@ -662,7 +662,7 @@ static char *getLine(const char *string,
* \param x The x position at which the entity text should be centered.
* \param y The y position where the text should be placed.
* \param entLabel The label to render, which maybe \a NULL in which case
- * no ouput is produced.
+ * no output is produced.
* \param entUrl The URL for rendering the label as a hyperlink. This
* maybe \a NULL if not required.
* \param entId The text identifier for the arc.
@@ -704,7 +704,7 @@ static void entityText(Context *ctx,
/* Check if a URL is associated */
if(entUrl)
{
- /* If no explict colour has been set, make URLS blue */
+ /* If no explicit colour has been set, make URLS blue */
ctx->drw.setPen(&ctx->drw, ADRAW_COL_BLUE);
/* Image map output */
@@ -1431,7 +1431,7 @@ static void arcLine(Context *ctx,
*/
static Boolean checkMsc(Msc m)
{
- /* Check all arc entites are known */
+ /* Check all arc entities are known */
MscResetArcIterator(m);
do
{
@@ -1710,7 +1710,7 @@ int mscgen_generate(const char *inputFile,
assert(startCol != -1);
assert(endCol != -1 || isBroadcastArc(MscGetCurrentArcDest(m)));
- /* Check for entity colouring if not set explicity on the arc */
+ /* Check for entity colouring if not set explicitly on the arc */
if (arcTextColour == NULL)
{
arcTextColour = MscGetEntAttrib(m, startCol, MSC_ATTR_ARC_TEXT_COLOUR);
diff --git a/libmscgen/mscgen_gd_out.c b/libmscgen/mscgen_gd_out.c
index 263431e..8d8198c 100644
--- a/libmscgen/mscgen_gd_out.c
+++ b/libmscgen/mscgen_gd_out.c
@@ -119,7 +119,7 @@ static int getGdoPen(struct ADrawTag *ctx)
/** Given a colour value, convert to a gd colour reference.
- * This searches the current pallette of colours for the passed colour and
+ * This searches the current palette of colours for the passed colour and
* returns an existing reference if possible. Otherwise a new colour reference
* is allocated and returned.
*/
diff --git a/libmscgen/mscgen_lexer.l b/libmscgen/mscgen_lexer.l
index 8410e07..52f5e05 100644
--- a/libmscgen/mscgen_lexer.l
+++ b/libmscgen/mscgen_lexer.l
@@ -142,7 +142,7 @@ NOTE|note yylval.arctype = MSC_ARC_NOTE; return
%%
/* Handle a new line of input.
- * This counts the line number and duplicates the string incase we need
+ * This counts the line number and duplicates the string in case we need
* it for error reporting. The line is then returned back for parsing
* without the newline characters prefixed.
*/
diff --git a/libmscgen/mscgen_msc.h b/libmscgen/mscgen_msc.h
index 2c75131..bcbdf3a 100644
--- a/libmscgen/mscgen_msc.h
+++ b/libmscgen/mscgen_msc.h
@@ -217,7 +217,7 @@ int MscGetEntityIndex(struct MscTag *m, const char *label);
* @{
*/
-/** Reset the entity interator.
+/** Reset the entity iterator.
* This moves the pointer to the current entity to the head of the list.
*/
void MscResetEntityIterator(Msc m);
@@ -249,7 +249,7 @@ const char *MscGetEntAttrib(Msc m, unsigned int entIdx, MscAttribType a);
* @{
*/
-/** Reset the arc interator.
+/** Reset the arc iterator.
* This moves the pointer to the current arc to the head of the list.
*/
void MscResetArcIterator (Msc m);
diff --git a/libmscgen/mscgen_usage.c b/libmscgen/mscgen_usage.c
index 2126d44..5d448f8 100644
--- a/libmscgen/mscgen_usage.c
+++ b/libmscgen/mscgen_usage.c
@@ -61,7 +61,7 @@ void Usage(void)
" to write output directly to stdout.\n"
#ifdef USE_FREETYPE
" -F <font> Use specified font for PNG output. This must be a font specifier\n"
-" compatbile with fontconfig (see 'fc-list'), and overrides the\n"
+" compatible with fontconfig (see 'fc-list'), and overrides the\n"
" MSCGEN_FONT environment variable if also set.\n"
#endif
" -p Print parsed msc output (for parser debug).\n"
diff --git a/libmscgen/mscgen_utf8.c b/libmscgen/mscgen_utf8.c
index 9614c47..e23eef3 100644
--- a/libmscgen/mscgen_utf8.c
+++ b/libmscgen/mscgen_utf8.c
@@ -95,7 +95,7 @@ Boolean Utf8Decode(const char *s, unsigned int *r, unsigned int *bytes)
}
}
- /* Success if no NULL was encoutered */
+ /* Success if no NULL was encountered */
return t == *bytes;
}
}
diff --git a/qtools/qcstring.h b/qtools/qcstring.h
index f484207..c2a5dc3 100644
--- a/qtools/qcstring.h
+++ b/qtools/qcstring.h
@@ -329,7 +329,7 @@ public:
return m_rep.at(i);
}
- /** Indexing operator. Equavalent to at(). */
+ /** Indexing operator. Equivalent to at(). */
char &operator[]( int i ) const
{
return m_rep.at((uint)i);
diff --git a/qtools/qdict.doc b/qtools/qdict.doc
index a414d3f..bf1ea01 100644
--- a/qtools/qdict.doc
+++ b/qtools/qdict.doc
@@ -175,7 +175,7 @@
Setting \e caseSensitive to TRUE will treat "abc" and "Abc" as different
keys. Setting it to FALSE will make the dictionary ignore case.
- Case insensitive comparison includes the whole Unicode alphabeth.
+ Case insensitive comparison includes the whole Unicode alphabet.
*/
/*!
diff --git a/qtools/qglobal.h b/qtools/qglobal.h
index 8512f41..56b2d40 100644
--- a/qtools/qglobal.h
+++ b/qtools/qglobal.h
@@ -175,7 +175,7 @@
//
-// Should be sorted most-authorative to least-authorative
+// Should be sorted most-authoritative to least-authoritative
#if defined(__SC__)
#define _CC_SYM_
diff --git a/qtools/qlist.doc b/qtools/qlist.doc
index 59cc971..4f97e35 100644
--- a/qtools/qlist.doc
+++ b/qtools/qlist.doc
@@ -858,7 +858,7 @@
/*!
\fn type *QListIterator::operator*()
- Asterix operator. Returns a pointer to the current iterator item.
+ Asterisk operator. Returns a pointer to the current iterator item.
Same as current().
*/
diff --git a/qtools/qstring.cpp b/qtools/qstring.cpp
index 0e2b14a..e809d0d 100644
--- a/qtools/qstring.cpp
+++ b/qtools/qstring.cpp
@@ -11538,7 +11538,7 @@ static inline bool format(QChar::Decomposition tag, QString & str,
Applies possible ligatures to a QString, useful when composition-rich
text requires rendering with glyph-poor fonts, but also
makes compositions such as QChar(0x0041) ('A') and QChar(0x0308)
- (Unicode accent diaresis) giving QChar(0x00c4) (German A Umlaut).
+ (Unicode accent diaeresis) giving QChar(0x00c4) (German A Umlaut).
*/
void QString::compose()
{
diff --git a/qtools/qtextcodec.cpp b/qtools/qtextcodec.cpp
index 842a72d..8ce266d 100644
--- a/qtools/qtextcodec.cpp
+++ b/qtools/qtextcodec.cpp
@@ -280,7 +280,7 @@ int QTextCodec::heuristicNameMatch(const char* hint) const
}
-// returns a string cotnaining the letters and numbers from input,
+// returns a string containing the letters and numbers from input,
// with a space separating run of a character class. e.g. "iso8859-1"
// becomes "iso 8859 1"
static QString lettersAndNumbers( const char * input )
diff --git a/qtools/qtl.doc b/qtools/qtl.doc
index e83b177..8ce89bd 100644
--- a/qtools/qtl.doc
+++ b/qtools/qtl.doc
@@ -38,7 +38,7 @@
\title Qt Template library
-Thq Qt Template Library is a set of templates within Qt dealing with
+The Qt Template Library is a set of templates within Qt dealing with
containers of objects. It provides a list of objects, a stack of
objects, a map (or dictionary) from one type to another, and
associated iterators and algorithms.
diff --git a/qtools/qvaluelist.doc b/qtools/qvaluelist.doc
index f7a0dde..9f34c8e 100644
--- a/qtools/qvaluelist.doc
+++ b/qtools/qvaluelist.doc
@@ -615,12 +615,12 @@
/*!
\fn T& QValueListIterator::operator*()
- Asterix operator. Returns a reference to the current iterator item.
+ Asterisk operator. Returns a reference to the current iterator item.
*/
/*!
\fn const T& QValueListIterator::operator*() const
- Asterix operator. Returns a reference to the current iterator item.
+ Asterisk operator. Returns a reference to the current iterator item.
*/
/*!
@@ -726,7 +726,7 @@
/*!
\fn const T& QValueListConstIterator::operator*() const
- Asterix operator. Returns a reference to the current iterator item.
+ Asterisk operator. Returns a reference to the current iterator item.
*/
/*!
diff --git a/qtools/qxml.cpp b/qtools/qxml.cpp
index 4138a28..f8a4e0d 100644
--- a/qtools/qxml.cpp
+++ b/qtools/qxml.cpp
@@ -778,7 +778,7 @@ void QXmlInputSource::setData( const QString& dat )
}
/*!
- Read the XML file from the byte array; try to recoginize the encoding.
+ Read the XML file from the byte array; try to recognize the encoding.
*/
// ### The input source should not do the encoding detection!
void QXmlInputSource::readInput( QByteArray& rawData )
@@ -1895,7 +1895,7 @@ private:
<a href="xml-sax.html#quickStart">Quick start</a>.
*/
-//guaranteed not to be a characater
+//guaranteed not to be a character
const QChar QXmlSimpleReader::QEOF = QChar((ushort)0xffff);
/*!
@@ -2609,7 +2609,7 @@ bool QXmlSimpleReader::parseElementAttribute( QString &prefix, QString &uri, QSt
}
}
} else {
- // no namespace delcaration
+ // no namespace declaration
d->namespaceSupport.processName( name(), TRUE, uri, lname );
d->attList.qnameList.append( name() );
d->attList.uriList.append( uri );
@@ -3036,7 +3036,7 @@ parseError:
Precondition: the beginning '<' of the PI is already read and the head stand
on the '?' of '<?'.
- If this funktion was successful, the head-position is on the first
+ If this function was successful, the head-position is on the first
character after the PI.
*/
bool QXmlSimpleReader::parsePI( bool xmldecl )
@@ -3258,7 +3258,7 @@ parseError:
Precondition: the beginning '<!' of the doctype is already read the head
stands on the 'D' of '<!DOCTYPE'.
- If this funktion was successful, the head-position is on the first
+ If this function was successful, the head-position is on the first
character after the document type definition.
*/
bool QXmlSimpleReader::parseDoctype()
@@ -3915,7 +3915,7 @@ bool QXmlSimpleReader::parseAttlistDecl()
{ -1, Done, Attdef, Attdef, Attdef, Attdef, Attdef, Attdef }, // Ws1
{ Ws2, -1, -1, -1, -1, -1, -1, -1 }, // Attdef
{ -1, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype, Atttype }, // Ws2
- { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // Attype
+ { Ws3, -1, -1, -1, -1, -1, -1, -1 }, // Atttype
{ -1, Attval, DDecH, Attval, Attval, Attval, Attval, Attval }, // Ws3
{ -1, -1, -1, -1, DefImp, DefFix, DefReq, -1 }, // DDecH
{ Ws4, Ws4, -1, -1, -1, -1, -1, -1 }, // DefReq
@@ -5291,7 +5291,7 @@ parseError:
Precondition: the beginning '<!' of the comment is already read and the head
stands on the first '-' of '<!--'.
- If this funktion was successful, the head-position is on the first
+ If this function was successful, the head-position is on the first
character after the comment.
*/
bool QXmlSimpleReader::parseComment()
diff --git a/src/arguments.cpp b/src/arguments.cpp
index 6d3e13b..69636f5 100644
--- a/src/arguments.cpp
+++ b/src/arguments.cpp
@@ -1,39 +1,25 @@
+/*****************************************************************************
+ * Copyright (C) 1997-2019 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ */
+
+#include <algorithm>
+
#include "arguments.h"
-#include <assert.h>
/*! the argument list is documented if one of its
- * arguments is documented
+ * arguments is documented
*/
bool ArgumentList::hasDocumentation() const
{
- bool hasDocs=FALSE;
- ArgumentListIterator ali(*this);
- Argument *a;
- for (ali.toFirst();!hasDocs && (a=ali.current());++ali)
- {
- hasDocs = a->hasDocumentation();
- }
- return hasDocs;
-}
-
-ArgumentList *ArgumentList::deepCopy() const
-{
- ArgumentList *argList = new ArgumentList;
- argList->setAutoDelete(TRUE);
-
- QListIterator<Argument> ali(*this);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- argList->append(new Argument(*a));
- }
- argList->constSpecifier = constSpecifier;
- argList->volatileSpecifier = volatileSpecifier;
- argList->pureSpecifier = pureSpecifier;
- argList->trailingReturnType = trailingReturnType;
- argList->isDeleted = isDeleted;
- argList->refQualifier = refQualifier;
-
- return argList;
+ return std::any_of(begin(),end(),[](const Argument &a){ return a.hasDocumentation(); });
}
diff --git a/src/arguments.h b/src/arguments.h
index 7ef9642..3464def 100644
--- a/src/arguments.h
+++ b/src/arguments.h
@@ -16,45 +16,15 @@
#ifndef ARGUMENTS_H
#define ARGUMENTS_H
-#include <qlist.h>
+#include <vector>
#include <qcstring.h>
-class StorageIntf;
-
/*! \brief This class contains the information about the argument of a
* function or template
*
*/
struct Argument
{
- /*! Construct a new argument. */
- Argument() {}
- /*! Copy an argument (does a deep copy of all strings). */
- Argument(const Argument &a)
- {
- attrib=a.attrib;
- type=a.type;
- name=a.name;
- array=a.array;
- defval=a.defval;
- docs=a.docs;
- typeConstraint=a.typeConstraint;
- }
- /*! Assignment of an argument (does a deep copy of all strings). */
- Argument &operator=(const Argument &a)
- {
- if (this!=&a)
- {
- attrib=a.attrib;
- type=a.type;
- name=a.name;
- array=a.array;
- defval=a.defval;
- docs=a.docs;
- typeConstraint=a.typeConstraint;
- }
- return *this;
- }
/*! return TRUE if this argument is documentation and the argument has a
* non empty name.
*/
@@ -86,37 +56,42 @@ enum RefQualifierType
* put after the argument list, such as whether the member is const,
* volatile or pure virtual.
*/
-class ArgumentList : public QList<Argument>
+class ArgumentList : public std::vector<Argument>
{
public:
- /*! Creates an empty argument list */
- ArgumentList() : QList<Argument>(),
- constSpecifier(FALSE),
- volatileSpecifier(FALSE),
- pureSpecifier(FALSE),
- isDeleted(FALSE),
- refQualifier(RefQualifierNone)
- { setAutoDelete(TRUE); }
- /*! Destroys the argument list */
- ~ArgumentList() {}
- /*! Makes a deep copy of this object */
- ArgumentList *deepCopy() const;
/*! Does any argument of this list have documentation? */
bool hasDocumentation() const;
- /*! Does the member modify the state of the class? default: FALSE. */
- bool constSpecifier;
- /*! Is the member volatile? default: FALSE. */
- bool volatileSpecifier;
- /*! Is this a pure virtual member? default: FALSE */
- bool pureSpecifier;
+ /*! Does this list have zero or more parameters */
+ bool hasParameters() const
+ {
+ return !empty() || noParameters;
+ }
+ void reset()
+ {
+ clear();
+ constSpecifier = FALSE;
+ volatileSpecifier = FALSE;
+ pureSpecifier = FALSE;
+ trailingReturnType.resize(0);
+ isDeleted = FALSE;
+ refQualifier = RefQualifierNone;
+ noParameters = FALSE;
+ }
+
+ /*! Does the member modify the state of the class? */
+ bool constSpecifier = FALSE;
+ /*! Is the member volatile? */
+ bool volatileSpecifier = FALSE;
+ /*! Is this a pure virtual member? */
+ bool pureSpecifier = FALSE;
/*! C++11 style Trailing return type? */
QCString trailingReturnType;
/*! method with =delete */
- bool isDeleted;
+ bool isDeleted = FALSE;
/*! C++11 ref qualifier */
- RefQualifierType refQualifier;
+ RefQualifierType refQualifier = RefQualifierNone;
+ /*! is it an explicit empty list */
+ bool noParameters = FALSE;
};
-typedef QListIterator<Argument> ArgumentListIterator;
-
#endif
diff --git a/src/cite.cpp b/src/cite.cpp
index 42f695f..797881f 100644
--- a/src/cite.cpp
+++ b/src/cite.cpp
@@ -151,7 +151,7 @@ void CiteDict::generatePage() const
p=s+1;
int i;
- if ((i = line.find("crossref")) != -1) /* assumption crossreference is on one line and the only item */
+ if ((i = line.find("crossref")) != -1) /* assumption cross reference is on one line and the only item */
{
int j=line.find("{",i);
int k=line.find("}",i);
@@ -235,14 +235,14 @@ void CiteDict::generatePage() const
// 5. run bib2xhtml perl script on the generated file which will insert the
// bibliography in citelist.doc
int exitCode;
- portable_sysTimerStop();
- if ((exitCode=portable_system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
+ Portable::sysTimerStop();
+ if ((exitCode=Portable::system("perl","\""+bib2xhtmlFile+"\" "+bibOutputFiles+" \""+
citeListFile+"\"")) != 0)
{
err("Problems running bibtex. Verify that the command 'perl --version' works from the command line. Exit code: %d\n",
exitCode);
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
QDir::setCurrent(oldDir);
@@ -296,7 +296,7 @@ void CiteDict::generatePage() const
// 7. add it as a page
addRelatedPage(CiteConsts::fileName,
- theTranslator->trCiteReferences(),doc,0,CiteConsts::fileName,1,0,0,0);
+ theTranslator->trCiteReferences(),doc,CiteConsts::fileName,1);
// 8. for latex we just copy the bib files to the output and let
// latex do this work.
diff --git a/src/clangparser.cpp b/src/clangparser.cpp
index 271b99f..f6020dd 100644
--- a/src/clangparser.cpp
+++ b/src/clangparser.cpp
@@ -87,7 +87,7 @@ static QCString detab(const QCString &s)
while (stop--) out.addChar(' ');
}
break;
- case '\n': // reset colomn counter
+ case '\n': // reset column counter
out.addChar(c);
col=0;
break;
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 7548c6c..bba962e 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -87,7 +87,7 @@ class ClassDefImpl : public DefinitionImpl, public ClassDef
virtual bool isLinkable() const;
virtual bool isVisibleInHierarchy() const;
virtual bool visibleInParentsDeclList() const;
- virtual ArgumentList *templateArguments() const;
+ virtual const ArgumentList &templateArguments() const;
virtual NamespaceDef *getNamespaceDef() const;
virtual FileDef *getFileDef() const;
virtual MemberDef *getMemberByName(const QCString &) const;
@@ -104,9 +104,9 @@ class ClassDefImpl : public DefinitionImpl, public ClassDef
virtual ConstraintClassDict *templateTypeConstraints() const;
virtual bool isTemplateArgument() const;
virtual Definition *findInnerCompound(const char *name) const;
- virtual void getTemplateParameterLists(QList<ArgumentList> &lists) const;
+ virtual std::vector<ArgumentList> getTemplateParameterLists() const;
virtual QCString qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const;
+ const std::vector<ArgumentList> *actualParams=0,int *actualParamIndex=0) const;
virtual bool isAbstract() const;
virtual bool isObjectiveC() const;
virtual bool isFortran() const;
@@ -133,12 +133,11 @@ class ClassDefImpl : public DefinitionImpl, public ClassDef
virtual MemberDef *isSmartPointer() const;
virtual bool isJavaEnum() const;
virtual bool isGeneric() const;
- virtual bool isAnonymous() const;
virtual const ClassSDict *innerClasses() const;
virtual QCString title() const;
virtual QCString generatedFromFiles() const;
virtual const FileList &usedFiles() const;
- virtual const ArgumentList *typeConstraints() const;
+ virtual const ArgumentList &typeConstraints() const;
virtual const ExampleSDict *exampleList() const;
virtual bool hasExamples() const;
virtual QCString getMemberListFileName() const;
@@ -167,10 +166,10 @@ class ClassDefImpl : public DefinitionImpl, public ClassDef
virtual void setCompoundType(CompoundType t);
virtual void setClassName(const char *name);
virtual void setClassSpecifier(uint64 spec);
- virtual void setTemplateArguments(ArgumentList *al);
+ virtual void setTemplateArguments(const ArgumentList &al);
virtual void setTemplateBaseClassNames(QDict<int> *templateNames);
virtual void setTemplateMaster(const ClassDef *tm);
- virtual void setTypeConstraints(ArgumentList *al);
+ virtual void setTypeConstraints(const ArgumentList &al);
virtual void addMembersToTemplateInstance(const ClassDef *cd,const char *templSpec);
virtual void makeTemplateArgument(bool b=TRUE);
virtual void setCategoryOf(ClassDef *cd);
@@ -265,7 +264,7 @@ class ClassDefImpl : public DefinitionImpl, public ClassDef
// PIMPL idiom
class IMPL;
- IMPL *m_impl;
+ IMPL *m_impl = 0;
};
ClassDef *createClassDef(
@@ -332,7 +331,7 @@ class ClassDefAliasImpl : public DefinitionAliasImpl, public ClassDef
{ return getCdAlias()->isVisibleInHierarchy(); }
virtual bool visibleInParentsDeclList() const
{ return getCdAlias()->visibleInParentsDeclList(); }
- virtual ArgumentList *templateArguments() const
+ virtual const ArgumentList &templateArguments() const
{ return getCdAlias()->templateArguments(); }
virtual NamespaceDef *getNamespaceDef() const
{ return getCdAlias()->getNamespaceDef(); }
@@ -366,10 +365,10 @@ class ClassDefAliasImpl : public DefinitionAliasImpl, public ClassDef
{ return getCdAlias()->isTemplateArgument(); }
virtual Definition *findInnerCompound(const char *name) const
{ return getCdAlias()->findInnerCompound(name); }
- virtual void getTemplateParameterLists(QList<ArgumentList> &lists) const
- { return getCdAlias()->getTemplateParameterLists(lists); }
+ virtual std::vector<ArgumentList> getTemplateParameterLists() const
+ { return getCdAlias()->getTemplateParameterLists(); }
virtual QCString qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const
+ const std::vector<ArgumentList> *actualParams=0,int *actualParamIndex=0) const
{ return getCdAlias()->qualifiedNameWithTemplateParameters(actualParams,actualParamIndex); }
virtual bool isAbstract() const
{ return getCdAlias()->isAbstract(); }
@@ -423,8 +422,6 @@ class ClassDefAliasImpl : public DefinitionAliasImpl, public ClassDef
{ return getCdAlias()->isJavaEnum(); }
virtual bool isGeneric() const
{ return getCdAlias()->isGeneric(); }
- virtual bool isAnonymous() const
- { return getCdAlias()->isAnonymous(); }
virtual const ClassSDict *innerClasses() const
{ return getCdAlias()->innerClasses(); }
virtual QCString title() const
@@ -433,7 +430,7 @@ class ClassDefAliasImpl : public DefinitionAliasImpl, public ClassDef
{ return getCdAlias()->generatedFromFiles(); }
virtual const FileList &usedFiles() const
{ return getCdAlias()->usedFiles(); }
- virtual const ArgumentList *typeConstraints() const
+ virtual const ArgumentList &typeConstraints() const
{ return getCdAlias()->typeConstraints(); }
virtual const ExampleSDict *exampleList() const
{ return getCdAlias()->exampleList(); }
@@ -470,10 +467,10 @@ class ClassDefAliasImpl : public DefinitionAliasImpl, public ClassDef
virtual void setCompoundType(CompoundType t) {}
virtual void setClassName(const char *name) {}
virtual void setClassSpecifier(uint64 spec) {}
- virtual void setTemplateArguments(ArgumentList *al) {}
+ virtual void setTemplateArguments(const ArgumentList &al) {}
virtual void setTemplateBaseClassNames(QDict<int> *templateNames) {}
virtual void setTemplateMaster(const ClassDef *tm) {}
- virtual void setTypeConstraints(ArgumentList *al) {}
+ virtual void setTypeConstraints(const ArgumentList &al) {}
virtual void addMembersToTemplateInstance(const ClassDef *cd,const char *templSpec) {}
virtual void makeTemplateArgument(bool b=TRUE) {}
virtual void setCategoryOf(ClassDef *cd) {}
@@ -525,7 +522,7 @@ class ClassDefAliasImpl : public DefinitionAliasImpl, public ClassDef
QPtrDict<void> *visitedClasses=0) const {}
private:
- mutable bool m_visited;
+ mutable bool m_visited = false;
};
@@ -563,39 +560,39 @@ class ClassDefImpl::IMPL
/*! Include information about the header file should be included
* in the documentation. 0 by default, set by setIncludeFile().
*/
- IncludeInfo *incInfo;
+ IncludeInfo *incInfo = 0;
/*! List of base class (or super-classes) from which this class derives
* directly.
*/
- BaseClassList *inherits;
+ BaseClassList *inherits = 0;
/*! List of sub-classes that directly derive from this class
*/
- BaseClassList *inheritedBy;
+ BaseClassList *inheritedBy = 0;
/*! Namespace this class is part of
* (this is the inner most namespace in case of nested namespaces)
*/
- NamespaceDef *nspace;
+ NamespaceDef *nspace = 0;
/*! File this class is defined in */
- FileDef *fileDef;
+ FileDef *fileDef = 0;
/*! List of all members (including inherited members) */
- MemberNameInfoSDict *allMemberNameInfoSDict;
+ MemberNameInfoSDict *allMemberNameInfoSDict = 0;
/*! Template arguments of this class */
- ArgumentList *tempArgs;
+ ArgumentList tempArgs;
/*! Type constraints for template parameters */
- ArgumentList *typeConstraints;
+ ArgumentList typeConstraints;
/*! Files that were used for generating the class documentation. */
FileList files;
/*! Examples that use this class */
- ExampleSDict *exampleSDict;
+ ExampleSDict *exampleSDict = 0;
/*! Holds the kind of "class" this is. */
ClassDef::CompoundType compType;
@@ -609,30 +606,30 @@ class ClassDefImpl::IMPL
/*! The inner classes contained in this class. Will be 0 if there are
* no inner classes.
*/
- ClassSDict *innerClasses;
+ ClassSDict *innerClasses = 0;
/* classes for the collaboration diagram */
- UsesClassDict *usesImplClassDict;
- UsesClassDict *usedByImplClassDict;
- UsesClassDict *usesIntfClassDict;
+ UsesClassDict *usesImplClassDict = 0;
+ UsesClassDict *usedByImplClassDict = 0;
+ UsesClassDict *usesIntfClassDict = 0;
- ConstraintClassDict *constraintClassDict;
+ ConstraintClassDict *constraintClassDict = 0;
/*! Template instances that exists of this class, the key in the
* dictionary is the template argument list.
*/
- mutable QDict<ClassDef> *templateInstances;
+ mutable QDict<ClassDef> *templateInstances = 0;
/*! Template instances that exists of this class, as defined by variables.
* We do NOT want to document these individually. The key in the
* dictionary is the template argument list.
*/
- mutable QDict<ClassDef> *variableInstances;
+ mutable QDict<ClassDef> *variableInstances = 0;
- QDict<int> *templBaseClassNames;
+ QDict<int> *templBaseClassNames = 0;
/*! The class this class is an instance of. */
- const ClassDef *templateMaster;
+ const ClassDef *templateMaster = 0;
/*! local class name which could be a typedef'ed alias name. */
QCString className;
@@ -640,56 +637,54 @@ class ClassDefImpl::IMPL
/*! If this class is a Objective-C category, then this points to the
* class which is extended.
*/
- ClassDef *categoryOf;
+ ClassDef *categoryOf = 0;
QList<MemberList> memberLists;
/* user defined member groups */
- MemberGroupSDict *memberGroupSDict;
+ MemberGroupSDict *memberGroupSDict = 0;
/*! Is this an abstract class? */
- bool isAbstract;
+ bool isAbstract = false;
/*! Is the class part of an unnamed namespace? */
- bool isStatic;
+ bool isStatic = false;
/*! TRUE if classes members are merged with those of the base classes. */
- bool membersMerged;
+ bool membersMerged = false;
/*! TRUE if the class is defined in a source file rather than a header file. */
- bool isLocal;
+ bool isLocal = false;
- bool isTemplArg;
+ bool isTemplArg = false;
/*! Does this class group its user-grouped members
* as a sub-section of the normal (public/protected/..)
* groups?
*/
- bool subGrouping;
+ bool subGrouping = false;
/** Reason of existence is a "use" relation */
- bool usedOnly;
+ bool usedOnly = false;
/** List of titles to use for the summary */
SDict<QCString> vhdlSummaryTitles;
/** Is this a simple (non-nested) C structure? */
- bool isSimple;
+ bool isSimple = false;
/** Does this class overloaded the -> operator? */
- MemberDef *arrowOperator;
+ MemberDef *arrowOperator = 0;
- ClassList *taggedInnerClasses;
- ClassDef *tagLessRef;
+ ClassList *taggedInnerClasses = 0;
+ ClassDef *tagLessRef = 0;
/** Does this class represent a Java style enum? */
- bool isJavaEnum;
-
- bool isGeneric;
+ bool isJavaEnum = false;
- bool isAnonymous;
+ bool isGeneric = false;
- uint64 spec;
+ uint64 spec = 0;
QCString metaData;
};
@@ -710,8 +705,6 @@ void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
inheritedBy = 0;
allMemberNameInfoSDict = 0;
incInfo=0;
- tempArgs=0;
- typeConstraints=0;
prot=Public;
nspace=0;
fileDef=0;
@@ -753,7 +746,6 @@ void ClassDefImpl::IMPL::init(const char *defFileName, const char *name,
isLocal=FALSE;
}
isGeneric = (lang==SrcLangExt_CSharp || lang==SrcLangExt_Java) && QCString(name).find('<')!=-1;
- isAnonymous = QCString(name).find('@')!=-1;
}
ClassDefImpl::IMPL::IMPL() : vhdlSummaryTitles(17)
@@ -777,8 +769,6 @@ ClassDefImpl::IMPL::~IMPL()
delete templateInstances;
delete variableInstances;
delete templBaseClassNames;
- delete tempArgs;
- delete typeConstraints;
delete taggedInnerClasses;
}
@@ -839,6 +829,10 @@ QCString ClassDefImpl::displayName(bool includeScope) const
n=className();
}
}
+ if (isAnonymous())
+ {
+ n = removeAnonymousScopes(n);
+ }
QCString sep=getLanguageSpecificSeparator(lang);
if (sep!="::")
{
@@ -853,14 +847,7 @@ QCString ClassDefImpl::displayName(bool includeScope) const
// n = n.left(n.length()-2);
//}
//printf("ClassDefImpl::displayName()=%s\n",n.data());
- if (n.find('@')!=-1)
- {
- return removeAnonymousScopes(n);
- }
- else
- {
- return n;
- }
+ return n;
}
// inserts a base/super class in the inheritance list
@@ -1376,7 +1363,7 @@ void ClassDefImpl::setIncludeFile(FileDef *fd,
//}
static void searchTemplateSpecs(/*in*/ const Definition *d,
- /*out*/ QList<ArgumentList> &result,
+ /*out*/ std::vector<ArgumentList> &result,
/*out*/ QCString &name,
/*in*/ SrcLangExt lang)
{
@@ -1395,9 +1382,9 @@ static void searchTemplateSpecs(/*in*/ const Definition *d,
}
name+=clName;
bool isSpecialization = d->localName().find('<')!=-1;
- if (cd->templateArguments())
+ if (!cd->templateArguments().empty())
{
- result.append(cd->templateArguments());
+ result.push_back(cd->templateArguments());
if (!isSpecialization)
{
name+=tempArgListToString(cd->templateArguments(),lang);
@@ -1413,35 +1400,32 @@ static void searchTemplateSpecs(/*in*/ const Definition *d,
static void writeTemplateSpec(OutputList &ol,const Definition *d,
const QCString &type,SrcLangExt lang)
{
- QList<ArgumentList> specs;
+ std::vector<ArgumentList> specs;
QCString name;
searchTemplateSpecs(d,specs,name,lang);
- if (specs.count()>0) // class has template scope specifiers
+ if (!specs.empty()) // class has template scope specifiers
{
ol.startSubsubsection();
- QListIterator<ArgumentList> spi(specs);
- ArgumentList *al;
- for (spi.toFirst();(al=spi.current());++spi)
+ for (const ArgumentList &al : specs)
{
ol.docify("template<");
- QListIterator<Argument> ali(*al);
- Argument *a;
- while ((a=ali.current()))
+ auto it = al.begin();
+ while (it!=al.end())
{
- ol.docify(a->type);
- if (!a->name.isEmpty())
+ Argument a = *it;
+ ol.docify(a.type);
+ if (!a.name.isEmpty())
{
ol.docify(" ");
- ol.docify(a->name);
+ ol.docify(a.name);
}
- if (a->defval.length()!=0)
+ if (a.defval.length()!=0)
{
ol.docify(" = ");
- ol.docify(a->defval);
+ ol.docify(a.defval);
}
- ++ali;
- a=ali.current();
- if (a) ol.docify(", ");
+ ++it;
+ if (it!=al.end()) ol.docify(", ");
}
ol.docify(">");
ol.lineBreak();
@@ -1722,7 +1706,8 @@ void ClassDefImpl::writeInheritanceGraph(OutputList &ol) const
DotClassGraph inheritanceGraph(this,Inheritance);
if (inheritanceGraph.isTooBig())
{
- warn_uncond("Inheritance graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
+ warn_uncond("Inheritance graph for '%s' not generated, too many nodes (%d), threshold is %d. Consider increasing DOT_GRAPH_MAX_NODES.\n",
+ name().data(), inheritanceGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
}
else if (!inheritanceGraph.isTrivial())
{
@@ -2268,14 +2253,9 @@ void ClassDefImpl::writeTagFile(FTextStream &tagFile)
{
tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>" << endl;
}
- if (m_impl->tempArgs)
+ for (const Argument &a : m_impl->tempArgs)
{
- ArgumentListIterator ali(*m_impl->tempArgs);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- tagFile << " <templarg>" << convertToXML(a->name) << "</templarg>" << endl;
- }
+ tagFile << " <templarg>" << convertToXML(a.name) << "</templarg>" << endl;
}
if (m_impl->inherits)
{
@@ -2816,7 +2796,7 @@ QCString ClassDefImpl::title() const
{
pageTitle = theTranslator->trCompoundReferenceFortran(displayName(),
m_impl->compType,
- m_impl->tempArgs != 0);
+ !m_impl->tempArgs.empty());
}
else if (lang==SrcLangExt_Slice)
{
@@ -2850,7 +2830,7 @@ QCString ClassDefImpl::title() const
{
pageTitle = theTranslator->trCompoundReference(displayName(),
m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType,
- m_impl->tempArgs != 0);
+ !m_impl->tempArgs.empty());
}
}
return pageTitle;
@@ -3089,7 +3069,7 @@ void ClassDefImpl::writeMemberList(OutputList &ol) const
//printf("%s: Member %s of class %s md->protection()=%d mi->prot=%d prot=%d inherited=%d\n",
// name().data(),md->name().data(),cd->name().data(),md->protection(),mi->prot,prot,mi->inherited);
- if (cd && !md->name().isEmpty() && md->name()[0]!='@')
+ if (cd && !md->name().isEmpty() && !md->isAnonymous())
{
bool memberWritten=FALSE;
if (cd->isLinkable() && md->isLinkable())
@@ -3327,7 +3307,7 @@ bool ClassDefImpl::hasExamples() const
void ClassDefImpl::addTypeConstraint(const QCString &typeConstraint,const QCString &type)
{
- //printf("addTypeContraint(%s,%s)\n",type.data(),typeConstraint.data());
+ //printf("addTypeConstraint(%s,%s)\n",type.data(),typeConstraint.data());
static bool hideUndocRelation = Config_getBool(HIDE_UNDOC_RELATIONS);
if (typeConstraint.isEmpty() || type.isEmpty()) return;
ClassDef *cd = const_cast<ClassDef*>(getResolvedClass(this,getFileDef(),typeConstraint));
@@ -3362,55 +3342,33 @@ void ClassDefImpl::addTypeConstraint(const QCString &typeConstraint,const QCStri
// Java Type Constrains: A<T extends C & I>
void ClassDefImpl::addTypeConstraints()
{
- if (m_impl->tempArgs)
+ for (const Argument &a : m_impl->tempArgs)
{
- ArgumentListIterator ali(*m_impl->tempArgs);
- Argument *a;
- for (;(a=ali.current());++ali)
+ if (!a.typeConstraint.isEmpty())
{
- if (!a->typeConstraint.isEmpty())
+ QCString typeConstraint;
+ int i=0,p=0;
+ while ((i=a.typeConstraint.find('&',p))!=-1) // typeConstraint="A &I" for C<T extends A & I>
{
- QCString typeConstraint;
- int i=0,p=0;
- while ((i=a->typeConstraint.find('&',p))!=-1) // typeConstraint="A &I" for C<T extends A & I>
- {
- typeConstraint = a->typeConstraint.mid(p,i-p).stripWhiteSpace();
- addTypeConstraint(typeConstraint,a->type);
- p=i+1;
- }
- typeConstraint = a->typeConstraint.right(a->typeConstraint.length()-p).stripWhiteSpace();
- addTypeConstraint(typeConstraint,a->type);
+ typeConstraint = a.typeConstraint.mid(p,i-p).stripWhiteSpace();
+ addTypeConstraint(typeConstraint,a.type);
+ p=i+1;
}
+ typeConstraint = a.typeConstraint.right(a.typeConstraint.length()-p).stripWhiteSpace();
+ addTypeConstraint(typeConstraint,a.type);
}
}
}
// C# Type Constraints: D<T> where T : C, I
-void ClassDefImpl::setTypeConstraints(ArgumentList *al)
+void ClassDefImpl::setTypeConstraints(const ArgumentList &al)
{
- if (al==0) return;
- if (!m_impl->typeConstraints) delete m_impl->typeConstraints;
- m_impl->typeConstraints = new ArgumentList;
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- m_impl->typeConstraints->append(new Argument(*a));
- }
+ m_impl->typeConstraints = al;
}
-void ClassDefImpl::setTemplateArguments(ArgumentList *al)
+void ClassDefImpl::setTemplateArguments(const ArgumentList &al)
{
- if (al==0) return;
- if (m_impl->tempArgs) delete m_impl->tempArgs; // delete old list if needed
- //printf("setting template args '%s' for '%s'\n",tempArgListToString(al,getLanguage()).data(),name().data());
- m_impl->tempArgs=new ArgumentList;
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- m_impl->tempArgs->append(new Argument(*a));
- }
+ m_impl->tempArgs = al;
}
/*! Returns \c TRUE iff this class or a class inheriting from this class
@@ -3689,7 +3647,7 @@ void ClassDefImpl::mergeMembers()
{
MemberDef *srcMd = srcMi->memberDef;
bool found=FALSE;
- bool ambigue=FALSE;
+ bool ambiguous=FALSE;
bool hidden=FALSE;
MemberNameInfoIterator dstMnii(*dstMni);
MemberInfo *dstMi;
@@ -3704,8 +3662,8 @@ void ClassDefImpl::mergeMembers()
if (srcCd==dstCd || dstCd->isBaseClass(srcCd,TRUE))
// member is in the same or a base class
{
- const ArgumentList *srcAl = srcMd->argumentList();
- const ArgumentList *dstAl = dstMd->argumentList();
+ ArgumentList &srcAl = srcMd->argumentList();
+ ArgumentList &dstAl = dstMd->argumentList();
found=matchArguments2(
srcMd->getOuterScope(),srcMd->getFileDef(),srcAl,
dstMd->getOuterScope(),dstMd->getFileDef(),dstAl,
@@ -3728,7 +3686,7 @@ void ClassDefImpl::mergeMembers()
QCString scope=dstMi->scopePath.left(dstMi->scopePath.find(sep)+sepLen);
if (scope!=dstMi->ambiguityResolutionScope.left(scope.length()))
dstMi->ambiguityResolutionScope.prepend(scope);
- ambigue=TRUE;
+ ambiguous=TRUE;
}
}
else // same members
@@ -3757,12 +3715,12 @@ void ClassDefImpl::mergeMembers()
{
dstMi->ambiguityResolutionScope.prepend(scope);
}
- ambigue=TRUE;
+ ambiguous=TRUE;
}
}
}
- //printf("member %s::%s hidden %d ambigue %d srcMi->ambigClass=%p\n",
- // srcCd->name().data(),srcMd->name().data(),hidden,ambigue,srcMi->ambigClass);
+ //printf("member %s::%s hidden %d ambiguous %d srcMi->ambigClass=%p\n",
+ // srcCd->name().data(),srcMd->name().data(),hidden,ambiguous,srcMi->ambigClass);
// TODO: fix the case where a member is hidden by inheritance
// of a member with the same name but with another prototype,
@@ -3791,7 +3749,7 @@ void ClassDefImpl::mergeMembers()
MemberInfo *newMi = new MemberInfo(srcMd,prot,virt,TRUE);
newMi->scopePath=bClass->name()+sep+srcMi->scopePath;
- if (ambigue)
+ if (ambiguous)
{
//printf("$$ New member %s %s add scope %s::\n",
// srcMi->ambiguityResolutionScope.data(),
@@ -4099,203 +4057,6 @@ void ClassDefImpl::addUsedByClass(ClassDef *cd,const char *accessName,
}
-#if 0
-/*! Builds up a dictionary of all classes that are used by the state of this
- * class (the "implementation").
- * Must be called before mergeMembers() is called!
- */
-
-void ClassDefImpl::determineImplUsageRelation()
-{
- MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoSDict);
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- MemberDef *md=mi->memberDef;
- if (md->isVariable()) // for each member variable in this class
- {
- QCString type=removeRedundantWhiteSpace(md->typeString());
- //printf("in class %s found var type='%s' name='%s'\n",
- // name().data(),type.data(),md->name().data());
- int pos=0;
- QCString usedClassName;
- QCString templSpec;
- bool found=FALSE;
- while (extractClassNameFromType(type,pos,usedClassName,templSpec)!=-1 && !found)
- {
- //printf("usedClassName='%s' templSpec=%s\n",usedClassName.data(),templSpec.data());
- // check if usedClassName is a template argument of its class
- ClassDef *cd=md->getClassDef();
- if (cd && cd->templateArguments())
- {
- ArgumentListIterator ali(*cd->templateArguments());
- Argument *arg;
- int count=0;
- for (ali.toFirst();(arg=ali.current());++ali,++count)
- {
- if (arg->name==usedClassName) // type is a template argument
- {
- found=TRUE;
- if (m_impl->usesImplClassDict==0) m_impl->usesImplClassDict = new UsesClassDict(257);
- cd = new ClassDef(cd->getDefFileName(),cd->getDefLine(),
- usedClassName,ClassDef::Class);
- cd->setIsTemplateBaseClass(count);
- UsesClassDef *ucd = new UsesClassDef(cd);
- m_impl->usesImplClassDict->insert(cd->name(),ucd);
- ucd->templSpecifiers = templSpec;
- ucd->addAccessor(md->name());
- Doxygen::hiddenClasses.append(cd);
- //printf("Adding used template argument %s to class %s\n",
- // cd->name().data(),name().data());
- //printf("Adding accessor %s to class %s\n",
- // md->name().data(),ucd->classDef->name().data());
- }
- }
- }
-
- if (!found)
- {
- cd=0;
- if (getNamespaceDef()!=0)
- {
- cd=getResolvedClass(getNamespaceDef()->name()+"::"+usedClassName,0,&templSpec);
- }
- if (cd==0) cd=getResolvedClass(name()+"::"+usedClassName,0,&templSpec);
- if (cd==0) cd=getResolvedClass(usedClassName,0,&templSpec); // TODO: also try in-between scopes!
- //printf("Search for class %s result=%p\n",usedClassName.data(),cd);
- if (cd) // class exists
- {
- found=TRUE;
- if (m_impl->usesImplClassDict==0)
- {
- m_impl->usesImplClassDict = new UsesClassDict(257);
- m_impl->usesImplClassDict->setAutoDelete(TRUE);
- }
- UsesClassDef *ucd=m_impl->usesImplClassDict->find(cd->name());
- if (ucd==0 || ucd->templSpecifiers!=templSpec)
- {
- ucd = new UsesClassDef(cd);
- m_impl->usesImplClassDict->insert(cd->name(),ucd);
- ucd->templSpecifiers = templSpec;
- //printf("Adding used class %s to class %s\n",
- // cd->name().data(),name().data());
- }
- ucd->addAccessor(md->name());
- //printf("Adding accessor %s to class %s\n",
- // md->name().data(),ucd->classDef->name().data());
- }
- }
- }
- }
- }
- }
-#ifdef DUMP
- if (m_impl->usesClassDict)
- {
- msg("Class %s uses the following classes:\n",name().data());
- UsesClassDictIterator ucdi(*m_impl->usesClassDict);
- UsesClassDef *ucd;
- for (;(ucd=ucdi.current());++ucdi)
- {
- msg(" %s via ",ucd->classDef->name().data());
- QDictIterator<void> dvi(*ucd->accessors);
- const char *s;
- for (;(s=dvi.currentKey());++dvi)
- {
- msg("%s ",s);
- }
- msg("\n");
- }
- }
-#endif
-}
-
-//----------------------------------------------------------------------------
-
-// I have disabled this code because the graphs it renders quickly become
-// too large to be of practical use.
-
-void ClassDefImpl::addUsedInterfaceClasses(MemberDef *md,const char *typeStr)
-{
- QCString type = typeStr;
- static const QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
- int p=0,i,l;
- while ((i=re.match(type,p,&l))!=-1) // for each class name in the type
- {
- ClassDef *cd=getClass(name()+"::"+type.mid(i,l));
- if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try in-between scopes!
- if (cd && cd!=this && !isBaseClass(cd))
- {
- if (m_impl->usesIntfClassDict==0)
- {
- m_impl->usesIntfClassDict = new UsesClassDict(257);
- }
- UsesClassDef *ucd=m_impl->usesIntfClassDict->find(cd->name());
- if (ucd==0)
- {
- ucd = new UsesClassDef(cd);
- m_impl->usesIntfClassDict->insert(cd->name(),ucd);
- //printf("in class '%s' adding used intf class '%s'\n",
- // name().data(),cd->name().data());
- }
- ucd->addAccessor(md->name());
- //printf("in class '%s' adding accessor '%s' to class '%s'\n",
- // name().data(),md->name().data(),ucd->classDef->name().data());
- }
- p=i+l;
- }
-}
-
-void ClassDefImpl::determineIntfUsageRelation()
-{
- MemberNameInfoSDict::Iterator mnili(*m_impl->allMemberNameInfoList);
- MemberNameInfo *mni;
- for (;(mni=mnili.current());++mnili)
- {
- MemberNameInfoIterator mnii(*mni);
- MemberInfo *mi;
- for (mnii.toFirst();(mi=mnii.current());++mnii)
- {
- MemberDef *md=mi->memberDef;
-
- // compute the protection level for this member
- Protection protect=md->protection();
- if (mi->prot==Protected) // inherited protection
- {
- if (protect==Public) protect=Protected;
- else if (protect==Protected) protect=Private;
- }
-
- if (!md->name().isEmpty() && md->name()[0]!='@' &&
- (mi->prot!=Private && protect!=Private)
- )
- {
- // add classes found in the return type
- addUsedInterfaceClasses(md,md->typeString());
- ArgumentList *al = md->argumentList();
- if (al) // member has arguments
- {
- // add classes found in the types of the argument list
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- if (!a->type.isEmpty() && a->type.at(0)!='@')
- {
- addUsedInterfaceClasses(md,a->type);
- }
- }
- }
- }
- }
- }
-}
-#endif
-
QCString ClassDefImpl::compoundTypeString() const
{
if (getLanguage()==SrcLangExt_Fortran)
@@ -4431,46 +4192,6 @@ Definition *ClassDefImpl::findInnerCompound(const char *name) const
return result;
}
-//void ClassDefImpl::initTemplateMapping()
-//{
-// m_impl->templateMapping->clear();
-// ArgumentList *al = templateArguments();
-// if (al)
-// {
-// ArgumentListIterator ali(*al);
-// Argument *arg;
-// for (ali.toFirst();(arg=ali.current());++ali)
-// {
-// setTemplateArgumentMapping(arg->name,arg->defval);
-// }
-// }
-//}
-//void ClassDefImpl::setTemplateArgumentMapping(const char *formal,const char *actual)
-//{
-// //printf("ClassDefImpl::setTemplateArgumentMapping(%s,%s)\n",formal,actual);
-// if (m_impl->templateMapping && formal)
-// {
-// if (m_impl->templateMapping->find(formal))
-// {
-// m_impl->templateMapping->remove(formal);
-// }
-// m_impl->templateMapping->insert(formal,new QCString(actual));
-// }
-//}
-//
-//QCString ClassDefImpl::getTemplateArgumentMapping(const char *formal) const
-//{
-// if (m_impl->templateMapping && formal)
-// {
-// QCString *s = m_impl->templateMapping->find(formal);
-// if (s)
-// {
-// return *s;
-// }
-// }
-// return "";
-//}
-
ClassDef *ClassDefImpl::insertTemplateInstance(const QCString &fileName,
int startLine, int startColumn, const QCString &templSpec,bool &freshInstance) const
{
@@ -4552,12 +4273,11 @@ void ClassDefImpl::addMembersToTemplateInstance(const ClassDef *cd,const char *t
MemberInfo *mi;
for (mnii.toFirst();(mi=mnii.current());++mnii)
{
- ArgumentList *actualArguments = new ArgumentList;
+ ArgumentList actualArguments;
stringToArgumentList(templSpec,actualArguments);
MemberDef *md = mi->memberDef;
MemberDef *imd = md->createTemplateInstanceMember(
cd->templateArguments(),actualArguments);
- delete actualArguments;
//printf("%s->setMemberClass(%p)\n",imd->name().data(),this);
imd->setMemberClass(this);
imd->setTemplateMaster(md);
@@ -4607,25 +4327,24 @@ bool ClassDefImpl::isReference() const
}
}
-void ClassDefImpl::getTemplateParameterLists(QList<ArgumentList> &lists) const
+std::vector<ArgumentList> ClassDefImpl::getTemplateParameterLists() const
{
+ std::vector<ArgumentList> result;
Definition *d=getOuterScope();
- if (d)
+ while (d && d->definitionType()==Definition::TypeClass)
{
- if (d->definitionType()==Definition::TypeClass)
- {
- ClassDef *cd=dynamic_cast<ClassDef *>(d);
- cd->getTemplateParameterLists(lists);
- }
+ result.insert(result.begin(),dynamic_cast<ClassDef*>(d)->templateArguments());
+ d = d->getOuterScope();
}
- if (templateArguments())
+ if (!templateArguments().empty())
{
- lists.append(templateArguments());
+ result.push_back(templateArguments());
}
+ return result;
}
QCString ClassDefImpl::qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams,int *actualParamIndex) const
+ const std::vector<ArgumentList> *actualParams,int *actualParamIndex) const
{
//static bool optimizeOutputJava = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
static bool hideScopeNames = Config_getBool(HIDE_SCOPE_NAMES);
@@ -4659,12 +4378,11 @@ QCString ClassDefImpl::qualifiedNameWithTemplateParameters(
//}
//printf("m_impl->lang=%d clName=%s isSpecialization=%d\n",getLanguage(),clName.data(),isSpecialization);
scName+=clName;
- ArgumentList *al=0;
- if (templateArguments())
+ if (!templateArguments().empty())
{
- if (actualParams && *actualParamIndex<(int)actualParams->count())
+ if (actualParams && *actualParamIndex<(int)actualParams->size())
{
- al = actualParams->at(*actualParamIndex);
+ const ArgumentList &al = actualParams->at(*actualParamIndex);
if (!isSpecialization)
{
scName+=tempArgListToString(al,lang);
@@ -4706,7 +4424,7 @@ void ClassDefImpl::addListReferences()
if (!isLinkableInProject()) return;
//printf("ClassDef(%s)::addListReferences()\n",name().data());
{
- QList<ListItemInfo> *xrefItems = xrefListItems();
+ const std::vector<ListItemInfo> &xrefItems = xrefListItems();
addRefItem(xrefItems,
qualifiedName(),
lang==SrcLangExt_Fortran ? theTranslator->trType(TRUE,TRUE)
@@ -5007,7 +4725,7 @@ int ClassDefImpl::countAdditionalInheritedMembers() const
}
}
}
- //printf("countAdditonalInheritedMembers()=%d\n",totalCount);
+ //printf("countAdditionalInheritedMembers()=%d\n",totalCount);
return totalCount;
}
@@ -5238,7 +4956,7 @@ Protection ClassDefImpl::protection() const
return m_impl->prot;
}
-ArgumentList *ClassDefImpl::templateArguments() const
+const ArgumentList &ClassDefImpl::templateArguments() const
{
return m_impl->tempArgs;
}
@@ -5265,7 +4983,7 @@ const ClassDef *ClassDefImpl::templateMaster() const
bool ClassDefImpl::isTemplate() const
{
- return m_impl->tempArgs!=0;
+ return !m_impl->tempArgs.empty();
}
IncludeInfo *ClassDefImpl::includeInfo() const
@@ -5551,7 +5269,7 @@ const FileList &ClassDefImpl::usedFiles() const
return m_impl->files;
}
-const ArgumentList *ClassDefImpl::typeConstraints() const
+const ArgumentList &ClassDefImpl::typeConstraints() const
{
return m_impl->typeConstraints;
}
@@ -5573,7 +5291,6 @@ bool ClassDefImpl::isSliceLocal() const
void ClassDefImpl::setName(const char *name)
{
- m_impl->isAnonymous = QCString(name).find('@')!=-1;
DefinitionImpl::setName(name);
}
@@ -5582,11 +5299,6 @@ void ClassDefImpl::setMetaData(const char *md)
m_impl->metaData = md;
}
-bool ClassDefImpl::isAnonymous() const
-{
- return m_impl->isAnonymous;
-}
-
QCString ClassDefImpl::collaborationGraphFileName() const
{
return m_impl->collabFileName;
diff --git a/src/classdef.h b/src/classdef.h
index e64f0eb..3158c50 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -18,6 +18,8 @@
#ifndef CLASSDEF_H
#define CLASSDEF_H
+#include <vector>
+
#include <qlist.h>
#include <qdict.h>
#include <qptrdict.h>
@@ -154,10 +156,9 @@ class ClassDef : virtual public Definition
/** show this class in the declaration section of its parent? */
virtual bool visibleInParentsDeclList() const = 0;
- /** Returns the template arguments of this class
- * Will return 0 if not applicable.
+ /** Returns the template arguments of this class
*/
- virtual ArgumentList *templateArguments() const = 0;
+ virtual const ArgumentList &templateArguments() const = 0;
/** Returns the namespace this compound is in, or 0 if it has a global
* scope.
@@ -228,10 +229,10 @@ class ClassDef : virtual public Definition
* will return a list with one ArgumentList containing one argument
* with type="class" and name="T".
*/
- virtual void getTemplateParameterLists(QList<ArgumentList> &lists) const = 0;
+ virtual std::vector<ArgumentList> getTemplateParameterLists() const = 0;
virtual QCString qualifiedNameWithTemplateParameters(
- QList<ArgumentList> *actualParams=0,int *actualParamIndex=0) const = 0;
+ const std::vector<ArgumentList> *actualParams=0,int *actualParamIndex=0) const = 0;
/** Returns TRUE if there is at least one pure virtual member in this
* class.
@@ -301,14 +302,13 @@ class ClassDef : virtual public Definition
virtual bool isJavaEnum() const = 0;
virtual bool isGeneric() const = 0;
- virtual bool isAnonymous() const = 0;
virtual const ClassSDict *innerClasses() const = 0;
virtual QCString title() const = 0;
virtual QCString generatedFromFiles() const = 0;
virtual const FileList &usedFiles() const = 0;
- virtual const ArgumentList *typeConstraints() const = 0;
+ virtual const ArgumentList &typeConstraints() const = 0;
virtual const ExampleSDict *exampleList() const = 0;
virtual bool hasExamples() const = 0;
virtual QCString getMemberListFileName() const = 0;
@@ -331,10 +331,10 @@ class ClassDef : virtual public Definition
virtual void setCompoundType(CompoundType t) = 0;
virtual void setClassName(const char *name) = 0;
virtual void setClassSpecifier(uint64 spec) = 0;
- virtual void setTemplateArguments(ArgumentList *al) = 0;
+ virtual void setTemplateArguments(const ArgumentList &al) = 0;
virtual void setTemplateBaseClassNames(QDict<int> *templateNames) = 0;
virtual void setTemplateMaster(const ClassDef *tm) = 0;
- virtual void setTypeConstraints(ArgumentList *al) = 0;
+ virtual void setTypeConstraints(const ArgumentList &al) = 0;
virtual void setCategoryOf(ClassDef *cd) = 0;
virtual void setUsedOnly(bool b) = 0;
virtual void setTagLessReference(ClassDef *cd) = 0;
diff --git a/src/classlist.cpp b/src/classlist.cpp
index 93ae8aa..2b284b1 100644
--- a/src/classlist.cpp
+++ b/src/classlist.cpp
@@ -72,7 +72,7 @@ bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const
ClassDef *cd=0;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
- if (cd->name().find('@')==-1 &&
+ if (!cd->isAnonymous() &&
(filter==0 || *filter==cd->compoundType())
)
{
@@ -103,7 +103,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
//printf(" ClassSDict::writeDeclaration for %s\n",cd->name().data());
- if (cd->name().find('@')==-1 &&
+ if (!cd->isAnonymous() &&
!cd->isExtension() &&
(cd->protection()!=Private || extractPrivate) &&
(filter==0 || *filter==cd->compoundType())
@@ -137,7 +137,7 @@ void ClassSDict::writeDocumentation(OutputList &ol,const Definition * container)
// cd->name().data(),cd->getOuterScope(),cd->isLinkableInProject(),cd->isEmbeddedInOuterScope(),
// container,cd->partOfGroups() ? cd->partOfGroups()->count() : 0);
- if (cd->name().find('@')==-1 &&
+ if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
!cd->isAlias() &&
@@ -167,8 +167,8 @@ void GenericsSDict::insert(const QCString &key,ClassDef *cd)
int i=key.find('<');
if (i==-1) return;
ArgumentList argList;
- stringToArgumentList(key.mid(i),&argList);
- int c = argList.count();
+ stringToArgumentList(key.mid(i),argList);
+ int c = argList.size();
if (c==0) return;
GenericsCollection *collection = m_dict.find(key.left(i));
if (collection==0) // new name
@@ -200,8 +200,8 @@ ClassDef *GenericsSDict::find(const QCString &key)
if (collection)
{
ArgumentList argList;
- stringToArgumentList(key.mid(i),&argList);
- int c = argList.count();
+ stringToArgumentList(key.mid(i),argList);
+ int c = argList.size();
return collection->find(c);
}
}
diff --git a/src/code.h b/src/code.h
index da6b80e..42265ad 100644
--- a/src/code.h
+++ b/src/code.h
@@ -18,20 +18,37 @@
#ifndef CODE_H
#define CODE_H
-#include "types.h"
+#include "parserintf.h"
-class CodeOutputInterface;
class FileDef;
class MemberDef;
class QCString;
class Definition;
-void parseCCode(CodeOutputInterface &,const char *,const QCString &,
- SrcLangExt lang, bool isExample, const char *exName,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
- bool collectXRefs);
-void resetCCodeParserState();
-void codeFreeScanner();
+class CCodeParser : public CodeParserInterface
+{
+ public:
+ CCodeParser();
+ virtual ~CCodeParser();
+ void parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt lang,
+ bool isExampleBlock,
+ const char *exampleName=0,
+ FileDef *fileDef=0,
+ int startLine=-1,
+ int endLine=-1,
+ bool inlineFragment=FALSE,
+ const MemberDef *memberDef=0,
+ bool showLineNumbers=TRUE,
+ const Definition *searchCtx=0,
+ bool collectXRefs=TRUE
+ );
+ void resetCodeParserState();
+ private:
+ struct Private;
+ std::unique_ptr<Private> p;
+};
#endif
diff --git a/src/code.l b/src/code.l
index 9428432..fb609e5 100644
--- a/src/code.l
+++ b/src/code.l
@@ -16,6 +16,8 @@
*/
%option never-interactive
%option prefix="codeYY"
+%option reentrant
+%option extra-type="struct codeYY_state *"
%{
@@ -28,6 +30,7 @@
#include <qregexp.h>
#include <qdir.h>
+#include "code.h"
#include "entry.h"
#include "doxygen.h"
#include "message.h"
@@ -58,80 +61,6 @@
* statics
*/
-static CodeOutputInterface * g_code;
-
-static ClassSDict *g_codeClassSDict = 0;
-static QCString g_curClassName;
-static QStrList g_curClassBases;
-
-static QCString g_parmType;
-static QCString g_parmName;
-
-static const char * g_inputString; //!< the code fragment as text
-static int g_inputPosition; //!< read offset during parsing
-static int g_inputLines; //!< number of line in the code fragment
-static int g_yyLineNr; //!< current line number
-static int g_yyColNr; //!< current column number
-static bool g_needsTermination;
-
-static bool g_exampleBlock;
-static QCString g_exampleName;
-static QCString g_exampleFile;
-
-static bool g_insideTemplate = FALSE;
-static QCString g_type;
-static QCString g_name;
-static QCString g_args;
-static QCString g_classScope;
-static QCString g_realScope;
-static QStack<int> g_scopeStack; //!< 1 if bracket starts a scope,
- // 2 for internal blocks
-static int g_anchorCount;
-static FileDef * g_sourceFileDef;
-static bool g_lineNumbers;
-static Definition * g_currentDefinition;
-static MemberDef * g_currentMemberDef;
-static bool g_includeCodeFragment;
-static const char * g_currentFontClass;
-static bool g_searchingForBody;
-static bool g_insideBody;
-static int g_bodyCurlyCount;
-static QCString g_saveName;
-static QCString g_saveType;
-static QCString g_delimiter;
-
-static int g_bracketCount = 0;
-static int g_curlyCount = 0;
-static int g_sharpCount = 0;
-static bool g_inFunctionTryBlock = FALSE;
-static bool g_inForEachExpression = FALSE;
-
-static int g_lastTemplCastContext;
-static int g_lastSpecialCContext;
-static int g_lastStringContext;
-static int g_lastSkipCppContext;
-static int g_lastVerbStringContext;
-static int g_lastObjCCallContext;
-static int g_memCallContext;
-static int g_lastCContext;
-static int g_skipInlineInitContext;
-
-static bool g_insideCpp;
-static bool g_insideObjC;
-static bool g_insideJava;
-static bool g_insideCS;
-static bool g_insidePHP;
-static bool g_insideProtocolList;
-static bool g_insideSlice;
-
-static bool g_lexInit = FALSE;
-
-static QStack<int> g_classScopeLengthStack;
-
-static int g_prefixed_with_this_keyword = FALSE;
-static const Definition *g_searchCtx;
-static bool g_collectXRefs;
-
// context for an Objective-C method call
struct ObjCCallCtx
{
@@ -147,31 +76,6 @@ struct ObjCCallCtx
int braceCount;
};
-// globals for objective-C method calls
-static ObjCCallCtx *g_currentCtx=0;
-static int g_currentCtxId=0;
-static int g_currentNameId=0;
-static int g_currentObjId=0;
-static int g_currentWordId=0;
-static int g_currentCommentId=0;
-static QStack<ObjCCallCtx> g_contextStack;
-static QIntDict<ObjCCallCtx> g_contextDict;
-static QIntDict<QCString> g_nameDict;
-static QIntDict<QCString> g_objectDict;
-static QIntDict<QCString> g_wordDict;
-static QIntDict<QCString> g_commentDict;
-static int g_braceCount=0;
-
-static void saveObjCContext();
-static void restoreObjCContext();
-
-static const char *stateToString(int state);
-
-static QCString g_forceTagReference;
-
-
-//-------------------------------------------------------------------
-
/*! Represents a stack of variable to class mappings as found in the
* code. Each scope is enclosed in pushScope() and popScope() calls.
* Variables are added by calling addVariables() and one can search
@@ -227,7 +131,7 @@ class VariableContext
m_scopes.clear();
}
- void addVariable(const QCString &type,const QCString &name);
+ void addVariable(yyscan_t yyscanner,const QCString &type,const QCString &name);
ClassDef *findVariable(const QCString &name);
int count() const { return m_scopes.count(); }
@@ -237,8 +141,2115 @@ class VariableContext
QList<Scope> m_scopes;
};
-void VariableContext::addVariable(const QCString &type,const QCString &name)
+//-------------------------------------------------------------------
+
+class CallContext
+{
+ public:
+ struct Ctx
+ {
+ Ctx(QCString _name, QCString _type) : name(_name), type(_type), d(0) {}
+ QCString name;
+ QCString type;
+ const Definition *d;
+ };
+
+ CallContext()
+ {
+ m_defList.append(new Ctx("",""));
+ m_defList.setAutoDelete(TRUE);
+ }
+ virtual ~CallContext() {}
+ void setScope(const Definition *d)
+ {
+ Ctx *ctx = m_defList.getLast();
+ if (ctx)
+ {
+ DBG_CTX((stderr,"** Set call context %s (%p)\n",d==0 ? "<null>" : d->name().data(),d));
+ ctx->d=d;
+ }
+ }
+ void pushScope(QCString _name, QCString _type)
+ {
+ m_defList.append(new Ctx(_name,_type));
+ DBG_CTX((stderr,"** Push call context %d\n",m_defList.count()));
+ }
+ void popScope(QCString &_name, QCString &_type)
+ {
+ if (m_defList.count()>1)
+ {
+ DBG_CTX((stderr,"** Pop call context %d\n",m_defList.count()));
+ Ctx *ctx = m_defList.getLast();
+ if (ctx)
+ {
+ _name = ctx->name;
+ _type = ctx->type;
+ }
+ m_defList.removeLast();
+ }
+ else
+ {
+ DBG_CTX((stderr,"** ILLEGAL: Pop call context\n"));
+ }
+ }
+ void clear()
+ {
+ DBG_CTX((stderr,"** Clear call context\n"));
+ m_defList.clear();
+ m_defList.append(new Ctx("",""));
+ }
+ const Definition *getScope() const
+ {
+ Ctx *ctx = m_defList.getLast();
+ if (ctx) return ctx->d; else return 0;
+ }
+
+ private:
+ QList<Ctx> m_defList;
+};
+
+
+struct codeYY_state
+{
+ CodeOutputInterface * code = 0;
+
+ ClassSDict *codeClassSDict = 0;
+ QCString curClassName;
+ QStrList curClassBases;
+
+ QCString parmType;
+ QCString parmName;
+
+ const char * inputString = 0; //!< the code fragment as text
+ int inputPosition = 0; //!< read offset during parsing
+ int inputLines = 0; //!< number of line in the code fragment
+ int yyLineNr = 0; //!< current line number
+ int yyColNr = 0; //!< current column number
+ bool needsTermination = FALSE;
+
+ bool exampleBlock = FALSE;
+ QCString exampleName;
+ QCString exampleFile;
+
+ bool insideTemplate = FALSE;
+ QCString type;
+ QCString name;
+ QCString args;
+ QCString classScope;
+ QCString realScope;
+ QStack<int> scopeStack; //!< 1 if bracket starts a scope,
+ // 2 for internal blocks
+ int anchorCount = 0;
+ FileDef * sourceFileDef = 0;
+ bool lineNumbers = FALSE;
+ Definition * currentDefinition = 0;
+ MemberDef * currentMemberDef = 0;
+ bool includeCodeFragment = FALSE;
+ const char * currentFontClass = 0;
+ bool searchingForBody = FALSE;
+ bool insideBody = FALSE;
+ int bodyCurlyCount = 0;
+ QCString saveName;
+ QCString saveType;
+ QCString delimiter;
+
+ int bracketCount = 0;
+ int curlyCount = 0;
+ int sharpCount = 0;
+ bool inFunctionTryBlock = FALSE;
+ bool inForEachExpression = FALSE;
+
+ int lastTemplCastContext = 0;
+ int lastSpecialCContext = 0;
+ int lastStringContext = 0;
+ int lastSkipCppContext = 0;
+ int lastVerbStringContext = 0;
+ int lastObjCCallContext = 0;
+ int memCallContext = 0;
+ int lastCContext = 0;
+ int skipInlineInitContext = 0;
+
+ SrcLangExt lang = SrcLangExt_Unknown;
+ bool insideObjC = FALSE;
+ bool insideProtocolList = FALSE;
+
+ bool lexInit = FALSE;
+
+ QStack<int> classScopeLengthStack;
+
+ int prefixed_with_this_keyword = FALSE;
+ const Definition *searchCtx = 0;
+ bool collectXRefs = FALSE;
+
+ ObjCCallCtx * currentCtx=0;
+ int currentCtxId=0;
+ int currentNameId=0;
+ int currentObjId=0;
+ int currentWordId=0;
+ int currentCommentId=0;
+ QStack<ObjCCallCtx> contextStack;
+ QIntDict<ObjCCallCtx> contextDict;
+ QIntDict<QCString> nameDict;
+ QIntDict<QCString> objectDict;
+ QIntDict<QCString> wordDict;
+ QIntDict<QCString> commentDict;
+ int braceCount=0;
+
+ QCString forceTagReference;
+ VariableContext theVarContext;
+ CallContext theCallContext;
+};
+
+static bool isCastKeyword(const QCString &s);
+
+//-------------------------------------------------------------------
+
+static void saveObjCContext(yyscan_t yyscanner);
+static void restoreObjCContext(yyscan_t yyscanner);
+static const char *stateToString(yyscan_t yyscanner,int state);
+static void addUsingDirective(yyscan_t yyscanner,const char *name);
+static void pushScope(yyscan_t yyscanner,const char *s);
+static void popScope(yyscan_t yyscanner);
+static void setCurrentDoc(yyscan_t yyscanner,const QCString &anchor);
+static void addToSearchIndex(yyscan_t yyscanner,const char *text);
+static void setClassScope(yyscan_t yyscanner,const QCString &name);
+static void startCodeLine(yyscan_t yyscanner);
+static void endCodeLine(yyscan_t yyscanner);
+static void nextCodeLine(yyscan_t yyscanner);
+static void startFontClass(yyscan_t yyscanner,const char *s);
+static void endFontClass(yyscan_t yyscanner);
+static void codifyLines(yyscan_t yyscanner,const char *text);
+static void writeMultiLineCodeLink(yyscan_t yyscanner,CodeOutputInterface &ol,
+ const Definition *d,
+ const char *text);
+static void addType(yyscan_t yyscanner);
+static void addParmType(yyscan_t yyscanner);
+static void addUsingDirective(yyscan_t yyscanner,const char *name);
+static void setParameterList(yyscan_t yyscanner,const MemberDef *md);
+static const ClassDef *stripClassName(yyscan_t yyscanner,const char *s,Definition *d);
+static MemberDef *setCallContextForVar(yyscan_t yyscanner,const QCString &name);
+static void updateCallContextForSmartPointer(yyscan_t yyscanner);
+static bool getLinkInScope(yyscan_t yyscanner,const QCString &c, // scope
+ const QCString &m, // member
+ const char *memberText, // exact text
+ CodeOutputInterface &ol,
+ const char *text,
+ bool varOnly=FALSE
+ );
+static bool getLink(yyscan_t yyscanner,const char *className,
+ const char *memberName,
+ CodeOutputInterface &ol,
+ const char *text=0,
+ bool varOnly=FALSE);
+static void generateClassOrGlobalLink(yyscan_t yyscanner,CodeOutputInterface &ol,const char *clName,
+ bool typeOnly=FALSE,bool varOnly=FALSE);
+static bool generateClassMemberLink(yyscan_t yyscanner,CodeOutputInterface &ol,MemberDef *xmd,const char *memName);
+static bool generateClassMemberLink(yyscan_t yyscanner,CodeOutputInterface &ol,const Definition *def,const char *memName);
+static void generateMemberLink(yyscan_t yyscanner,CodeOutputInterface &ol,const QCString &varName,
+ const char *memName);
+static void generatePHPVariableLink(yyscan_t yyscanner,CodeOutputInterface &ol,const char *varName);
+static void generateFunctionLink(yyscan_t yyscanner,CodeOutputInterface &ol,const char *funcName);
+static int countLines(yyscan_t yyscanner);
+static void writeObjCMethodCall(yyscan_t yyscanner,ObjCCallCtx *ctx);
+static QCString escapeName(yyscan_t yyscanner,const char *s);
+static QCString escapeObject(yyscan_t yyscanner,const char *s);
+static QCString escapeWord(yyscan_t yyscanner,const char *s);
+static QCString escapeComment(yyscan_t yyscanner,const char *s);
+static bool skipLanguageSpecificKeyword(yyscan_t yyscanner,const QCString &kw);
+static int yyread(yyscan_t yyscanner,char *buf,int max_size);
+
+
+/* -----------------------------------------------------------------
+ */
+#undef YY_INPUT
+#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
+
+
+%}
+
+B [ \t]
+BN [ \t\n\r]
+ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
+SEP ("::"|"\\")
+SCOPENAME ({SEP}{BN}*)?({ID}{BN}*{SEP}{BN}*)*("~"{BN}*)?{ID}
+TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
+SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID})
+SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
+KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
+KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"set"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"null"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|"alignas"|"alignof"|{KEYWORD_OBJC})
+FLOWKW ("break"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"return"|"switch"|"throw"|"throws"|"@catch"|"@finally")
+FLOWCONDITION ("case"|"for"|"foreach"|"for each"|"goto"|"if"|"try"|"while"|"@try")
+TYPEKW ("bool"|"byte"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string"|"nullptr")
+TYPEKWSL ("LocalObject"|"Object"|"Value")
+CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
+CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
+ARITHOP "+"|"-"|"/"|"*"|"%"|"--"|"++"
+ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
+LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
+BITOP "&"|"|"|"^"|"<<"|">>"|"~"
+OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
+RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
+RAWEND ")"[^ \t\(\)\\]{0,16}\"
+
+%option noyywrap
+
+%x SkipString
+%x SkipStringS
+%x SkipVerbString
+%x SkipCPP
+%x SkipComment
+%x SkipCxxComment
+%x RemoveSpecialCComment
+%x StripSpecialCComment
+%x Body
+%x FuncCall
+%x MemberCall
+%x MemberCall2
+%x SkipInits
+%x ClassName
+%x AlignAs
+%x AlignAsEnd
+%x PackageName
+%x ClassVar
+%x CppCliTypeModifierFollowup
+%x Bases
+%x SkipSharp
+%x ReadInclude
+%x TemplDecl
+%x TemplCast
+%x CallEnd
+%x ObjCMethod
+%x ObjCParams
+%x ObjCParamType
+%x ObjCCall
+%x ObjCMName
+%x ObjCSkipStr
+%x ObjCCallComment
+%x OldStyleArgs
+%x UsingName
+%x RawString
+%x InlineInit
+
+%%
+
+<*>\x0d
+<Body>^([ \t]*"#"[ \t]*("include"|"import")[ \t]*)("<"|"\"") {
+ startFontClass(yyscanner,"preprocessor");
+ yyextra->code->codify(yytext);
+ BEGIN( ReadInclude );
+ }
+<Body>("@interface"|"@implementation"|"@protocol")[ \t\n]+ {
+ yyextra->insideObjC=TRUE;
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ if (!yyextra->insideTemplate)
+ BEGIN( ClassName );
+ }
+<Body>(("public"|"private"){B}+)?("ref"|"value"|"interface"|"enum"){B}+("class"|"struct") {
+ if (yyextra->insideTemplate) REJECT;
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ BEGIN( ClassName );
+ }
+<Body>"property"|"event"/{BN}* {
+ if (yyextra->insideTemplate) REJECT;
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+<Body>(KEYWORD_CPPCLI_DATATYPE|("partial"{B}+)?"class"|"struct"|"union"|"namespace"|"interface"){B}+ {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ if (!yyextra->insideTemplate)
+ BEGIN( ClassName );
+ }
+<Body>("package")[ \t\n]+ {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ BEGIN( PackageName );
+ }
+<ClassVar>\n {
+ if (!yyextra->insideObjC) REJECT;
+ codifyLines(yyscanner,yytext);
+ BEGIN(Body);
+ }
+<Body,ClassVar,Bases>"-"|"+" {
+ if (!yyextra->insideObjC || yyextra->insideBody)
+ {
+ yyextra->code->codify(yytext);
+ }
+ else // Start of Objective-C method
+ {
+ //printf("Method!\n");
+ yyextra->code->codify(yytext);
+ BEGIN(ObjCMethod);
+ }
+ }
+<ObjCMethod>":" {
+ yyextra->code->codify(yytext);
+ BEGIN(ObjCParams);
+ }
+<ObjCParams>"(" {
+ yyextra->code->codify(yytext);
+ BEGIN(ObjCParamType);
+ }
+<ObjCParams,ObjCMethod>";"|"{" {
+ yyextra->code->codify(yytext);
+ if (*yytext=='{')
+ {
+ if (yyextra->searchingForBody)
+ {
+ yyextra->searchingForBody=FALSE;
+ yyextra->insideBody=TRUE;
+ }
+ if (yyextra->insideBody) yyextra->bodyCurlyCount++;
+ if (!yyextra->curClassName.isEmpty()) // valid class name
+ {
+ pushScope(yyscanner,yyextra->curClassName);
+ DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
+ yyextra->scopeStack.push(SCOPEBLOCK);
+ }
+ }
+ yyextra->type.resize(0);
+ yyextra->name.resize(0);
+ BEGIN(Body);
+ }
+<ObjCParams>{ID}{B}*":" {
+ yyextra->code->codify(yytext);
+ }
+<ObjCParamType>{TYPEKW} {
+ startFontClass(yyscanner,"keywordtype");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ yyextra->parmType=yytext;
+ }
+<ObjCParamType>{ID} {
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ yyextra->parmType=yytext;
+ }
+<ObjCParamType>")" {
+ yyextra->code->codify(yytext);
+ BEGIN(ObjCParams);
+ }
+<ObjCParams>{ID} {
+ yyextra->code->codify(yytext);
+ yyextra->parmName=yytext;
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
+ yyextra->parmType.resize(0);yyextra->parmName.resize(0);
+ }
+<ObjCMethod,ObjCParams,ObjCParamType>{ID} {
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ }
+<ObjCMethod,ObjCParams,ObjCParamType>. {
+ yyextra->code->codify(yytext);
+ }
+<ObjCMethod,ObjCParams,ObjCParamType>\n {
+ codifyLines(yyscanner,yytext);
+ }
+<ReadInclude>[^\n\"\>]+/(">"|"\"") {
+ //FileInfo *f;
+ bool ambig;
+ bool found=FALSE;
+ //QCString absPath = yytext;
+ //if (yyextra->sourceFileDef && QDir::isRelativePath(absPath))
+ //{
+ // absPath = QDir::cleanDirPath(yyextra->sourceFileDef->getPath()+"/"+absPath);
+ //}
+
+ FileDef *fd=findFileDef(Doxygen::inputNameDict,yytext,ambig);
+ //printf("looking for include %s -> %s fd=%p\n",yytext,absPath.data(),fd);
+ if (fd && fd->isLinkable())
+ {
+ if (ambig) // multiple input files match the name
+ {
+ //printf("===== yes %s is ambiguous\n",yytext);
+ QCString name = QDir::cleanDirPath(yytext).utf8();
+ if (!name.isEmpty() && yyextra->sourceFileDef)
+ {
+ FileName *fn = Doxygen::inputNameDict->find(name);
+ if (fn)
+ {
+ FileNameIterator fni(*fn);
+ // for each include name
+ for (fni.toFirst();!found && (fd=fni.current());++fni)
+ {
+ // see if this source file actually includes the file
+ found = yyextra->sourceFileDef->isIncluded(fd->absFilePath());
+ //printf(" include file %s found=%d\n",fd->absFilePath().data(),found);
+ }
+ }
+ }
+ }
+ else // not ambiguous
+ {
+ found = TRUE;
+ }
+ }
+ //printf(" include file %s found=%d\n",fd ? fd->absFilePath().data() : "<none>",found);
+ if (found)
+ {
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,fd,yytext);
+ }
+ else
+ {
+ yyextra->code->codify(yytext);
+ }
+ char c=yyinput(yyscanner);
+ QCString text;
+ text+=c;
+ yyextra->code->codify(text);
+ endFontClass(yyscanner);
+ BEGIN( Body );
+ }
+<Body,Bases>^[ \t]*"#" {
+ startFontClass(yyscanner,"preprocessor");
+ yyextra->lastSkipCppContext = YY_START;
+ yyextra->code->codify(yytext);
+ BEGIN( SkipCPP ) ;
+ }
+<SkipCPP>. {
+ yyextra->code->codify(yytext);
+ }
+<SkipCPP>[^\n\/\\]+ {
+ yyextra->code->codify(yytext);
+ }
+<SkipCPP>\\[\r]?\n {
+ codifyLines(yyscanner,yytext);
+ }
+<SkipCPP>"//" {
+ yyextra->code->codify(yytext);
+ }
+<Body,FuncCall>"{" {
+ yyextra->theVarContext.pushScope();
+
+ DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
+ yyextra->scopeStack.push(INNERBLOCK);
+
+ if (yyextra->searchingForBody)
+ {
+ yyextra->searchingForBody=FALSE;
+ yyextra->insideBody=TRUE;
+ }
+ yyextra->code->codify(yytext);
+ if (yyextra->insideBody)
+ {
+ yyextra->bodyCurlyCount++;
+ }
+ yyextra->type.resize(0);
+ yyextra->name.resize(0);
+ BEGIN( Body );
+ }
+<Body,FuncCall,MemberCall,MemberCall2>"}" {
+ yyextra->theVarContext.popScope();
+ yyextra->type.resize(0);
+ yyextra->name.resize(0);
+
+ int *scope = yyextra->scopeStack.pop();
+ DBG_CTX((stderr,"** scope stack pop SCOPEBLOCK=%d\n",scope==SCOPEBLOCK));
+ if (scope==SCOPEBLOCK || scope==CLASSBLOCK)
+ {
+ popScope(yyscanner);
+ }
+
+ yyextra->code->codify(yytext);
+
+ DBG_CTX((stderr,"yyextra->bodyCurlyCount=%d\n",yyextra->bodyCurlyCount));
+ if (--yyextra->bodyCurlyCount<=0)
+ {
+ yyextra->insideBody=FALSE;
+ yyextra->currentMemberDef=0;
+ if (yyextra->currentDefinition)
+ yyextra->currentDefinition=yyextra->currentDefinition->getOuterScope();
+ }
+ BEGIN(Body);
+ }
+<Body,ClassVar>"@end" {
+ //printf("End of objc scope fd=%s\n",yyextra->sourceFileDef->name().data());
+ if (yyextra->sourceFileDef)
+ {
+ FileDef *fd=yyextra->sourceFileDef;
+ yyextra->insideObjC = fd->name().lower().right(2)==".m" ||
+ fd->name().lower().right(3)==".mm";
+ //printf("insideObjC=%d\n",yyextra->insideObjC);
+ }
+ else
+ {
+ yyextra->insideObjC = FALSE;
+ }
+ if (yyextra->insideBody)
+ {
+ yyextra->theVarContext.popScope();
+
+ int *scope = yyextra->scopeStack.pop();
+ DBG_CTX((stderr,"** scope stack pop SCOPEBLOCK=%d\n",scope==SCOPEBLOCK));
+ if (scope==SCOPEBLOCK || scope==CLASSBLOCK)
+ {
+ popScope(yyscanner);
+ }
+ yyextra->insideBody=FALSE;
+ }
+
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+
+ yyextra->currentMemberDef=0;
+ if (yyextra->currentDefinition)
+ yyextra->currentDefinition=yyextra->currentDefinition->getOuterScope();
+ BEGIN(Body);
+ }
+<ClassName,ClassVar>";" {
+ yyextra->code->codify(yytext);
+ yyextra->searchingForBody=FALSE;
+ BEGIN( Body );
+ }
+<ClassName,ClassVar>[*&^%]+ {
+ yyextra->type=yyextra->curClassName.copy();
+ yyextra->name.resize(0);
+ yyextra->code->codify(yytext);
+ BEGIN( Body ); // variable of type struct *
+ }
+<ClassName>"__declspec"{B}*"("{B}*{ID}{B}*")" {
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+<ClassName>{ID}("."{ID})* |
+<ClassName>{ID}("::"{ID})* {
+ if (yyextra->lang==SrcLangExt_CSharp)
+ yyextra->curClassName=substitute(yytext,".","::");
+ else
+ yyextra->curClassName=yytext;
+ addType(yyscanner);
+ if (yyextra->curClassName=="alignas")
+ {
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ BEGIN( AlignAs );
+ }
+ else
+ {
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ BEGIN( ClassVar );
+ }
+ }
+<AlignAs>"(" {
+ yyextra->bracketCount=1;
+ yyextra->code->codify(yytext);
+ BEGIN( AlignAsEnd );
+ }
+<AlignAs>\n { yyextra->yyLineNr++;
+ codifyLines(yyscanner,yytext);
+ }
+<AlignAs>. { yyextra->code->codify(yytext); }
+<AlignAsEnd>"(" { yyextra->code->codify(yytext);
+ yyextra->bracketCount++;
+ }
+<AlignAsEnd>")" {
+ yyextra->code->codify(yytext);
+ if (--yyextra->bracketCount<=0)
+ {
+ BEGIN(ClassName);
+ }
+ }
+<AlignAsEnd>\n { yyextra->yyLineNr++;
+ codifyLines(yyscanner,yytext);
+ }
+<AlignAsEnd>. { yyextra->code->codify(yytext); }
+<ClassName>{ID}("\\"{ID})* { // PHP namespace
+ yyextra->curClassName=substitute(yytext,"\\","::");
+ yyextra->scopeStack.push(CLASSBLOCK);
+ pushScope(yyscanner,yyextra->curClassName);
+ addType(yyscanner);
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ BEGIN( ClassVar );
+ }
+<ClassName>{ID}{B}*"("{ID}")" { // Obj-C category
+ yyextra->curClassName=removeRedundantWhiteSpace(yytext);
+ yyextra->scopeStack.push(CLASSBLOCK);
+ pushScope(yyscanner,yyextra->curClassName);
+ addType(yyscanner);
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ BEGIN( ClassVar );
+ }
+<PackageName>{ID}("."{ID})* {
+ yyextra->curClassName=substitute(yytext,".","::");
+ //printf("found package: %s\n",yyextra->curClassName.data());
+ addType(yyscanner);
+ codifyLines(yyscanner,yytext);
+ }
+<ClassVar>"=" {
+ unput(*yytext);
+ BEGIN( Body );
+ }
+<ClassVar>("extends"|"implements") { // Java, Slice
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ yyextra->curClassBases.clear();
+ BEGIN( Bases );
+ }
+<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") {
+ DBG_CTX((stderr,"***** C++/CLI modifier %s on yyextra->curClassName=%s\n",yytext,yyextra->curClassName.data()));
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ BEGIN( CppCliTypeModifierFollowup );
+ }
+<ClassVar>{ID} {
+ yyextra->type = yyextra->curClassName.copy();
+ yyextra->name = yytext;
+ if (yyextra->insideBody)
+ {
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->type,yyextra->name);
+ }
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ }
+<ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*":"{B}* {
+ codifyLines(yyscanner,yytext);
+ yyextra->curClassBases.clear();
+ BEGIN( Bases );
+ }
+<PackageName>[ \t]*";" |
+<Bases>^{B}*/"@"{ID} | // Objective-C interface
+<Bases,ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*"{"{B}* {
+ yyextra->theVarContext.pushScope();
+ yyextra->code->codify(yytext);
+ if (YY_START==ClassVar && yyextra->curClassName.isEmpty())
+ {
+ yyextra->curClassName = yyextra->name.copy();
+ }
+ if (yyextra->searchingForBody)
+ {
+ yyextra->searchingForBody=FALSE;
+ yyextra->insideBody=TRUE;
+ }
+ if (yyextra->insideBody) yyextra->bodyCurlyCount++;
+ if (!yyextra->curClassName.isEmpty()) // valid class name
+ {
+ DBG_CTX((stderr,"** scope stack push CLASSBLOCK\n"));
+ yyextra->scopeStack.push(CLASSBLOCK);
+ pushScope(yyscanner,yyextra->curClassName);
+ DBG_CTX((stderr,"***** yyextra->curClassName=%s\n",yyextra->curClassName.data()));
+ if (getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,yyextra->curClassName)==0)
+ {
+ DBG_CTX((stderr,"Adding new class %s\n",yyextra->curClassName.data()));
+ ClassDef *ncd=createClassDef("<code>",1,1,
+ yyextra->curClassName,ClassDef::Class,0,0,FALSE);
+ yyextra->codeClassSDict->append(yyextra->curClassName,ncd);
+ // insert base classes.
+ char *s=yyextra->curClassBases.first();
+ while (s)
+ {
+ const ClassDef *bcd=yyextra->codeClassSDict->find(s);
+ if (bcd==0) bcd=getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,s);
+ if (bcd && bcd!=ncd)
+ {
+ ncd->insertBaseClass(const_cast<ClassDef*>(bcd),s,Public,Normal);
+ }
+ s=yyextra->curClassBases.next();
+ }
+ }
+ //printf("yyextra->codeClassList.count()=%d\n",yyextra->codeClassList.count());
+ }
+ else // not a class name -> assume inner block
+ {
+ DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
+ yyextra->scopeStack.push(INNERBLOCK);
+ }
+ yyextra->curClassName.resize(0);
+ yyextra->curClassBases.clear();
+ BEGIN( Body );
+ }
+<Bases>"virtual"|"public"|"protected"|"private"|"@public"|"@private"|"@protected" {
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+<Bases>{SEP}?({ID}{SEP})*{ID} {
+ DBG_CTX((stderr,"%s:addBase(%s)\n",yyextra->curClassName.data(),yytext));
+ yyextra->curClassBases.inSort(yytext);
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ }
+<Bases>"<" {
+ yyextra->code->codify(yytext);
+ if (!yyextra->insideObjC)
+ {
+ yyextra->sharpCount=1;
+ BEGIN ( SkipSharp );
+ }
+ else
+ {
+ yyextra->insideProtocolList=TRUE;
+ }
+ }
+<Bases>">" {
+ yyextra->code->codify(yytext);
+ yyextra->insideProtocolList=FALSE;
+ }
+<SkipSharp>"<" {
+ yyextra->code->codify(yytext);
+ ++yyextra->sharpCount;
+ }
+<SkipSharp>">" {
+ yyextra->code->codify(yytext);
+ if (--yyextra->sharpCount<=0)
+ BEGIN ( Bases );
+ }
+<SkipSharp>"\"" {
+ yyextra->code->codify(yytext);
+ yyextra->lastStringContext=YY_START;
+ BEGIN(SkipString);
+ }
+<SkipSharp>"\'" {
+ yyextra->code->codify(yytext);
+ yyextra->lastStringContext=YY_START;
+ BEGIN(SkipStringS);
+ }
+<Bases>"(" {
+ yyextra->code->codify(yytext);
+ yyextra->sharpCount=1;
+ BEGIN ( SkipSharp );
+ }
+<SkipSharp>"(" {
+ yyextra->code->codify(yytext);
+ ++yyextra->sharpCount;
+ }
+<SkipSharp>")" {
+ yyextra->code->codify(yytext);
+ if (--yyextra->sharpCount<=0)
+ BEGIN ( Bases );
+ }
+
+
+<Bases>"," {
+ yyextra->code->codify(yytext);
+ }
+
+
+<Body>{SCOPEPREFIX}?"operator"{B}*"()"{B}*/"(" {
+ addType(yyscanner);
+ generateFunctionLink(yyscanner,*yyextra->code,yytext);
+ yyextra->bracketCount=0;
+ yyextra->args.resize(0);
+ yyextra->name+=yytext;
+ BEGIN( FuncCall );
+ }
+<Body>{SCOPEPREFIX}?"operator"/"(" {
+ addType(yyscanner);
+ generateFunctionLink(yyscanner,*yyextra->code,yytext);
+ yyextra->bracketCount=0;
+ yyextra->args.resize(0);
+ yyextra->name+=yytext;
+ BEGIN( FuncCall );
+ }
+<Body>{SCOPEPREFIX}?"operator"[^a-z_A-Z0-9\(\n]+/"(" {
+ addType(yyscanner);
+ generateFunctionLink(yyscanner,*yyextra->code,yytext);
+ yyextra->bracketCount=0;
+ yyextra->args.resize(0);
+ yyextra->name+=yytext;
+ BEGIN( FuncCall );
+ }
+<Body,TemplDecl>("template"|"generic")/([^a-zA-Z0-9]) {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ yyextra->insideTemplate=TRUE;
+ yyextra->sharpCount=0;
+ }
+<Body>"using"{BN}+"namespace"{BN}+ {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ BEGIN(UsingName);
+ }
+<UsingName>{ID}("::"{ID})* { addUsingDirective(yyscanner,yytext);
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ DBG_CTX((stderr,"** scope stack push CLASSBLOCK\n"));
+ yyextra->scopeStack.push(CLASSBLOCK);
+ pushScope(yyscanner,yytext);
+ BEGIN(Body);
+ }
+<UsingName>\n { codifyLines(yyscanner,yytext); BEGIN(Body); }
+<UsingName>. { codifyLines(yyscanner,yytext); BEGIN(Body); }
+<Body,FuncCall>"$"?"this"("->"|".") { yyextra->code->codify(yytext); // this-> for C++, this. for C#
+ yyextra->prefixed_with_this_keyword = TRUE;
+ }
+<Body>{KEYWORD}/([^a-z_A-Z0-9]) {
+ if (yyextra->lang==SrcLangExt_Java && qstrcmp("internal",yytext) ==0) REJECT;
+ if (skipLanguageSpecificKeyword(yyscanner,yytext)) REJECT;
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ if (QCString(yytext)=="typedef")
+ {
+ addType(yyscanner);
+ yyextra->name+=yytext;
+ }
+ endFontClass(yyscanner);
+ }
+<Body>{KEYWORD}/{B}* {
+ if (skipLanguageSpecificKeyword(yyscanner,yytext)) REJECT;
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+<Body>{KEYWORD}/{BN}*"(" {
+ if (skipLanguageSpecificKeyword(yyscanner,yytext)) REJECT;
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ yyextra->name.resize(0);yyextra->type.resize(0);
+ }
+<FuncCall>"in"/{BN}* {
+ if (!yyextra->inForEachExpression) REJECT;
+ startFontClass(yyscanner,"keywordflow");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ // insert the variable in the parent scope, see bug 546158
+ yyextra->theVarContext.popScope();
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
+ yyextra->theVarContext.pushScope();
+ yyextra->name.resize(0);yyextra->type.resize(0);
+ }
+<Body>{FLOWKW}/{BN}*"(" {
+ startFontClass(yyscanner,"keywordflow");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ yyextra->name.resize(0);yyextra->type.resize(0);
+ yyextra->inForEachExpression = (qstrcmp(yytext,"for each")==0 || qstrcmp(yytext, "foreach")==0);
+ BEGIN(FuncCall);
+ }
+<Body>{FLOWCONDITION}/{BN}*"(" {
+ if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
+ {
+ yyextra->currentMemberDef->incrementFlowKeyWordCount();
+ }
+ startFontClass(yyscanner,"keywordflow");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ yyextra->name.resize(0);yyextra->type.resize(0);
+ yyextra->inForEachExpression = (strcmp(yytext,"for each")==0 || strcmp(yytext, "foreach")==0);
+ BEGIN(FuncCall);
+ }
+<Body>{FLOWKW}/([^a-z_A-Z0-9]) {
+ startFontClass(yyscanner,"keywordflow");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ if (yyextra->inFunctionTryBlock && (qstrcmp(yytext,"catch")==0 || qstrcmp(yytext,"finally")==0))
+ {
+ yyextra->inFunctionTryBlock=FALSE;
+ }
+ }
+<Body>{FLOWCONDITION}/([^a-z_A-Z0-9]) {
+ if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
+ {
+ yyextra->currentMemberDef->incrementFlowKeyWordCount();
+ }
+ startFontClass(yyscanner,"keywordflow");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ if (yyextra->inFunctionTryBlock && (strcmp(yytext,"catch")==0 || strcmp(yytext,"finally")==0))
+ {
+ yyextra->inFunctionTryBlock=FALSE;
+ }
+ }
+<Body>{FLOWKW}/{B}* {
+ startFontClass(yyscanner,"keywordflow");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+<Body>{FLOWCONDITION}/{B}* {
+ if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
+ {
+ yyextra->currentMemberDef->incrementFlowKeyWordCount();
+ }
+ startFontClass(yyscanner,"keywordflow");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+<Body>"*"{B}*")" { // end of cast?
+ yyextra->code->codify(yytext);
+ yyextra->theCallContext.popScope(yyextra->name, yyextra->type);
+ yyextra->bracketCount--;
+ yyextra->parmType = yyextra->name;
+ BEGIN(FuncCall);
+ }
+<Body>[\\|\)\+\-\/\%\~\!] {
+ yyextra->code->codify(yytext);
+ yyextra->name.resize(0);yyextra->type.resize(0);
+ if (*yytext==')')
+ {
+ yyextra->theCallContext.popScope(yyextra->name, yyextra->type);
+ yyextra->bracketCount--;
+ BEGIN(FuncCall);
+ }
+ }
+<Body,TemplDecl,ObjCMethod>{TYPEKW}/{B}* {
+ startFontClass(yyscanner,"keywordtype");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ addType(yyscanner);
+ yyextra->name+=yytext;
+ }
+<Body,TemplDecl,ObjCMethod>{TYPEKWSL}/{B}* {
+ if (yyextra->lang!=SrcLangExt_Slice)
+ {
+ REJECT;
+ }
+ else
+ {
+ startFontClass(yyscanner,"keywordtype");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ addType(yyscanner);
+ yyextra->name+=yytext;
+ }
+ }
+<Body>"generic"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* {
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ yyextra->sharpCount=0;
+ BEGIN(TemplDecl);
+ }
+<Body>"template"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* { // template<...>
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ yyextra->sharpCount=0;
+ BEGIN(TemplDecl);
+ }
+<TemplDecl>"class"|"typename" {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+<TemplDecl>"<" {
+ yyextra->code->codify(yytext);
+ yyextra->sharpCount++;
+ }
+<TemplDecl>">" {
+ yyextra->code->codify(yytext);
+ yyextra->sharpCount--;
+ if (yyextra->sharpCount<=0)
+ {
+ BEGIN(Body);
+ }
+ }
+<TemplCast>">" {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastTemplCastContext );
+ }
+<TemplCast>{ID}("::"{ID})* {
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ }
+<TemplCast>("const"|"volatile"){B}* {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+<TemplCast>[*^]* {
+ codifyLines(yyscanner,yytext);
+ }
+<Body,MemberCall2,FuncCall>{CASTKW}{B}*"<" { // static_cast<T>(
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ yyextra->lastTemplCastContext = YY_START;
+ BEGIN(TemplCast);
+ }
+<Body>"$this->"{SCOPENAME}/{BN}*[;,)\]] { // PHP member variable
+ addType(yyscanner);
+ generatePHPVariableLink(yyscanner,*yyextra->code,yytext);
+ yyextra->name+=yytext+7;
+ }
+<Body,TemplCast>{SCOPENAME}{B}*"<"[^\n\/\-\.\{\"\>\(]*">"("::"{ID})*/{B}* { // A<T> *pt;
+ if (isCastKeyword(yytext) && YY_START==Body)
+ {
+ REJECT;
+ }
+ addType(yyscanner);
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ yyextra->name+=yytext;
+ }
+<Body>{SCOPENAME}/{BN}*[:;,)\]] { // "int var;" or "var, var2" or "debug(f) macro" , or int var : 5;
+ addType(yyscanner);
+ // changed this to generateFunctionLink, see bug 624514
+ //generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext,FALSE,TRUE);
+ generateFunctionLink(yyscanner,*yyextra->code,yytext);
+ yyextra->name+=yytext;
+ }
+<Body>{SCOPENAME}/{B}* { // p->func()
+ addType(yyscanner);
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ yyextra->name+=yytext;
+ }
+<Body>"("{B}*("*"{B}*)+{SCOPENAME}*{B}*")"/{B}* { // (*p)->func() but not "if (p) ..."
+ yyextra->code->codify(yytext);
+ int s=0;while (s<(int)yyleng && !isId(yytext[s])) s++;
+ int e=(int)yyleng-1;while (e>=0 && !isId(yytext[e])) e--;
+ QCString varname = ((QCString)yytext).mid(s,e-s+1);
+ addType(yyscanner);
+ yyextra->name=varname;
+ }
+<Body>{SCOPETNAME}{B}*"<"[^\n\/\-\.\{\"\>]*">"/{BN}*"(" |
+<Body>{SCOPETNAME}/{BN}*"(" { // a() or c::a() or t<A,B>::a() or A\B\foo()
+ if (isCastKeyword(yytext))
+ {
+ REJECT;
+ }
+ addType(yyscanner);
+ generateFunctionLink(yyscanner,*yyextra->code,yytext);
+ yyextra->bracketCount=0;
+ yyextra->args.resize(0);
+ yyextra->name+=yytext;
+ BEGIN( FuncCall );
+ }
+<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>{RAWBEGIN} {
+ QCString text=yytext;
+ int i=text.find('R');
+ yyextra->code->codify(text.left(i+1));
+ startFontClass(yyscanner,"stringliteral");
+ yyextra->code->codify(yytext+i+1);
+ yyextra->lastStringContext=YY_START;
+ yyextra->inForEachExpression = FALSE;
+ yyextra->delimiter = yytext+i+2;
+ yyextra->delimiter=yyextra->delimiter.left(yyextra->delimiter.length()-1);
+ BEGIN( RawString );
+ }
+<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>\" {
+ startFontClass(yyscanner,"stringliteral");
+ yyextra->code->codify(yytext);
+ yyextra->lastStringContext=YY_START;
+ yyextra->inForEachExpression = FALSE;
+ BEGIN( SkipString );
+ }
+<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>\' {
+ startFontClass(yyscanner,"stringliteral");
+ yyextra->code->codify(yytext);
+ yyextra->lastStringContext=YY_START;
+ yyextra->inForEachExpression = FALSE;
+ BEGIN( SkipStringS );
+ }
+<SkipString>[^\"\\\r\n]* {
+ yyextra->code->codify(yytext);
+ }
+<SkipStringS>[^\'\\\r\n]* {
+ yyextra->code->codify(yytext);
+ }
+<SkipString,SkipStringS>"//"|"/*" {
+ yyextra->code->codify(yytext);
+ }
+<SkipString>@?\" {
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastStringContext );
+ }
+<SkipStringS>\' {
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastStringContext );
+ }
+<SkipString,SkipStringS>\\. {
+ yyextra->code->codify(yytext);
+ }
+<RawString>{RAWEND} {
+ yyextra->code->codify(yytext);
+ QCString delimiter = yytext+1;
+ delimiter=delimiter.left(delimiter.length()-1);
+ if (delimiter==yyextra->delimiter)
+ {
+ BEGIN( yyextra->lastStringContext );
+ }
+ }
+<RawString>[^)\n]+ { yyextra->code->codify(yytext); }
+<RawString>. { yyextra->code->codify(yytext); }
+<RawString>\n { codifyLines(yyscanner,yytext); }
+<SkipVerbString>[^"\n]+ {
+ yyextra->code->codify(yytext);
+ }
+<SkipVerbString>\"\" { // escaped quote
+ yyextra->code->codify(yytext);
+ }
+<SkipVerbString>\" { // end of string
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastVerbStringContext );
+ }
+<SkipVerbString>. {
+ yyextra->code->codify(yytext);
+ }
+<SkipVerbString>\n {
+ codifyLines(yyscanner,yytext);
+ }
+<Body>":" {
+ yyextra->code->codify(yytext);
+ yyextra->name.resize(0);yyextra->type.resize(0);
+ }
+<Body>"<" {
+ if (yyextra->insideTemplate)
+ {
+ yyextra->sharpCount++;
+ }
+ yyextra->code->codify(yytext);
+ }
+<Body>">" {
+ if (yyextra->insideTemplate)
+ {
+ if (--yyextra->sharpCount<=0)
+ {
+ yyextra->insideTemplate=FALSE;
+ }
+ }
+ yyextra->code->codify(yytext);
+ }
+<Body,MemberCall,MemberCall2,FuncCall>"'"((\\0[Xx0-9]+)|(\\.)|(.))"'" {
+ startFontClass(yyscanner,"charliteral");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+<Body>"."|"->" {
+ if (yytext[0]=='-') // -> could be overloaded
+ {
+ updateCallContextForSmartPointer(yyscanner);
+ }
+ yyextra->code->codify(yytext);
+ yyextra->memCallContext = YY_START;
+ BEGIN( MemberCall );
+ }
+<MemberCall>{SCOPETNAME}/{BN}*"(" {
+ if (yyextra->theCallContext.getScope())
+ {
+ if (!generateClassMemberLink(yyscanner,*yyextra->code,yyextra->theCallContext.getScope(),yytext))
+ {
+ yyextra->code->codify(yytext);
+ addToSearchIndex(yyscanner,yytext);
+ }
+ yyextra->name.resize(0);
+ }
+ else
+ {
+ yyextra->code->codify(yytext);
+ addToSearchIndex(yyscanner,yytext);
+ yyextra->name.resize(0);
+ }
+ yyextra->type.resize(0);
+ if (yyextra->memCallContext==Body)
+ {
+ BEGIN(FuncCall);
+ }
+ else
+ {
+ BEGIN(yyextra->memCallContext);
+ }
+ }
+<MemberCall>{SCOPENAME}/{B}* {
+ if (yyextra->theCallContext.getScope())
+ {
+ DBG_CTX((stderr,"yyextra->theCallContext.getClass()=%p\n",yyextra->theCallContext.getScope()));
+ if (!generateClassMemberLink(yyscanner,*yyextra->code,yyextra->theCallContext.getScope(),yytext))
+ {
+ yyextra->code->codify(yytext);
+ addToSearchIndex(yyscanner,yytext);
+ }
+ yyextra->name.resize(0);
+ }
+ else
+ {
+ DBG_CTX((stderr,"no class context!\n"));
+ yyextra->code->codify(yytext);
+ addToSearchIndex(yyscanner,yytext);
+ yyextra->name.resize(0);
+ }
+ yyextra->type.resize(0);
+ BEGIN(yyextra->memCallContext);
+ }
+<Body>[,=;\[] {
+ if (yyextra->insideObjC && *yytext=='[')
+ {
+ //printf("Found start of ObjC call!\n");
+ // start of a method call
+ yyextra->contextDict.setAutoDelete(TRUE);
+ yyextra->nameDict.setAutoDelete(TRUE);
+ yyextra->objectDict.setAutoDelete(TRUE);
+ yyextra->wordDict.setAutoDelete(TRUE);
+ yyextra->commentDict.setAutoDelete(TRUE);
+ yyextra->contextDict.clear();
+ yyextra->nameDict.clear();
+ yyextra->objectDict.clear();
+ yyextra->wordDict.clear();
+ yyextra->commentDict.clear();
+ yyextra->currentCtxId = 0;
+ yyextra->currentNameId = 0;
+ yyextra->currentObjId = 0;
+ yyextra->currentCtx = 0;
+ yyextra->braceCount = 0;
+ unput('[');
+ BEGIN(ObjCCall);
+ }
+ else
+ {
+ yyextra->code->codify(yytext);
+ yyextra->saveName = yyextra->name.copy();
+ yyextra->saveType = yyextra->type.copy();
+ if (*yytext!='[' && !yyextra->type.isEmpty())
+ {
+ //printf("yyextra->scopeStack.bottom()=%p\n",yyextra->scopeStack.bottom());
+ //if (yyextra->scopeStack.top()!=CLASSBLOCK) // commented out for bug731363
+ {
+ //printf("AddVariable: '%s' '%s' context=%d\n",
+ // yyextra->type.data(),yyextra->name.data(),yyextra->theVarContext.count());
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->type,yyextra->name);
+ }
+ yyextra->name.resize(0);
+ }
+ if (*yytext==';' || *yytext=='=')
+ {
+ yyextra->type.resize(0);
+ yyextra->name.resize(0);
+ }
+ else if (*yytext=='[')
+ {
+ yyextra->theCallContext.pushScope(yyextra->name, yyextra->type);
+ }
+ yyextra->args.resize(0);
+ yyextra->parmType.resize(0);
+ yyextra->parmName.resize(0);
+ }
+ }
+ /*
+<ObjCMemberCall>{ID} {
+ if (qstrcmp(yytext,"self")==0 || qstrcmp(yytext,"super")==0)
+ {
+ // TODO: get proper base class for "super"
+ yyextra->theCallContext.setClass(getClass(yyextra->curClassName));
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+ else
+ {
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ }
+ yyextra->name.resize(0);
+ BEGIN(ObjCMemberCall2);
+ }
+<ObjCMemberCall>"[" {
+ yyextra->code->codify(yytext);
+ yyextra->theCallContext.pushScope(yyscanner,yyextra->name, yyextra->type);
+ }
+<ObjCMemberCall2>{ID}":"? {
+ yyextra->name+=yytext;
+ if (yyextra->theCallContext.getClass())
+ {
+ //printf("Calling method %s\n",yyextra->name.data());
+ if (!generateClassMemberLink(yyscanner,*yyextra->code,yyextra->theCallContext.getClass(),yyextra->name))
+ {
+ yyextra->code->codify(yytext);
+ addToSearchIndex(yyscanner,yyextra->name);
+ }
+ }
+ else
+ {
+ yyextra->code->codify(yytext);
+ addToSearchIndex(yyscanner,yyextra->name);
+ }
+ yyextra->name.resize(0);
+ BEGIN(ObjCMemberCall3);
+ }
+<ObjCMemberCall2,ObjCMemberCall3>"]" {
+ yyextra->theCallContext.popScope(yyextra->name, yyextra->type);
+ yyextra->code->codify(yytext);
+ BEGIN(Body);
+ }
+ */
+<ObjCCall,ObjCMName>"["|"{" {
+ saveObjCContext(yyscanner);
+ yyextra->currentCtx->format+=*yytext;
+ BEGIN(ObjCCall);
+ //printf("open\n");
+ }
+<ObjCCall,ObjCMName>"]"|"}" {
+ yyextra->currentCtx->format+=*yytext;
+ restoreObjCContext(yyscanner);
+ BEGIN(ObjCMName);
+ if (yyextra->currentCtx==0)
+ {
+ // end of call
+ writeObjCMethodCall(yyscanner,yyextra->contextDict.find(0));
+ BEGIN(Body);
+ }
+ //printf("close\n");
+ }
+<ObjCCall,ObjCMName>"//".* {
+ yyextra->currentCtx->format+=escapeComment(yyscanner,yytext);
+ }
+<ObjCCall,ObjCMName>"/*" {
+ yyextra->lastObjCCallContext = YY_START;
+ yyextra->currentCtx->comment=yytext;
+ BEGIN(ObjCCallComment);
+ }
+<ObjCCallComment>"*/" {
+ yyextra->currentCtx->comment+=yytext;
+ yyextra->currentCtx->format+=escapeComment(yyscanner,yyextra->currentCtx->comment);
+ BEGIN(yyextra->lastObjCCallContext);
+ }
+<ObjCCallComment>[^*\n]+ { yyextra->currentCtx->comment+=yytext; }
+<ObjCCallComment>"//"|"/*" { yyextra->currentCtx->comment+=yytext; }
+<ObjCCallComment>\n { yyextra->currentCtx->comment+=*yytext; }
+<ObjCCallComment>. { yyextra->currentCtx->comment+=*yytext; }
+<ObjCCall>{ID} {
+ yyextra->currentCtx->format+=escapeObject(yyscanner,yytext);
+ if (yyextra->braceCount==0)
+ {
+ yyextra->currentCtx->objectTypeOrName=yytext;
+ //printf("new type=%s\n",yyextra->currentCtx->objectTypeOrName.data());
+ BEGIN(ObjCMName);
+ }
+ }
+<ObjCMName>{ID}/{BN}*"]" {
+ if (yyextra->braceCount==0 &&
+ yyextra->currentCtx->methodName.isEmpty())
+ {
+ yyextra->currentCtx->methodName=yytext;
+ yyextra->currentCtx->format+=escapeName(yyscanner,yytext);
+ }
+ else
+ {
+ yyextra->currentCtx->format+=escapeWord(yyscanner,yytext);
+ }
+ }
+<ObjCMName>{ID}/{BN}*":" {
+ if (yyextra->braceCount==0)
+ {
+ yyextra->currentCtx->methodName+=yytext;
+ yyextra->currentCtx->methodName+=":";
+ }
+ yyextra->currentCtx->format+=escapeName(yyscanner,yytext);
+ }
+<ObjCSkipStr>[^\n\"$\\]* { yyextra->currentCtx->format+=yytext; }
+<ObjCSkipStr>\\. { yyextra->currentCtx->format+=yytext; }
+<ObjCSkipStr>"\"" { yyextra->currentCtx->format+=yytext;
+ BEGIN(yyextra->lastStringContext);
+ }
+<ObjCCall,ObjCMName>{CHARLIT} { yyextra->currentCtx->format+=yytext; }
+<ObjCCall,ObjCMName>"@"?"\"" { yyextra->currentCtx->format+=yytext;
+ yyextra->lastStringContext=YY_START;
+ BEGIN(ObjCSkipStr);
+ }
+<ObjCCall,ObjCMName,ObjCSkipStr>"$" { yyextra->currentCtx->format+="$$"; }
+<ObjCCall,ObjCMName>"(" { yyextra->currentCtx->format+=*yytext; yyextra->braceCount++; }
+<ObjCCall,ObjCMName>")" { yyextra->currentCtx->format+=*yytext; yyextra->braceCount--; }
+<ObjCSkipStr>"@"/"\"" { // needed to prevent matching the global rule (for C#)
+ yyextra->currentCtx->format+=yytext;
+ }
+<ObjCCall,ObjCMName,ObjCSkipStr>{ID} { yyextra->currentCtx->format+=escapeWord(yyscanner,yytext); }
+<ObjCCall,ObjCMName,ObjCSkipStr>. { yyextra->currentCtx->format+=*yytext; }
+<ObjCCall,ObjCMName,ObjCSkipStr>\n { yyextra->currentCtx->format+=*yytext; }
+
+<Body>"]" {
+ yyextra->theCallContext.popScope(yyextra->name, yyextra->type);
+ yyextra->code->codify(yytext);
+ // TODO: nested arrays like: a[b[0]->func()]->func()
+ yyextra->name = yyextra->saveName.copy();
+ yyextra->type = yyextra->saveType.copy();
+ }
+<Body>[0-9]+ {
+ yyextra->code->codify(yytext);
+ }
+<Body>[0-9]+[xX][0-9A-Fa-f]+ {
+ yyextra->code->codify(yytext);
+ }
+<MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) {
+ //addParmType(yyscanner);
+ //yyextra->parmName=yytext;
+ if (skipLanguageSpecificKeyword(yyscanner,yytext)) REJECT;
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+<MemberCall2,FuncCall,OldStyleArgs,TemplCast>{TYPEKW}/([^a-z_A-Z0-9]) {
+ addParmType(yyscanner);
+ yyextra->parmName=yytext;
+ startFontClass(yyscanner,"keywordtype");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+<MemberCall2,FuncCall,OldStyleArgs,TemplCast>{TYPEKWSL}/([^a-z_A-Z0-9]) {
+ if (yyextra->lang!=SrcLangExt_Slice)
+ {
+ REJECT;
+ }
+ else
+ {
+ addParmType(yyscanner);
+ yyextra->parmName=yytext;
+ startFontClass(yyscanner,"keywordtype");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+ }
+<MemberCall2,FuncCall>{FLOWKW}/([^a-z_A-Z0-9]) {
+ addParmType(yyscanner);
+ yyextra->parmName=yytext;
+ startFontClass(yyscanner,"keywordflow");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+<MemberCall2,FuncCall>{FLOWCONDITION}/([^a-z_A-Z0-9]) {
+ if (yyextra->currentMemberDef && yyextra->currentMemberDef->isFunction())
+ {
+ yyextra->currentMemberDef->incrementFlowKeyWordCount();
+ }
+ addParmType(yyscanner);
+ yyextra->parmName=yytext;
+ startFontClass(yyscanner,"keywordflow");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+<MemberCall2,FuncCall>{ID}(({B}*"<"[^\n\[\](){}<>]*">")?({B}*"::"{B}*{ID})?)* {
+ if (isCastKeyword(yytext))
+ {
+ REJECT;
+ }
+ addParmType(yyscanner);
+ yyextra->parmName=yytext;
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext,!yyextra->insideBody);
+ }
+<FuncCall>";" { // probably a cast, not a function call
+ yyextra->code->codify(yytext);
+ yyextra->inForEachExpression = FALSE;
+ BEGIN( Body );
+ }
+<MemberCall2,FuncCall>, {
+ yyextra->code->codify(yytext);
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
+ yyextra->parmType.resize(0);yyextra->parmName.resize(0);
+ }
+<MemberCall2,FuncCall>"{" {
+ if (yyextra->bracketCount>0)
+ {
+ yyextra->code->codify(yytext);
+ yyextra->skipInlineInitContext=YY_START;
+ yyextra->curlyCount=0;
+ BEGIN(InlineInit);
+ }
+ else
+ {
+ REJECT;
+ }
+ }
+<InlineInit>"{" { yyextra->curlyCount++;
+ yyextra->code->codify(yytext);
+ }
+<InlineInit>"}" {
+ yyextra->code->codify(yytext);
+ if (--yyextra->curlyCount<=0)
+ {
+ BEGIN(yyextra->skipInlineInitContext);
+ }
+ }
+<InlineInit>\n {
+ codifyLines(yyscanner,yytext);
+ }
+<InlineInit>. {
+ yyextra->code->codify(yytext);
+ }
+<MemberCall2,FuncCall>"(" {
+ yyextra->parmType.resize(0);yyextra->parmName.resize(0);
+ yyextra->code->codify(yytext);
+ yyextra->bracketCount++;
+ yyextra->theCallContext.pushScope(yyextra->name, yyextra->type);
+ if (YY_START==FuncCall && !yyextra->insideBody)
+ {
+ yyextra->theVarContext.pushScope();
+ }
+ }
+<MemberCall2,FuncCall>{OPERATOR} { // operator
+ if (qstrcmp(yytext,"*") &&
+ qstrcmp(yytext,"&") &&
+ qstrcmp(yytext,"^") &&
+ qstrcmp(yytext,"%")) // typically a pointer or reference
+ {
+ // not a * or &, or C++/CLI's ^ or %
+ yyextra->parmType.resize(0);yyextra->parmName.resize(0);
+ }
+ yyextra->code->codify(yytext);
+ }
+<MemberCall,MemberCall2,FuncCall>("*"{B}*)?")" {
+ if (yytext[0]==')') // no a pointer cast
+ {
+ //printf("addVariable(%s,%s)\n",yyextra->parmType.data(),yyextra->parmName.data());
+ if (yyextra->parmType.isEmpty())
+ {
+ yyextra->parmType=yyextra->parmName;
+ yyextra->parmName.resize(0);
+ }
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
+ }
+ else
+ {
+ yyextra->parmType = yyextra->parmName;
+ yyextra->parmName.resize(0);
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
+ }
+ yyextra->theCallContext.popScope(yyextra->name, yyextra->type);
+ yyextra->inForEachExpression = FALSE;
+ //yyextra->theCallContext.setClass(0); // commented out, otherwise a()->b() does not work for b().
+ yyextra->code->codify(yytext);
+ if (--yyextra->bracketCount<=0)
+ {
+ if (yyextra->name.isEmpty())
+ {
+ BEGIN( Body );
+ }
+ else
+ {
+ BEGIN( CallEnd );
+ }
+ }
+ }
+<CallEnd>[ \t\n]* { codifyLines(yyscanner,yytext); }
+ /*
+<MemberCall2,FuncCall>")"[ \t\n]*[;:] {
+ */
+<CallEnd>[;:] {
+ codifyLines(yyscanner,yytext);
+ yyextra->bracketCount=0;
+ if (*yytext==';') yyextra->searchingForBody=FALSE;
+ if (!yyextra->type.isEmpty())
+ {
+ DBG_CTX((stderr,"add variable yyextra->type=%s yyextra->name=%s)\n",yyextra->type.data(),yyextra->name.data()));
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->type,yyextra->name);
+ }
+ yyextra->parmType.resize(0);yyextra->parmName.resize(0);
+ yyextra->theCallContext.setScope(0);
+ if (*yytext==';' || yyextra->insideBody)
+ {
+ if (!yyextra->insideBody)
+ {
+ yyextra->theVarContext.popScope();
+ }
+ yyextra->name.resize(0);yyextra->type.resize(0);
+ BEGIN( Body );
+ }
+ else
+ {
+ yyextra->bracketCount=0;
+ BEGIN( SkipInits );
+ }
+ }
+<CallEnd>("const"|"volatile"|"sealed"|"override")({BN}+("const"|"volatile"|"sealed"|"override"))*/{BN}*(";"|"="|"throw"{BN}*"(") {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+<CallEnd,OldStyleArgs>("const"|"volatile"|"sealed"|"override")*({BN}+("const"|"volatile"|"sealed"|"override"))*{BN}*"{" {
+ if (yyextra->insideBody)
+ {
+ yyextra->theVarContext.pushScope();
+ }
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
+ //yyextra->theCallContext.popScope(yyextra->name, yyextra->type);
+ yyextra->parmType.resize(0);yyextra->parmName.resize(0);
+ int index = yyextra->name.findRev("::");
+ DBG_CTX((stderr,"yyextra->name=%s\n",yyextra->name.data()));
+ if (index!=-1)
+ {
+ QCString scope = yyextra->name.left(index);
+ if (!yyextra->classScope.isEmpty()) scope.prepend(yyextra->classScope+"::");
+ const ClassDef *cd=getResolvedClass(Doxygen::globalScope,yyextra->sourceFileDef,scope);
+ if (cd)
+ {
+ setClassScope(yyscanner,cd->name());
+ yyextra->scopeStack.push(SCOPEBLOCK);
+ DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
+ }
+ else
+ {
+ //setClassScope(yyscanner,yyextra->realScope);
+ yyextra->scopeStack.push(INNERBLOCK);
+ DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
+ }
+ }
+ else
+ {
+ DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
+ yyextra->scopeStack.push(INNERBLOCK);
+ }
+ yytext[yyleng-1]='\0';
+ QCString cv(yytext);
+ if (!cv.stripWhiteSpace().isEmpty())
+ {
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+ else // just whitespace
+ {
+ codifyLines(yyscanner,yytext);
+ }
+ yyextra->code->codify("{");
+ if (yyextra->searchingForBody)
+ {
+ yyextra->searchingForBody=FALSE;
+ yyextra->insideBody=TRUE;
+ }
+ if (yyextra->insideBody) yyextra->bodyCurlyCount++;
+ yyextra->type.resize(0); yyextra->name.resize(0);
+ BEGIN( Body );
+ }
+<CallEnd>"try" { // function-try-block
+ startFontClass(yyscanner,"keyword");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ yyextra->inFunctionTryBlock=TRUE;
+ }
+<CallEnd>{ID} {
+ if (yyextra->insideBody || !yyextra->parmType.isEmpty())
+ {
+ REJECT;
+ }
+ // could be K&R style definition
+ addParmType(yyscanner);
+ yyextra->parmName=yytext;
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext,!yyextra->insideBody);
+ BEGIN(OldStyleArgs);
+ }
+<OldStyleArgs>{ID} {
+ addParmType(yyscanner);
+ yyextra->parmName=yytext;
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext,!yyextra->insideBody);
+ }
+<OldStyleArgs>[,;] {
+ yyextra->code->codify(yytext);
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
+ if (*yytext==';') yyextra->parmType.resize(0);
+ yyextra->parmName.resize(0);
+ }
+<CallEnd,OldStyleArgs>"#" {
+ startFontClass(yyscanner,"preprocessor");
+ yyextra->lastSkipCppContext = Body;
+ yyextra->code->codify(yytext);
+ BEGIN( SkipCPP );
+ }
+<CallEnd>. {
+ unput(*yytext);
+ if (!yyextra->insideBody)
+ {
+ yyextra->theVarContext.popScope();
+ }
+ yyextra->name.resize(0);yyextra->args.resize(0);
+ yyextra->parmType.resize(0);yyextra->parmName.resize(0);
+ BEGIN( Body );
+ }
+<SkipInits>";" {
+ yyextra->code->codify(yytext);
+ yyextra->type.resize(0); yyextra->name.resize(0);
+ BEGIN( Body );
+ }
+<SkipInits>"{" {
+ yyextra->code->codify(yytext);
+ if (yyextra->searchingForBody)
+ {
+ yyextra->searchingForBody=FALSE;
+ yyextra->insideBody=TRUE;
+ }
+ if (yyextra->insideBody) yyextra->bodyCurlyCount++;
+ if (yyextra->name.find("::")!=-1)
+ {
+ DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
+ yyextra->scopeStack.push(SCOPEBLOCK);
+ setClassScope(yyscanner,yyextra->realScope);
+ }
+ else
+ {
+ DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
+ yyextra->scopeStack.push(INNERBLOCK);
+ }
+ yyextra->type.resize(0); yyextra->name.resize(0);
+ BEGIN( Body );
+ }
+<SkipInits>{ID} {
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ }
+<FuncCall>{ID}/"(" {
+ generateFunctionLink(yyscanner,*yyextra->code,yytext);
+ }
+<FuncCall>{ID}/("."|"->") {
+ yyextra->name=yytext;
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ BEGIN( MemberCall2 );
+ }
+<FuncCall,MemberCall2>("("{B}*("*"{B}*)+{ID}*{B}*")"{B}*)/("."|"->") {
+ yyextra->code->codify(yytext);
+ int s=0;while (!isId(yytext[s])) s++;
+ int e=(int)yyleng-1;while (!isId(yytext[e])) e--;
+ yyextra->name=((QCString)yytext).mid(s,e-s+1);
+ BEGIN( MemberCall2 );
+ }
+<MemberCall2>{ID}/([ \t\n]*"(") {
+ if (!yyextra->args.isEmpty())
+ generateMemberLink(yyscanner,*yyextra->code,yyextra->args,yytext);
+ else
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ yyextra->args.resize(0);
+ BEGIN( FuncCall );
+ }
+<MemberCall2>{ID}/([ \t\n]*("."|"->")) {
+ //yyextra->code->codify(yytext);
+ yyextra->name=yytext;
+ generateClassOrGlobalLink(yyscanner,*yyextra->code,yytext);
+ BEGIN( MemberCall2 );
+ }
+<MemberCall2>"->"|"." {
+ if (yytext[0]=='-') // -> could be overloaded
+ {
+ updateCallContextForSmartPointer(yyscanner);
+ }
+ yyextra->code->codify(yytext);
+ yyextra->memCallContext = YY_START;
+ BEGIN( MemberCall );
+ }
+<SkipComment>"/*"("!"?)"*/" {
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastCContext ) ;
+ }
+<SkipComment>"//"|"/*" {
+ yyextra->code->codify(yytext);
+ }
+<SkipComment>[^*/\n]+ {
+ yyextra->code->codify(yytext);
+ }
+<SkipComment>[ \t]*"*/" {
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ if (yyextra->lastCContext==SkipCPP)
+ {
+ startFontClass(yyscanner,"preprocessor");
+ }
+ BEGIN( yyextra->lastCContext ) ;
+ }
+<SkipCxxComment>[^\r\n]*"\\"[\r]?\n { // line continuation
+ codifyLines(yyscanner,yytext);
+ }
+<SkipCxxComment>[^\r\n]+ {
+ yyextra->code->codify(yytext);
+ }
+<SkipCxxComment>\r
+<SkipCxxComment>\n {
+ unput('\n');
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastCContext ) ;
+ }
+<SkipCxxComment>. {
+ yyextra->code->codify(yytext);
+ }
+<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)?{B}*"/*"[*!]/[^/*] {
+ yyextra->yyLineNr+=QCString(yytext).contains('\n');
+ }
+<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)? {
+ yyextra->yyLineNr+=QCString(yytext).contains('\n');
+ nextCodeLine(yyscanner);
+ if (yyextra->lastSpecialCContext==SkipCxxComment)
+ { // force end of C++ comment here
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastCContext ) ;
+ }
+ else
+ {
+ BEGIN(yyextra->lastSpecialCContext);
+ }
+ }
+<RemoveSpecialCComment>"*/" {
+ BEGIN(yyextra->lastSpecialCContext);
+ }
+<RemoveSpecialCComment>[^*\n]+
+<RemoveSpecialCComment>"//"|"/*"
+<RemoveSpecialCComment>\n { yyextra->yyLineNr++; }
+<RemoveSpecialCComment>.
+<MemberCall>[^a-z_A-Z0-9(\n] {
+ yyextra->code->codify(yytext);
+ yyextra->type.resize(0);
+ yyextra->name.resize(0);
+ BEGIN(yyextra->memCallContext);
+ }
+<*>\n({B}*"//"[!/][^\n]*\n)+ { // remove special one-line comment
+ if (YY_START==SkipCPP) REJECT;
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ yyextra->yyLineNr+=((QCString)yytext).contains('\n');
+ nextCodeLine(yyscanner);
+ }
+ else
+ {
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+ if (YY_START==SkipCxxComment)
+ {
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastCContext ) ;
+ }
+ }
+<SkipCPP>\n/.*\n {
+ endFontClass(yyscanner);
+ codifyLines(yyscanner,yytext);
+ BEGIN( yyextra->lastSkipCppContext ) ;
+ }
+<*>\n{B}*"//@"[{}].*\n { // remove one-line group marker
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ yyextra->yyLineNr+=2;
+ nextCodeLine(yyscanner);
+ }
+ else
+ {
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+ if (YY_START==SkipCxxComment)
+ {
+ endFontClass(yyscanner);
+ BEGIN( yyextra->lastCContext ) ;
+ }
+ }
+<*>\n{B}*"/*@"[{}] { // remove one-line group marker
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ if (YY_START != RemoveSpecialCComment) yyextra->lastSpecialCContext = YY_START;
+ yyextra->yyLineNr++;
+ BEGIN(RemoveSpecialCComment);
+ }
+ else
+ {
+ // check is to prevent getting stuck in skipping C++ comments
+ if (YY_START != SkipComment && YY_START != SkipCxxComment)
+ {
+ yyextra->lastCContext = YY_START ;
+ }
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,yytext);
+ BEGIN(SkipComment);
+ }
+ }
+<*>^{B}*"//@"[{}].*\n { // remove one-line group marker
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ yyextra->yyLineNr++;
+ nextCodeLine(yyscanner);
+ }
+ else
+ {
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+ }
+<*>^{B}*"/*@"[{}] { // remove multi-line group marker
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ if (YY_START != RemoveSpecialCComment) yyextra->lastSpecialCContext = YY_START;
+ BEGIN(RemoveSpecialCComment);
+ }
+ else
+ {
+ // check is to prevent getting stuck in skipping C++ comments
+ if (YY_START != SkipComment && YY_START != SkipCxxComment)
+ {
+ yyextra->lastCContext = YY_START ;
+ }
+ startFontClass(yyscanner,"comment");
+ yyextra->code->codify(yytext);
+ BEGIN(SkipComment);
+ }
+ }
+<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ yyextra->yyLineNr++;
+ //nextCodeLine(yyscanner);
+ }
+ else
+ {
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+ }
+<*>"//"[!/][^\n]*\n { // strip special one-line comment
+ if (YY_START==SkipComment || YY_START==SkipString) REJECT;
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ char c[2]; c[0]='\n'; c[1]=0;
+ codifyLines(yyscanner,c);
+ }
+ else
+ {
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,yytext);
+ endFontClass(yyscanner);
+ }
+ }
+<*>"/*[tag:"[^\]\n]*"]*/"{B}* { // special pattern /*[tag:filename]*/ to force linking to a tag file
+ yyextra->forceTagReference=yytext;
+ int s=yyextra->forceTagReference.find(':');
+ int e=yyextra->forceTagReference.findRev(']');
+ yyextra->forceTagReference = yyextra->forceTagReference.mid(s+1,e-s-1);
+ }
+<*>\n{B}*"/*"[!*]/[^/*] {
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ if (YY_START != RemoveSpecialCComment) yyextra->lastSpecialCContext = YY_START;
+ yyextra->yyLineNr++;
+ BEGIN(RemoveSpecialCComment);
+ }
+ else
+ {
+ // check is to prevent getting stuck in skipping C++ comments
+ if (YY_START != SkipComment && YY_START != SkipCxxComment)
+ {
+ yyextra->lastCContext = YY_START ;
+ }
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,yytext);
+ BEGIN(SkipComment);
+ }
+ }
+<*>^{B}*"/**"[*]+/[^/] { // special C "banner" comment block at a new line
+ if (Config_getBool(JAVADOC_BANNER) && Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ if (YY_START != RemoveSpecialCComment) yyextra->lastSpecialCContext = YY_START;
+ BEGIN(RemoveSpecialCComment);
+ }
+ else
+ {
+ // check is to prevent getting stuck in skipping C++ comments
+ if (YY_START != SkipComment && YY_START != SkipCxxComment)
+ {
+ yyextra->lastCContext = YY_START ;
+ }
+ startFontClass(yyscanner,"comment");
+ yyextra->code->codify(yytext);
+ BEGIN(SkipComment);
+ }
+ }
+<*>^{B}*"/*"[!*]/[^/*] { // special C comment block at a new line
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ if (YY_START != RemoveSpecialCComment) yyextra->lastSpecialCContext = YY_START;
+ BEGIN(RemoveSpecialCComment);
+ }
+ else
+ {
+ // check is to prevent getting stuck in skipping C++ comments
+ if (YY_START != SkipComment && YY_START != SkipCxxComment)
+ {
+ yyextra->lastCContext = YY_START ;
+ }
+ startFontClass(yyscanner,"comment");
+ yyextra->code->codify(yytext);
+ BEGIN(SkipComment);
+ }
+ }
+<*>"/*"[!*]/[^/*] { // special C comment block half way a line
+ if (YY_START==SkipString) REJECT;
+ if (Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ if (YY_START != RemoveSpecialCComment) yyextra->lastSpecialCContext = YY_START;
+ BEGIN(RemoveSpecialCComment);
+ }
+ else
+ {
+ // check is to prevent getting stuck in skipping C++ comments
+ if (YY_START != SkipComment && YY_START != SkipCxxComment)
+ {
+ yyextra->lastCContext = YY_START ;
+ }
+ startFontClass(yyscanner,"comment");
+ yyextra->code->codify(yytext);
+ BEGIN(SkipComment);
+ }
+ }
+<*>"/*"("!"?)"*/" {
+ if (YY_START==SkipString) REJECT;
+ if (!Config_getBool(STRIP_CODE_COMMENTS))
+ {
+ startFontClass(yyscanner,"comment");
+ yyextra->code->codify(yytext);
+ endFontClass(yyscanner);
+ }
+ }
+<SkipComment>[^\*\n]+ {
+ yyextra->code->codify(yytext);
+ }
+<*>"/*" {
+ startFontClass(yyscanner,"comment");
+ yyextra->code->codify(yytext);
+ // check is to prevent getting stuck in skipping C++ comments
+ if (YY_START != SkipComment && YY_START != SkipCxxComment)
+ {
+ yyextra->lastCContext = YY_START ;
+ }
+ BEGIN( SkipComment ) ;
+ }
+<*>@\" { // C# verbatim string
+ startFontClass(yyscanner,"stringliteral");
+ yyextra->code->codify(yytext);
+ yyextra->lastVerbStringContext=YY_START;
+ BEGIN(SkipVerbString);
+ }
+<*>"//" {
+ startFontClass(yyscanner,"comment");
+ yyextra->code->codify(yytext);
+ yyextra->lastCContext = YY_START ;
+ BEGIN( SkipCxxComment ) ;
+ }
+<*>"("|"[" {
+ yyextra->code->codify(yytext);
+ yyextra->theCallContext.pushScope(yyextra->name, yyextra->type);
+ }
+<*>")"|"]" {
+ yyextra->code->codify(yytext);
+ yyextra->theCallContext.popScope(yyextra->name, yyextra->type);
+ }
+<*>\n {
+ yyextra->yyColNr++;
+ codifyLines(yyscanner,yytext);
+ }
+<*>. {
+ yyextra->yyColNr++;
+ yyextra->code->codify(yytext);
+ }
+ /*
+<*>([ \t\n]*"\n"){2,} { // combine multiple blank lines
+ //QCString sepLine=yytext;
+ //yyextra->code->codify("\n\n");
+ //yyextra->yyLineNr+=sepLine.contains('\n');
+ //char sepLine[3]="\n\n";
+ codifyLines(yyscanner,yytext);
+ }
+ */
+
+%%
+
+/*@ ----------------------------------------------------------------------------
+ */
+
+void VariableContext::addVariable(yyscan_t yyscanner,const QCString &type,const QCString &name)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf("VariableContext::addVariable(%s,%s)\n",type.data(),name.data());
QCString ltype = type.simplifyWhiteSpace();
QCString lname = name.simplifyWhiteSpace();
@@ -257,8 +2268,8 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
const ClassDef *varType;
int i=0;
if (
- (varType=g_codeClassSDict->find(ltype)) || // look for class definitions inside the code block
- (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,ltype)) // look for global class definitions
+ (varType=yyextra->codeClassSDict->find(ltype)) || // look for class definitions inside the code block
+ (varType=getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,ltype)) // look for global class definitions
)
{
DBG_CTX((stderr,"** addVariable type='%s' name='%s'\n",ltype.data(),lname.data()));
@@ -272,11 +2283,11 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
QCString templateArgs(ltype.right(ltype.length() - i));
if ( !typeName.isEmpty() &&
( // look for class definitions inside the code block
- (varType=g_codeClassSDict->find(typeName)) ||
+ (varType=yyextra->codeClassSDict->find(typeName)) ||
// otherwise look for global class definitions
- (varType=getResolvedClass(g_currentDefinition,g_sourceFileDef,typeName,0,0,TRUE,TRUE))
+ (varType=getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,typeName,0,0,TRUE,TRUE))
) && // and it must be a template
- varType->templateArguments())
+ !varType->templateArguments().empty())
{
newDef = varType->getVariableInstance( templateArgs );
}
@@ -288,7 +2299,7 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
else
{
// Doesn't seem to be a template. Try just the base name.
- addVariable(typeName,name);
+ addVariable(yyscanner,typeName,name);
}
}
else
@@ -330,137 +2341,73 @@ ClassDef *VariableContext::findVariable(const QCString &name)
return result;
}
-static VariableContext g_theVarContext;
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
//-------------------------------------------------------------------
-class CallContext
-{
- public:
- struct Ctx
- {
- Ctx(QCString _name, QCString _type) : name(_name), type(_type), d(0) {}
- QCString name;
- QCString type;
- const Definition *d;
- };
-
- CallContext()
- {
- m_defList.append(new Ctx("",""));
- m_defList.setAutoDelete(TRUE);
- }
- virtual ~CallContext() {}
- void setScope(const Definition *d)
- {
- Ctx *ctx = m_defList.getLast();
- if (ctx)
- {
- DBG_CTX((stderr,"** Set call context %s (%p)\n",d==0 ? "<null>" : d->name().data(),d));
- ctx->d=d;
- }
- }
- void pushScope(QCString _name, QCString _type)
- {
- m_defList.append(new Ctx(_name,_type));
- DBG_CTX((stderr,"** Push call context %d\n",m_defList.count()));
- }
- void popScope(QCString &_name, QCString &_type)
- {
- if (m_defList.count()>1)
- {
- DBG_CTX((stderr,"** Pop call context %d\n",m_defList.count()));
- Ctx *ctx = m_defList.getLast();
- if (ctx)
- {
- _name = ctx->name;
- _type = ctx->type;
- }
- m_defList.removeLast();
- }
- else
- {
- DBG_CTX((stderr,"** ILLEGAL: Pop call context\n"));
- }
- }
- void clear()
- {
- DBG_CTX((stderr,"** Clear call context\n"));
- m_defList.clear();
- m_defList.append(new Ctx("",""));
- }
- const Definition *getScope() const
- {
- Ctx *ctx = m_defList.getLast();
- if (ctx) return ctx->d; else return 0;
- }
-
- private:
- QList<Ctx> m_defList;
-};
-
-static CallContext g_theCallContext;
-
-//-------------------------------------------------------------------
-
/*! add class/namespace name s to the scope */
-static void pushScope(const char *s)
+static void pushScope(yyscan_t yyscanner,const char *s)
{
- g_classScopeLengthStack.push(new int(g_classScope.length()));
- if (g_classScope.isEmpty() || leftScopeMatch(s,g_classScope))
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ yyextra->classScopeLengthStack.push(new int(yyextra->classScope.length()));
+ if (yyextra->classScope.isEmpty() || leftScopeMatch(s,yyextra->classScope))
{
- g_classScope = s;
+ yyextra->classScope = s;
}
else
{
- g_classScope += "::";
- g_classScope += s;
+ yyextra->classScope += "::";
+ yyextra->classScope += s;
}
- //printf("pushScope(%s) result: '%s'\n",s,g_classScope.data());
+ //printf("pushScope(%s) result: '%s'\n",s,yyextra->classScope.data());
}
+
/*! remove the top class/namespace name from the scope */
-static void popScope()
+static void popScope(yyscan_t yyscanner)
{
- if (!g_classScopeLengthStack.isEmpty())
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (!yyextra->classScopeLengthStack.isEmpty())
{
- int *pLength = g_classScopeLengthStack.pop();
- g_classScope.truncate(*pLength);
+ int *pLength = yyextra->classScopeLengthStack.pop();
+ yyextra->classScope.truncate(*pLength);
delete pLength;
}
else
{
//err("Too many end of scopes found!\n");
}
- //printf("popScope() result: '%s'\n",g_classScope.data());
+ //printf("popScope() result: '%s'\n",yyextra->classScope.data());
}
-static void setCurrentDoc(const QCString &anchor)
+static void setCurrentDoc(yyscan_t yyscanner,const QCString &anchor)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
if (Doxygen::searchIndex)
{
- if (g_searchCtx)
+ if (yyextra->searchCtx)
{
- g_code->setCurrentDoc(g_searchCtx,g_searchCtx->anchor(),FALSE);
+ yyextra->code->setCurrentDoc(yyextra->searchCtx,yyextra->searchCtx->anchor(),FALSE);
}
else
{
- g_code->setCurrentDoc(g_sourceFileDef,anchor,TRUE);
+ yyextra->code->setCurrentDoc(yyextra->sourceFileDef,anchor,TRUE);
}
}
}
-static void addToSearchIndex(const char *text)
+static void addToSearchIndex(yyscan_t yyscanner,const char *text)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
if (Doxygen::searchIndex)
{
- g_code->addWord(text,FALSE);
+ yyextra->code->addWord(text,FALSE);
}
}
-static void setClassScope(const QCString &name)
+static void setClassScope(yyscan_t yyscanner,const QCString &name)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf("setClassScope(%s)\n",name.data());
QCString n=name;
n=n.simplifyWhiteSpace();
@@ -472,132 +2419,134 @@ static void setClassScope(const QCString &name)
// remove template from scope
n=n.left(ts)+n.right(n.length()-te-1);
}
- while (!g_classScopeLengthStack.isEmpty())
+ while (!yyextra->classScopeLengthStack.isEmpty())
{
- popScope();
+ popScope(yyscanner);
}
- g_classScope.resize(0);
+ yyextra->classScope.resize(0);
int i;
while ((i=n.find("::"))!=-1)
{
- pushScope(n.left(i));
+ pushScope(yyscanner,n.left(i));
n = n.mid(i+2);
}
- pushScope(n);
- //printf("--->New class scope '%s'\n",g_classScope.data());
+ pushScope(yyscanner,n);
+ //printf("--->New class scope '%s'\n",yyextra->classScope.data());
}
-/*! start a new line of code, inserting a line number if g_sourceFileDef
+/*! start a new line of code, inserting a line number if yyextra->sourceFileDef
* is TRUE. If a definition starts at the current line, then the line
* number is linked to the documentation of that definition.
*/
-static void startCodeLine()
+static void startCodeLine(yyscan_t yyscanner)
{
- //if (g_currentFontClass) { g_code->endFontClass(); }
- if (g_sourceFileDef && g_lineNumbers)
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ //if (yyextra->currentFontClass) { yyextra->code->endFontClass(yyscanner); }
+ if (yyextra->sourceFileDef && yyextra->lineNumbers)
{
//QCString lineNumber,lineAnchor;
- //lineNumber.sprintf("%05d",g_yyLineNr);
- //lineAnchor.sprintf("l%05d",g_yyLineNr);
+ //lineNumber.sprintf("%05d",yyextra->yyLineNr);
+ //lineAnchor.sprintf("l%05d",yyextra->yyLineNr);
- Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr);
- //printf("%s:startCodeLine(%d)=%p\n",g_sourceFileDef->name().data(),g_yyLineNr,d);
- if (!g_includeCodeFragment && d)
- {
- g_currentDefinition = d;
- g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr);
- g_insideBody = FALSE;
- g_searchingForBody = TRUE;
- g_realScope = d->name();
- //g_classScope = "";
- g_type.resize(0);
- g_name.resize(0);
- g_args.resize(0);
- g_parmType.resize(0);
- g_parmName.resize(0);
- //printf("Real scope: '%s'\n",g_realScope.data());
- g_bodyCurlyCount = 0;
+ Definition *d = yyextra->sourceFileDef->getSourceDefinition(yyextra->yyLineNr);
+ //printf("%s:startCodeLine(%d)=%p\n",yyextra->sourceFileDef->name().data(),yyextra->yyLineNr,d);
+ if (!yyextra->includeCodeFragment && d)
+ {
+ yyextra->currentDefinition = d;
+ yyextra->currentMemberDef = yyextra->sourceFileDef->getSourceMember(yyextra->yyLineNr);
+ yyextra->insideBody = FALSE;
+ yyextra->searchingForBody = TRUE;
+ yyextra->realScope = d->name();
+ //yyextra->classScope = "";
+ yyextra->type.resize(0);
+ yyextra->name.resize(0);
+ yyextra->args.resize(0);
+ yyextra->parmType.resize(0);
+ yyextra->parmName.resize(0);
+ //printf("Real scope: '%s'\n",yyextra->realScope.data());
+ yyextra->bodyCurlyCount = 0;
QCString lineAnchor;
- lineAnchor.sprintf("l%05d",g_yyLineNr);
- if (g_currentMemberDef)
+ lineAnchor.sprintf("l%05d",yyextra->yyLineNr);
+ if (yyextra->currentMemberDef)
{
- g_code->writeLineNumber(g_currentMemberDef->getReference(),
- g_currentMemberDef->getOutputFileBase(),
- g_currentMemberDef->anchor(),g_yyLineNr);
- setCurrentDoc(lineAnchor);
+ yyextra->code->writeLineNumber(yyextra->currentMemberDef->getReference(),
+ yyextra->currentMemberDef->getOutputFileBase(),
+ yyextra->currentMemberDef->anchor(),yyextra->yyLineNr);
+ setCurrentDoc(yyscanner,lineAnchor);
}
else if (d->isLinkableInProject())
{
- g_code->writeLineNumber(d->getReference(),
+ yyextra->code->writeLineNumber(d->getReference(),
d->getOutputFileBase(),
- 0,g_yyLineNr);
- setCurrentDoc(lineAnchor);
+ 0,yyextra->yyLineNr);
+ setCurrentDoc(yyscanner,lineAnchor);
}
}
else
{
- g_code->writeLineNumber(0,0,0,g_yyLineNr);
+ yyextra->code->writeLineNumber(0,0,0,yyextra->yyLineNr);
}
}
- DBG_CTX((stderr,"startCodeLine(%d)\n",g_yyLineNr));
- g_code->startCodeLine(g_sourceFileDef && g_lineNumbers);
- if (g_currentFontClass)
+ DBG_CTX((stderr,"startCodeLine(%d)\n",yyextra->yyLineNr));
+ yyextra->code->startCodeLine(yyextra->sourceFileDef && yyextra->lineNumbers);
+ if (yyextra->currentFontClass)
{
- g_code->startFontClass(g_currentFontClass);
+ yyextra->code->startFontClass(yyextra->currentFontClass);
}
}
-static void endFontClass();
-static void startFontClass(const char *s);
-static void endCodeLine()
+static void endCodeLine(yyscan_t yyscanner)
{
- DBG_CTX((stderr,"endCodeLine(%d)\n",g_yyLineNr));
- endFontClass();
- g_code->endCodeLine();
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ DBG_CTX((stderr,"endCodeLine(%d)\n",yyextra->yyLineNr));
+ endFontClass(yyscanner);
+ yyextra->code->endCodeLine();
}
-static void nextCodeLine()
+static void nextCodeLine(yyscan_t yyscanner)
{
- const char * fc = g_currentFontClass;
- endCodeLine();
- if (g_yyLineNr<g_inputLines)
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ const char * fc = yyextra->currentFontClass;
+ endCodeLine(yyscanner);
+ if (yyextra->yyLineNr<yyextra->inputLines)
{
- g_currentFontClass = fc;
- startCodeLine();
+ yyextra->currentFontClass = fc;
+ startCodeLine(yyscanner);
}
}
/*! write a code fragment 'text' that may span multiple lines, inserting
* line numbers for each line.
*/
-static void codifyLines(const char *text)
+static void codifyLines(yyscan_t yyscanner,const char *text)
{
- //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ //printf("codifyLines(%d,\"%s\")\n",yyextra->yyLineNr,text);
const char *p=text,*sp=p;
char c;
bool done=FALSE;
while (!done)
{
sp=p;
- while ((c=*p++) && c!='\n') { g_yyColNr++; }
+ while ((c=*p++) && c!='\n') { yyextra->yyColNr++; }
if (c=='\n')
{
- g_yyLineNr++;
- g_yyColNr=1;
+ yyextra->yyLineNr++;
+ yyextra->yyColNr=1;
//*(p-1)='\0';
int l = (int)(p-sp-1);
char *tmp = (char*)malloc(l+1);
memcpy(tmp,sp,l);
tmp[l]='\0';
- g_code->codify(tmp);
+ yyextra->code->codify(tmp);
free(tmp);
- nextCodeLine();
+ nextCodeLine(yyscanner);
}
else
{
- g_code->codify(sp);
+ yyextra->code->codify(sp);
done=TRUE;
}
}
@@ -607,10 +2556,11 @@ static void codifyLines(const char *text)
* line numbers for each line. If \a text contains newlines, the link will be
* split into multiple links with the same destination, one for each line.
*/
-static void writeMultiLineCodeLink(CodeOutputInterface &ol,
+static void writeMultiLineCodeLink(yyscan_t yyscanner,CodeOutputInterface &ol,
const Definition *d,
const char *text)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
static bool sourceTooltips = Config_getBool(SOURCE_TOOLTIPS);
TooltipManager::instance()->addTooltip(d);
QCString ref = d->getReference();
@@ -630,11 +2580,11 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
while ((c=*p++) && c!='\n') { }
if (c=='\n')
{
- g_yyLineNr++;
+ yyextra->yyLineNr++;
*(p-1)='\0';
//printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp);
ol.writeCodeLink(ref,file,anchor,sp,tooltip);
- nextCodeLine();
+ nextCodeLine(yyscanner);
}
else
{
@@ -645,60 +2595,61 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
}
}
-static void addType()
+static void addType(yyscan_t yyscanner)
{
- if (g_name=="const") { g_name.resize(0); return; }
- if (!g_type.isEmpty()) g_type += ' ' ;
- g_type += g_name ;
- g_name.resize(0) ;
- if (!g_type.isEmpty()) g_type += ' ' ;
- g_type += g_args ;
- g_args.resize(0) ;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->name=="const") { yyextra->name.resize(0); return; }
+ if (!yyextra->type.isEmpty()) yyextra->type += ' ' ;
+ yyextra->type += yyextra->name ;
+ yyextra->name.resize(0) ;
+ if (!yyextra->type.isEmpty()) yyextra->type += ' ' ;
+ yyextra->type += yyextra->args ;
+ yyextra->args.resize(0) ;
}
-static void addParmType()
+static void addParmType(yyscan_t yyscanner)
{
- if (g_parmName=="const") { g_parmName.resize(0); return; }
- if (!g_parmType.isEmpty()) g_parmType += ' ' ;
- g_parmType += g_parmName ;
- g_parmName.resize(0) ;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->parmName=="const") { yyextra->parmName.resize(0); return; }
+ if (!yyextra->parmType.isEmpty()) yyextra->parmType += ' ' ;
+ yyextra->parmType += yyextra->parmName ;
+ yyextra->parmName.resize(0) ;
}
-static void addUsingDirective(const char *name)
+static void addUsingDirective(yyscan_t yyscanner,const char *name)
{
- if (g_sourceFileDef && name)
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->sourceFileDef && name)
{
NamespaceDef *nd = Doxygen::namespaceSDict->find(name);
if (nd)
{
- g_sourceFileDef->addUsingDirective(nd);
+ yyextra->sourceFileDef->addUsingDirective(nd);
}
}
}
-static void setParameterList(const MemberDef *md)
+static void setParameterList(yyscan_t yyscanner,const MemberDef *md)
{
- g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
- const ArgumentList *al = md->argumentList();
- if (al==0) return;
- ArgumentListIterator it(*al);
- const Argument *a;
- for (;(a=it.current());++it)
- {
- g_parmName = a->name.copy();
- g_parmType = a->type.copy();
- int i = g_parmType.find('*');
- if (i!=-1) g_parmType = g_parmType.left(i);
- i = g_parmType.find('&');
- if (i!=-1) g_parmType = g_parmType.left(i);
- g_parmType.stripPrefix("const ");
- g_parmType=g_parmType.stripWhiteSpace();
- g_theVarContext.addVariable(g_parmType,g_parmName);
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ yyextra->classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
+ for (const Argument &a : md->argumentList())
+ {
+ yyextra->parmName = a.name;
+ yyextra->parmType = a.type;
+ int i = yyextra->parmType.find('*');
+ if (i!=-1) yyextra->parmType = yyextra->parmType.left(i);
+ i = yyextra->parmType.find('&');
+ if (i!=-1) yyextra->parmType = yyextra->parmType.left(i);
+ yyextra->parmType.stripPrefix("const ");
+ yyextra->parmType=yyextra->parmType.stripWhiteSpace();
+ yyextra->theVarContext.addVariable(yyscanner,yyextra->parmType,yyextra->parmName);
}
}
-static const ClassDef *stripClassName(const char *s,Definition *d=g_currentDefinition)
+static const ClassDef *stripClassName(yyscan_t yyscanner,const char *s,Definition *d)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
int pos=0;
QCString type = s;
QCString className;
@@ -707,13 +2658,13 @@ static const ClassDef *stripClassName(const char *s,Definition *d=g_currentDefin
{
QCString clName=className+templSpec;
const ClassDef *cd=0;
- if (!g_classScope.isEmpty())
+ if (!yyextra->classScope.isEmpty())
{
- cd=getResolvedClass(d,g_sourceFileDef,g_classScope+"::"+clName);
+ cd=getResolvedClass(d,yyextra->sourceFileDef,yyextra->classScope+"::"+clName);
}
if (cd==0)
{
- cd=getResolvedClass(d,g_sourceFileDef,clName);
+ cd=getResolvedClass(d,yyextra->sourceFileDef,clName);
}
//printf("stripClass trying '%s' = %p\n",clName.data(),cd);
if (cd)
@@ -725,10 +2676,11 @@ static const ClassDef *stripClassName(const char *s,Definition *d=g_currentDefin
return 0;
}
-static MemberDef *setCallContextForVar(const QCString &name)
+static MemberDef *setCallContextForVar(yyscan_t yyscanner,const QCString &name)
{
if (name.isEmpty()) return 0;
- DBG_CTX((stderr,"setCallContextForVar(%s) g_classScope=%s\n",name.data(),g_classScope.data()));
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ DBG_CTX((stderr,"setCallContextForVar(%s) yyextra->classScope=%s\n",name.data(),yyextra->classScope.data()));
int scopeEnd = name.findRev("::");
if (scopeEnd!=-1) // name with explicit scope
@@ -743,7 +2695,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
if (md)
{
//printf("name=%s scope=%s\n",locName.data(),scope.data());
- g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
+ yyextra->theCallContext.setScope(stripClassName(yyscanner,md->typeString(),md->getOuterScope()));
return md;
}
}
@@ -756,7 +2708,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
if (md)
{
//printf("name=%s scope=%s\n",locName.data(),scope.data());
- g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
+ yyextra->theCallContext.setScope(stripClassName(yyscanner,md->typeString(),md->getOuterScope()));
return md;
}
}
@@ -764,21 +2716,21 @@ static MemberDef *setCallContextForVar(const QCString &name)
}
MemberName *mn;
- ClassDef *mcd = g_theVarContext.findVariable(name);
+ ClassDef *mcd = yyextra->theVarContext.findVariable(name);
if (mcd) // local variable
{
DBG_CTX((stderr,"local variable?\n"));
if (mcd!=VariableContext::dummyContext)
{
DBG_CTX((stderr,"local var '%s' mcd=%s\n",name.data(),mcd->name().data()));
- g_theCallContext.setScope(mcd);
+ yyextra->theCallContext.setScope(mcd);
}
}
else
{
- DBG_CTX((stderr,"class member? scope=%s\n",g_classScope.data()));
+ DBG_CTX((stderr,"class member? scope=%s\n",yyextra->classScope.data()));
// look for a class member
- mcd = getClass(g_classScope);
+ mcd = getClass(yyextra->classScope);
if (mcd)
{
DBG_CTX((stderr,"Inside class %s\n",mcd->name().data()));
@@ -786,10 +2738,10 @@ static MemberDef *setCallContextForVar(const QCString &name)
if (md)
{
DBG_CTX((stderr,"Found member %s\n",md->name().data()));
- if (g_scopeStack.top()!=CLASSBLOCK)
+ if (yyextra->scopeStack.top()!=CLASSBLOCK)
{
DBG_CTX((stderr,"class member '%s' mcd=%s\n",name.data(),mcd->name().data()));
- g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
+ yyextra->theCallContext.setScope(stripClassName(yyscanner,md->typeString(),md->getOuterScope()));
}
return md;
}
@@ -803,9 +2755,9 @@ static MemberDef *setCallContextForVar(const QCString &name)
if (mn->count()==1) // global defined only once
{
MemberDef *md=mn->getFirst();
- if (!md->isStatic() || md->getBodyDef()==g_sourceFileDef)
+ if (!md->isStatic() || md->getBodyDef()==yyextra->sourceFileDef)
{
- g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
+ yyextra->theCallContext.setScope(stripClassName(yyscanner,md->typeString(),md->getOuterScope()));
return md;
}
return 0;
@@ -816,19 +2768,19 @@ static MemberDef *setCallContextForVar(const QCString &name)
MemberDef *md;
for (;(md=it.current());++it)
{
- //printf("mn=%p md=%p md->getBodyDef()=%p g_sourceFileDef=%p\n",
+ //printf("mn=%p md=%p md->getBodyDef()=%p yyextra->sourceFileDef=%p\n",
// mn,md,
- // md->getBodyDef(),g_sourceFileDef);
+ // md->getBodyDef(),yyextra->sourceFileDef);
// in case there are multiple members we could link to, we
// only link to members if defined in the same file or
// defined as external.
- if ((!md->isStatic() || md->getBodyDef()==g_sourceFileDef) &&
- (g_forceTagReference.isEmpty() || g_forceTagReference==md->getReference())
+ if ((!md->isStatic() || md->getBodyDef()==yyextra->sourceFileDef) &&
+ (yyextra->forceTagReference.isEmpty() || yyextra->forceTagReference==md->getReference())
)
{
- g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
- //printf("returning member %s in source file %s\n",md->name().data(),g_sourceFileDef->name().data());
+ yyextra->theCallContext.setScope(stripClassName(yyscanner,md->typeString(),md->getOuterScope()));
+ //printf("returning member %s in source file %s\n",md->name().data(),yyextra->sourceFileDef->name().data());
return md;
}
}
@@ -838,52 +2790,55 @@ static MemberDef *setCallContextForVar(const QCString &name)
return 0;
}
-static void updateCallContextForSmartPointer()
+static void updateCallContextForSmartPointer(yyscan_t yyscanner)
{
- const Definition *d = g_theCallContext.getScope();
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ const Definition *d = yyextra->theCallContext.getScope();
//printf("updateCallContextForSmartPointer() cd=%s\n",cd ? d->name().data() : "<none>");
MemberDef *md;
if (d && d->definitionType()==Definition::TypeClass && (md=(dynamic_cast<const ClassDef*>(d))->isSmartPointer()))
{
- const ClassDef *ncd = stripClassName(md->typeString(),md->getOuterScope());
+ const ClassDef *ncd = stripClassName(yyscanner,md->typeString(),md->getOuterScope());
if (ncd)
{
- g_theCallContext.setScope(ncd);
+ yyextra->theCallContext.setScope(ncd);
//printf("Found smart pointer call %s->%s!\n",cd->name().data(),ncd->name().data());
}
}
}
-static bool getLinkInScope(const QCString &c, // scope
+static bool getLinkInScope(yyscan_t yyscanner,
+ const QCString &c, // scope
const QCString &m, // member
const char *memberText, // exact text
CodeOutputInterface &ol,
const char *text,
- bool varOnly=FALSE
+ bool varOnly
)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
const MemberDef *md = 0;
const ClassDef *cd = 0;
const FileDef *fd = 0;
const NamespaceDef *nd = 0;
const GroupDef *gd = 0;
DBG_CTX((stderr,"getLinkInScope: trying '%s'::'%s' varOnly=%d\n",c.data(),m.data(),varOnly));
- if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef,FALSE,g_forceTagReference) &&
+ if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,yyextra->sourceFileDef,FALSE,yyextra->forceTagReference) &&
(!varOnly || md->isVariable()))
{
if (md->isLinkable())
{
//printf("found it %s!\n",md->qualifiedName().data());
- if (g_exampleBlock)
+ if (yyextra->exampleBlock)
{
QCString anchor;
- anchor.sprintf("a%d",g_anchorCount);
- //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
- // g_exampleFile.data());
- if (const_cast<MemberDef*>(md)->addExample(anchor,g_exampleName,g_exampleFile))
+ anchor.sprintf("a%d",yyextra->anchorCount);
+ //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),yyextra->exampleName.data(),
+ // yyextra->exampleFile.data());
+ if (const_cast<MemberDef*>(md)->addExample(anchor,yyextra->exampleName,yyextra->exampleFile))
{
ol.writeCodeAnchor(anchor);
- g_anchorCount++;
+ yyextra->anchorCount++;
}
}
@@ -892,19 +2847,19 @@ static bool getLinkInScope(const QCString &c, // scope
if (md->resolveAlias()->getGroupDef()) d = md->resolveAlias()->getGroupDef();
if (d && d->isLinkable())
{
- g_theCallContext.setScope(stripClassName(md->typeString(),md->getOuterScope()));
- //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n",
- // g_currentDefinition,g_currentMemberDef,g_insideBody);
+ yyextra->theCallContext.setScope(stripClassName(yyscanner,md->typeString(),md->getOuterScope()));
+ //printf("yyextra->currentDefinition=%p yyextra->currentMemberDef=%p yyextra->insideBody=%d\n",
+ // yyextra->currentDefinition,yyextra->currentMemberDef,yyextra->insideBody);
- if (g_currentDefinition && g_currentMemberDef &&
- md!=g_currentMemberDef && g_insideBody && g_collectXRefs)
+ if (yyextra->currentDefinition && yyextra->currentMemberDef &&
+ md!=yyextra->currentMemberDef && yyextra->insideBody && yyextra->collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,const_cast<MemberDef*>(md));
+ addDocCrossReference(yyextra->currentMemberDef,const_cast<MemberDef*>(md));
}
//printf("d->getReference()='%s' d->getOutputBase()='%s' name='%s' member name='%s'\n",d->getReference().data(),d->getOutputFileBase().data(),d->name().data(),md->name().data());
- writeMultiLineCodeLink(ol,md, text ? text : memberText);
- addToSearchIndex(text ? text : memberText);
+ writeMultiLineCodeLink(yyscanner,ol,md, text ? text : memberText);
+ addToSearchIndex(yyscanner,text ? text : memberText);
return TRUE;
}
}
@@ -912,54 +2867,60 @@ static bool getLinkInScope(const QCString &c, // scope
// to the previous member, see bug762760
{
DBG_CTX((stderr,"unlinkable member %s\n",md->name().data()));
- g_currentMemberDef = 0;
+ yyextra->currentMemberDef = 0;
}
}
return FALSE;
}
-static bool getLink(const char *className,
+static bool getLink(yyscan_t yyscanner,
+ const char *className,
const char *memberName,
CodeOutputInterface &ol,
- const char *text=0,
- bool varOnly=FALSE)
+ const char *text,
+ bool varOnly)
{
- //printf("getLink(%s,%s) g_curClassName=%s\n",className,memberName,g_curClassName.data());
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ //printf("getLink(%s,%s) yyextra->curClassName=%s\n",className,memberName,yyextra->curClassName.data());
QCString m=removeRedundantWhiteSpace(memberName);
QCString c=className;
- if (!getLinkInScope(c,m,memberName,ol,text,varOnly))
+ if (!getLinkInScope(yyscanner,c,m,memberName,ol,text,varOnly))
{
- if (!g_curClassName.isEmpty())
+ if (!yyextra->curClassName.isEmpty())
{
if (!c.isEmpty()) c.prepend("::");
- c.prepend(g_curClassName);
- return getLinkInScope(c,m,memberName,ol,text,varOnly);
+ c.prepend(yyextra->curClassName);
+ return getLinkInScope(yyscanner,c,m,memberName,ol,text,varOnly);
}
return FALSE;
}
return TRUE;
}
-static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName,
- bool typeOnly=FALSE,bool varOnly=FALSE)
+static void generateClassOrGlobalLink(yyscan_t yyscanner,
+ CodeOutputInterface &ol,
+ const char *clName,
+ bool typeOnly,
+ bool varOnly)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
int i=0;
if (*clName=='~') // correct for matching negated values i.s.o. destructors.
{
- g_code->codify("~");
+ yyextra->code->codify("~");
clName++;
}
QCString className=clName;
if (className.isEmpty()) return;
- if (g_insideProtocolList) // for Obj-C
+ if (yyextra->insideProtocolList) // for Obj-C
{
className+="-p";
}
- if (g_insidePHP)
+ if (yyextra->lang==SrcLangExt_PHP)
{
className = substitute(className,"\\","::"); // for PHP namespaces
}
- else if (g_insideCS || g_insideJava)
+ else if (yyextra->lang==SrcLangExt_CSharp || yyextra->lang==SrcLangExt_Java)
{
className = substitute(className,".","::"); // for PHP namespaces
}
@@ -968,13 +2929,13 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
bool isLocal=FALSE;
//printf("generateClassOrGlobalLink(className=%s)\n",className.data());
- if (!g_prefixed_with_this_keyword || (lcd=g_theVarContext.findVariable(className))==0) // not a local variable
+ if (!yyextra->prefixed_with_this_keyword || (lcd=yyextra->theVarContext.findVariable(className))==0) // not a local variable
{
- Definition *d = g_currentDefinition;
- //printf("d=%s g_sourceFileDef=%s\n",d?d->name().data():"<none>",g_sourceFileDef?g_sourceFileDef->name().data():"<none>");
- cd = getResolvedClass(d,g_sourceFileDef,className,&md);
+ Definition *d = yyextra->currentDefinition;
+ //printf("d=%s yyextra->sourceFileDef=%s\n",d?d->name().data():"<none>",yyextra->sourceFileDef?yyextra->sourceFileDef->name().data():"<none>");
+ cd = getResolvedClass(d,yyextra->sourceFileDef,className,&md);
DBG_CTX((stderr,"non-local variable name=%s context=%d cd=%s md=%s!\n",
- className.data(),g_theVarContext.count(),cd?cd->name().data():"<none>",
+ className.data(),yyextra->theVarContext.count(),cd?cd->name().data():"<none>",
md?md->name().data():"<none>"));
if (cd==0 && md==0 && (i=className.find('<'))!=-1)
{
@@ -982,15 +2943,15 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
DBG_CTX((stderr,"bareName=%s\n",bareName.data()));
if (bareName!=className)
{
- cd=getResolvedClass(d,g_sourceFileDef,bareName,&md); // try unspecialized version
+ cd=getResolvedClass(d,yyextra->sourceFileDef,bareName,&md); // try unspecialized version
}
}
const NamespaceDef *nd = getResolvedNamespace(className);
- if (nd && nd->isLinkableInProject())
+ if (nd && nd->isLinkable())
{
- g_theCallContext.setScope(nd);
- addToSearchIndex(className);
- writeMultiLineCodeLink(*g_code,nd,clName);
+ yyextra->theCallContext.setScope(nd);
+ addToSearchIndex(yyscanner,className);
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,nd,clName);
return;
}
//printf("md=%s\n",md?md->name().data():"<none>");
@@ -999,7 +2960,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
nd?nd->name().data():"<null>"));
if (cd==0 && md==0) // also see if it is variable or enum or enum value
{
- if (getLink(g_classScope,clName,ol,clName,varOnly))
+ if (getLink(yyscanner,yyextra->classScope,clName,ol,clName,varOnly))
{
return;
}
@@ -1011,12 +2972,12 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
if (lcd!=VariableContext::dummyContext)
{
//printf("non-dummy context lcd=%s!\n",lcd->name().data());
- g_theCallContext.setScope(lcd);
+ yyextra->theCallContext.setScope(lcd);
// to following is needed for links to a global variable, but is
// no good for a link to a local variable that is also a global symbol.
- //if (getLink(g_classScope,clName,ol,clName))
+ //if (getLink(yyscanner,yyextra->classScope,clName,ol,clName))
//{
//return;
//}
@@ -1024,35 +2985,35 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
isLocal=TRUE;
DBG_CTX((stderr,"is a local variable cd=%p!\n",cd));
}
- g_prefixed_with_this_keyword = FALSE; // discard the "this" prefix for the next calls
+ yyextra->prefixed_with_this_keyword = FALSE; // discard the "this" prefix for the next calls
if (cd && cd->isLinkable()) // is it a linkable class
{
DBG_CTX((stderr,"is linkable class %s\n",clName));
- if (g_exampleBlock)
+ if (yyextra->exampleBlock)
{
QCString anchor;
- anchor.sprintf("_a%d",g_anchorCount);
- //printf("addExampleClass(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
- // g_exampleFile.data());
- if (const_cast<ClassDef*>(cd)->addExample(anchor,g_exampleName,g_exampleFile))
+ anchor.sprintf("_a%d",yyextra->anchorCount);
+ //printf("addExampleClass(%s,%s,%s)\n",anchor.data(),yyextra->exampleName.data(),
+ // yyextra->exampleFile.data());
+ if (const_cast<ClassDef*>(cd)->addExample(anchor,yyextra->exampleName,yyextra->exampleFile))
{
ol.writeCodeAnchor(anchor);
- g_anchorCount++;
+ yyextra->anchorCount++;
}
}
- writeMultiLineCodeLink(ol,cd,clName);
- addToSearchIndex(className);
- g_theCallContext.setScope(cd);
+ writeMultiLineCodeLink(yyscanner,ol,cd,clName);
+ addToSearchIndex(yyscanner,className);
+ yyextra->theCallContext.setScope(cd);
if (md)
{
const Definition *d = md->getOuterScope()==Doxygen::globalScope ?
md->getFileDef() : md->getOuterScope();
if (md->getGroupDef()) d = md->getGroupDef();
if (d && d->isLinkable() && md->isLinkable() &&
- g_currentMemberDef && g_collectXRefs)
+ yyextra->currentMemberDef && yyextra->collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,const_cast<MemberDef*>(md));
+ addDocCrossReference(yyextra->currentMemberDef,const_cast<MemberDef*>(md));
}
}
}
@@ -1063,31 +3024,31 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
{
if (md==0) // not found as a typedef
{
- md = setCallContextForVar(clName);
- //printf("setCallContextForVar(%s) md=%p g_currentDefinition=%p\n",clName,md,g_currentDefinition);
- if (md && g_currentDefinition)
+ md = setCallContextForVar(yyscanner,clName);
+ //printf("setCallContextForVar(%s) md=%p yyextra->currentDefinition=%p\n",clName,md,yyextra->currentDefinition);
+ if (md && yyextra->currentDefinition)
{
DBG_CTX((stderr,"%s accessible from %s? %d md->getOuterScope=%s\n",
- md->name().data(),g_currentDefinition->name().data(),
- isAccessibleFrom(g_currentDefinition,g_sourceFileDef,md),
+ md->name().data(),yyextra->currentDefinition->name().data(),
+ isAccessibleFrom(yyextra->currentDefinition,yyextra->sourceFileDef,md),
md->getOuterScope()->name().data()));
}
- if (md && g_currentDefinition &&
- isAccessibleFrom(g_currentDefinition,g_sourceFileDef,md)==-1)
+ if (md && yyextra->currentDefinition &&
+ isAccessibleFrom(yyextra->currentDefinition,yyextra->sourceFileDef,md)==-1)
{
md=0; // variable not accessible
}
}
if (md && (!varOnly || md->isVariable()))
{
- DBG_CTX((stderr,"is a global md=%p g_currentDefinition=%s linkable=%d\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>",md->isLinkable()));
+ DBG_CTX((stderr,"is a global md=%p yyextra->currentDefinition=%s linkable=%d\n",md,yyextra->currentDefinition?yyextra->currentDefinition->name().data():"<none>",md->isLinkable()));
if (md->isLinkable())
{
QCString text;
- if (!g_forceTagReference.isEmpty()) // explicit reference to symbol in tag file
+ if (!yyextra->forceTagReference.isEmpty()) // explicit reference to symbol in tag file
{
- text=g_forceTagReference;
+ text=yyextra->forceTagReference;
if (text.right(4)==".tag") // strip .tag if present
{
text=text.left(text.length()-4);
@@ -1101,11 +3062,11 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
{
text=clName;
}
- writeMultiLineCodeLink(ol,md,text);
- addToSearchIndex(clName);
- if (g_currentMemberDef && g_collectXRefs)
+ writeMultiLineCodeLink(yyscanner,ol,md,text);
+ addToSearchIndex(yyscanner,clName);
+ if (yyextra->currentMemberDef && yyextra->collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,const_cast<MemberDef*>(md));
+ addDocCrossReference(yyextra->currentMemberDef,const_cast<MemberDef*>(md));
}
return;
}
@@ -1114,13 +3075,17 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName
// nothing found, just write out the word
DBG_CTX((stderr,"not found!\n"));
- codifyLines(clName);
- addToSearchIndex(clName);
+ codifyLines(yyscanner,clName);
+ addToSearchIndex(yyscanner,clName);
}
}
-static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const char *memName)
+static bool generateClassMemberLink(yyscan_t yyscanner,
+ CodeOutputInterface &ol,
+ MemberDef *xmd,
+ const char *memName)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
// extract class definition of the return type in order to resolve
// a->b()->c() like call chains
@@ -1128,22 +3093,22 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
// xmd->typeString(),xmd->argsString(),
// xmd->getClassDef()->name().data());
- if (g_exampleBlock)
+ if (yyextra->exampleBlock)
{
QCString anchor;
- anchor.sprintf("a%d",g_anchorCount);
- //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),g_exampleName.data(),
- // g_exampleFile.data());
- if (xmd->addExample(anchor,g_exampleName,g_exampleFile))
+ anchor.sprintf("a%d",yyextra->anchorCount);
+ //printf("addExampleFile(%s,%s,%s)\n",anchor.data(),yyextra->exampleName.data(),
+ // yyextra->exampleFile.data());
+ if (xmd->addExample(anchor,yyextra->exampleName,yyextra->exampleFile))
{
ol.writeCodeAnchor(anchor);
- g_anchorCount++;
+ yyextra->anchorCount++;
}
}
- const ClassDef *typeClass = stripClassName(removeAnonymousScopes(xmd->typeString()),xmd->getOuterScope());
+ const ClassDef *typeClass = stripClassName(yyscanner,removeAnonymousScopes(xmd->typeString()),xmd->getOuterScope());
DBG_CTX((stderr,"%s -> typeName=%p\n",xmd->typeString(),typeClass));
- g_theCallContext.setScope(typeClass);
+ yyextra->theCallContext.setScope(typeClass);
const Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ?
xmd->getFileDef() : xmd->getOuterScope();
@@ -1151,22 +3116,22 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
if (xd && xd->isLinkable())
{
- //printf("g_currentDefiniton=%p g_currentMemberDef=%p xmd=%p g_insideBody=%d\n",g_currentDefinition,g_currentMemberDef,xmd,g_insideBody);
+ //printf("yyextra->currentDefinition=%p yyextra->currentMemberDef=%p xmd=%p yyextra->insideBody=%d\n",yyextra->currentDefinition,yyextra->currentMemberDef,xmd,yyextra->insideBody);
if (xmd->templateMaster()) xmd = xmd->templateMaster();
if (xmd->isLinkable())
{
// add usage reference
- if (g_currentDefinition && g_currentMemberDef &&
- /*xmd!=g_currentMemberDef &&*/ g_insideBody && g_collectXRefs)
+ if (yyextra->currentDefinition && yyextra->currentMemberDef &&
+ /*xmd!=yyextra->currentMemberDef &&*/ yyextra->insideBody && yyextra->collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,xmd);
+ addDocCrossReference(yyextra->currentMemberDef,xmd);
}
// write the actual link
- writeMultiLineCodeLink(ol,xmd,memName);
- addToSearchIndex(memName);
+ writeMultiLineCodeLink(yyscanner,ol,xmd,memName);
+ addToSearchIndex(yyscanner,memName);
return TRUE;
}
}
@@ -1174,8 +3139,12 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,MemberDef *xmd,const
return FALSE;
}
-static bool generateClassMemberLink(CodeOutputInterface &ol,const Definition *def,const char *memName)
+static bool generateClassMemberLink(yyscan_t yyscanner,
+ CodeOutputInterface &ol,
+ const Definition *def,
+ const char *memName)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
if (def && def->definitionType()==Definition::TypeClass)
{
const ClassDef *cd = dynamic_cast<const ClassDef*>(def);
@@ -1183,16 +3152,16 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,const Definition *de
//printf("generateClassMemberLink(class=%s,member=%s)=%p\n",def->name().data(),memName,xmd);
if (xmd)
{
- return generateClassMemberLink(ol,xmd,memName);
+ return generateClassMemberLink(yyscanner,ol,xmd,memName);
}
else
{
Definition *innerDef = cd->findInnerCompound(memName);
if (innerDef)
{
- g_theCallContext.setScope(innerDef);
- addToSearchIndex(memName);
- writeMultiLineCodeLink(*g_code,innerDef,memName);
+ yyextra->theCallContext.setScope(innerDef);
+ addToSearchIndex(yyscanner,memName);
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,innerDef,memName);
return TRUE;
}
}
@@ -1204,31 +3173,34 @@ static bool generateClassMemberLink(CodeOutputInterface &ol,const Definition *de
Definition *innerDef = nd->findInnerCompound(memName);
if (innerDef)
{
- g_theCallContext.setScope(innerDef);
- addToSearchIndex(memName);
- writeMultiLineCodeLink(*g_code,innerDef,memName);
+ yyextra->theCallContext.setScope(innerDef);
+ addToSearchIndex(yyscanner,memName);
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,innerDef,memName);
return TRUE;
}
}
return FALSE;
}
-static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
- char *memName)
+static void generateMemberLink(yyscan_t yyscanner,
+ CodeOutputInterface &ol,
+ const QCString &varName,
+ const char *memName)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
- // varName.data(),memName,g_classScope.data());
+ // varName.data(),memName,yyextra->classScope.data());
if (varName.isEmpty()) return;
// look for the variable in the current context
- const ClassDef *vcd = g_theVarContext.findVariable(varName);
+ const ClassDef *vcd = yyextra->theVarContext.findVariable(varName);
if (vcd)
{
if (vcd!=VariableContext::dummyContext)
{
//printf("Class found!\n");
- if (getLink(vcd->name(),memName,ol))
+ if (getLink(yyscanner,vcd->name(),memName,ol))
{
//printf("Found result!\n");
return;
@@ -1238,7 +3210,7 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
BaseClassListIterator bcli(*vcd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
- if (getLink(bcli.current()->classDef->name(),memName,ol))
+ if (getLink(yyscanner,bcli.current()->classDef->name(),memName,ol))
{
//printf("Found result!\n");
return;
@@ -1249,10 +3221,10 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
}
else // variable not in current context, maybe it is in a parent context
{
- vcd = getResolvedClass(g_currentDefinition,g_sourceFileDef,g_classScope);
+ vcd = getResolvedClass(yyextra->currentDefinition,yyextra->sourceFileDef,yyextra->classScope);
if (vcd && vcd->isLinkable())
{
- //printf("Found class %s for variable '%s'\n",g_classScope.data(),varName.data());
+ //printf("Found class %s for variable '%s'\n",yyextra->classScope.data(),varName.data());
MemberName *vmn=Doxygen::memberNameSDict->find(varName);
if (vmn==0)
{
@@ -1274,10 +3246,10 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
vmd->getClassDef()==jcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
- const ClassDef *mcd=stripClassName(vmd->typeString(),vmd->getOuterScope());
+ const ClassDef *mcd=stripClassName(yyscanner,vmd->typeString(),vmd->getOuterScope());
if (mcd && mcd->isLinkable())
{
- if (generateClassMemberLink(ol,mcd,memName)) return;
+ if (generateClassMemberLink(yyscanner,ol,mcd,memName)) return;
}
}
}
@@ -1295,10 +3267,10 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
vmd->getClassDef()==vcd)
{
//printf("Found variable type=%s\n",vmd->typeString());
- const ClassDef *mcd=stripClassName(vmd->typeString(),vmd->getOuterScope());
+ const ClassDef *mcd=stripClassName(yyscanner,vmd->typeString(),vmd->getOuterScope());
if (mcd && mcd->isLinkable())
{
- if (generateClassMemberLink(ol,mcd,memName)) return;
+ if (generateClassMemberLink(yyscanner,ol,mcd,memName)) return;
}
}
}
@@ -1306,29 +3278,31 @@ static void generateMemberLink(CodeOutputInterface &ol,const QCString &varName,
}
}
// nothing found -> write result as is
- codifyLines(memName);
- addToSearchIndex(memName);
+ codifyLines(yyscanner,memName);
+ addToSearchIndex(yyscanner,memName);
return;
}
-static void generatePHPVariableLink(CodeOutputInterface &ol,const char *varName)
+static void generatePHPVariableLink(yyscan_t yyscanner,CodeOutputInterface &ol,const char *varName)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
QCString name = varName+7; // strip $this->
name.prepend("$");
- //printf("generatePHPVariableLink(%s) name=%s scope=%s\n",varName,name.data(),g_classScope.data());
- if (!getLink(g_classScope,name,ol,varName))
+ //printf("generatePHPVariableLink(%s) name=%s scope=%s\n",varName,name.data(),yyextra->classScope.data());
+ if (!getLink(yyscanner,yyextra->classScope,name,ol,varName))
{
- codifyLines(varName);
+ codifyLines(yyscanner,varName);
}
}
-static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
+static void generateFunctionLink(yyscan_t yyscanner,CodeOutputInterface &ol,const char *funcName)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//CodeClassDef *ccd=0;
ClassDef *ccd=0;
- QCString locScope=g_classScope;
+ QCString locScope=yyextra->classScope;
QCString locFunc=removeRedundantWhiteSpace(funcName);
- if (g_insidePHP && locFunc.startsWith("self::")) locFunc=locFunc.mid(4);
+ if (yyextra->lang==SrcLangExt_PHP && locFunc.startsWith("self::")) locFunc=locFunc.mid(4);
QCString funcScope;
QCString funcWithScope=locFunc;
QCString funcWithFullScope=locFunc;
@@ -1336,15 +3310,15 @@ static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
DBG_CTX((stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data()));
int len=2;
int i=locFunc.findRev("::");
- if (g_currentMemberDef && g_currentMemberDef->resolveAlias()->getClassDef() &&
- funcName==g_currentMemberDef->localName() &&
- g_currentMemberDef->getDefLine()==g_yyLineNr &&
- generateClassMemberLink(ol,g_currentMemberDef,funcName)
+ if (yyextra->currentMemberDef && yyextra->currentMemberDef->resolveAlias()->getClassDef() &&
+ funcName==yyextra->currentMemberDef->localName() &&
+ yyextra->currentMemberDef->getDefLine()==yyextra->yyLineNr &&
+ generateClassMemberLink(yyscanner,ol,yyextra->currentMemberDef,funcName)
)
{
// special case where funcName is the name of a method that is also
// defined on this line. In this case we can directly link to
- // g_currentMemberDef, which is not only faster, but
+ // yyextra->currentMemberDef, which is not only faster, but
// in case of overloaded methods, this will make sure that we link to
// the correct method, and thereby get the correct reimplemented relations.
// See also bug 549022.
@@ -1385,49 +3359,50 @@ static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
funcWithFullScope = locScope+"::"+funcWithScope;
}
}
- if (!fullScope.isEmpty() && (ccd=g_codeClassSDict->find(fullScope)))
+ if (!fullScope.isEmpty() && (ccd=yyextra->codeClassSDict->find(fullScope)))
{
- //printf("using classScope %s\n",g_classScope.data());
+ //printf("using classScope %s\n",yyextra->classScope.data());
if (ccd->baseClasses())
{
BaseClassListIterator bcli(*ccd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
- if (getLink(bcli.current()->classDef->name(),locFunc,ol,funcName))
+ if (getLink(yyscanner,bcli.current()->classDef->name(),locFunc,ol,funcName))
{
goto exit;
}
}
}
}
- if (!locScope.isEmpty() && fullScope!=locScope && (ccd=g_codeClassSDict->find(locScope)))
+ if (!locScope.isEmpty() && fullScope!=locScope && (ccd=yyextra->codeClassSDict->find(locScope)))
{
- //printf("using classScope %s\n",g_classScope.data());
+ //printf("using classScope %s\n",yyextra->classScope.data());
if (ccd->baseClasses())
{
BaseClassListIterator bcli(*ccd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
- if (getLink(bcli.current()->classDef->name(),funcWithScope,ol,funcName))
+ if (getLink(yyscanner,bcli.current()->classDef->name(),funcWithScope,ol,funcName))
{
goto exit;
}
}
}
}
- if (!getLink(locScope,funcWithScope,ol,funcName))
+ if (!getLink(yyscanner,locScope,funcWithScope,ol,funcName))
{
- generateClassOrGlobalLink(ol,funcName);
+ generateClassOrGlobalLink(yyscanner,ol,funcName);
}
exit:
- g_forceTagReference.resize(0);
+ yyextra->forceTagReference.resize(0);
return;
}
/*! counts the number of lines in the input */
-static int countLines()
+static int countLines(yyscan_t yyscanner)
{
- const char *p=g_inputString;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ const char *p=yyextra->inputString;
char c;
int count=1;
while ((c=*p))
@@ -1435,37 +3410,40 @@ static int countLines()
p++ ;
if (c=='\n') count++;
}
- if (p>g_inputString && *(p-1)!='\n')
+ if (p>yyextra->inputString && *(p-1)!='\n')
{ // last line does not end with a \n, so we add an extra
// line and explicitly terminate the line after parsing.
count++,
- g_needsTermination=TRUE;
+ yyextra->needsTermination=TRUE;
}
return count;
}
-static void endFontClass()
+static void endFontClass(yyscan_t yyscanner)
{
- if (g_currentFontClass)
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->currentFontClass)
{
- g_code->endFontClass();
- g_currentFontClass=0;
+ yyextra->code->endFontClass();
+ yyextra->currentFontClass=0;
}
}
-static void startFontClass(const char *s)
+static void startFontClass(yyscan_t yyscanner,const char *s)
{
- endFontClass();
- g_code->startFontClass(s);
- g_currentFontClass=s;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ endFontClass(yyscanner);
+ yyextra->code->startFontClass(s);
+ yyextra->currentFontClass=s;
}
//----------------------------------------------------------------------------
// recursively writes a linkified Objective-C method call
-static void writeObjCMethodCall(ObjCCallCtx *ctx)
+static void writeObjCMethodCall(yyscan_t yyscanner,ObjCCallCtx *ctx)
{
if (ctx==0) return;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
char c;
const char *p = ctx->format.data();
if (!ctx->methodName.isEmpty())
@@ -1476,22 +3454,22 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
{
//printf("Looking for object=%s method=%s\n",ctx->objectTypeOrName.data(),
// ctx->methodName.data());
- ClassDef *cd = g_theVarContext.findVariable(ctx->objectTypeOrName);
+ ClassDef *cd = yyextra->theVarContext.findVariable(ctx->objectTypeOrName);
if (cd==0) // not a local variable
{
if (ctx->objectTypeOrName=="self")
{
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
+ if (yyextra->currentDefinition &&
+ yyextra->currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectType = dynamic_cast<ClassDef *>(g_currentDefinition);
+ ctx->objectType = dynamic_cast<ClassDef *>(yyextra->currentDefinition);
}
}
else
{
ctx->objectType = getResolvedClass(
- g_currentDefinition,
- g_sourceFileDef,
+ yyextra->currentDefinition,
+ yyextra->sourceFileDef,
ctx->objectTypeOrName,
&ctx->method);
}
@@ -1504,15 +3482,15 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
else if (ctx->method==0) // search for class variable with the same name
{
//printf(" no\n");
- //printf("g_currentDefinition=%p\n",g_currentDefinition);
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
+ //printf("yyextra->currentDefinition=%p\n",yyextra->currentDefinition);
+ if (yyextra->currentDefinition &&
+ yyextra->currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectVar = (dynamic_cast<ClassDef *>(g_currentDefinition))->getMemberByName(ctx->objectTypeOrName);
+ ctx->objectVar = (dynamic_cast<ClassDef *>(yyextra->currentDefinition))->getMemberByName(ctx->objectTypeOrName);
//printf(" ctx->objectVar=%p\n",ctx->objectVar);
if (ctx->objectVar)
{
- ctx->objectType = stripClassName(ctx->objectVar->typeString());
+ ctx->objectType = stripClassName(yyscanner,ctx->objectVar->typeString(),yyextra->currentDefinition);
//printf(" ctx->objectType=%p\n",ctx->objectType);
if (ctx->objectType && !ctx->methodName.isEmpty())
{
@@ -1543,7 +3521,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
char nc=*p++;
if (nc=='$') // escaped $
{
- g_code->codify("$");
+ yyextra->code->codify("$");
}
else // name fragment or reference to a nested call
{
@@ -1554,20 +3532,20 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
p--;
int refId=refIdStr.toInt();
- QCString *pName = g_nameDict.find(refId);
+ QCString *pName = yyextra->nameDict.find(refId);
if (pName)
{
if (ctx->method && ctx->method->isLinkable())
{
- writeMultiLineCodeLink(*g_code,ctx->method,pName->data());
- if (g_currentMemberDef && g_collectXRefs)
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,ctx->method,pName->data());
+ if (yyextra->currentMemberDef && yyextra->collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,const_cast<MemberDef*>(ctx->method));
+ addDocCrossReference(yyextra->currentMemberDef,const_cast<MemberDef*>(ctx->method));
}
}
else
{
- codifyLines(pName->data());
+ codifyLines(yyscanner,pName->data());
}
}
else
@@ -1582,15 +3560,15 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
p--;
int refId=refIdStr.toInt();
- QCString *pObject = g_objectDict.find(refId);
+ QCString *pObject = yyextra->objectDict.find(refId);
if (pObject)
{
if (*pObject=="self")
{
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
+ if (yyextra->currentDefinition &&
+ yyextra->currentDefinition->definitionType()==Definition::TypeClass)
{
- ctx->objectType = dynamic_cast<ClassDef *>(g_currentDefinition);
+ ctx->objectType = dynamic_cast<ClassDef *>(yyextra->currentDefinition);
if (ctx->objectType->categoryOf())
{
ctx->objectType = ctx->objectType->categoryOf();
@@ -1600,16 +3578,16 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
}
}
- startFontClass("keyword");
- codifyLines(pObject->data());
- endFontClass();
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,pObject->data());
+ endFontClass(yyscanner);
}
else if (*pObject=="super")
{
- if (g_currentDefinition &&
- g_currentDefinition->definitionType()==Definition::TypeClass)
+ if (yyextra->currentDefinition &&
+ yyextra->currentDefinition->definitionType()==Definition::TypeClass)
{
- ClassDef *cd = dynamic_cast<ClassDef *>(g_currentDefinition);
+ ClassDef *cd = dynamic_cast<ClassDef *>(yyextra->currentDefinition);
if (cd->categoryOf())
{
cd = cd->categoryOf();
@@ -1632,16 +3610,16 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
}
}
}
- startFontClass("keyword");
- codifyLines(pObject->data());
- endFontClass();
+ startFontClass(yyscanner,"keyword");
+ codifyLines(yyscanner,pObject->data());
+ endFontClass(yyscanner);
}
else if (ctx->objectVar && ctx->objectVar->isLinkable()) // object is class variable
{
- writeMultiLineCodeLink(*g_code,ctx->objectVar,pObject->data());
- if (g_currentMemberDef && g_collectXRefs)
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,ctx->objectVar,pObject->data());
+ if (yyextra->currentMemberDef && yyextra->collectXRefs)
{
- addDocCrossReference(g_currentMemberDef,const_cast<MemberDef*>(ctx->objectVar));
+ addDocCrossReference(yyextra->currentMemberDef,const_cast<MemberDef*>(ctx->objectVar));
}
}
else if (ctx->objectType &&
@@ -1650,20 +3628,20 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
) // object is class name
{
const ClassDef *cd = ctx->objectType;
- writeMultiLineCodeLink(*g_code,cd,pObject->data());
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,cd,pObject->data());
}
else // object still needs to be resolved
{
- const ClassDef *cd = getResolvedClass(g_currentDefinition,
- g_sourceFileDef, *pObject);
+ const ClassDef *cd = getResolvedClass(yyextra->currentDefinition,
+ yyextra->sourceFileDef, *pObject);
if (cd && cd->isLinkable())
{
if (ctx->objectType==0) ctx->objectType=cd;
- writeMultiLineCodeLink(*g_code,cd,pObject->data());
+ writeMultiLineCodeLink(yyscanner,*yyextra->code,cd,pObject->data());
}
else
{
- codifyLines(pObject->data());
+ codifyLines(yyscanner,pObject->data());
}
}
}
@@ -1679,10 +3657,10 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
p--;
int refId=refIdStr.toInt();
- ObjCCallCtx *ictx = g_contextDict.find(refId);
+ ObjCCallCtx *ictx = yyextra->contextDict.find(refId);
if (ictx) // recurse into nested call
{
- writeObjCMethodCall(ictx);
+ writeObjCMethodCall(yyscanner,ictx);
if (ictx->method) // link to nested call successfully
{
// get the ClassDef representing the method's return type
@@ -1701,7 +3679,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
}
else
{
- ctx->objectType = stripClassName(ictx->method->typeString());
+ ctx->objectType = stripClassName(yyscanner,ictx->method->typeString(),yyextra->currentDefinition);
if (ctx->objectType && !ctx->methodName.isEmpty())
{
ctx->method = ctx->objectType->getMemberByName(ctx->methodName);
@@ -1722,10 +3700,10 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
p--;
int refId=refIdStr.toInt();
- QCString *pWord = g_wordDict.find(refId);
+ QCString *pWord = yyextra->wordDict.find(refId);
if (pWord)
{
- codifyLines(pWord->data());
+ codifyLines(yyscanner,pWord->data());
}
}
else if (nc=='d') // comment block
@@ -1735,12 +3713,12 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
while (nc!=0 && isdigit(nc)) { refIdStr+=nc; nc=*p++; }
p--;
int refId=refIdStr.toInt();
- QCString *pComment = g_commentDict.find(refId);
+ QCString *pComment = yyextra->commentDict.find(refId);
if (pComment)
{
- startFontClass("comment");
- codifyLines(pComment->data());
- endFontClass();
+ startFontClass(yyscanner,"comment");
+ codifyLines(yyscanner,pComment->data());
+ endFontClass(yyscanner);
}
}
else // illegal marker
@@ -1753,7 +3731,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
{
char s[2];
s[0]=c;s[1]=0;
- codifyLines(s);
+ codifyLines(yyscanner,s);
}
}
//printf("%s %s]\n",ctx->objectTypeOrName.data(),ctx->methodName.data());
@@ -1764,46 +3742,51 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
// Replaces an Objective-C method name fragment s by a marker of the form
// $n12, the number (12) can later be used as a key for obtaining the name
-// fragment, from g_nameDict
-static QCString escapeName(const char *s)
+// fragment, from yyextra->nameDict
+static QCString escapeName(yyscan_t yyscanner,const char *s)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
QCString result;
- result.sprintf("$n%d",g_currentNameId);
- g_nameDict.insert(g_currentNameId,new QCString(s));
- g_currentNameId++;
+ result.sprintf("$n%d",yyextra->currentNameId);
+ yyextra->nameDict.insert(yyextra->currentNameId,new QCString(s));
+ yyextra->currentNameId++;
return result;
}
-static QCString escapeObject(const char *s)
+static QCString escapeObject(yyscan_t yyscanner,const char *s)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
QCString result;
- result.sprintf("$o%d",g_currentObjId);
- g_objectDict.insert(g_currentObjId,new QCString(s));
- g_currentObjId++;
+ result.sprintf("$o%d",yyextra->currentObjId);
+ yyextra->objectDict.insert(yyextra->currentObjId,new QCString(s));
+ yyextra->currentObjId++;
return result;
}
-static QCString escapeWord(const char *s)
+static QCString escapeWord(yyscan_t yyscanner,const char *s)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
QCString result;
- result.sprintf("$w%d",g_currentWordId);
- g_wordDict.insert(g_currentWordId,new QCString(s));
- g_currentWordId++;
+ result.sprintf("$w%d",yyextra->currentWordId);
+ yyextra->wordDict.insert(yyextra->currentWordId,new QCString(s));
+ yyextra->currentWordId++;
return result;
}
-static QCString escapeComment(const char *s)
+static QCString escapeComment(yyscan_t yyscanner,const char *s)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
QCString result;
- result.sprintf("$d%d",g_currentCommentId);
- g_commentDict.insert(g_currentCommentId,new QCString(s));
- g_currentCommentId++;
+ result.sprintf("$d%d",yyextra->currentCommentId);
+ yyextra->commentDict.insert(yyextra->currentCommentId,new QCString(s));
+ yyextra->currentCommentId++;
return result;
}
-static bool skipLanguageSpecificKeyword(const QCString &kw)
+static bool skipLanguageSpecificKeyword(yyscan_t yyscanner,const QCString &kw)
{
- return g_insideCpp && (kw == "remove" || kw == "set" || kw == "get");
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ return yyextra->lang==SrcLangExt_Cpp && (kw == "remove" || kw == "set" || kw == "get");
}
static bool isCastKeyword(const QCString &s)
@@ -1814,1962 +3797,117 @@ static bool isCastKeyword(const QCString &s)
return kw=="const_cast" || kw=="static_cast" || kw=="dynamic_cast" || kw=="reinterpret_cast";
}
-/* -----------------------------------------------------------------
- */
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
+static int yyread(yyscan_t yyscanner,char *buf,int max_size)
{
- int c=0;
- while( c < max_size && g_inputString[g_inputPosition] )
- {
- *buf = g_inputString[g_inputPosition++] ;
- c++; buf++;
- }
- return c;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ int inputPosition = yyextra->inputPosition;
+ const char *s = yyextra->inputString + yyextra->inputPosition;
+ int c=0;
+ while( c < max_size && *s )
+ {
+ *buf++ = *s++;
+ c++;
+ }
+ yyextra->inputPosition += c;
+ return c;
}
-%}
-
-B [ \t]
-BN [ \t\n\r]
-ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-SEP ("::"|"\\")
-SCOPENAME ({SEP}{BN}*)?({ID}{BN}*{SEP}{BN}*)*("~"{BN}*)?{ID}
-TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
-SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID})
-SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
-KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
-KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"set"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"null"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|"alignas"|"alignof"|{KEYWORD_OBJC})
-FLOWKW ("break"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"return"|"switch"|"throw"|"throws"|"@catch"|"@finally")
-FLOWCONDITION ("case"|"for"|"foreach"|"for each"|"goto"|"if"|"try"|"while"|"@try")
-TYPEKW ("bool"|"byte"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string"|"nullptr")
-TYPEKWSL ("LocalObject"|"Object"|"Value")
-CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
-CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
-ARITHOP "+"|"-"|"/"|"*"|"%"|"--"|"++"
-ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
-LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
-BITOP "&"|"|"|"^"|"<<"|">>"|"~"
-OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
-RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
-RAWEND ")"[^ \t\(\)\\]{0,16}\"
-
-%option noyywrap
-
-%x SkipString
-%x SkipStringS
-%x SkipVerbString
-%x SkipCPP
-%x SkipComment
-%x SkipCxxComment
-%x RemoveSpecialCComment
-%x StripSpecialCComment
-%x Body
-%x FuncCall
-%x MemberCall
-%x MemberCall2
-%x SkipInits
-%x ClassName
-%x AlignAs
-%x AlignAsEnd
-%x PackageName
-%x ClassVar
-%x CppCliTypeModifierFollowup
-%x Bases
-%x SkipSharp
-%x ReadInclude
-%x TemplDecl
-%x TemplCast
-%x CallEnd
-%x ObjCMethod
-%x ObjCParams
-%x ObjCParamType
-%x ObjCCall
-%x ObjCMName
-%x ObjCSkipStr
-%x ObjCCallComment
-%x OldStyleArgs
-%x UsingName
-%x RawString
-%x InlineInit
-
-%%
-
-<*>\x0d
-<Body>^([ \t]*"#"[ \t]*("include"|"import")[ \t]*)("<"|"\"") {
- startFontClass("preprocessor");
- g_code->codify(yytext);
- BEGIN( ReadInclude );
- }
-<Body>("@interface"|"@implementation"|"@protocol")[ \t\n]+ {
- g_insideObjC=TRUE;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- if (!g_insideTemplate)
- BEGIN( ClassName );
- }
-<Body>(("public"|"private"){B}+)?("ref"|"value"|"interface"|"enum"){B}+("class"|"struct") {
- if (g_insideTemplate) REJECT;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( ClassName );
- }
-<Body>"property"|"event"/{BN}* {
- if (g_insideTemplate) REJECT;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<Body>(KEYWORD_CPPCLI_DATATYPE|("partial"{B}+)?"class"|"struct"|"union"|"namespace"|"interface"){B}+ {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- if (!g_insideTemplate)
- BEGIN( ClassName );
- }
-<Body>("package")[ \t\n]+ {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( PackageName );
- }
-<ClassVar>\n {
- if (!g_insideObjC) REJECT;
- codifyLines(yytext);
- BEGIN(Body);
- }
-<Body,ClassVar,Bases>"-"|"+" {
- if (!g_insideObjC || g_insideBody)
- {
- g_code->codify(yytext);
- }
- else // Start of Objective-C method
- {
- //printf("Method!\n");
- g_code->codify(yytext);
- BEGIN(ObjCMethod);
- }
- }
-<ObjCMethod>":" {
- g_code->codify(yytext);
- BEGIN(ObjCParams);
- }
-<ObjCParams>"(" {
- g_code->codify(yytext);
- BEGIN(ObjCParamType);
- }
-<ObjCParams,ObjCMethod>";"|"{" {
- g_code->codify(yytext);
- if (*yytext=='{')
- {
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- if (!g_curClassName.isEmpty()) // valid class name
- {
- pushScope(g_curClassName);
- DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
- g_scopeStack.push(SCOPEBLOCK);
- }
- }
- g_type.resize(0);
- g_name.resize(0);
- BEGIN(Body);
- }
-<ObjCParams>{ID}{B}*":" {
- g_code->codify(yytext);
- }
-<ObjCParamType>{TYPEKW} {
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- g_parmType=yytext;
- }
-<ObjCParamType>{ID} {
- generateClassOrGlobalLink(*g_code,yytext);
- g_parmType=yytext;
- }
-<ObjCParamType>")" {
- g_code->codify(yytext);
- BEGIN(ObjCParams);
- }
-<ObjCParams>{ID} {
- g_code->codify(yytext);
- g_parmName=yytext;
- g_theVarContext.addVariable(g_parmType,g_parmName);
- g_parmType.resize(0);g_parmName.resize(0);
- }
-<ObjCMethod,ObjCParams,ObjCParamType>{ID} {
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<ObjCMethod,ObjCParams,ObjCParamType>. {
- g_code->codify(yytext);
- }
-<ObjCMethod,ObjCParams,ObjCParamType>\n {
- codifyLines(yytext);
- }
-<ReadInclude>[^\n\"\>]+/(">"|"\"") {
- //FileInfo *f;
- bool ambig;
- bool found=FALSE;
- //QCString absPath = yytext;
- //if (g_sourceFileDef && QDir::isRelativePath(absPath))
- //{
- // absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath);
- //}
-
- FileDef *fd=findFileDef(Doxygen::inputNameDict,yytext,ambig);
- //printf("looking for include %s -> %s fd=%p\n",yytext,absPath.data(),fd);
- if (fd && fd->isLinkable())
- {
- if (ambig) // multiple input files match the name
- {
- //printf("===== yes %s is ambiguous\n",yytext);
- QCString name = QDir::cleanDirPath(yytext).utf8();
- if (!name.isEmpty() && g_sourceFileDef)
- {
- FileName *fn = Doxygen::inputNameDict->find(name);
- if (fn)
- {
- FileNameIterator fni(*fn);
- // for each include name
- for (fni.toFirst();!found && (fd=fni.current());++fni)
- {
- // see if this source file actually includes the file
- found = g_sourceFileDef->isIncluded(fd->absFilePath());
- //printf(" include file %s found=%d\n",fd->absFilePath().data(),found);
- }
- }
- }
- }
- else // not ambiguous
- {
- found = TRUE;
- }
- }
- //printf(" include file %s found=%d\n",fd ? fd->absFilePath().data() : "<none>",found);
- if (found)
- {
- writeMultiLineCodeLink(*g_code,fd,yytext);
- }
- else
- {
- g_code->codify(yytext);
- }
- char c=yyinput();
- QCString text;
- text+=c;
- g_code->codify(text);
- endFontClass();
- BEGIN( Body );
- }
-<Body,Bases>^[ \t]*"#" {
- startFontClass("preprocessor");
- g_lastSkipCppContext = YY_START;
- g_code->codify(yytext);
- BEGIN( SkipCPP ) ;
- }
-<SkipCPP>. {
- g_code->codify(yytext);
- }
-<SkipCPP>[^\n\/\\]+ {
- g_code->codify(yytext);
- }
-<SkipCPP>\\[\r]?\n {
- codifyLines(yytext);
- }
-<SkipCPP>"//" {
- g_code->codify(yytext);
- }
-<Body,FuncCall>"{" {
- g_theVarContext.pushScope();
-
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
-
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- g_code->codify(yytext);
- if (g_insideBody)
- {
- g_bodyCurlyCount++;
- }
- g_type.resize(0);
- g_name.resize(0);
- BEGIN( Body );
- }
-<Body,FuncCall,MemberCall,MemberCall2>"}" {
- g_theVarContext.popScope();
- g_type.resize(0);
- g_name.resize(0);
-
- int *scope = g_scopeStack.pop();
- DBG_CTX((stderr,"** scope stack pop SCOPEBLOCK=%d\n",scope==SCOPEBLOCK));
- if (scope==SCOPEBLOCK || scope==CLASSBLOCK)
- {
- popScope();
- }
-
- g_code->codify(yytext);
-
- DBG_CTX((stderr,"g_bodyCurlyCount=%d\n",g_bodyCurlyCount));
- if (--g_bodyCurlyCount<=0)
- {
- g_insideBody=FALSE;
- g_currentMemberDef=0;
- if (g_currentDefinition)
- g_currentDefinition=g_currentDefinition->getOuterScope();
- }
- BEGIN(Body);
- }
-<Body,ClassVar>"@end" {
- //printf("End of objc scope fd=%s\n",g_sourceFileDef->name().data());
- if (g_sourceFileDef)
- {
- FileDef *fd=g_sourceFileDef;
- g_insideObjC = fd->name().lower().right(2)==".m" ||
- fd->name().lower().right(3)==".mm";
- //printf("insideObjC=%d\n",g_insideObjC);
- }
- else
- {
- g_insideObjC = FALSE;
- }
- if (g_insideBody)
- {
- g_theVarContext.popScope();
-
- int *scope = g_scopeStack.pop();
- DBG_CTX((stderr,"** scope stack pop SCOPEBLOCK=%d\n",scope==SCOPEBLOCK));
- if (scope==SCOPEBLOCK || scope==CLASSBLOCK)
- {
- popScope();
- }
- g_insideBody=FALSE;
- }
-
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
-
- g_currentMemberDef=0;
- if (g_currentDefinition)
- g_currentDefinition=g_currentDefinition->getOuterScope();
- BEGIN(Body);
- }
-<ClassName,ClassVar>";" {
- g_code->codify(yytext);
- g_searchingForBody=FALSE;
- BEGIN( Body );
- }
-<ClassName,ClassVar>[*&^%]+ {
- g_type=g_curClassName.copy();
- g_name.resize(0);
- g_code->codify(yytext);
- BEGIN( Body ); // variable of type struct *
- }
-<ClassName>"__declspec"{B}*"("{B}*{ID}{B}*")" {
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
-<ClassName>{ID}("."{ID})* |
-<ClassName>{ID}("::"{ID})* {
- if(g_insideCS)
- g_curClassName=substitute(yytext,".","::");
- else
- g_curClassName=yytext;
- addType();
- if (g_curClassName=="alignas")
- {
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- BEGIN( AlignAs );
- }
- else
- {
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( ClassVar );
- }
- }
-<AlignAs>"(" {
- g_bracketCount=1;
- g_code->codify(yytext);
- BEGIN( AlignAsEnd );
- }
-<AlignAs>\n { g_yyLineNr++;
- codifyLines(yytext);
- }
-<AlignAs>. { g_code->codify(yytext); }
-<AlignAsEnd>"(" { g_code->codify(yytext);
- g_bracketCount++;
- }
-<AlignAsEnd>")" {
- g_code->codify(yytext);
- if (--g_bracketCount<=0)
- {
- BEGIN(ClassName);
- }
- }
-<AlignAsEnd>\n { g_yyLineNr++;
- codifyLines(yytext);
- }
-<AlignAsEnd>. { g_code->codify(yytext); }
-<ClassName>{ID}("\\"{ID})* { // PHP namespace
- g_curClassName=substitute(yytext,"\\","::");
- g_scopeStack.push(CLASSBLOCK);
- pushScope(g_curClassName);
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( ClassVar );
- }
-<ClassName>{ID}{B}*"("{ID}")" { // Obj-C category
- g_curClassName=removeRedundantWhiteSpace(yytext);
- g_scopeStack.push(CLASSBLOCK);
- pushScope(g_curClassName);
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( ClassVar );
- }
-<PackageName>{ID}("."{ID})* {
- g_curClassName=substitute(yytext,".","::");
- //printf("found package: %s\n",g_curClassName.data());
- addType();
- codifyLines(yytext);
- }
-<ClassVar>"=" {
- unput(*yytext);
- BEGIN( Body );
- }
-<ClassVar>("extends"|"implements") { // Java, Slice
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_curClassBases.clear();
- BEGIN( Bases );
- }
-<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") {
- DBG_CTX((stderr,"***** C++/CLI modifier %s on g_curClassName=%s\n",yytext,g_curClassName.data()));
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( CppCliTypeModifierFollowup );
- }
-<ClassVar>{ID} {
- g_type = g_curClassName.copy();
- g_name = yytext;
- if (g_insideBody)
- {
- g_theVarContext.addVariable(g_type,g_name);
- }
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*":"{B}* {
- codifyLines(yytext);
- g_curClassBases.clear();
- BEGIN( Bases );
- }
-<PackageName>[ \t]*";" |
-<Bases>^{B}*/"@"{ID} | // Objective-C interface
-<Bases,ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*"{"{B}* {
- g_theVarContext.pushScope();
- g_code->codify(yytext);
- if (YY_START==ClassVar && g_curClassName.isEmpty())
- {
- g_curClassName = g_name.copy();
- }
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- if (!g_curClassName.isEmpty()) // valid class name
- {
- DBG_CTX((stderr,"** scope stack push CLASSBLOCK\n"));
- g_scopeStack.push(CLASSBLOCK);
- pushScope(g_curClassName);
- DBG_CTX((stderr,"***** g_curClassName=%s\n",g_curClassName.data()));
- if (getResolvedClass(g_currentDefinition,g_sourceFileDef,g_curClassName)==0)
- {
- DBG_CTX((stderr,"Adding new class %s\n",g_curClassName.data()));
- ClassDef *ncd=createClassDef("<code>",1,1,
- g_curClassName,ClassDef::Class,0,0,FALSE);
- g_codeClassSDict->append(g_curClassName,ncd);
- // insert base classes.
- char *s=g_curClassBases.first();
- while (s)
- {
- const ClassDef *bcd=g_codeClassSDict->find(s);
- if (bcd==0) bcd=getResolvedClass(g_currentDefinition,g_sourceFileDef,s);
- if (bcd && bcd!=ncd)
- {
- ncd->insertBaseClass(const_cast<ClassDef*>(bcd),s,Public,Normal);
- }
- s=g_curClassBases.next();
- }
- }
- //printf("g_codeClassList.count()=%d\n",g_codeClassList.count());
- }
- else // not a class name -> assume inner block
- {
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
- }
- g_curClassName.resize(0);
- g_curClassBases.clear();
- BEGIN( Body );
- }
-<Bases>"virtual"|"public"|"protected"|"private"|"@public"|"@private"|"@protected" {
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
-<Bases>{SEP}?({ID}{SEP})*{ID} {
- DBG_CTX((stderr,"%s:addBase(%s)\n",g_curClassName.data(),yytext));
- g_curClassBases.inSort(yytext);
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<Bases>"<" {
- g_code->codify(yytext);
- if (!g_insideObjC)
- {
- g_sharpCount=1;
- BEGIN ( SkipSharp );
- }
- else
- {
- g_insideProtocolList=TRUE;
- }
- }
-<Bases>">" {
- g_code->codify(yytext);
- g_insideProtocolList=FALSE;
- }
-<SkipSharp>"<" {
- g_code->codify(yytext);
- ++g_sharpCount;
- }
-<SkipSharp>">" {
- g_code->codify(yytext);
- if (--g_sharpCount<=0)
- BEGIN ( Bases );
- }
-<Bases>"(" {
- g_code->codify(yytext);
- g_sharpCount=1;
- BEGIN ( SkipSharp );
- }
-<SkipSharp>"(" {
- g_code->codify(yytext);
- ++g_sharpCount;
- }
-<SkipSharp>")" {
- g_code->codify(yytext);
- if (--g_sharpCount<=0)
- BEGIN ( Bases );
- }
-
-
-<Bases>"," {
- g_code->codify(yytext);
- }
-
-
-<Body>{SCOPEPREFIX}?"operator"{B}*"()"{B}*/"(" {
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<Body>{SCOPEPREFIX}?"operator"/"(" {
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<Body>{SCOPEPREFIX}?"operator"[^a-z_A-Z0-9\(\n]+/"(" {
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<Body,TemplDecl>("template"|"generic")/([^a-zA-Z0-9]) {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_insideTemplate=TRUE;
- g_sharpCount=0;
- }
-<Body>"using"{BN}+"namespace"{BN}+ {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN(UsingName);
- }
-<UsingName>{ID}("::"{ID})* { addUsingDirective(yytext);
- generateClassOrGlobalLink(*g_code,yytext);
- DBG_CTX((stderr,"** scope stack push CLASSBLOCK\n"));
- g_scopeStack.push(CLASSBLOCK);
- pushScope(yytext);
- BEGIN(Body);
- }
-<UsingName>\n { codifyLines(yytext); BEGIN(Body); }
-<UsingName>. { codifyLines(yytext); BEGIN(Body); }
-<Body,FuncCall>"$"?"this"("->"|".") { g_code->codify(yytext); // this-> for C++, this. for C#
- g_prefixed_with_this_keyword = TRUE;
- }
-<Body>{KEYWORD}/([^a-z_A-Z0-9]) {
- if (g_insideJava && qstrcmp("internal",yytext) ==0) REJECT;
- if (skipLanguageSpecificKeyword(yytext)) REJECT;
- startFontClass("keyword");
- codifyLines(yytext);
- if (QCString(yytext)=="typedef")
- {
- addType();
- g_name+=yytext;
- }
- endFontClass();
- }
-<Body>{KEYWORD}/{B}* {
- if (skipLanguageSpecificKeyword(yytext)) REJECT;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<Body>{KEYWORD}/{BN}*"(" {
- if (skipLanguageSpecificKeyword(yytext)) REJECT;
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_name.resize(0);g_type.resize(0);
- }
-<FuncCall>"in"/{BN}* {
- if (!g_inForEachExpression) REJECT;
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- // insert the variable in the parent scope, see bug 546158
- g_theVarContext.popScope();
- g_theVarContext.addVariable(g_parmType,g_parmName);
- g_theVarContext.pushScope();
- g_name.resize(0);g_type.resize(0);
- }
-<Body>{FLOWKW}/{BN}*"(" {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- g_name.resize(0);g_type.resize(0);
- g_inForEachExpression = (qstrcmp(yytext,"for each")==0 || qstrcmp(yytext, "foreach")==0);
- BEGIN(FuncCall);
- }
-<Body>{FLOWCONDITION}/{BN}*"(" {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->incrementFlowKeyWordCount();
- }
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- g_name.resize(0);g_type.resize(0);
- g_inForEachExpression = (strcmp(yytext,"for each")==0 || strcmp(yytext, "foreach")==0);
- BEGIN(FuncCall);
- }
-<Body>{FLOWKW}/([^a-z_A-Z0-9]) {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- if (g_inFunctionTryBlock && (qstrcmp(yytext,"catch")==0 || qstrcmp(yytext,"finally")==0))
- {
- g_inFunctionTryBlock=FALSE;
- }
- }
-<Body>{FLOWCONDITION}/([^a-z_A-Z0-9]) {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->incrementFlowKeyWordCount();
- }
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- if (g_inFunctionTryBlock && (strcmp(yytext,"catch")==0 || strcmp(yytext,"finally")==0))
- {
- g_inFunctionTryBlock=FALSE;
- }
- }
-<Body>{FLOWKW}/{B}* {
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- }
-<Body>{FLOWCONDITION}/{B}* {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->incrementFlowKeyWordCount();
- }
- startFontClass("keywordflow");
- codifyLines(yytext);
- endFontClass();
- }
-<Body>"*"{B}*")" { // end of cast?
- g_code->codify(yytext);
- g_theCallContext.popScope(g_name, g_type);
- g_bracketCount--;
- g_parmType = g_name;
- BEGIN(FuncCall);
- }
-<Body>[\\|\)\+\-\/\%\~\!] {
- g_code->codify(yytext);
- g_name.resize(0);g_type.resize(0);
- if (*yytext==')')
- {
- g_theCallContext.popScope(g_name, g_type);
- g_bracketCount--;
- BEGIN(FuncCall);
- }
- }
-<Body,TemplDecl,ObjCMethod>{TYPEKW}/{B}* {
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- addType();
- g_name+=yytext;
- }
-<Body,TemplDecl,ObjCMethod>{TYPEKWSL}/{B}* {
- if (!g_insideSlice)
- {
- REJECT;
- }
- else
- {
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- addType();
- g_name+=yytext;
- }
- }
-<Body>"generic"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* {
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- g_sharpCount=0;
- BEGIN(TemplDecl);
- }
-<Body>"template"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* { // template<...>
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- g_sharpCount=0;
- BEGIN(TemplDecl);
- }
-<TemplDecl>"class"|"typename" {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<TemplDecl>"<" {
- g_code->codify(yytext);
- g_sharpCount++;
- }
-<TemplDecl>">" {
- g_code->codify(yytext);
- g_sharpCount--;
- if (g_sharpCount<=0)
- {
- BEGIN(Body);
- }
- }
-<TemplCast>">" {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- BEGIN( g_lastTemplCastContext );
- }
-<TemplCast>{ID}("::"{ID})* {
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<TemplCast>("const"|"volatile"){B}* {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<TemplCast>[*^]* {
- codifyLines(yytext);
- }
-<Body,MemberCall2,FuncCall>{CASTKW}{B}*"<" { // static_cast<T>(
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- g_lastTemplCastContext = YY_START;
- BEGIN(TemplCast);
- }
-<Body>"$this->"{SCOPENAME}/{BN}*[;,)\]] { // PHP member variable
- addType();
- generatePHPVariableLink(*g_code,yytext);
- g_name+=yytext+7;
- }
-<Body,TemplCast>{SCOPENAME}{B}*"<"[^\n\/\-\.\{\"\>\(]*">"("::"{ID})*/{B}* { // A<T> *pt;
- if (isCastKeyword(yytext) && YY_START==Body)
- {
- REJECT;
- }
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- g_name+=yytext;
- }
-<Body>{SCOPENAME}/{BN}*[:;,)\]] { // "int var;" or "var, var2" or "debug(f) macro" , or int var : 5;
- addType();
- // changed this to generateFunctionLink, see bug 624514
- //generateClassOrGlobalLink(*g_code,yytext,FALSE,TRUE);
- generateFunctionLink(*g_code,yytext);
- g_name+=yytext;
- }
-<Body>{SCOPENAME}/{B}* { // p->func()
- addType();
- generateClassOrGlobalLink(*g_code,yytext);
- g_name+=yytext;
- }
-<Body>"("{B}*("*"{B}*)+{SCOPENAME}*{B}*")"/{B}* { // (*p)->func() but not "if (p) ..."
- g_code->codify(yytext);
- int s=0;while (s<(int)yyleng && !isId(yytext[s])) s++;
- int e=(int)yyleng-1;while (e>=0 && !isId(yytext[e])) e--;
- QCString varname = ((QCString)yytext).mid(s,e-s+1);
- addType();
- g_name=varname;
- }
-<Body>{SCOPETNAME}{B}*"<"[^\n\/\-\.\{\"\>]*">"/{BN}*"(" |
-<Body>{SCOPETNAME}/{BN}*"(" { // a() or c::a() or t<A,B>::a() or A\B\foo()
- if (isCastKeyword(yytext))
- {
- REJECT;
- }
- addType();
- generateFunctionLink(*g_code,yytext);
- g_bracketCount=0;
- g_args.resize(0);
- g_name+=yytext;
- BEGIN( FuncCall );
- }
-<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>{RAWBEGIN} {
- QCString text=yytext;
- int i=text.find('R');
- g_code->codify(text.left(i+1));
- startFontClass("stringliteral");
- g_code->codify(yytext+i+1);
- g_lastStringContext=YY_START;
- g_inForEachExpression = FALSE;
- g_delimiter = yytext+i+2;
- g_delimiter=g_delimiter.left(g_delimiter.length()-1);
- BEGIN( RawString );
- }
-<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>\" {
- startFontClass("stringliteral");
- g_code->codify(yytext);
- g_lastStringContext=YY_START;
- g_inForEachExpression = FALSE;
- BEGIN( SkipString );
- }
-<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>\' {
- startFontClass("stringliteral");
- g_code->codify(yytext);
- g_lastStringContext=YY_START;
- g_inForEachExpression = FALSE;
- BEGIN( SkipStringS );
- }
-<SkipString>[^\"\\\r\n]* {
- g_code->codify(yytext);
- }
-<SkipStringS>[^\'\\\r\n]* {
- g_code->codify(yytext);
- }
-<SkipString,SkipStringS>"//"|"/*" {
- g_code->codify(yytext);
- }
-<SkipString>@?\" {
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastStringContext );
- }
-<SkipStringS>\' {
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastStringContext );
- }
-<SkipString,SkipStringS>\\. {
- g_code->codify(yytext);
- }
-<RawString>{RAWEND} {
- g_code->codify(yytext);
- QCString delimiter = yytext+1;
- delimiter=delimiter.left(delimiter.length()-1);
- if (delimiter==g_delimiter)
- {
- BEGIN( g_lastStringContext );
- }
- }
-<RawString>[^)\n]+ { g_code->codify(yytext); }
-<RawString>. { g_code->codify(yytext); }
-<RawString>\n { codifyLines(yytext); }
-<SkipVerbString>[^"\n]+ {
- g_code->codify(yytext);
- }
-<SkipVerbString>\"\" { // escaped quote
- g_code->codify(yytext);
- }
-<SkipVerbString>\" { // end of string
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastVerbStringContext );
- }
-<SkipVerbString>. {
- g_code->codify(yytext);
- }
-<SkipVerbString>\n {
- codifyLines(yytext);
- }
-<Body>":" {
- g_code->codify(yytext);
- g_name.resize(0);g_type.resize(0);
- }
-<Body>"<" {
- if (g_insideTemplate)
- {
- g_sharpCount++;
- }
- g_code->codify(yytext);
- }
-<Body>">" {
- if (g_insideTemplate)
- {
- if (--g_sharpCount<=0)
- {
- g_insideTemplate=FALSE;
- }
- }
- g_code->codify(yytext);
- }
-<Body,MemberCall,MemberCall2,FuncCall>"'"((\\0[Xx0-9]+)|(\\.)|(.))"'" {
- startFontClass("charliteral");
- g_code->codify(yytext);
- endFontClass();
- }
-<Body>"."|"->" {
- if (yytext[0]=='-') // -> could be overloaded
- {
- updateCallContextForSmartPointer();
- }
- g_code->codify(yytext);
- g_memCallContext = YY_START;
- BEGIN( MemberCall );
- }
-<MemberCall>{SCOPETNAME}/{BN}*"(" {
- if (g_theCallContext.getScope())
- {
- if (!generateClassMemberLink(*g_code,g_theCallContext.getScope(),yytext))
- {
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- }
- g_name.resize(0);
- }
- else
- {
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- g_name.resize(0);
- }
- g_type.resize(0);
- g_bracketCount=0;
- if (g_memCallContext==Body)
- {
- BEGIN(FuncCall);
- }
- else
- {
- BEGIN(g_memCallContext);
- }
- }
-<MemberCall>{SCOPENAME}/{B}* {
- if (g_theCallContext.getScope())
- {
- DBG_CTX((stderr,"g_theCallContext.getClass()=%p\n",g_theCallContext.getScope()));
- if (!generateClassMemberLink(*g_code,g_theCallContext.getScope(),yytext))
- {
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- }
- g_name.resize(0);
- }
- else
- {
- DBG_CTX((stderr,"no class context!\n"));
- g_code->codify(yytext);
- addToSearchIndex(yytext);
- g_name.resize(0);
- }
- g_type.resize(0);
- BEGIN(g_memCallContext);
- }
-<Body>[,=;\[] {
- if (g_insideObjC && *yytext=='[')
- {
- //printf("Found start of ObjC call!\n");
- // start of a method call
- g_contextDict.setAutoDelete(TRUE);
- g_nameDict.setAutoDelete(TRUE);
- g_objectDict.setAutoDelete(TRUE);
- g_wordDict.setAutoDelete(TRUE);
- g_commentDict.setAutoDelete(TRUE);
- g_contextDict.clear();
- g_nameDict.clear();
- g_objectDict.clear();
- g_wordDict.clear();
- g_commentDict.clear();
- g_currentCtxId = 0;
- g_currentNameId = 0;
- g_currentObjId = 0;
- g_currentCtx = 0;
- g_braceCount = 0;
- unput('[');
- BEGIN(ObjCCall);
- }
- else
- {
- g_code->codify(yytext);
- g_saveName = g_name.copy();
- g_saveType = g_type.copy();
- if (*yytext!='[' && !g_type.isEmpty())
- {
- //printf("g_scopeStack.bottom()=%p\n",g_scopeStack.bottom());
- //if (g_scopeStack.top()!=CLASSBLOCK) // commented out for bug731363
- {
- //printf("AddVariable: '%s' '%s' context=%d\n",
- // g_type.data(),g_name.data(),g_theVarContext.count());
- g_theVarContext.addVariable(g_type,g_name);
- }
- g_name.resize(0);
- }
- if (*yytext==';' || *yytext=='=')
- {
- g_type.resize(0);
- g_name.resize(0);
- }
- else if (*yytext=='[')
- {
- g_theCallContext.pushScope(g_name, g_type);
- }
- g_args.resize(0);
- g_parmType.resize(0);
- g_parmName.resize(0);
- }
- }
- /*
-<ObjCMemberCall>{ID} {
- if (qstrcmp(yytext,"self")==0 || qstrcmp(yytext,"super")==0)
- {
- // TODO: get proper base class for "super"
- g_theCallContext.setClass(getClass(g_curClassName));
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
- else
- {
- generateClassOrGlobalLink(*g_code,yytext);
- }
- g_name.resize(0);
- BEGIN(ObjCMemberCall2);
- }
-<ObjCMemberCall>"[" {
- g_code->codify(yytext);
- g_theCallContext.pushScope(g_name, g_type);
- }
-<ObjCMemberCall2>{ID}":"? {
- g_name+=yytext;
- if (g_theCallContext.getClass())
- {
- //printf("Calling method %s\n",g_name.data());
- if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),g_name))
- {
- g_code->codify(yytext);
- addToSearchIndex(g_name);
- }
- }
- else
- {
- g_code->codify(yytext);
- addToSearchIndex(g_name);
- }
- g_name.resize(0);
- BEGIN(ObjCMemberCall3);
- }
-<ObjCMemberCall2,ObjCMemberCall3>"]" {
- g_theCallContext.popScope(g_name, g_type);
- g_code->codify(yytext);
- BEGIN(Body);
- }
- */
-<ObjCCall,ObjCMName>"["|"{" {
- saveObjCContext();
- g_currentCtx->format+=*yytext;
- BEGIN(ObjCCall);
- //printf("open\n");
- }
-<ObjCCall,ObjCMName>"]"|"}" {
- g_currentCtx->format+=*yytext;
- restoreObjCContext();
- BEGIN(ObjCMName);
- if (g_currentCtx==0)
- {
- // end of call
- writeObjCMethodCall(g_contextDict.find(0));
- BEGIN(Body);
- }
- //printf("close\n");
- }
-<ObjCCall,ObjCMName>"//".* {
- g_currentCtx->format+=escapeComment(yytext);
- }
-<ObjCCall,ObjCMName>"/*" {
- g_lastObjCCallContext = YY_START;
- g_currentCtx->comment=yytext;
- BEGIN(ObjCCallComment);
- }
-<ObjCCallComment>"*/" {
- g_currentCtx->comment+=yytext;
- g_currentCtx->format+=escapeComment(g_currentCtx->comment);
- BEGIN(g_lastObjCCallContext);
- }
-<ObjCCallComment>[^*\n]+ { g_currentCtx->comment+=yytext; }
-<ObjCCallComment>"//"|"/*" { g_currentCtx->comment+=yytext; }
-<ObjCCallComment>\n { g_currentCtx->comment+=*yytext; }
-<ObjCCallComment>. { g_currentCtx->comment+=*yytext; }
-<ObjCCall>{ID} {
- g_currentCtx->format+=escapeObject(yytext);
- if (g_braceCount==0)
- {
- g_currentCtx->objectTypeOrName=yytext;
- //printf("new type=%s\n",g_currentCtx->objectTypeOrName.data());
- BEGIN(ObjCMName);
- }
- }
-<ObjCMName>{ID}/{BN}*"]" {
- if (g_braceCount==0 &&
- g_currentCtx->methodName.isEmpty())
- {
- g_currentCtx->methodName=yytext;
- g_currentCtx->format+=escapeName(yytext);
- }
- else
- {
- g_currentCtx->format+=escapeWord(yytext);
- }
- }
-<ObjCMName>{ID}/{BN}*":" {
- if (g_braceCount==0)
- {
- g_currentCtx->methodName+=yytext;
- g_currentCtx->methodName+=":";
- }
- g_currentCtx->format+=escapeName(yytext);
- }
-<ObjCSkipStr>[^\n\"$\\]* { g_currentCtx->format+=yytext; }
-<ObjCSkipStr>\\. { g_currentCtx->format+=yytext; }
-<ObjCSkipStr>"\"" { g_currentCtx->format+=yytext;
- BEGIN(g_lastStringContext);
- }
-<ObjCCall,ObjCMName>{CHARLIT} { g_currentCtx->format+=yytext; }
-<ObjCCall,ObjCMName>"@"?"\"" { g_currentCtx->format+=yytext;
- g_lastStringContext=YY_START;
- BEGIN(ObjCSkipStr);
- }
-<ObjCCall,ObjCMName,ObjCSkipStr>"$" { g_currentCtx->format+="$$"; }
-<ObjCCall,ObjCMName>"(" { g_currentCtx->format+=*yytext; g_braceCount++; }
-<ObjCCall,ObjCMName>")" { g_currentCtx->format+=*yytext; g_braceCount--; }
-<ObjCSkipStr>"@"/"\"" { // needed to prevent matching the global rule (for C#)
- g_currentCtx->format+=yytext;
- }
-<ObjCCall,ObjCMName,ObjCSkipStr>{ID} { g_currentCtx->format+=escapeWord(yytext); }
-<ObjCCall,ObjCMName,ObjCSkipStr>. { g_currentCtx->format+=*yytext; }
-<ObjCCall,ObjCMName,ObjCSkipStr>\n { g_currentCtx->format+=*yytext; }
-
-<Body>"]" {
- g_theCallContext.popScope(g_name, g_type);
- g_code->codify(yytext);
- // TODO: nested arrays like: a[b[0]->func()]->func()
- g_name = g_saveName.copy();
- g_type = g_saveType.copy();
- }
-<Body>[0-9]+ {
- g_code->codify(yytext);
- }
-<Body>[0-9]+[xX][0-9A-Fa-f]+ {
- g_code->codify(yytext);
- }
-<MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) {
- //addParmType();
- //g_parmName=yytext;
- if (skipLanguageSpecificKeyword(yytext)) REJECT;
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- }
-<MemberCall2,FuncCall,OldStyleArgs,TemplCast>{TYPEKW}/([^a-z_A-Z0-9]) {
- addParmType();
- g_parmName=yytext;
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
-<MemberCall2,FuncCall,OldStyleArgs,TemplCast>{TYPEKWSL}/([^a-z_A-Z0-9]) {
- if (!g_insideSlice)
- {
- REJECT;
- }
- else
- {
- addParmType();
- g_parmName=yytext;
- startFontClass("keywordtype");
- g_code->codify(yytext);
- endFontClass();
- }
- }
-<MemberCall2,FuncCall>{FLOWKW}/([^a-z_A-Z0-9]) {
- addParmType();
- g_parmName=yytext;
- startFontClass("keywordflow");
- g_code->codify(yytext);
- endFontClass();
- }
-<MemberCall2,FuncCall>{FLOWCONDITION}/([^a-z_A-Z0-9]) {
- if (g_currentMemberDef && g_currentMemberDef->isFunction())
- {
- g_currentMemberDef->incrementFlowKeyWordCount();
- }
- addParmType();
- g_parmName=yytext;
- startFontClass("keywordflow");
- g_code->codify(yytext);
- endFontClass();
- }
-<MemberCall2,FuncCall>{ID}(({B}*"<"[^\n\[\](){}<>]*">")?({B}*"::"{B}*{ID})?)* {
- if (isCastKeyword(yytext))
- {
- REJECT;
- }
- addParmType();
- g_parmName=yytext;
- generateClassOrGlobalLink(*g_code,yytext,!g_insideBody);
- }
-<FuncCall>";" { // probably a cast, not a function call
- g_code->codify(yytext);
- g_inForEachExpression = FALSE;
- BEGIN( Body );
- }
-<MemberCall2,FuncCall>, {
- g_code->codify(yytext);
- g_theVarContext.addVariable(g_parmType,g_parmName);
- g_parmType.resize(0);g_parmName.resize(0);
- }
-<MemberCall2,FuncCall>"{" {
- if (g_bracketCount>0)
- {
- g_code->codify(yytext);
- g_skipInlineInitContext=YY_START;
- g_curlyCount=0;
- BEGIN(InlineInit);
- }
- else
- {
- REJECT;
- }
- }
-<InlineInit>"{" { g_curlyCount++;
- g_code->codify(yytext);
- }
-<InlineInit>"}" {
- g_code->codify(yytext);
- if (--g_curlyCount<=0)
- {
- BEGIN(g_skipInlineInitContext);
- }
- }
-<InlineInit>\n {
- codifyLines(yytext);
- }
-<InlineInit>. {
- g_code->codify(yytext);
- }
-<MemberCall2,FuncCall>"(" {
- g_parmType.resize(0);g_parmName.resize(0);
- g_code->codify(yytext);
- g_bracketCount++;
- g_theCallContext.pushScope(g_name, g_type);
- if (YY_START==FuncCall && !g_insideBody)
- {
- g_theVarContext.pushScope();
- }
- }
-<MemberCall2,FuncCall>{OPERATOR} { // operator
- if (qstrcmp(yytext,"*") &&
- qstrcmp(yytext,"&") &&
- qstrcmp(yytext,"^") &&
- qstrcmp(yytext,"%")) // typically a pointer or reference
- {
- // not a * or &, or C++/CLI's ^ or %
- g_parmType.resize(0);g_parmName.resize(0);
- }
- g_code->codify(yytext);
- }
-<MemberCall,MemberCall2,FuncCall>("*"{B}*)?")" {
- if (yytext[0]==')') // no a pointer cast
- {
- //printf("addVariable(%s,%s)\n",g_parmType.data(),g_parmName.data());
- if (g_parmType.isEmpty())
- {
- g_parmType=g_parmName;
- g_parmName.resize(0);
- }
- g_theVarContext.addVariable(g_parmType,g_parmName);
- }
- else
- {
- g_parmType = g_parmName;
- g_parmName.resize(0);
- g_theVarContext.addVariable(g_parmType,g_parmName);
- }
- g_theCallContext.popScope(g_name, g_type);
- g_inForEachExpression = FALSE;
- //g_theCallContext.setClass(0); // commented out, otherwise a()->b() does not work for b().
- g_code->codify(yytext);
- if (--g_bracketCount<=0)
- {
- if (g_name.isEmpty())
- {
- BEGIN( Body );
- }
- else
- {
- BEGIN( CallEnd );
- }
- }
- }
-<CallEnd>[ \t\n]* { codifyLines(yytext); }
- /*
-<MemberCall2,FuncCall>")"[ \t\n]*[;:] {
- */
-<CallEnd>[;:] {
- codifyLines(yytext);
- g_bracketCount=0;
- if (*yytext==';') g_searchingForBody=FALSE;
- if (!g_type.isEmpty())
- {
- DBG_CTX((stderr,"add variable g_type=%s g_name=%s)\n",g_type.data(),g_name.data()));
- g_theVarContext.addVariable(g_type,g_name);
- }
- g_parmType.resize(0);g_parmName.resize(0);
- g_theCallContext.setScope(0);
- if (*yytext==';' || g_insideBody)
- {
- if (!g_insideBody)
- {
- g_theVarContext.popScope();
- }
- g_name.resize(0);g_type.resize(0);
- BEGIN( Body );
- }
- else
- {
- g_bracketCount=0;
- BEGIN( SkipInits );
- }
- }
-<CallEnd>("const"|"volatile"|"sealed"|"override")({BN}+("const"|"volatile"|"sealed"|"override"))*/{BN}*(";"|"="|"throw"{BN}*"(") {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
-<CallEnd,OldStyleArgs>("const"|"volatile"|"sealed"|"override")*({BN}+("const"|"volatile"|"sealed"|"override"))*{BN}*"{" {
- if (g_insideBody)
- {
- g_theVarContext.pushScope();
- }
- g_theVarContext.addVariable(g_parmType,g_parmName);
- //g_theCallContext.popScope(g_name, g_type);
- g_parmType.resize(0);g_parmName.resize(0);
- int index = g_name.findRev("::");
- DBG_CTX((stderr,"g_name=%s\n",g_name.data()));
- if (index!=-1)
- {
- QCString scope = g_name.left(index);
- if (!g_classScope.isEmpty()) scope.prepend(g_classScope+"::");
- const ClassDef *cd=getResolvedClass(Doxygen::globalScope,g_sourceFileDef,scope);
- if (cd)
- {
- setClassScope(cd->name());
- g_scopeStack.push(SCOPEBLOCK);
- DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
- }
- else
- {
- //setClassScope(g_realScope);
- g_scopeStack.push(INNERBLOCK);
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- }
- }
- else
- {
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
- }
- yytext[yyleng-1]='\0';
- QCString cv(yytext);
- if (!cv.stripWhiteSpace().isEmpty())
- {
- startFontClass("keyword");
- codifyLines(yytext);
- endFontClass();
- }
- else // just whitespace
- {
- codifyLines(yytext);
- }
- g_code->codify("{");
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- g_type.resize(0); g_name.resize(0);
- BEGIN( Body );
- }
-<CallEnd>"try" { // function-try-block
- startFontClass("keyword");
- g_code->codify(yytext);
- endFontClass();
- g_inFunctionTryBlock=TRUE;
- }
-<CallEnd>{ID} {
- if (g_insideBody || !g_parmType.isEmpty())
- {
- REJECT;
- }
- // could be K&R style definition
- addParmType();
- g_parmName=yytext;
- generateClassOrGlobalLink(*g_code,yytext,!g_insideBody);
- BEGIN(OldStyleArgs);
- }
-<OldStyleArgs>{ID} {
- addParmType();
- g_parmName=yytext;
- generateClassOrGlobalLink(*g_code,yytext,!g_insideBody);
- }
-<OldStyleArgs>[,;] {
- g_code->codify(yytext);
- g_theVarContext.addVariable(g_parmType,g_parmName);
- if (*yytext==';') g_parmType.resize(0);
- g_parmName.resize(0);
- }
-<CallEnd,OldStyleArgs>"#" {
- startFontClass("preprocessor");
- g_lastSkipCppContext = Body;
- g_code->codify(yytext);
- BEGIN( SkipCPP );
- }
-<CallEnd>. {
- unput(*yytext);
- if (!g_insideBody)
- {
- g_theVarContext.popScope();
- }
- g_name.resize(0);g_args.resize(0);
- g_parmType.resize(0);g_parmName.resize(0);
- BEGIN( Body );
- }
-<SkipInits>";" {
- g_code->codify(yytext);
- g_type.resize(0); g_name.resize(0);
- BEGIN( Body );
- }
-<SkipInits>"{" {
- g_code->codify(yytext);
- if (g_searchingForBody)
- {
- g_searchingForBody=FALSE;
- g_insideBody=TRUE;
- }
- if (g_insideBody) g_bodyCurlyCount++;
- if (g_name.find("::")!=-1)
- {
- DBG_CTX((stderr,"** scope stack push SCOPEBLOCK\n"));
- g_scopeStack.push(SCOPEBLOCK);
- setClassScope(g_realScope);
- }
- else
- {
- DBG_CTX((stderr,"** scope stack push INNERBLOCK\n"));
- g_scopeStack.push(INNERBLOCK);
- }
- g_type.resize(0); g_name.resize(0);
- BEGIN( Body );
- }
-<SkipInits>{ID} {
- generateClassOrGlobalLink(*g_code,yytext);
- }
-<FuncCall>{ID}/"(" {
- generateFunctionLink(*g_code,yytext);
- }
-<FuncCall>{ID}/("."|"->") {
- g_name=yytext;
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( MemberCall2 );
- }
-<FuncCall,MemberCall2>("("{B}*("*"{B}*)+{ID}*{B}*")"{B}*)/("."|"->") {
- g_code->codify(yytext);
- int s=0;while (!isId(yytext[s])) s++;
- int e=(int)yyleng-1;while (!isId(yytext[e])) e--;
- g_name=((QCString)yytext).mid(s,e-s+1);
- BEGIN( MemberCall2 );
- }
-<MemberCall2>{ID}/([ \t\n]*"(") {
- if (!g_args.isEmpty())
- generateMemberLink(*g_code,g_args,yytext);
- else
- generateClassOrGlobalLink(*g_code,yytext);
- g_args.resize(0);
- BEGIN( FuncCall );
- }
-<MemberCall2>{ID}/([ \t\n]*("."|"->")) {
- //g_code->codify(yytext);
- g_name=yytext;
- generateClassOrGlobalLink(*g_code,yytext);
- BEGIN( MemberCall2 );
- }
-<MemberCall2>"->"|"." {
- if (yytext[0]=='-') // -> could be overloaded
- {
- updateCallContextForSmartPointer();
- }
- g_code->codify(yytext);
- g_memCallContext = YY_START;
- BEGIN( MemberCall );
- }
-<SkipComment>"/*"("!"?)"*/" {
- g_code->codify(yytext);
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
-<SkipComment>"//"|"/*" {
- g_code->codify(yytext);
- }
-<SkipComment>[^*/\n]+ {
- g_code->codify(yytext);
- }
-<SkipComment>[ \t]*"*/" {
- g_code->codify(yytext);
- endFontClass();
- if (g_lastCContext==SkipCPP)
- {
- startFontClass("preprocessor");
- }
- BEGIN( g_lastCContext ) ;
- }
-<SkipCxxComment>[^\r\n]*"\\"[\r]?\n { // line continuation
- codifyLines(yytext);
- }
-<SkipCxxComment>[^\r\n]+ {
- g_code->codify(yytext);
- }
-<SkipCxxComment>\r
-<SkipCxxComment>\n {
- unput('\n');
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
-<SkipCxxComment>. {
- g_code->codify(yytext);
- }
-<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)?{B}*"/*"[*!]/[^/*] {
- g_yyLineNr+=QCString(yytext).contains('\n');
- }
-<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*({B}*(("//@"[{}])|("/*@"[{}]"*/")){B}*\n)? {
- g_yyLineNr+=QCString(yytext).contains('\n');
- nextCodeLine();
- if (g_lastSpecialCContext==SkipCxxComment)
- { // force end of C++ comment here
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
- else
- {
- BEGIN(g_lastSpecialCContext);
- }
- }
-<RemoveSpecialCComment>"*/" {
- BEGIN(g_lastSpecialCContext);
- }
-<RemoveSpecialCComment>[^*\n]+
-<RemoveSpecialCComment>"//"|"/*"
-<RemoveSpecialCComment>\n { g_yyLineNr++; }
-<RemoveSpecialCComment>.
-<MemberCall>[^a-z_A-Z0-9(\n] {
- g_code->codify(yytext);
- g_type.resize(0);
- g_name.resize(0);
- BEGIN(g_memCallContext);
- }
-<*>\n({B}*"//"[!/][^\n]*\n)+ { // remove special one-line comment
- if (YY_START==SkipCPP) REJECT;
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- g_yyLineNr+=((QCString)yytext).contains('\n');
- nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- if (YY_START==SkipCxxComment)
- {
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
- }
-<SkipCPP>\n/.*\n {
- endFontClass();
- codifyLines(yytext);
- BEGIN( g_lastSkipCppContext ) ;
- }
-<*>\n{B}*"//@"[{}].*\n { // remove one-line group marker
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- g_yyLineNr+=2;
- nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- if (YY_START==SkipCxxComment)
- {
- endFontClass();
- BEGIN( g_lastCContext ) ;
- }
- }
-<*>\n{B}*"/*@"[{}] { // remove one-line group marker
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- if (YY_START != RemoveSpecialCComment) g_lastSpecialCContext = YY_START;
- g_yyLineNr++;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipComment && YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- codifyLines(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>^{B}*"//@"[{}].*\n { // remove one-line group marker
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- g_yyLineNr++;
- nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- }
-<*>^{B}*"/*@"[{}] { // remove multi-line group marker
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- if (YY_START != RemoveSpecialCComment) g_lastSpecialCContext = YY_START;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipComment && YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- g_code->codify(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- g_yyLineNr++;
- //nextCodeLine();
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- }
-<*>"//"[!/][^\n]*\n { // strip special one-line comment
- if (YY_START==SkipComment || YY_START==SkipString) REJECT;
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- char c[2]; c[0]='\n'; c[1]=0;
- codifyLines(c);
- }
- else
- {
- startFontClass("comment");
- codifyLines(yytext);
- endFontClass();
- }
- }
-<*>"/*[tag:"[^\]\n]*"]*/"{B}* { // special pattern /*[tag:filename]*/ to force linking to a tag file
- g_forceTagReference=yytext;
- int s=g_forceTagReference.find(':');
- int e=g_forceTagReference.findRev(']');
- g_forceTagReference = g_forceTagReference.mid(s+1,e-s-1);
- }
-<*>\n{B}*"/*"[!*]/[^/*] {
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- if (YY_START != RemoveSpecialCComment) g_lastSpecialCContext = YY_START;
- g_yyLineNr++;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipComment && YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- codifyLines(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>^{B}*"/**"[*]+/[^/] { // special C "banner" comment block at a new line
- if (Config_getBool(JAVADOC_BANNER) && Config_getBool(STRIP_CODE_COMMENTS))
- {
- if (YY_START != RemoveSpecialCComment) g_lastSpecialCContext = YY_START;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipComment && YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- g_code->codify(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>^{B}*"/*"[!*]/[^/*] { // special C comment block at a new line
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- if (YY_START != RemoveSpecialCComment) g_lastSpecialCContext = YY_START;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipComment && YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- g_code->codify(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>"/*"[!*]/[^/*] { // special C comment block half way a line
- if (YY_START==SkipString) REJECT;
- if (Config_getBool(STRIP_CODE_COMMENTS))
- {
- if (YY_START != RemoveSpecialCComment) g_lastSpecialCContext = YY_START;
- BEGIN(RemoveSpecialCComment);
- }
- else
- {
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipComment && YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- startFontClass("comment");
- g_code->codify(yytext);
- BEGIN(SkipComment);
- }
- }
-<*>"/*"("!"?)"*/" {
- if (YY_START==SkipString) REJECT;
- if (!Config_getBool(STRIP_CODE_COMMENTS))
- {
- startFontClass("comment");
- g_code->codify(yytext);
- endFontClass();
- }
- }
-<SkipComment>[^\*\n]+ {
- g_code->codify(yytext);
- }
-<*>"/*" {
- startFontClass("comment");
- g_code->codify(yytext);
- // check is to prevent getting stuck in skipping C++ comments
- if (YY_START != SkipComment && YY_START != SkipCxxComment)
- {
- g_lastCContext = YY_START ;
- }
- BEGIN( SkipComment ) ;
- }
-<*>@\" { // C# verbatim string
- startFontClass("stringliteral");
- g_code->codify(yytext);
- g_lastVerbStringContext=YY_START;
- BEGIN(SkipVerbString);
- }
-<*>"//" {
- startFontClass("comment");
- g_code->codify(yytext);
- g_lastCContext = YY_START ;
- BEGIN( SkipCxxComment ) ;
- }
-<*>"("|"[" {
- g_code->codify(yytext);
- g_theCallContext.pushScope(g_name, g_type);
- }
-<*>")"|"]" {
- g_code->codify(yytext);
- g_theCallContext.popScope(g_name, g_type);
- }
-<*>\n {
- g_yyColNr++;
- codifyLines(yytext);
- }
-<*>. {
- g_yyColNr++;
- g_code->codify(yytext);
- }
- /*
-<*>([ \t\n]*"\n"){2,} { // combine multiple blank lines
- //QCString sepLine=yytext;
- //g_code->codify("\n\n");
- //g_yyLineNr+=sepLine.contains('\n');
- //char sepLine[3]="\n\n";
- codifyLines(yytext);
- }
- */
-
-%%
-/*@ ----------------------------------------------------------------------------
- */
-
-static void saveObjCContext()
+static void saveObjCContext(yyscan_t yyscanner)
{
- if (g_currentCtx)
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->currentCtx)
{
- g_currentCtx->format+=QCString().sprintf("$c%d",g_currentCtxId);
- if (g_braceCount==0 && YY_START==ObjCCall)
+ yyextra->currentCtx->format+=QCString().sprintf("$c%d",yyextra->currentCtxId);
+ if (yyextra->braceCount==0 && YY_START==ObjCCall)
{
- g_currentCtx->objectTypeOrName=g_currentCtx->format.mid(1);
- //printf("new type=%s\n",g_currentCtx->objectTypeOrName.data());
+ yyextra->currentCtx->objectTypeOrName=yyextra->currentCtx->format.mid(1);
+ //printf("new type=%s\n",yyextra->currentCtx->objectTypeOrName.data());
}
- g_contextStack.push(g_currentCtx);
+ yyextra->contextStack.push(yyextra->currentCtx);
}
else
{
//printf("Trying to save NULL context!\n");
}
ObjCCallCtx *newCtx = new ObjCCallCtx;
- newCtx->id = g_currentCtxId;
+ newCtx->id = yyextra->currentCtxId;
newCtx->lexState = YY_START;
- newCtx->braceCount = g_braceCount;
+ newCtx->braceCount = yyextra->braceCount;
newCtx->objectType = 0;
newCtx->objectVar = 0;
newCtx->method = 0;
//printf("save state=%d\n",YY_START);
- g_contextDict.insert(g_currentCtxId,newCtx);
- g_currentCtx = newCtx;
- g_braceCount = 0;
- g_currentCtxId++;
+ yyextra->contextDict.insert(yyextra->currentCtxId,newCtx);
+ yyextra->currentCtx = newCtx;
+ yyextra->braceCount = 0;
+ yyextra->currentCtxId++;
}
-static void restoreObjCContext()
+static void restoreObjCContext(yyscan_t yyscanner)
{
- //printf("restore state=%d->%d\n",YY_START,g_currentCtx->lexState);
- BEGIN(g_currentCtx->lexState);
- g_braceCount = g_currentCtx->braceCount;
- if (!g_contextStack.isEmpty())
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ //printf("restore state=%d->%d\n",YY_START,yyextra->currentCtx->lexState);
+ BEGIN(yyextra->currentCtx->lexState);
+ yyextra->braceCount = yyextra->currentCtx->braceCount;
+ if (!yyextra->contextStack.isEmpty())
{
- g_currentCtx = g_contextStack.pop();
+ yyextra->currentCtx = yyextra->contextStack.pop();
}
else
{
- g_currentCtx = 0;
- //printf("Trying to pop context while g_contextStack is empty!\n");
+ yyextra->currentCtx = 0;
+ //printf("Trying to pop context while yyextra->contextStack is empty!\n");
}
}
-void resetCCodeParserState()
+struct CCodeParser::Private
+{
+ yyscan_t yyscanner;
+ codeYY_state state;
+};
+
+CCodeParser::CCodeParser() : p(std::make_unique<CCodeParser::Private>())
+{
+ codeYYlex_init_extra(&p->state,&p->yyscanner);
+#ifdef FLEX_DEBUG
+ codeYYset_debug(1,p->yyscanner);
+#endif
+}
+
+CCodeParser::~CCodeParser()
{
- //printf("***initParseCodeContext()\n");
- g_forceTagReference.resize(0);
- g_theVarContext.clear();
- g_classScopeLengthStack.setAutoDelete(TRUE);
- g_classScopeLengthStack.clear();
- delete g_codeClassSDict;
- g_codeClassSDict = new ClassSDict(17);
- g_codeClassSDict->setAutoDelete(TRUE);
- g_codeClassSDict->clear();
- g_curClassBases.clear();
- g_anchorCount = 0;
+ struct yyguts_t *yyg = (struct yyguts_t*)p->yyscanner;
+ yyextra->classScopeLengthStack.clear();
+ delete yyextra->codeClassSDict;
+ yyextra->codeClassSDict=0;
+ codeYYlex_destroy(p->yyscanner);
}
-void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
+void CCodeParser::resetCodeParserState()
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)p->yyscanner;
+ //printf("***CodeParser::reset()\n");
+ yyextra->forceTagReference.resize(0);
+ yyextra->theVarContext.clear();
+ yyextra->classScopeLengthStack.setAutoDelete(TRUE);
+ yyextra->classScopeLengthStack.clear();
+ delete yyextra->codeClassSDict;
+ yyextra->codeClassSDict = new ClassSDict(17);
+ yyextra->codeClassSDict->setAutoDelete(TRUE);
+ yyextra->codeClassSDict->clear();
+ yyextra->curClassBases.clear();
+ yyextra->anchorCount = 0;
+}
+
+void CCodeParser::parseCode(CodeOutputInterface &od,const char *className,const QCString &s,
SrcLangExt lang,bool exBlock, const char *exName,FileDef *fd,
int startLine,int endLine,bool inlineFragment,
const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
bool collectXRefs)
{
+ yyscan_t yyscanner = p->yyscanner;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf("***parseCode() exBlock=%d exName=%s fd=%p className=%s searchCtx=%s\n",
// exBlock,exName,fd,className,searchCtx?searchCtx->name().data():"<none>");
@@ -3777,117 +3915,93 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
- if (g_codeClassSDict==0)
+ if (yyextra->codeClassSDict==0)
{
- resetCCodeParserState();
+ resetCodeParserState();
}
- g_code = &od;
- g_inputString = s;
- g_inputPosition = 0;
- g_currentFontClass = 0;
- g_needsTermination = FALSE;
- g_searchCtx = searchCtx;
- g_collectXRefs = collectXRefs;
- g_inFunctionTryBlock = FALSE;
+ yyextra->code = &od;
+ yyextra->inputString = s;
+ yyextra->inputPosition = 0;
+ codeYYrestart(0,yyscanner);
+ yyextra->currentFontClass = 0;
+ yyextra->needsTermination = FALSE;
+ yyextra->searchCtx = searchCtx;
+ yyextra->collectXRefs = collectXRefs;
+ yyextra->inFunctionTryBlock = FALSE;
if (startLine!=-1)
- g_yyLineNr = startLine;
+ yyextra->yyLineNr = startLine;
else
- g_yyLineNr = 1;
+ yyextra->yyLineNr = 1;
if (endLine!=-1)
- g_inputLines = endLine+1;
+ yyextra->inputLines = endLine+1;
else
- g_inputLines = g_yyLineNr + countLines() - 1;
-
- g_curlyCount = 0;
- g_bodyCurlyCount = 0;
- g_bracketCount = 0;
- g_sharpCount = 0;
- g_insideTemplate = FALSE;
- g_theCallContext.clear();
- g_scopeStack.clear();
- g_classScope = className;
+ yyextra->inputLines = yyextra->yyLineNr + countLines(yyscanner) - 1;
+
+ yyextra->curlyCount = 0;
+ yyextra->bodyCurlyCount = 0;
+ yyextra->bracketCount = 0;
+ yyextra->sharpCount = 0;
+ yyextra->insideTemplate = FALSE;
+ yyextra->theCallContext.clear();
+ yyextra->scopeStack.clear();
+ yyextra->classScope = className;
//printf("parseCCode %s\n",className);
- g_exampleBlock = exBlock;
- g_exampleName = exName;
- g_sourceFileDef = fd;
- g_lineNumbers = fd!=0 && showLineNumbers;
+ yyextra->exampleBlock = exBlock;
+ yyextra->exampleName = exName;
+ yyextra->sourceFileDef = fd;
+ yyextra->lineNumbers = fd!=0 && showLineNumbers;
bool cleanupSourceDef = FALSE;
if (fd==0)
{
// create a dummy filedef for the example
- g_sourceFileDef = createFileDef("",(exName?exName:"generated"));
+ yyextra->sourceFileDef = createFileDef("",(exName?exName:"generated"));
cleanupSourceDef = TRUE;
}
- g_insideObjC = lang==SrcLangExt_ObjC;
- g_insideJava = lang==SrcLangExt_Java;
- g_insideCS = lang==SrcLangExt_CSharp;
- g_insidePHP = lang==SrcLangExt_PHP;
- g_insideCpp = lang==SrcLangExt_Cpp;
- g_insideSlice = lang==SrcLangExt_Slice;
- if (g_sourceFileDef)
+ yyextra->lang = lang;
+ yyextra->insideObjC = lang==SrcLangExt_ObjC;
+ if (yyextra->sourceFileDef)
{
- setCurrentDoc("l00001");
+ setCurrentDoc(yyscanner,"l00001");
}
- g_currentDefinition = 0;
- g_currentMemberDef = 0;
- g_searchingForBody = exBlock;
- g_insideBody = FALSE;
- g_bracketCount = 0;
- if (!g_exampleName.isEmpty())
+ yyextra->currentDefinition = 0;
+ yyextra->currentMemberDef = 0;
+ yyextra->searchingForBody = exBlock;
+ yyextra->insideBody = FALSE;
+ yyextra->bracketCount = 0;
+ if (!yyextra->exampleName.isEmpty())
{
- g_exampleFile = convertNameToFile(g_exampleName+"-example",FALSE,TRUE);
- //printf("g_exampleFile=%s\n",g_exampleFile.data());
+ yyextra->exampleFile = convertNameToFile(yyextra->exampleName+"-example",FALSE,TRUE);
+ //printf("yyextra->exampleFile=%s\n",yyextra->exampleFile.data());
}
- g_includeCodeFragment = inlineFragment;
+ yyextra->includeCodeFragment = inlineFragment;
//printf("** exBlock=%d exName=%s include=%d\n",exBlock,exName,inlineFragment);
- startCodeLine();
- g_type.resize(0);
- g_name.resize(0);
- g_args.resize(0);
- g_parmName.resize(0);
- g_parmType.resize(0);
- if (memberDef) setParameterList(memberDef);
- codeYYrestart( codeYYin );
+ startCodeLine(yyscanner);
+ yyextra->type.resize(0);
+ yyextra->name.resize(0);
+ yyextra->args.resize(0);
+ yyextra->parmName.resize(0);
+ yyextra->parmType.resize(0);
+ if (memberDef) setParameterList(yyscanner,memberDef);
BEGIN( Body );
- codeYYlex();
- g_lexInit=TRUE;
- if (g_needsTermination)
+ codeYYlex(yyscanner);
+ yyextra->lexInit=TRUE;
+ if (yyextra->needsTermination)
{
- endFontClass();
- DBG_CTX((stderr,"endCodeLine(%d)\n",g_yyLineNr));
- g_code->endCodeLine();
+ endFontClass(yyscanner);
+ DBG_CTX((stderr,"endCodeLine(%d)\n",yyextra->yyLineNr));
+ yyextra->code->endCodeLine();
}
if (cleanupSourceDef)
{
// delete the temporary file definition used for this example
- delete g_sourceFileDef;
- g_sourceFileDef=0;
+ delete yyextra->sourceFileDef;
+ yyextra->sourceFileDef=0;
}
printlex(yy_flex_debug, FALSE, __FILE__, fd ? fd->fileName().data(): NULL);
return;
}
-void codeFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- codeYYlex_destroy();
- }
-#endif
-}
-
-
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void codeYYdummy() { yy_flex_realloc(0,0); }
-}
-#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
-#endif
-
#include "code.l.h"
diff --git a/src/commentcnv.l b/src/commentcnv.l
index f144aec..66aada1 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -16,6 +16,8 @@
*/
%option never-interactive
%option prefix="commentcnvYY"
+%option reentrant
+%option extra-type="struct commentcnvYY_state *"
%{
@@ -41,8 +43,8 @@
#define YY_NO_INPUT 1
#define YY_NO_UNISTD_H 1
-#define ADDCHAR(c) g_outBuf->addChar(c)
-#define ADDARRAY(a,s) g_outBuf->addArray(a,s)
+#define ADDCHAR(c) yyextra->outBuf->addChar(c)
+#define ADDARRAY(a,s) yyextra->outBuf->addArray(a,s)
struct CondCtx
{
@@ -60,185 +62,65 @@ struct CommentCtx
int lineNr;
};
-static BufStr * g_inBuf;
-static BufStr * g_outBuf;
-static int g_inBufPos;
-static int g_col;
-static int g_blockHeadCol;
-static bool g_mlBrief;
-static int g_readLineCtx;
-static bool g_skip;
-static QCString g_fileName;
-static int g_lineNr;
-static int g_condCtx;
-static QStack<CondCtx> g_condStack;
-static QStack<CommentCtx> g_commentStack;
-static QCString g_blockName;
-static int g_lastCommentContext;
-static bool g_inSpecialComment;
-static bool g_inRoseComment;
-static int g_stringContext;
-static int g_charContext;
-static int g_javaBlock;
-static bool g_specialComment;
+struct commentcnvYY_state
+{
+ BufStr * inBuf = 0;
+ BufStr * outBuf = 0;
+ int inBufPos = 0;
+ int col = 0;
+ int blockHeadCol = 0;
+ bool mlBrief = FALSE;
+ int readLineCtx = 0;
+ bool skip = FALSE;
+ QCString fileName;
+ int lineNr = 0;
+ int condCtx = 0;
+ QStack<CondCtx> condStack;
+ QStack<CommentCtx> commentStack;
+ QCString blockName;
+ int lastCommentContext = 0;
+ bool inSpecialComment = FALSE;
+ bool inRoseComment= FALSE;
+ int stringContext = 0;
+ int charContext = 0;
+ int javaBlock = 0;
+ bool specialComment = FALSE;
-static QCString g_aliasString;
-static int g_blockCount;
-static bool g_lastEscaped;
-static int g_lastBlockContext;
-static bool g_pythonDocString;
-static int g_nestingCount;
+ QCString aliasString;
+ int blockCount = 0;
+ bool lastEscaped = FALSE;
+ int lastBlockContext= 0;
+ bool pythonDocString = FALSE;
+ int nestingCount= 0;
-static bool g_vhdl; // for VHDL old style --! comment
+ bool vhdl = FALSE; // for VHDL old style --! comment
-static SrcLangExt g_lang;
-static bool isFixedForm; // For Fortran
+ SrcLangExt lang = SrcLangExt_Unknown;
+ bool isFixedForm = FALSE; // For Fortran
+};
static const char *stateToString(int state);
+static inline int computeIndent(const char *s);
-static void replaceCommentMarker(const char *s,int len)
-{
- const char *p=s;
- char c;
- // copy leading blanks
- while ((c=*p) && (c==' ' || c=='\t' || c=='\n'))
- {
- ADDCHAR(c);
- g_lineNr += c=='\n';
- p++;
- }
- // replace start of comment marker by blanks and the last character by a *
- int blanks=0;
- while ((c=*p) && (c=='/' || c=='!' || c=='#'))
- {
- blanks++;
- p++;
- if (*p=='<') // comment-after-item marker
- {
- blanks++;
- p++;
- }
- if (c=='!') // end after first !
- {
- break;
- }
- }
- if (blanks>0)
- {
- while (blanks>2)
- {
- ADDCHAR(' ');
- blanks--;
- }
- if (blanks>1) ADDCHAR('*');
- ADDCHAR(' ');
- }
- // copy comment line to output
- ADDARRAY(p,len-(int)(p-s));
-}
+static void replaceCommentMarker(yyscan_t yyscanner,const char *s,int len);
+static inline void copyToOutput(yyscan_t yyscanner,const char *s,int len);
+static void startCondSection(yyscan_t yyscanner,const char *sectId);
+static void endCondSection(yyscan_t yyscanner);
+static void replaceAliases(yyscan_t yyscanner,const char *s);
+static int yyread(yyscan_t yyscanner,char *buf,int max_size);
+static void replaceComment(yyscan_t yyscanner,int offset);
-static inline int computeIndent(const char *s)
-{
- int col=0;
- static int tabSize=Config_getInt(TAB_SIZE);
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- if (c==' ') col++;
- else if (c=='\t') col+=tabSize-(col%tabSize);
- else break;
- }
- return col;
-}
-static inline void copyToOutput(const char *s,int len)
-{
- int i;
- if (g_skip) // only add newlines.
- {
- for (i=0;i<len;i++)
- {
- if (s[i]=='\n')
- {
- ADDCHAR('\n');
- //fprintf(stderr,"---> skip %d\n",g_lineNr);
- g_lineNr++;
- }
- }
- }
- else if (len>0)
- {
- ADDARRAY(s,len);
- static int tabSize=Config_getInt(TAB_SIZE);
- for (i=0;i<len;i++)
- {
- switch (s[i])
- {
- case '\n': g_col=0;
- //fprintf(stderr,"---> copy %d\n",g_lineNr);
- g_lineNr++; break;
- case '\t': g_col+=tabSize-(g_col%tabSize); break;
- default: g_col++; break;
- }
- }
- }
-}
-
-static void startCondSection(const char *sectId)
-{
- //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
- CondParser prs;
- bool expResult = prs.parse(g_fileName,g_lineNr,sectId);
- g_condStack.push(new CondCtx(g_lineNr,sectId,g_skip));
- if (!expResult) // not enabled
- {
- g_skip=TRUE;
- }
-}
-
-static void endCondSection()
-{
- if (g_condStack.isEmpty())
- {
- warn(g_fileName,g_lineNr,"Found \\endcond command without matching \\cond");
- g_skip=FALSE;
- }
- else
- {
- CondCtx *ctx = g_condStack.pop();
- g_skip=ctx->skip;
- }
- //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
-}
-
-/** copies string \a s with length \a len to the output, while
- * replacing any alias commands found in the string.
- */
-static void replaceAliases(const char *s)
-{
- QCString result = resolveAliasCmd(s);
- //printf("replaceAliases(%s)->'%s'\n",s,result.data());
- copyToOutput(result,result.length());
-}
#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int bytesInBuf = g_inBuf->curPos()-g_inBufPos;
- int bytesToCopy = QMIN(max_size,bytesInBuf);
- memcpy(buf,g_inBuf->data()+g_inBufPos,bytesToCopy);
- g_inBufPos+=bytesToCopy;
- return bytesToCopy;
-}
+#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
-void replaceComment(int offset);
%}
+MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
+
%option noyywrap
%x Scan
@@ -255,55 +137,55 @@ void replaceComment(int offset);
%%
<Scan>[^"'!\/\n\\#,\-]* { /* eat anything that is not " / , or \n */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<Scan>[,] { /* eat , so we have a nice separator in long initialization lines */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<Scan>"\"\"\""! { /* start of python long comment */
- if (g_lang!=SrcLangExt_Python)
+ if (yyextra->lang!=SrcLangExt_Python)
{
REJECT;
}
else
{
- g_pythonDocString = TRUE;
- g_nestingCount=1;
- g_commentStack.clear(); /* to be on the save side */
- copyToOutput(yytext,(int)yyleng);
+ yyextra->pythonDocString = TRUE;
+ yyextra->nestingCount=1;
+ yyextra->commentStack.clear(); /* to be on the save side */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
}
<Scan>![><!]/.*\n {
- if (g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
- copyToOutput(yytext,(int)yyleng);
- g_nestingCount=0; // Fortran doesn't have an end comment
- g_commentStack.clear(); /* to be on the save side */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->nestingCount=0; // Fortran doesn't have an end comment
+ yyextra->commentStack.clear(); /* to be on the save side */
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
}
<Scan>[Cc\*][><!]/.*\n {
- if (g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
/* check for fixed format; we might have some conditional as part of multiline if like C<5 .and. & */
- if (isFixedForm && (g_col == 0))
+ if (yyextra->isFixedForm && (yyextra->col == 0))
{
- copyToOutput(yytext,(int)yyleng);
- g_nestingCount=0; // Fortran doesn't have an end comment
- g_commentStack.clear(); /* to be on the safe side */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->nestingCount=0; // Fortran doesn't have an end comment
+ yyextra->commentStack.clear(); /* to be on the safe side */
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
else
{
@@ -312,25 +194,25 @@ void replaceComment(int offset);
}
}
<Scan>!.*\n {
- if (g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
}
<Scan>[Cc\*].*\n {
- if (g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
- if (g_col == 0)
+ if (yyextra->col == 0)
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
else
{
@@ -339,24 +221,24 @@ void replaceComment(int offset);
}
}
<Scan>"\"" { /* start of a string */
- copyToOutput(yytext,(int)yyleng);
- g_stringContext = YY_START;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->stringContext = YY_START;
BEGIN(SkipString);
}
<Scan>' {
- copyToOutput(yytext,(int)yyleng);
- g_charContext = YY_START;
- if (g_lang!=SrcLangExt_VHDL)
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->charContext = YY_START;
+ if (yyextra->lang!=SrcLangExt_VHDL)
{
BEGIN(SkipChar);
}
}
<Scan>\n { /* new line */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<Scan>"//!"/.*\n[ \t]*"//"[\/!][^\/] | /* start C++ style special comment block */
<Scan>("///"[/]*)/[^/].*\n[ \t]*"//"[\/!][^\/] { /* start C++ style special comment block */
- if (g_mlBrief)
+ if (yyextra->mlBrief)
{
REJECT; // bail out if we do not need to convert
}
@@ -367,190 +249,194 @@ void replaceComment(int offset);
{
while (i<(int)yyleng && yytext[i]=='/') i++;
}
- g_blockHeadCol=g_col;
- copyToOutput("/**",3);
- replaceAliases(yytext+i);
- g_inSpecialComment=TRUE;
+ yyextra->blockHeadCol=yyextra->col;
+ copyToOutput(yyscanner,"/**",3);
+ replaceAliases(yyscanner,yytext+i);
+ yyextra->inSpecialComment=TRUE;
//BEGIN(SComment);
- g_readLineCtx=SComment;
+ yyextra->readLineCtx=SComment;
BEGIN(ReadLine);
}
}
<Scan>"//##Documentation".*/\n { /* Start of Rational Rose ANSI C++ comment block */
- if (g_mlBrief) REJECT;
+ if (yyextra->mlBrief) REJECT;
int i=17; //=strlen("//##Documentation");
- g_blockHeadCol=g_col;
- copyToOutput("/**",3);
- replaceAliases(yytext+i);
- g_inRoseComment=TRUE;
+ yyextra->blockHeadCol=yyextra->col;
+ copyToOutput(yyscanner,"/**",3);
+ replaceAliases(yyscanner,yytext+i);
+ yyextra->inRoseComment=TRUE;
BEGIN(SComment);
}
<Scan>"//"[!\/]/.*\n[ \t]*"//"[|\/][ \t]*[@\\]"}" { // next line contains an end marker, see bug 752712
- g_inSpecialComment=yytext[2]=='/' || yytext[2]=='!';
- copyToOutput(yytext,(int)yyleng);
- g_readLineCtx=YY_START;
+ yyextra->inSpecialComment=yytext[2]=='/' || yytext[2]=='!';
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
<Scan>"//"/.*\n { /* one line C++ comment */
- g_inSpecialComment=yytext[2]=='/' || yytext[2]=='!';
- copyToOutput(yytext,(int)yyleng);
- g_readLineCtx=YY_START;
+ yyextra->inSpecialComment=yytext[2]=='/' || yytext[2]=='!';
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
<Scan>"/**/" { /* avoid matching next rule for empty C comment, see bug 711723 */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<Scan>"/*"[*!]? { /* start of a C comment */
- if ((g_lang==SrcLangExt_Python) || (g_lang==SrcLangExt_Tcl))
+ if ((yyextra->lang==SrcLangExt_Python) || (yyextra->lang==SrcLangExt_Tcl))
{
REJECT;
}
- g_specialComment=(int)yyleng==3;
- g_nestingCount=1;
- g_commentStack.clear(); /* to be on the save side */
- copyToOutput(yytext,(int)yyleng);
+ yyextra->specialComment=(int)yyleng==3;
+ yyextra->nestingCount=1;
+ yyextra->commentStack.clear(); /* to be on the save side */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
<Scan>"#"("#")? {
- if (g_lang!=SrcLangExt_Python)
+ if (yyextra->lang!=SrcLangExt_Python)
{
REJECT;
}
else
{
- copyToOutput(yytext,(int)yyleng);
- g_nestingCount=0; // Python doesn't have an end comment for #
- g_commentStack.clear(); /* to be on the save side */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->nestingCount=0; // Python doesn't have an end comment for #
+ yyextra->commentStack.clear(); /* to be on the save side */
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
}
<Scan>"--!" {
- if (g_lang!=SrcLangExt_VHDL)
+ if (yyextra->lang!=SrcLangExt_VHDL)
{
REJECT;
}
else
{
- g_vhdl = TRUE;
- copyToOutput(yytext,(int)yyleng);
- g_nestingCount=0; // VHDL doesn't have an end comment
- g_commentStack.clear(); /* to be on the save side */
+ yyextra->vhdl = TRUE;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->nestingCount=0; // VHDL doesn't have an end comment
+ yyextra->commentStack.clear(); /* to be on the save side */
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
}
<Scan>![><!] {
- if (g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Fortran)
{
REJECT;
}
else
{
- copyToOutput(yytext,(int)yyleng);
- g_nestingCount=0; // Fortran doesn't have an end comment
- g_commentStack.clear(); /* to be on the save side */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->nestingCount=0; // Fortran doesn't have an end comment
+ yyextra->commentStack.clear(); /* to be on the save side */
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
}
+<CComment,ReadLine>{MAILADR} |
+<CComment,ReadLine>"<"{MAILADR}">" { // Mail address, to prevent seeing e.g x@code-factory.org as start of a code block
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ }
<CComment>"{@code"/[ \t\n] {
- copyToOutput("@code",5);
- g_lastCommentContext = YY_START;
- g_javaBlock=1;
- g_blockName=&yytext[1];
+ copyToOutput(yyscanner,"@code",5);
+ yyextra->lastCommentContext = YY_START;
+ yyextra->javaBlock=1;
+ yyextra->blockName=&yytext[1];
BEGIN(VerbatimCode);
}
<CComment,ReadLine>[\\@]("dot"|"code"|"msc"|"startuml")/[^a-z_A-Z0-9] { /* start of a verbatim block */
- copyToOutput(yytext,(int)yyleng);
- g_lastCommentContext = YY_START;
- g_javaBlock=0;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->lastCommentContext = YY_START;
+ yyextra->javaBlock=0;
if (qstrcmp(&yytext[1],"startuml")==0)
{
- g_blockName="uml";
+ yyextra->blockName="uml";
}
else
{
- g_blockName=&yytext[1];
+ yyextra->blockName=&yytext[1];
}
BEGIN(VerbatimCode);
}
<CComment,ReadLine>[\\@]("f$"|"f["|"f{") {
- copyToOutput(yytext,(int)yyleng);
- g_blockName=&yytext[1];
- if (g_blockName.at(1)=='[')
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->blockName=&yytext[1];
+ if (yyextra->blockName.at(1)=='[')
{
- g_blockName.at(1)=']';
+ yyextra->blockName.at(1)=']';
}
- else if (g_blockName.at(1)=='{')
+ else if (yyextra->blockName.at(1)=='{')
{
- g_blockName.at(1)='}';
+ yyextra->blockName.at(1)='}';
}
- g_lastCommentContext = YY_START;
+ yyextra->lastCommentContext = YY_START;
BEGIN(Verbatim);
}
<CComment,ReadLine>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"docbookonly"|"rtfonly"|"manonly")/[^a-z_A-Z0-9] { /* start of a verbatim block */
- copyToOutput(yytext,(int)yyleng);
- g_blockName=&yytext[1];
- g_lastCommentContext = YY_START;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->blockName=&yytext[1];
+ yyextra->lastCommentContext = YY_START;
BEGIN(Verbatim);
}
-<Scan>. { /* any ather character */
- copyToOutput(yytext,(int)yyleng);
+<Scan>. { /* any other character */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"f$"|"f]"|"f}") { /* end of verbatim block */
- copyToOutput(yytext,(int)yyleng);
- if (&yytext[1]==g_blockName) // end of formula
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ if (&yytext[1]==yyextra->blockName) // end of formula
{
- BEGIN(g_lastCommentContext);
+ BEGIN(yyextra->lastCommentContext);
}
- else if (&yytext[4]==g_blockName)
+ else if (&yytext[4]==yyextra->blockName)
{
- BEGIN(g_lastCommentContext);
+ BEGIN(yyextra->lastCommentContext);
}
}
<VerbatimCode>"{" {
- if (g_javaBlock==0)
+ if (yyextra->javaBlock==0)
{
REJECT;
}
else
{
- g_javaBlock++;
- copyToOutput(yytext,(int)yyleng);
+ yyextra->javaBlock++;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
}
<VerbatimCode>"}" {
- if (g_javaBlock==0)
+ if (yyextra->javaBlock==0)
{
REJECT;
}
else
{
- g_javaBlock--;
- if (g_javaBlock==0)
+ yyextra->javaBlock--;
+ if (yyextra->javaBlock==0)
{
- copyToOutput(" @endcode ",10);
- BEGIN(g_lastCommentContext);
+ copyToOutput(yyscanner," @endcode ",10);
+ BEGIN(yyextra->lastCommentContext);
}
else
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
}
}
<VerbatimCode>[\\@]("enddot"|"endcode"|"endmsc"|"enduml") { /* end of verbatim block */
- copyToOutput(yytext,(int)yyleng);
- if (&yytext[4]==g_blockName)
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ if (&yytext[4]==yyextra->blockName)
{
- BEGIN(g_lastCommentContext);
+ BEGIN(yyextra->lastCommentContext);
}
}
<VerbatimCode>^[ \t]*"//"[\!\/]? { /* skip leading comments */
- if (!g_inSpecialComment)
+ if (!yyextra->inSpecialComment)
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
else
{
@@ -559,25 +445,25 @@ void replaceComment(int offset);
{
l++;
}
- copyToOutput(yytext,l);
+ copyToOutput(yyscanner,yytext,l);
if (yyleng-l==3) // ends with //! or ///
{
- copyToOutput(" * ",3);
+ copyToOutput(yyscanner," * ",3);
}
else // ends with //
{
- copyToOutput("//",2);
+ copyToOutput(yyscanner,"//",2);
}
}
}
<Verbatim,VerbatimCode>[^@\/\\\n{}]* { /* any character not a backslash or new line or } */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<Verbatim,VerbatimCode>\n { /* new line in verbatim block */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<Verbatim>^[ \t]*"///" {
- if (g_blockName=="dot" || g_blockName=="msc" || g_blockName=="uml" || g_blockName.at(0)=='f')
+ if (yyextra->blockName=="dot" || yyextra->blockName=="msc" || yyextra->blockName=="uml" || yyextra->blockName.at(0)=='f')
{
// see bug 487871, strip /// from dot images and formulas.
int l=0;
@@ -585,8 +471,8 @@ void replaceComment(int offset);
{
l++;
}
- copyToOutput(yytext,l);
- copyToOutput(" ",3);
+ copyToOutput(yyscanner,yytext,l);
+ copyToOutput(yyscanner," ",3);
}
else // even slashes are verbatim (e.g. \verbatim, \code)
{
@@ -594,119 +480,119 @@ void replaceComment(int offset);
}
}
<Verbatim,VerbatimCode>. { /* any other character */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<SkipString>\\. { /* escaped character in string */
- if (g_lang==SrcLangExt_Fortran)
+ if (yyextra->lang==SrcLangExt_Fortran)
{
unput(yytext[1]);
- copyToOutput(yytext,1);
+ copyToOutput(yyscanner,yytext,1);
}
else
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
}
<SkipString>"\"" { /* end of string */
- copyToOutput(yytext,(int)yyleng);
- BEGIN(g_stringContext);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ BEGIN(yyextra->stringContext);
}
<SkipString>. { /* any other string character */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<SkipString>\n { /* new line inside string (illegal for some compilers) */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<SkipChar>\\. { /* escaped character */
- if (g_lang==SrcLangExt_Fortran)
+ if (yyextra->lang==SrcLangExt_Fortran)
{
unput(yytext[1]);
- copyToOutput(yytext,1);
+ copyToOutput(yyscanner,yytext,1);
}
else
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
}
<SkipChar>' { /* end of character literal */
- copyToOutput(yytext,(int)yyleng);
- BEGIN(g_charContext);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ BEGIN(yyextra->charContext);
}
<SkipChar>. { /* any other string character */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<SkipChar>\n { /* new line character */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
-<CComment>[^\\!@*\n{\"\/]* { /* anything that is not a '*' or command */
- copyToOutput(yytext,(int)yyleng);
+<CComment>[^ <\\!@*\n{\"\/]* { /* anything that is not a '*' or command */
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<CComment>"*"+[^*/\\@\n{\"]* { /* stars without slashes */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<CComment>"\"\"\"" { /* end of Python docstring */
- if (g_lang!=SrcLangExt_Python)
+ if (yyextra->lang!=SrcLangExt_Python)
{
REJECT;
}
else
{
- g_nestingCount--;
- g_pythonDocString = FALSE;
- copyToOutput(yytext,(int)yyleng);
+ yyextra->nestingCount--;
+ yyextra->pythonDocString = FALSE;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(Scan);
}
}
<CComment>\n { /* new line in comment */
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
/* in case of Fortran always end of comment */
- if (g_lang==SrcLangExt_Fortran)
+ if (yyextra->lang==SrcLangExt_Fortran)
{
BEGIN(Scan);
}
}
<CComment>"/"+"*" { /* nested C comment */
- if ((g_lang==SrcLangExt_Python) || (g_lang==SrcLangExt_Tcl))
+ if ((yyextra->lang==SrcLangExt_Python) || (yyextra->lang==SrcLangExt_Tcl))
{
REJECT;
}
- g_nestingCount++;
- g_commentStack.push(new CommentCtx(g_lineNr));
- copyToOutput(yytext,(int)yyleng);
+ yyextra->nestingCount++;
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<CComment>"*"+"/" { /* end of C comment */
- if ((g_lang==SrcLangExt_Python) || (g_lang==SrcLangExt_Tcl))
+ if ((yyextra->lang==SrcLangExt_Python) || (yyextra->lang==SrcLangExt_Tcl))
{
REJECT;
}
else
{
- copyToOutput(yytext,(int)yyleng);
- g_nestingCount--;
- if (g_nestingCount<=0)
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->nestingCount--;
+ if (yyextra->nestingCount<=0)
{
BEGIN(Scan);
}
else
{
- //g_nestingCount--;
- delete g_commentStack.pop();
+ //yyextra->nestingCount--;
+ delete yyextra->commentStack.pop();
}
}
}
/* Python an VHDL share CComment, so special attention for ending comments is required */
<CComment>"\n"/[ \t]*"#" {
- if (g_lang!=SrcLangExt_VHDL)
+ if (yyextra->lang!=SrcLangExt_VHDL)
{
REJECT;
}
else
{
- if (g_vhdl) // inside --! comment
+ if (yyextra->vhdl) // inside --! comment
{
- g_vhdl = FALSE;
- copyToOutput(yytext,(int)yyleng);
+ yyextra->vhdl = FALSE;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(Scan);
}
else // C-type comment
@@ -716,35 +602,35 @@ void replaceComment(int offset);
}
}
<CComment>"\n"/[ \t]*"-" {
- if (g_lang!=SrcLangExt_Python || g_pythonDocString)
+ if (yyextra->lang!=SrcLangExt_Python || yyextra->pythonDocString)
{
REJECT;
}
else
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(Scan);
}
}
<CComment>"\n"/[ \t]*[^ \t#\-] {
- if (g_lang==SrcLangExt_Python)
+ if (yyextra->lang==SrcLangExt_Python)
{
- if (g_pythonDocString)
+ if (yyextra->pythonDocString)
{
REJECT;
}
else
{
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(Scan);
}
}
- else if (g_lang==SrcLangExt_VHDL)
+ else if (yyextra->lang==SrcLangExt_VHDL)
{
- if (g_vhdl) // inside --! comment
+ if (yyextra->vhdl) // inside --! comment
{
- g_vhdl = FALSE;
- copyToOutput(yytext,(int)yyleng);
+ yyextra->vhdl = FALSE;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(Scan);
}
else // C-type comment
@@ -759,122 +645,122 @@ void replaceComment(int offset);
}
/* removed for bug 674842 (bug was introduced in rev 768)
<CComment>"'" {
- g_charContext = YY_START;
- copyToOutput(yytext,(int)yyleng);
+ yyextra->charContext = YY_START;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(SkipChar);
}
<CComment>"\"" {
- g_stringContext = YY_START;
- copyToOutput(yytext,(int)yyleng);
+ yyextra->stringContext = YY_START;
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(SkipString);
}
*/
<CComment>. {
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<SComment>^[ \t]*"///"[\/]*/\n {
- replaceComment(0);
+ replaceComment(yyscanner,0);
}
<SComment>\n[ \t]*"///"[\/]*/\n {
- replaceComment(1);
+ replaceComment(yyscanner,1);
}
<SComment>^[ \t]*"///"[^\/\n]/.*\n {
- replaceComment(0);
- g_readLineCtx=YY_START;
+ replaceComment(yyscanner,0);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
<SComment>\n[ \t]*"//"[\/!]("<")?[ \t]*[\\@]"}".*\n {
/* See Bug 752712: end the multiline comment when finding a @} or \} command */
- copyToOutput(" */",3);
- copyToOutput(yytext,(int)yyleng);
- g_inSpecialComment=FALSE;
- g_inRoseComment=FALSE;
+ copyToOutput(yyscanner," */",3);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->inSpecialComment=FALSE;
+ yyextra->inRoseComment=FALSE;
BEGIN(Scan);
}
<SComment>\n[ \t]*"///"[^\/\n]/.*\n {
- replaceComment(1);
- g_readLineCtx=YY_START;
+ replaceComment(yyscanner,1);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
<SComment>^[ \t]*"//!" | // just //!
<SComment>^[ \t]*"//!<"/.*\n | // or //!< something
<SComment>^[ \t]*"//!"[^<]/.*\n { // or //!something
- replaceComment(0);
- g_readLineCtx=YY_START;
+ replaceComment(yyscanner,0);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
<SComment>\n[ \t]*"//!" |
<SComment>\n[ \t]*"//!<"/.*\n |
<SComment>\n[ \t]*"//!"[^<\n]/.*\n {
- replaceComment(1);
- g_readLineCtx=YY_START;
+ replaceComment(yyscanner,1);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
<SComment>^[ \t]*"//##"/.*\n {
- if (!g_inRoseComment)
+ if (!yyextra->inRoseComment)
{
REJECT;
}
else
{
- replaceComment(0);
- g_readLineCtx=YY_START;
+ replaceComment(yyscanner,0);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
}
<SComment>\n[ \t]*"//##"/.*\n {
- if (!g_inRoseComment)
+ if (!yyextra->inRoseComment)
{
REJECT;
}
else
{
- replaceComment(1);
- g_readLineCtx=YY_START;
+ replaceComment(yyscanner,1);
+ yyextra->readLineCtx=YY_START;
BEGIN(ReadLine);
}
}
<SComment>\n { /* end of special comment */
- copyToOutput(" */",3);
- copyToOutput(yytext,(int)yyleng);
- g_inSpecialComment=FALSE;
- g_inRoseComment=FALSE;
+ copyToOutput(yyscanner," */",3);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ yyextra->inSpecialComment=FALSE;
+ yyextra->inRoseComment=FALSE;
BEGIN(Scan);
}
<ReadLine>"*/" {
- copyToOutput("*&zwj;/",7);
+ copyToOutput(yyscanner,"*&zwj;/",7);
}
<ReadLine>"*" {
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<ReadLine>[^\\@\n\*]* {
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<ReadLine>[^\\@\n\*]*/\n {
- copyToOutput(yytext,(int)yyleng);
- BEGIN(g_readLineCtx);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
+ BEGIN(yyextra->readLineCtx);
}
<CComment,ReadLine>[\\@][\\@][~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
<CComment,ReadLine>[\\@]"cond"/[^a-z_A-Z0-9] { // conditional section
- g_condCtx = YY_START;
+ yyextra->condCtx = YY_START;
BEGIN(CondLine);
}
<CComment,ReadLine>[\\@]"endcond"/[^a-z_A-Z0-9] { // end of conditional section
- bool oldSkip=g_skip;
- endCondSection();
- if (YY_START==CComment && oldSkip && !g_skip)
+ bool oldSkip=yyextra->skip;
+ endCondSection(yyscanner);
+ if (YY_START==CComment && oldSkip && !yyextra->skip)
{
//printf("** Adding start of comment!\n");
- if (g_lang!=SrcLangExt_Python &&
- g_lang!=SrcLangExt_VHDL &&
- g_lang!=SrcLangExt_Markdown &&
- g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Python &&
+ yyextra->lang!=SrcLangExt_VHDL &&
+ yyextra->lang!=SrcLangExt_Markdown &&
+ yyextra->lang!=SrcLangExt_Fortran)
{
ADDCHAR('/');
ADDCHAR('*');
- if (g_specialComment)
+ if (yyextra->specialComment)
{
ADDCHAR('*');
}
@@ -882,142 +768,284 @@ void replaceComment(int offset);
}
}
<CondLine>[!()&| \ta-z_A-Z0-9.\-]+ {
- bool oldSkip=g_skip;
- startCondSection(yytext);
- if ((g_condCtx==CComment || g_readLineCtx==SComment) &&
- !oldSkip && g_skip)
+ bool oldSkip=yyextra->skip;
+ startCondSection(yyscanner,yytext);
+ if ((yyextra->condCtx==CComment || yyextra->readLineCtx==SComment) &&
+ !oldSkip && yyextra->skip)
{
- if (g_lang!=SrcLangExt_Python &&
- g_lang!=SrcLangExt_VHDL &&
- g_lang!=SrcLangExt_Markdown &&
- g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Python &&
+ yyextra->lang!=SrcLangExt_VHDL &&
+ yyextra->lang!=SrcLangExt_Markdown &&
+ yyextra->lang!=SrcLangExt_Fortran)
{
ADDCHAR('*');
ADDCHAR('/');
}
}
- if (g_readLineCtx==SComment)
+ if (yyextra->readLineCtx==SComment)
{
BEGIN(SComment);
}
else
{
- BEGIN(g_condCtx);
+ BEGIN(yyextra->condCtx);
}
}
<CondLine>[ \t]*
<CComment,ReadLine>[\\@]"cond"[ \t\r]*/\n |
<CondLine>. { // forgot section id?
- if (YY_START!=CondLine) g_condCtx=YY_START;
- bool oldSkip=g_skip;
- startCondSection(" "); // fake section id causing the section to be hidden unconditionally
- if ((g_condCtx==CComment || g_readLineCtx==SComment) &&
- !oldSkip && g_skip)
+ if (YY_START!=CondLine) yyextra->condCtx=YY_START;
+ bool oldSkip=yyextra->skip;
+ startCondSection(yyscanner," "); // fake section id causing the section to be hidden unconditionally
+ if ((yyextra->condCtx==CComment || yyextra->readLineCtx==SComment) &&
+ !oldSkip && yyextra->skip)
{
//printf("** Adding terminator for comment!\n");
- if (g_lang!=SrcLangExt_Python &&
- g_lang!=SrcLangExt_VHDL &&
- g_lang!=SrcLangExt_Markdown &&
- g_lang!=SrcLangExt_Fortran)
+ if (yyextra->lang!=SrcLangExt_Python &&
+ yyextra->lang!=SrcLangExt_VHDL &&
+ yyextra->lang!=SrcLangExt_Markdown &&
+ yyextra->lang!=SrcLangExt_Fortran)
{
ADDCHAR('*');
ADDCHAR('/');
}
}
- if (*yytext=='\n') g_lineNr++;
- if (g_readLineCtx==SComment)
+ if (*yytext=='\n') yyextra->lineNr++;
+ if (yyextra->readLineCtx==SComment)
{
BEGIN(SComment);
}
else
{
- BEGIN(g_condCtx);
+ BEGIN(yyextra->condCtx);
}
}
<CComment,ReadLine>[\\@][a-z_A-Z][a-z_A-Z0-9]* { // expand alias without arguments
- replaceAliases(yytext);
+ replaceAliases(yyscanner,yytext);
}
<CComment,ReadLine>[\\@][a-z_A-Z][a-z_A-Z0-9]*"{" { // expand alias with arguments
- g_lastBlockContext=YY_START;
- g_blockCount=1;
- g_aliasString=yytext;
- g_lastEscaped=0;
+ yyextra->lastBlockContext=YY_START;
+ yyextra->blockCount=1;
+ yyextra->aliasString=yytext;
+ yyextra->lastEscaped=0;
BEGIN( ReadAliasArgs );
}
<ReadAliasArgs>^[ \t]*"//"[/!]/[^\n]+ { // skip leading special comments (see bug 618079)
}
<ReadAliasArgs>"*/" { // oops, end of comment in the middle of an alias?
- if (g_lang==SrcLangExt_Python)
+ if (yyextra->lang==SrcLangExt_Python)
{
REJECT;
}
else // abort the alias, restart scanning
{
- copyToOutput(g_aliasString,g_aliasString.length());
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yyextra->aliasString,yyextra->aliasString.length());
+ copyToOutput(yyscanner,yytext,(int)yyleng);
BEGIN(Scan);
}
}
<ReadAliasArgs>[^{}\n\\\*]+ {
- g_aliasString+=yytext;
- g_lastEscaped=FALSE;
+ yyextra->aliasString+=yytext;
+ yyextra->lastEscaped=FALSE;
}
<ReadAliasArgs>"\\" {
- if (g_lastEscaped) g_lastEscaped=FALSE;
- else g_lastEscaped=TRUE;
- g_aliasString+=yytext;
+ if (yyextra->lastEscaped) yyextra->lastEscaped=FALSE;
+ else yyextra->lastEscaped=TRUE;
+ yyextra->aliasString+=yytext;
}
<ReadAliasArgs>\n {
- g_aliasString+=yytext;
- g_lineNr++;
- g_lastEscaped=FALSE;
+ yyextra->aliasString+=yytext;
+ yyextra->lineNr++;
+ yyextra->lastEscaped=FALSE;
}
<ReadAliasArgs>"{" {
- g_aliasString+=yytext;
- if (!g_lastEscaped) g_blockCount++;
- g_lastEscaped=FALSE;
+ yyextra->aliasString+=yytext;
+ if (!yyextra->lastEscaped) yyextra->blockCount++;
+ yyextra->lastEscaped=FALSE;
}
<ReadAliasArgs>"}" {
- g_aliasString+=yytext;
- if (!g_lastEscaped) g_blockCount--;
- if (g_blockCount==0)
+ yyextra->aliasString+=yytext;
+ if (!yyextra->lastEscaped) yyextra->blockCount--;
+ if (yyextra->blockCount==0)
{
- replaceAliases(g_aliasString);
- BEGIN( g_lastBlockContext );
+ replaceAliases(yyscanner,yyextra->aliasString);
+ BEGIN( yyextra->lastBlockContext );
}
- g_lastEscaped=FALSE;
+ yyextra->lastEscaped=FALSE;
}
<ReadAliasArgs>. {
- g_aliasString+=yytext;
- g_lastEscaped=FALSE;
+ yyextra->aliasString+=yytext;
+ yyextra->lastEscaped=FALSE;
}
<ReadLine>. {
- copyToOutput(yytext,(int)yyleng);
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
%%
-void replaceComment(int offset)
+static void replaceCommentMarker(yyscan_t yyscanner,const char *s,int len)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ const char *p=s;
+ char c;
+ // copy leading blanks
+ while ((c=*p) && (c==' ' || c=='\t' || c=='\n'))
+ {
+ ADDCHAR(c);
+ yyextra->lineNr += c=='\n';
+ p++;
+ }
+ // replace start of comment marker by blanks and the last character by a *
+ int blanks=0;
+ while ((c=*p) && (c=='/' || c=='!' || c=='#'))
+ {
+ blanks++;
+ p++;
+ if (*p=='<') // comment-after-item marker
+ {
+ blanks++;
+ p++;
+ }
+ if (c=='!') // end after first !
+ {
+ break;
+ }
+ }
+ if (blanks>0)
+ {
+ while (blanks>2)
+ {
+ ADDCHAR(' ');
+ blanks--;
+ }
+ if (blanks>1) ADDCHAR('*');
+ ADDCHAR(' ');
+ }
+ // copy comment line to output
+ ADDARRAY(p,len-(int)(p-s));
+}
+
+static inline int computeIndent(const char *s)
{
- if (g_mlBrief || g_skip)
+ int col=0;
+ static int tabSize=Config_getInt(TAB_SIZE);
+ const char *p=s;
+ char c;
+ while ((c=*p++))
{
- copyToOutput(yytext,(int)yyleng);
+ if (c==' ') col++;
+ else if (c=='\t') col+=tabSize-(col%tabSize);
+ else break;
+ }
+ return col;
+}
+
+static inline void copyToOutput(yyscan_t yyscanner,const char *s,int len)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ int i;
+ if (yyextra->skip) // only add newlines.
+ {
+ for (i=0;i<len;i++)
+ {
+ if (s[i]=='\n')
+ {
+ ADDCHAR('\n');
+ //fprintf(stderr,"---> skip %d\n",g_lineNr);
+ yyextra->lineNr++;
+ }
+ }
+ }
+ else if (len>0)
+ {
+ ADDARRAY(s,len);
+ static int tabSize=Config_getInt(TAB_SIZE);
+ for (i=0;i<len;i++)
+ {
+ switch (s[i])
+ {
+ case '\n': yyextra->col=0;
+ //fprintf(stderr,"---> copy %d\n",g_lineNr);
+ yyextra->lineNr++; break;
+ case '\t': yyextra->col+=tabSize-(yyextra->col%tabSize); break;
+ default: yyextra->col++; break;
+ }
+ }
+ }
+}
+
+static void startCondSection(yyscan_t yyscanner,const char *sectId)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
+ CondParser prs;
+ bool expResult = prs.parse(yyextra->fileName,yyextra->lineNr,sectId);
+ yyextra->condStack.push(new CondCtx(yyextra->lineNr,sectId,yyextra->skip));
+ if (!expResult) // not enabled
+ {
+ yyextra->skip=TRUE;
+ }
+}
+
+static void endCondSection(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->condStack.isEmpty())
+ {
+ warn(yyextra->fileName,yyextra->lineNr,"Found \\endcond command without matching \\cond");
+ yyextra->skip=FALSE;
+ }
+ else
+ {
+ CondCtx *ctx = yyextra->condStack.pop();
+ yyextra->skip=ctx->skip;
+ }
+ //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
+}
+
+/** copies string \a s with length \a len to the output, while
+ * replacing any alias commands found in the string.
+ */
+static void replaceAliases(yyscan_t yyscanner,const char *s)
+{
+ QCString result = resolveAliasCmd(s);
+ //printf("replaceAliases(%s)->'%s'\n",s,result.data());
+ copyToOutput(yyscanner,result,result.length());
+}
+
+
+static int yyread(yyscan_t yyscanner,char *buf,int max_size)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ int bytesInBuf = yyextra->inBuf->curPos()-yyextra->inBufPos;
+ int bytesToCopy = QMIN(max_size,bytesInBuf);
+ memcpy(buf,yyextra->inBuf->data()+yyextra->inBufPos,bytesToCopy);
+ yyextra->inBufPos+=bytesToCopy;
+ return bytesToCopy;
+}
+
+static void replaceComment(yyscan_t yyscanner,int offset)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->mlBrief || yyextra->skip)
+ {
+ copyToOutput(yyscanner,yytext,(int)yyleng);
}
else
{
//printf("replaceComment(%s)\n",yytext);
int i=computeIndent(&yytext[offset]);
- if (i==g_blockHeadCol)
+ if (i==yyextra->blockHeadCol)
{
- replaceCommentMarker(yytext,(int)yyleng);
+ replaceCommentMarker(yyscanner,yytext,(int)yyleng);
}
else
{
- copyToOutput(" */",3);
+ copyToOutput(yyscanner," */",3);
int i;for (i=(int)yyleng-1;i>=0;i--) unput(yytext[i]);
- g_inSpecialComment=FALSE;
- BEGIN(Scan);
- }
+ yyextra->inSpecialComment=FALSE;
+ BEGIN(Scan);
+ }
}
}
@@ -1068,83 +1096,86 @@ static bool recognizeFixedForm(const char* contents)
*/
void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
{
+ yyscan_t yyscanner;
+ commentcnvYY_state extra;
+ commentcnvYYlex_init_extra(&extra,&yyscanner);
+#ifdef FLEX_DEBUG
+ commentcnvYYset_debug(1,yyscanner);
+#endif
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf("convertCppComments(%s)\n",fileName);
- g_inBuf = inBuf;
- g_outBuf = outBuf;
- g_inBufPos = 0;
- g_col = 0;
- g_mlBrief = Config_getBool(MULTILINE_CPP_IS_BRIEF);
- g_skip = FALSE;
- g_fileName = fileName;
- g_lang = getLanguageFromFileName(fileName);
- g_pythonDocString = FALSE;
- g_lineNr = 1;
- g_condStack.clear();
- g_condStack.setAutoDelete(TRUE);
- g_commentStack.clear();
- g_commentStack.setAutoDelete(TRUE);
- g_vhdl = FALSE;
+ yyextra->inBuf = inBuf;
+ yyextra->outBuf = outBuf;
+ yyextra->inBufPos = 0;
+ yyextra->col = 0;
+ yyextra->mlBrief = Config_getBool(MULTILINE_CPP_IS_BRIEF);
+ yyextra->skip = FALSE;
+ yyextra->fileName = fileName;
+ yyextra->lang = getLanguageFromFileName(fileName);
+ yyextra->pythonDocString = FALSE;
+ yyextra->lineNr = 1;
+ yyextra->condStack.clear();
+ yyextra->condStack.setAutoDelete(TRUE);
+ yyextra->commentStack.clear();
+ yyextra->commentStack.setAutoDelete(TRUE);
+ yyextra->vhdl = FALSE;
printlex(yy_flex_debug, TRUE, __FILE__, fileName);
- isFixedForm = FALSE;
- if (g_lang==SrcLangExt_Fortran)
+ yyextra->isFixedForm = FALSE;
+ if (yyextra->lang==SrcLangExt_Fortran)
{
- isFixedForm = recognizeFixedForm(inBuf->data());
+ yyextra->isFixedForm = recognizeFixedForm(inBuf->data());
}
- if (g_lang==SrcLangExt_Markdown)
+ if (yyextra->lang==SrcLangExt_Markdown)
{
- g_nestingCount=0;
+ yyextra->nestingCount=0;
BEGIN(CComment);
- g_commentStack.push(new CommentCtx(g_lineNr));
+ yyextra->commentStack.push(new CommentCtx(yyextra->lineNr));
}
else
{
BEGIN(Scan);
}
- yylex();
- while (!g_condStack.isEmpty())
+ yylex(yyscanner);
+ while (!yyextra->condStack.isEmpty())
{
- CondCtx *ctx = g_condStack.pop();
+ CondCtx *ctx = yyextra->condStack.pop();
QCString sectionInfo = " ";
if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx->sectionId.stripWhiteSpace().data());
- warn(g_fileName,ctx->lineNr,"Conditional section%sdoes not have "
+ warn(yyextra->fileName,ctx->lineNr,"Conditional section%sdoes not have "
"a corresponding \\endcond command within this file.",sectionInfo.data());
}
- if (g_nestingCount>0 && g_lang!=SrcLangExt_Markdown)
+ if (yyextra->nestingCount>0 && yyextra->lang!=SrcLangExt_Markdown)
{
QCString tmp= "(probable line reference: ";
bool first = TRUE;
- while (!g_commentStack.isEmpty())
+ while (!yyextra->commentStack.isEmpty())
{
- CommentCtx *ctx = g_commentStack.pop();
+ CommentCtx *ctx = yyextra->commentStack.pop();
if (!first) tmp += ", ";
tmp += QCString().setNum(ctx->lineNr);
first = FALSE;
delete ctx;
}
tmp += ")";
- warn(g_fileName,g_lineNr,"Reached end of file while still inside a (nested) comment. "
- "Nesting level %d %s",g_nestingCount,tmp.data());
+ warn(yyextra->fileName,yyextra->lineNr,"Reached end of file while still inside a (nested) comment. "
+ "Nesting level %d %s",yyextra->nestingCount,tmp.data());
}
- g_commentStack.clear();
- g_nestingCount = 0;
+ yyextra->commentStack.clear();
+ yyextra->nestingCount = 0;
if (Debug::isFlagSet(Debug::CommentCnv))
{
- g_outBuf->at(g_outBuf->curPos())='\0';
+ yyextra->outBuf->at(yyextra->outBuf->curPos())='\0';
Debug::print(Debug::CommentCnv,0,"-----------\nCommentCnv: %s\n"
- "output=[\n%s]\n-----------\n",fileName,g_outBuf->data()
+ "output=[\n%s]\n-----------\n",fileName,yyextra->outBuf->data()
);
}
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
+ commentcnvYYlex_destroy(yyscanner);
}
//----------------------------------------------------------------------------
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void commentcnvYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
#include "commentcnv.l.h"
diff --git a/src/commentscan.h b/src/commentscan.h
index 7d2189f..f471890 100644
--- a/src/commentscan.h
+++ b/src/commentscan.h
@@ -19,7 +19,7 @@
#include "types.h"
class Entry;
-class ParserInterface;
+class OutlineParserInterface;
/** @file
* @brief Interface for the comment block parser */
@@ -72,7 +72,7 @@ QCString preprocessCommentBlock(const QCString &comment,
* where to proceed parsing. FALSE indicates no further processing is
* needed.
*/
-bool parseCommentBlock(ParserInterface *parser,
+bool parseCommentBlock(OutlineParserInterface *parser,
Entry *curEntry,
const QCString &comment,
const QCString &fileName,
diff --git a/src/commentscan.l b/src/commentscan.l
index edd4910..fa454e5 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -395,7 +395,7 @@ class GuardedSection
* statics
*/
-static ParserInterface *langParser; // the language parser that is calling us
+static OutlineParserInterface *langParser; // the language parser that is calling us
static QCString inputString; // input string
static int inputPosition; // read pointer
static QCString yyFileName; // file name that is read from
@@ -533,7 +533,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,
if (listName==0) return;
//printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append);
- ListItemInfo *lii=0;
+ const ListItemInfo *lii=0;
RefList *refList = Doxygen::xrefLists->find(listName);
if (refList==0) // new list
{
@@ -541,16 +541,13 @@ static void addXRefItem(const char *listName,const char *itemTitle,
Doxygen::xrefLists->insert(listName,refList);
//printf("new list!\n");
}
- if (current->sli)
+ for (const ListItemInfo &item : current->sli)
{
- QListIterator<ListItemInfo> slii(*current->sli);
- for (slii.toLast();(lii=slii.current());--slii)
+ if (qstrcmp(item.type,listName)==0)
{
- if (qstrcmp(lii->type,listName)==0)
- {
- //printf("found %s lii->type=%s\n",listName,lii->type);
- break;
- }
+ //printf("found %s lii->type=%s\n",listName,lii->type);
+ lii = &item;
+ break;
}
}
if (lii && append) // already found item of same type just before this one
@@ -605,7 +602,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,
g_sectionTitle,SectionInfo::Anchor,
g_sectionLevel);
Doxygen::sectionDict->append(anchorLabel,si);
- current->anchors->append(si);
+ current->anchors.push_back(si);
}
}
outputXRef.resize(0);
@@ -673,7 +670,7 @@ static void addSection()
g_sectionTitle,sectionLevelToType(g_sectionLevel),g_sectionLevel);
// add section to this entry
- current->anchors->append(si);
+ current->anchors.push_back(si);
// add section to the global dictionary
Doxygen::sectionDict->append(g_sectionLabel,si);
@@ -850,7 +847,7 @@ static void addAnchor(const char *anchor)
{
si = new SectionInfo(yyFileName,yyLineNr,anchor,0,SectionInfo::Anchor,0);
Doxygen::sectionDict->append(anchor,si);
- current->anchors->append(si);
+ current->anchors.push_back(si);
}
}
@@ -1824,7 +1821,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
addOutput(yytext);
// we add subpage labels as a kind of "inheritance" relation to prevent
// needing to add another list to the Entry class.
- current->extends->append(new BaseInfo(yytext,Public,Normal));
+ current->extends.push_back(BaseInfo(yytext,Public,Normal));
BEGIN(SubpageTitle);
}
<SubpageLabel>{DOCNL} { // missing argument
@@ -1973,7 +1970,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
BEGIN(Comment);
}
<GuardParamEnd>{B}* {
- if (!g_spaceBeforeIf.isEmpty()) // needed for 665313 in combation with bug620924
+ if (!g_spaceBeforeIf.isEmpty()) // needed for 665313 in combination with bug620924
{
addOutput(g_spaceBeforeIf);
}
@@ -2141,8 +2138,8 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
/* ----- handle argument of ingroup command ------- */
<InGroupParam>{LABELID} { // group id
- current->groups->append(
- new Grouping(yytext, Grouping::GROUPING_INGROUP)
+ current->groups.push_back(
+ Grouping(yytext, Grouping::GROUPING_INGROUP)
);
inGroupParamFound=TRUE;
}
@@ -2224,8 +2221,8 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
/* ----- handle argument of inherit command ------- */
<InheritParam>({ID}("::"|"."))*{ID} { // found argument
- current->extends->append(
- new BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal)
+ current->extends.push_back(
+ BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal)
);
BEGIN( Comment );
}
@@ -2247,8 +2244,8 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
/* ----- handle argument of extends and implements commands ------- */
<ExtendsParam>({ID}("::"|"."))*{ID} { // found argument
- current->extends->append(
- new BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal)
+ current->extends.push_back(
+ BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal)
);
BEGIN( Comment );
}
@@ -3130,7 +3127,7 @@ QCString preprocessCommentBlock(const QCString &comment,
}
}
-bool parseCommentBlock(/* in */ ParserInterface *parser,
+bool parseCommentBlock(/* in */ OutlineParserInterface *parser,
/* in */ Entry *curEntry,
/* in */ const QCString &comment,
/* in */ const QCString &fileName,
@@ -3284,13 +3281,4 @@ static void handleGuard(const QCString &expr)
}
}
-
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void commentscanYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
#include "commentscan.l.h"
diff --git a/src/condparser.cpp b/src/condparser.cpp
index 74e26bc..9d7ac45 100644
--- a/src/condparser.cpp
+++ b/src/condparser.cpp
@@ -257,7 +257,7 @@ bool CondParser::parseLevel3()
bool CondParser::parseVar()
{
- bool ans = 0;
+ bool ans = false;
switch (m_tokenType)
{
case VARIABLE:
diff --git a/src/condparser.h b/src/condparser.h
index 09a4f74..1ad13b1 100644
--- a/src/condparser.h
+++ b/src/condparser.h
@@ -13,7 +13,7 @@
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
- * C++ Expression parser for EXTABLED_SETIONS in Doxygen
+ * C++ Expression parser for ENABLED_SECTIONS in Doxygen
*
* Features used:
* Operators:
diff --git a/src/config.xml b/src/config.xml
index d206203..dfe22e2 100644
--- a/src/config.xml
+++ b/src/config.xml
@@ -953,7 +953,7 @@ Go to the <a href="commands.html">next</a> section or return to the
]]>
</docs>
</option>
- <option type='bool' id='CASE_SENSE_NAMES' defval='0' altdefval='portable_fileSystemIsCaseSensitive()'>
+ <option type='bool' id='CASE_SENSE_NAMES' defval='0' altdefval='Portable::fileSystemIsCaseSensitive()'>
<docs>
<![CDATA[
If the \c CASE_SENSE_NAMES tag is set to \c NO then doxygen
diff --git a/src/configimpl.l b/src/configimpl.l
index 0cc5c88..6987e59 100644
--- a/src/configimpl.l
+++ b/src/configimpl.l
@@ -603,7 +603,7 @@ static FILE *tryPath(const char *path,const char *fileName)
QFileInfo fi(absName);
if (fi.exists() && fi.isFile())
{
- FILE *f=portable_fopen(absName,"r");
+ FILE *f=Portable::fopen(absName,"r");
if (!f) config_err("could not open file %s for reading\n",absName.data());
return f;
}
@@ -619,7 +619,7 @@ static FILE *findFile(const char *fileName)
{
return 0;
}
- if (portable_isAbsolutePath(fileName))
+ if (Portable::isAbsolutePath(fileName))
{
return tryPath(NULL, fileName);
}
@@ -1012,7 +1012,7 @@ static void substEnvVarsInString(QCString &s)
while ((i=re.match(s,p,&l))!=-1 || (i=re2.match(s,p,&l))!=-1)
{
//printf("Found environment var s.mid(%d,%d)='%s'\n",i+2,l-3,s.mid(i+2,l-3).data());
- QCString env=portable_getenv(s.mid(i+2,l-3));
+ QCString env=Portable::getenv(s.mid(i+2,l-3));
substEnvVarsInString(env); // recursively expand variables if needed.
s = s.left(i)+env+s.right(s.length()-i-l);
p=i+env.length(); // next time start at the end of the expanded string
@@ -1579,7 +1579,7 @@ void Config::checkAndCorrect()
}
else
{
- QFileInfo dp(dotPath+"/dot"+portable_commandExtension());
+ QFileInfo dp(dotPath+"/dot"+Portable::commandExtension());
if (!dp.exists() || !dp.isFile())
{
warn_uncond("the dot tool could not be found at %s\n",dotPath.data());
@@ -1607,10 +1607,10 @@ void Config::checkAndCorrect()
QFileInfo pu(plantumlJarPath);
if (pu.exists() && pu.isDir()) // PLANTUML_JAR_PATH is directory
{
- QFileInfo jar(plantumlJarPath+portable_pathSeparator()+"plantuml.jar");
+ QFileInfo jar(plantumlJarPath+Portable::pathSeparator()+"plantuml.jar");
if (jar.exists() && jar.isFile())
{
- plantumlJarPath = jar.dirPath(TRUE).utf8()+portable_pathSeparator();
+ plantumlJarPath = jar.dirPath(TRUE).utf8()+Portable::pathSeparator();
}
else
{
@@ -1621,7 +1621,7 @@ void Config::checkAndCorrect()
}
else if (pu.exists() && pu.isFile() && plantumlJarPath.right(4)==".jar") // PLANTUML_JAR_PATH is file
{
- plantumlJarPath = pu.dirPath(TRUE).utf8()+portable_pathSeparator();
+ plantumlJarPath = pu.dirPath(TRUE).utf8()+Portable::pathSeparator();
}
else
{
@@ -1635,7 +1635,7 @@ void Config::checkAndCorrect()
QCString &diaPath = Config_getString(DIA_PATH);
if (!diaPath.isEmpty())
{
- QFileInfo dp(diaPath+"/dia"+portable_commandExtension());
+ QFileInfo dp(diaPath+"/dia"+Portable::commandExtension());
if (!dp.exists() || !dp.isFile())
{
warn_uncond("dia could not be found at %s\n",diaPath.data());
diff --git a/src/constexp.h b/src/constexp.h
index 8bf582e..0b52e14 100644
--- a/src/constexp.h
+++ b/src/constexp.h
@@ -19,24 +19,17 @@
#ifndef _CONSTEXP_H
#define _CONSTEXP_H
-#include "cppvalue.h"
#include <qcstring.h>
-#define YYSTYPE CPPValue
-typedef void* yyscan_t;
-struct constexpYY_state
+class ConstExpressionParser
{
- QCString g_strToken;
- CPPValue g_resultValue;
- int g_constExpLineNr;
- QCString g_constExpFileName;
-
- const char *g_inputString;
- int g_inputPosition;
+ public:
+ ConstExpressionParser();
+ ~ConstExpressionParser();
+ bool parse(const char *fileName,int line,const QCString &expression);
+ private:
+ struct Private;
+ Private *p;
};
-extern bool parseconstexp(const char *fileName,int line,const QCString &s);
-extern int constexpYYparse(yyscan_t);
-extern int constexpYYlex(YYSTYPE *lvalp, yyscan_t);
-struct constexpYY_state* constexpYYget_extra (yyscan_t yyscanner );
#endif
diff --git a/src/constexp.l b/src/constexp.l
index b6b3c5c..eae8a3b 100644
--- a/src/constexp.l
+++ b/src/constexp.l
@@ -24,6 +24,7 @@
%{
#include "constexp.h"
+#include "constexp_p.h"
#include "cppvalue.h"
#include "ce_parse.hpp" // generated header file
#include "message.h"
@@ -31,7 +32,6 @@
#define YY_NO_INPUT 1
#define YY_NO_UNISTD_H 1
-
static const char *stateToString(int state);
static int yyread(char *buf,int max_size,yyscan_t yyscanner);
@@ -70,23 +70,23 @@ CONSTSUFFIX ([uU][lL]?[lL]?)|([lL][lL]?[uU]?)
"(" { return TOK_LPAREN; }
")" { return TOK_RPAREN; }
"'"(([^\'\n\r\\]+)|(\\(([ntvbrfa\\?'\"])|([0-9]+)|([xX][0-9a-fA-F]+))))"'" {
- yyextra->g_strToken=yytext;
+ yyextra->strToken=yytext;
return TOK_CHARACTER;
}
-0[0-7]*{CONSTSUFFIX}? { yyextra->g_strToken=yytext;
+0[0-7]*{CONSTSUFFIX}? { yyextra->strToken=yytext;
return TOK_OCTALINT;
}
-[1-9][0-9]*{CONSTSUFFIX}? { yyextra->g_strToken=yytext;
+[1-9][0-9]*{CONSTSUFFIX}? { yyextra->strToken=yytext;
return TOK_DECIMALINT;
}
-(0x|0X)[0-9a-fA-F]+{CONSTSUFFIX}? { yyextra->g_strToken=yytext+2;
+(0x|0X)[0-9a-fA-F]+{CONSTSUFFIX}? { yyextra->strToken=yytext+2;
return TOK_HEXADECIMALINT;
}
(([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+))([eE]([\-\+])?[0-9]+)?([fFlL])? {
- yyextra->g_strToken=yytext; return TOK_FLOAT;
+ yyextra->strToken=yytext; return TOK_FLOAT;
}
([0-9]+[eE])([\-\+])?[0-9]+([fFlL])? {
- yyextra->g_strToken=yytext; return TOK_FLOAT;
+ yyextra->strToken=yytext; return TOK_FLOAT;
}
.
\n
@@ -97,43 +97,56 @@ static int yyread(char *buf,int max_size,yyscan_t yyscanner)
{
struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
int c=0;
- while( c < max_size && yyextra->g_inputString[yyextra->g_inputPosition] )
+ while( c < max_size && yyextra->inputString[yyextra->inputPosition] )
{
- *buf = yyextra->g_inputString[yyextra->g_inputPosition++] ;
+ *buf = yyextra->inputString[yyextra->inputPosition++] ;
c++; buf++;
}
return c;
}
+struct ConstExpressionParser::Private
+{
+ yyscan_t yyscanner;
+ struct constexpYY_state constexpYY_extra;
+};
-static yyscan_t yyscanner;
-static struct constexpYY_state constexpYY_extra;
-bool parseconstexp(const char *fileName,int lineNr,const QCString &s)
+ConstExpressionParser::ConstExpressionParser()
{
- constexpYYlex_init_extra(&constexpYY_extra, &yyscanner);
- struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ p = new Private;
+ constexpYYlex_init_extra(&p->constexpYY_extra, &p->yyscanner);
+}
+
+ConstExpressionParser::~ConstExpressionParser()
+{
+ constexpYYlex_destroy(p->yyscanner);
+ delete p;
+}
+
+bool ConstExpressionParser::parse(const char *fileName,int lineNr,const QCString &s)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)p->yyscanner;
#ifdef FLEX_DEBUG
yyset_debug(1,yyscanner);
#endif
- yyextra->g_constExpFileName = fileName;
- yyextra->g_constExpLineNr = lineNr;
- yyextra->g_inputString = s;
- yyextra->g_inputPosition = 0;
- constexpYYrestart( yyin, yyscanner );
+ yyextra->constExpFileName = fileName;
+ yyextra->constExpLineNr = lineNr;
+ yyextra->inputString = s;
+ yyextra->inputPosition = 0;
+ constexpYYrestart( yyin, p->yyscanner );
printlex(yy_flex_debug, TRUE, __FILE__, fileName);
//printf("Expression: '%s'\n",s.data());
- constexpYYparse(yyscanner);
+ constexpYYparse(p->yyscanner);
//printf("Result: %ld\n",(long)g_resultValue);
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
- bool result = (long)yyextra->g_resultValue!=0;
+ bool result = (long)yyextra->resultValue!=0;
- constexpYYlex_destroy(yyscanner);
return result;
}
diff --git a/src/constexp.y b/src/constexp.y
index 62a51f3..100614a 100644
--- a/src/constexp.y
+++ b/src/constexp.y
@@ -19,21 +19,16 @@
%{
#include "cppvalue.h"
-#include "constexp.h"
+#include "constexp_p.h"
#include "message.h"
-#if defined(_MSC_VER)
-#define MSDOS
-#endif
-
-
#include <stdio.h>
#include <stdlib.h>
int constexpYYerror(yyscan_t yyscanner, const char *s)
{
struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner);
- warn(yyextra->g_constExpFileName, yyextra->g_constExpLineNr,
+ warn(yyextra->constExpFileName, yyextra->constExpLineNr,
"preprocessing issue while doing constant expression evaluation: %s",s);
return 0;
}
@@ -80,7 +75,7 @@ int constexpYYerror(yyscan_t yyscanner, const char *s)
start: constant_expression
{
struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner);
- yyextra->g_resultValue = $1; return 0;
+ yyextra->resultValue = $1; return 0;
}
;
@@ -272,27 +267,27 @@ primary_expression: constant
constant: TOK_OCTALINT
{
struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner);
- $$ = parseOctal(yyextra->g_strToken);
+ $$ = parseOctal(yyextra->strToken);
}
| TOK_DECIMALINT
{
struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner);
- $$ = parseDecimal(yyextra->g_strToken);
+ $$ = parseDecimal(yyextra->strToken);
}
| TOK_HEXADECIMALINT
{
struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner);
- $$ = parseHexadecimal(yyextra->g_strToken);
+ $$ = parseHexadecimal(yyextra->strToken);
}
| TOK_CHARACTER
{
struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner);
- $$ = parseCharacter(yyextra->g_strToken);
+ $$ = parseCharacter(yyextra->strToken);
}
| TOK_FLOAT
{
struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner);
- $$ = parseFloat(yyextra->g_strToken);
+ $$ = parseFloat(yyextra->strToken);
}
;
diff --git a/src/constexp_p.h b/src/constexp_p.h
new file mode 100644
index 0000000..ad09b2d
--- /dev/null
+++ b/src/constexp_p.h
@@ -0,0 +1,44 @@
+/******************************************************************************
+ *
+ * Copyright (C) 1997-2019 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef _CONSTEXP_P_H
+#define _CONSTEXP_P_H
+
+#include <qcstring.h>
+
+//! @file
+//! @brief Private interface between Parser (constexp.y) and Lexer (constexp.l)
+
+#include "cppvalue.h"
+#define YYSTYPE CPPValue
+
+typedef void* yyscan_t;
+struct constexpYY_state
+{
+ QCString strToken;
+ CPPValue resultValue;
+ int constExpLineNr;
+ QCString constExpFileName;
+
+ const char *inputString;
+ int inputPosition;
+};
+constexpYY_state* constexpYYget_extra(yyscan_t yyscanner );
+
+extern int constexpYYlex(YYSTYPE *lvalp, yyscan_t);
+extern int constexpYYparse(yyscan_t);
+
+
+#endif
diff --git a/src/context.cpp b/src/context.cpp
index 8b7643a..5ee89cd 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -1079,7 +1079,7 @@ class TranslateContext::Private
s_inst.addProperty("fileMembers", &Private::fileMembers);
//%% string fileMembersDescription
s_inst.addProperty("fileMembersDescription", &Private::fileMembersDescription);
- //%% string relatedPagesDescripiton
+ //%% string relatedPagesDescription
s_inst.addProperty("relatedPagesDesc", &Private::relatedPagesDesc);
//%% string more
s_inst.addProperty("more", &Private::more);
@@ -1133,7 +1133,7 @@ class TranslateContext::Private
s_inst.addProperty("referencesRelation", &Private::referencesRelation);
//%% markerstring inheritedFrom
s_inst.addProperty("inheritedFrom", &Private::inheritedFrom);
- //%% string addtionalInheritedMembers
+ //%% string additionalInheritedMembers
s_inst.addProperty("additionalInheritedMembers",&Private::additionalInheritedMembers);
//%% string includeDependencyGraph:container_name
s_inst.addProperty("includeDependencyGraph",&Private::includeDependencyGraph);
@@ -1302,8 +1302,8 @@ static TemplateVariant parseDoc(const Definition *def,const QCString &file,int l
static TemplateVariant parseCode(MemberDef *md,const QCString &scopeName,const QCString &relPath,
const QCString &code,int startLine=-1,int endLine=-1,bool showLineNumbers=FALSE)
{
- ParserInterface *pIntf = Doxygen::parserManager->getParser(md->getDefFileExtension());
- pIntf->resetCodeParserState();
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(md->getDefFileExtension());
+ intf.resetCodeParserState();
QGString s;
FTextStream t(&s);
switch (g_globals.outputFormat)
@@ -1311,14 +1311,14 @@ static TemplateVariant parseCode(MemberDef *md,const QCString &scopeName,const Q
case ContextOutputFormat_Html:
{
HtmlCodeGenerator codeGen(t,relPath);
- pIntf->parseCode(codeGen,scopeName,code,md->getLanguage(),FALSE,0,md->getBodyDef(),
+ intf.parseCode(codeGen,scopeName,code,md->getLanguage(),FALSE,0,md->getBodyDef(),
startLine,endLine,TRUE,md,showLineNumbers,md);
}
break;
case ContextOutputFormat_Latex:
{
LatexCodeGenerator codeGen(t,relPath,md->docFile());
- pIntf->parseCode(codeGen,scopeName,code,md->getLanguage(),FALSE,0,md->getBodyDef(),
+ intf.parseCode(codeGen,scopeName,code,md->getLanguage(),FALSE,0,md->getBodyDef(),
startLine,endLine,TRUE,md,showLineNumbers,md);
}
break;
@@ -1333,8 +1333,8 @@ static TemplateVariant parseCode(MemberDef *md,const QCString &scopeName,const Q
static TemplateVariant parseCode(const FileDef *fd,const QCString &relPath)
{
static bool filterSourceFiles = Config_getBool(FILTER_SOURCE_FILES);
- ParserInterface *pIntf = Doxygen::parserManager->getParser(fd->getDefFileExtension());
- pIntf->resetCodeParserState();
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(fd->getDefFileExtension());
+ intf.resetCodeParserState();
QGString s;
FTextStream t(&s);
switch (g_globals.outputFormat)
@@ -1342,7 +1342,7 @@ static TemplateVariant parseCode(const FileDef *fd,const QCString &relPath)
case ContextOutputFormat_Html:
{
HtmlCodeGenerator codeGen(t,relPath);
- pIntf->parseCode(codeGen,0,
+ intf.parseCode(codeGen,0,
fileToString(fd->absFilePath(),filterSourceFiles,TRUE), // the sources
fd->getLanguage(), // lang
FALSE, // isExampleBlock
@@ -1361,7 +1361,7 @@ static TemplateVariant parseCode(const FileDef *fd,const QCString &relPath)
case ContextOutputFormat_Latex:
{
LatexCodeGenerator codeGen(t,relPath,fd->docFile());
- pIntf->parseCode(codeGen,0,
+ intf.parseCode(codeGen,0,
fileToString(fd->absFilePath(),filterSourceFiles,TRUE), // the sources
fd->getLanguage(), // lang
FALSE, // isExampleBlock
@@ -1978,7 +1978,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
);
}
@@ -1987,7 +1987,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
cg->writeGraph(t,GOF_EPS,EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_classDef->getOutputFileBase()+".tex",
relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
);
}
@@ -2077,7 +2077,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_classDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
);
}
@@ -2086,7 +2086,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
{
cg->writeGraph(t,GOF_EPS,EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_classDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_classDef->getOutputFileBase()+".tex",
relPathAsString(),TRUE,TRUE,g_globals.dynSectionId
);
}
@@ -2353,7 +2353,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
- if (cd->name().find('@')==-1 &&
+ if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0
@@ -2381,7 +2381,7 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
addTemplateDecls(parent,tl);
}
const ClassDef *cd=dynamic_cast<const ClassDef *>(d);
- if (cd->templateArguments())
+ if (!cd->templateArguments().empty())
{
ArgumentListContext *al = ArgumentListContext::alloc(cd->templateArguments(),cd,relPathAsString());
// since a TemplateVariant does take ownership of the object, we add it
@@ -2422,10 +2422,10 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
}
TemplateVariant typeConstraints() const
{
- if (m_classDef->typeConstraints())
+ if (!m_classDef->typeConstraints().empty())
{
Cachable &cache = getCache();
- if (!cache.typeConstraints && m_classDef->typeConstraints())
+ if (!cache.typeConstraints && !m_classDef->typeConstraints().empty())
{
cache.typeConstraints.reset(ArgumentListContext::alloc(m_classDef->typeConstraints(),m_classDef,relPathAsString()));
}
@@ -2941,7 +2941,7 @@ class NamespaceContext::Private : public DefinitionContext<NamespaceContext::Pri
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
- if (cd->name().find('@')==-1 &&
+ if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0)
@@ -3123,7 +3123,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -3132,7 +3132,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
cg->writeGraph(t,GOF_EPS,EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_fileDef->getOutputFileBase()+".tex",
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -3175,7 +3175,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_fileDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -3184,7 +3184,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
{
cg->writeGraph(t,GOF_EPS,EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_fileDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_fileDef->getOutputFileBase()+".tex",
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -3405,7 +3405,7 @@ class FileContext::Private : public DefinitionContext<FileContext::Private>
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
- if (cd->name().find('@')==-1 &&
+ if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0)
@@ -3613,7 +3613,7 @@ class DirContext::Private : public DefinitionContext<DirContext::Private>
graph->writeGraph(t,GOF_BITMAP,
EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_dirDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_dirDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),
TRUE,
g_globals.dynSectionId,
@@ -3625,7 +3625,7 @@ class DirContext::Private : public DefinitionContext<DirContext::Private>
graph->writeGraph(t,GOF_EPS,
EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_dirDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_dirDef->getOutputFileBase()+".tex",
relPathAsString(),
TRUE,
g_globals.dynSectionId,
@@ -4450,8 +4450,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
}
TemplateVariant isAnonymous() const
{
- QCString name = m_memberDef->name();
- return !name.isEmpty() && name.at(0)=='@';
+ return m_memberDef->isAnonymous();
}
TemplateVariant anonymousType() const
{
@@ -4529,7 +4528,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
TemplateVariant templateArgs() const
{
Cachable &cache = getCache();
- if (!cache.templateArgs && m_memberDef->templateArguments())
+ if (!cache.templateArgs && !m_memberDef->templateArguments().empty())
{
cache.templateArgs.reset(ArgumentListContext::alloc(m_memberDef->templateArguments(),m_memberDef,relPathAsString()));
}
@@ -4644,7 +4643,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
return createLinkedText(m_memberDef,relPathAsString(),
m_memberDef->displayDefinition());
}
- const ArgumentList *getDefArgList() const
+ const ArgumentList &getDefArgList() const
{
return (m_memberDef->isDocsForDefinition()) ?
m_memberDef->argumentList() : m_memberDef->declArgumentList();
@@ -4654,8 +4653,8 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
Cachable &cache = getCache();
if (!cache.arguments)
{
- const ArgumentList *defArgList = getDefArgList();
- if (defArgList && !m_memberDef->isProperty())
+ const ArgumentList &defArgList = getDefArgList();
+ if (!m_memberDef->isProperty())
{
cache.arguments.reset(ArgumentListContext::alloc(defArgList,m_memberDef,relPathAsString()));
}
@@ -4668,35 +4667,31 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
}
TemplateVariant hasParameters() const
{
- return getDefArgList()!=0;
+ return !getDefArgList().empty();
}
TemplateVariant hasConstQualifier() const
{
- const ArgumentList *al = getDefArgList();
- return al ? al->constSpecifier : FALSE;
+ return getDefArgList().constSpecifier;
}
TemplateVariant hasVolatileQualifier() const
{
- const ArgumentList *al = getDefArgList();
- return al ? al->volatileSpecifier : FALSE;
+ return getDefArgList().volatileSpecifier;
}
TemplateVariant hasRefQualifierLValue() const
{
- const ArgumentList *al = getDefArgList();
- return al ? al->refQualifier==RefQualifierLValue : FALSE;
+ return getDefArgList().refQualifier==RefQualifierLValue;
}
TemplateVariant hasRefQualifierRValue() const
{
- const ArgumentList *al = getDefArgList();
- return al ? al->refQualifier==RefQualifierRValue : FALSE;
+ return getDefArgList().refQualifier==RefQualifierRValue;
}
TemplateVariant trailingReturnType() const
{
- const ArgumentList *al = getDefArgList();
- if (al && !al->trailingReturnType.isEmpty())
+ const ArgumentList &al = getDefArgList();
+ if (!al.trailingReturnType.isEmpty())
{
return createLinkedText(m_memberDef,relPathAsString(),
- al->trailingReturnType);
+ al.trailingReturnType);
}
else
{
@@ -4710,13 +4705,11 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
void addTemplateDecls(TemplateList *tl) const
{
const ClassDef *cd=m_memberDef->getClassDef();
- if (m_memberDef->definitionTemplateParameterLists())
+ if (!m_memberDef->definitionTemplateParameterLists().empty())
{
- QListIterator<ArgumentList> ali(*m_memberDef->definitionTemplateParameterLists());
- ArgumentList *tal;
- for (ali.toFirst();(tal=ali.current());++ali)
+ for (const ArgumentList &tal : m_memberDef->definitionTemplateParameterLists())
{
- if (tal->count()>0)
+ if (!tal.empty())
{
ArgumentListContext *al = ArgumentListContext::alloc(tal,m_memberDef,relPathAsString());
tl->append(al);
@@ -4727,21 +4720,16 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
{
if (cd && !m_memberDef->isRelated() && !m_memberDef->isTemplateSpecialization())
{
- QList<ArgumentList> tempParamLists;
- cd->getTemplateParameterLists(tempParamLists);
- //printf("#tempParamLists=%d\n",tempParamLists.count());
- QListIterator<ArgumentList> ali(tempParamLists);
- ArgumentList *tal;
- for (ali.toFirst();(tal=ali.current());++ali)
+ for (const ArgumentList &tal : cd->getTemplateParameterLists())
{
- if (tal->count()>0)
+ if (!tal.empty())
{
ArgumentListContext *al = ArgumentListContext::alloc(tal,m_memberDef,relPathAsString());
tl->append(al);
}
}
}
- if (m_memberDef->templateArguments()) // function template prefix
+ if (!m_memberDef->templateArguments().empty()) // function template prefix
{
ArgumentListContext *al = ArgumentListContext::alloc(
m_memberDef->templateArguments(),m_memberDef,relPathAsString());
@@ -4785,18 +4773,15 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
Cachable &cache = getCache();
if (!cache.paramDocs)
{
- if (m_memberDef->argumentList() && m_memberDef->argumentList()->hasDocumentation())
+ if (m_memberDef->argumentList().hasDocumentation())
{
QCString paramDocs;
- ArgumentListIterator ali(*m_memberDef->argumentList());
- Argument *a;
- // convert the parameter documentation into a list of @param commands
- for (ali.toFirst();(a=ali.current());++ali)
+ for (Argument &a : m_memberDef->argumentList())
{
- if (a->hasDocumentation())
+ if (a.hasDocumentation())
{
- QCString direction = extractDirection(a->docs);
- paramDocs+="@param"+direction+" "+a->name+" "+a->docs;
+ QCString direction = extractDirection(a.docs);
+ paramDocs+="@param"+direction+" "+a.name+" "+a.docs;
}
}
cache.paramDocs.reset(new TemplateVariant(parseDoc(m_memberDef,
@@ -4929,7 +4914,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
TemplateVariant typeConstraints() const
{
Cachable &cache = getCache();
- if (!cache.typeConstraints && m_memberDef->typeConstraints())
+ if (cache.typeConstraints && !m_memberDef->typeConstraints().empty())
{
cache.typeConstraints.reset(ArgumentListContext::alloc(m_memberDef->typeConstraints(),m_memberDef,relPathAsString()));
}
@@ -5041,7 +5026,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
{
cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -5050,7 +5035,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
{
cg->writeGraph(t,GOF_EPS,EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_memberDef->getOutputFileBase()+".tex",
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -5113,7 +5098,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
{
cg->writeGraph(t,GOF_BITMAP,EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_memberDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -5122,7 +5107,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
{
cg->writeGraph(t,GOF_EPS,EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_memberDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_memberDef->getOutputFileBase()+".tex",
relPathAsString(),TRUE,g_globals.dynSectionId
);
}
@@ -5383,7 +5368,7 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
graph->writeGraph(t,GOF_BITMAP,
EOF_Html,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_groupDef->getOutputFileBase()+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+m_groupDef->getOutputFileBase()+Doxygen::htmlFileExtension,
relPathAsString(),
TRUE,
g_globals.dynSectionId);
@@ -5394,7 +5379,7 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
graph->writeGraph(t,GOF_EPS,
EOF_LaTeX,
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+m_groupDef->getOutputFileBase()+".tex",
+ g_globals.outputDir+Portable::pathSeparator()+m_groupDef->getOutputFileBase()+".tex",
relPathAsString(),
TRUE,
g_globals.dynSectionId);
@@ -5739,7 +5724,7 @@ class ModuleContext::Private : public DefinitionContext<ModuleContext::Private>
const ClassDef *cd;
for (sdi.toFirst();(cd=sdi.current());++sdi)
{
- if (cd->name().find('@')==-1 &&
+ if (!cd->isAnonymous() &&
cd->isLinkableInProject() &&
cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0)
@@ -6557,7 +6542,7 @@ class NestingContext::Private : public GenericNodeListContext
const NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
- if (nd->localName().find('@')==-1 &&
+ if (!nd->isAnonymous() &&
(!rootOnly || nd->getOuterScope()==Doxygen::globalScope))
{
bool hasChildren = namespaceHasVisibleChild(nd,addClasses,false,ClassDef::Class);
@@ -8446,7 +8431,7 @@ TemplateVariant NamespaceMembersIndexContext::get(const char *name) const
//------------------------------------------------------------------------
-//%% struct InheritanceGraph: a connected graph reprenting part of the overall inheritance tree
+//%% struct InheritanceGraph: a connected graph representing part of the overall inheritance tree
//%% {
class InheritanceGraphContext::Private
{
@@ -8476,7 +8461,7 @@ class InheritanceGraphContext::Private
/*GOF_BITMAP,
EOF_Html,*/
g_globals.outputDir,
- g_globals.outputDir+portable_pathSeparator()+"inherits"+Doxygen::htmlFileExtension,
+ g_globals.outputDir+Portable::pathSeparator()+"inherits"+Doxygen::htmlFileExtension,
m_id);
}
return TemplateVariant(result.data(),TRUE);
@@ -8813,7 +8798,7 @@ class AllMembersListContext::Private : public GenericNodeListContext
{
MemberDef *md=mi->memberDef;
const ClassDef *cd=md->getClassDef();
- if (cd && !md->name().isEmpty() && md->name()[0]!='@')
+ if (cd && !md->isAnonymous())
{
if ((cd->isLinkable() && md->isLinkable()) ||
(!cd->isArtificial() && !hideUndocMembers &&
@@ -9413,7 +9398,7 @@ TemplateListIntf::ConstIterator *InheritedMemberInfoListContext::createIterator(
class ArgumentContext::Private
{
public:
- Private(const Argument *arg,const Definition *def,const QCString &relPath) :
+ Private(const Argument &arg,const Definition *def,const QCString &relPath) :
m_argument(arg), m_def(def), m_relPath(relPath)
{
static bool init=FALSE;
@@ -9435,33 +9420,33 @@ class ArgumentContext::Private
}
TemplateVariant type() const
{
- return createLinkedText(m_def,m_relPath,m_argument->type);
+ return createLinkedText(m_def,m_relPath,m_argument.type);
}
TemplateVariant attrib() const
{
- return m_argument->attrib;
+ return m_argument.attrib;
}
TemplateVariant name() const
{
- return m_argument->name;
+ return m_argument.name;
}
TemplateVariant defVal() const
{
- return createLinkedText(m_def,m_relPath,m_argument->defval);
+ return createLinkedText(m_def,m_relPath,m_argument.defval);
}
TemplateVariant array() const
{
- return m_argument->array;
+ return m_argument.array;
}
TemplateVariant docs() const
{
if (!m_cache.docs && m_def)
{
- if (!m_argument->docs.isEmpty())
+ if (!m_argument.docs.isEmpty())
{
m_cache.docs.reset(new TemplateVariant(
parseDoc(m_def,m_def->docFile(),m_def->docLine(),
- m_relPath,m_argument->docs,TRUE)));
+ m_relPath,m_argument.docs,TRUE)));
}
else
{
@@ -9472,7 +9457,7 @@ class ArgumentContext::Private
}
TemplateVariant namePart() const
{
- QCString result = m_argument->attrib;
+ QCString result = m_argument.attrib;
int l = result.length();
if (l>2 && result.at(0)=='[' && result.at(l-1)==']')
{
@@ -9482,7 +9467,7 @@ class ArgumentContext::Private
return result;
}
private:
- const Argument *m_argument;
+ const Argument &m_argument;
const Definition *m_def;
QCString m_relPath;
struct Cachable
@@ -9496,7 +9481,7 @@ class ArgumentContext::Private
PropertyMapper<ArgumentContext::Private> ArgumentContext::Private::s_inst;
-ArgumentContext::ArgumentContext(const Argument *al,const Definition *def,const QCString &relPath) : RefCountedContext("ArgumentContext")
+ArgumentContext::ArgumentContext(const Argument &al,const Definition *def,const QCString &relPath) : RefCountedContext("ArgumentContext")
{
p = new Private(al,def,relPath);
}
@@ -9517,7 +9502,7 @@ TemplateVariant ArgumentContext::get(const char *name) const
class ArgumentListContext::Private : public GenericNodeListContext
{
public:
- void addArgument(const Argument *arg,const Definition *def,const QCString &relPath)
+ void addArgument(const Argument &arg,const Definition *def,const QCString &relPath)
{
append(ArgumentContext::alloc(arg,def,relPath));
}
@@ -9528,18 +9513,13 @@ ArgumentListContext::ArgumentListContext() : RefCountedContext("ArgumentListCont
p = new Private;
}
-ArgumentListContext::ArgumentListContext(const ArgumentList *list,
+ArgumentListContext::ArgumentListContext(const ArgumentList &list,
const Definition *def,const QCString &relPath) : RefCountedContext("ArgumentListContext")
{
p = new Private;
- if (list)
+ for (const Argument &arg : list)
{
- ArgumentListIterator ali(*list);
- const Argument *arg;
- for (ali.toFirst();(arg=ali.current());++ali)
- {
- p->addArgument(arg,def,relPath);
- }
+ p->addArgument(arg,def,relPath);
}
}
@@ -10316,7 +10296,7 @@ void generateOutputViaTemplate()
ctx->set("classMembersIndex",classMembersIndex.get());
//%% NamespaceMembersIndex namespaceMembersIndex:
ctx->set("namespaceMembersIndex",namespaceMembersIndex.get());
- //%% SearchIndicaes searchindicaes
+ //%% SearchIndices searchIndices
ctx->set("searchIndices",searchIndices.get());
//%% string space
ctx->set("space"," ");
diff --git a/src/context.h b/src/context.h
index ecd1227..fc1278b 100644
--- a/src/context.h
+++ b/src/context.h
@@ -1138,7 +1138,7 @@ class AllMembersListContext : public RefCountedContext, public TemplateListIntf
class ArgumentContext : public RefCountedContext, public TemplateStructIntf
{
public:
- static ArgumentContext *alloc(const Argument *arg,const Definition *def,const QCString &relPath)
+ static ArgumentContext *alloc(const Argument &arg,const Definition *def,const QCString &relPath)
{ return new ArgumentContext(arg,def,relPath); }
// TemplateStructIntf methods
@@ -1147,7 +1147,7 @@ class ArgumentContext : public RefCountedContext, public TemplateStructIntf
virtual int release() { return RefCountedContext::release(); }
private:
- ArgumentContext(const Argument *arg,const Definition *def,const QCString &relPath);
+ ArgumentContext(const Argument &arg,const Definition *def,const QCString &relPath);
~ArgumentContext();
class Private;
Private *p;
@@ -1159,7 +1159,7 @@ class ArgumentListContext : public RefCountedContext, public TemplateListIntf
{
public:
static ArgumentListContext *alloc() { return new ArgumentListContext; }
- static ArgumentListContext *alloc(const ArgumentList *al,const Definition *def,const QCString &relPath)
+ static ArgumentListContext *alloc(const ArgumentList &al,const Definition *def,const QCString &relPath)
{ return new ArgumentListContext(al,def,relPath); }
// TemplateListIntf
@@ -1171,7 +1171,7 @@ class ArgumentListContext : public RefCountedContext, public TemplateListIntf
private:
ArgumentListContext();
- ArgumentListContext(const ArgumentList *al,const Definition *def,const QCString &relPath);
+ ArgumentListContext(const ArgumentList &al,const Definition *def,const QCString &relPath);
~ArgumentListContext();
class Private;
Private *p;
diff --git a/src/declinfo.l b/src/declinfo.l
index 0ac1516..af94569 100644
--- a/src/declinfo.l
+++ b/src/declinfo.l
@@ -262,7 +262,7 @@ void parseFuncDecl(const QCString &decl,const SrcLangExt lang,QCString &cl,QCStr
struct yyguts_t *yyg = (struct yyguts_t*)g_yyscanner;
#ifdef FLEX_DEBUG
- yyset_debug(1,g_yyscanner);
+ declinfoYYset_debug(1,g_yyscanner);
#endif
printlex(yy_flex_debug, TRUE, __FILE__, NULL);
@@ -290,7 +290,7 @@ void parseFuncDecl(const QCString &decl,const SrcLangExt lang,QCString &cl,QCStr
// yyextra->type.data(),yyextra->scope.data(),yyextra->name.data(),yyextra->args.data());
int nb = yyextra->name.findRev('[');
- if (nb!=-1 && yyextra->args.isEmpty()) // correct for [] in yyextra->name ambigity (due to Java return yyextra->type allowing [])
+ if (nb!=-1 && yyextra->args.isEmpty()) // correct for [] in yyextra->name ambiguity (due to Java return yyextra->type allowing [])
{
yyextra->args.prepend(yyextra->name.right(yyextra->name.length()-nb));
yyextra->name=yyextra->name.left(nb);
@@ -347,11 +347,6 @@ void parseFuncDecl(const QCString &decl,const SrcLangExt lang,QCString &cl,QCStr
return;
}
-//extern "C" { // some bogus code to keep the compiler happy
-// int declinfoYYwrap() { return 1 ; }
-// void declinfoYYdummy() { yy_flex_realloc(0,0); }
-//}
-
#if 0
void dumpDecl(const char *s)
{
@@ -385,11 +380,5 @@ int main()
}
#endif
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void declinfoYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
#include "declinfo.l.h"
diff --git a/src/defargs.h b/src/defargs.h
index 34a19a2..1b08671 100644
--- a/src/defargs.h
+++ b/src/defargs.h
@@ -21,7 +21,7 @@
class ArgumentList;
class QCString;
-extern void stringToArgumentList(const char *argsString,ArgumentList* argList,
+extern void stringToArgumentList(const char *argsString,ArgumentList& argList,
QCString *extraTypeChars=0);
#endif
diff --git a/src/defargs.l b/src/defargs.l
index 070103a..eb454ce 100644
--- a/src/defargs.l
+++ b/src/defargs.l
@@ -387,12 +387,12 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
int i=l-1;
while (i>=0 && (isspace((uchar)g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
while (i>=0 && (isId(g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='$')) i--;
- Argument *a = new Argument;
- a->attrib = g_curArgAttrib.copy();
- a->typeConstraint = g_curTypeConstraint.stripWhiteSpace();
+ Argument a;
+ a.attrib = g_curArgAttrib.copy();
+ a.typeConstraint = g_curTypeConstraint.stripWhiteSpace();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
// a->type.data(),a->name.data(),i,l);
- a->array.resize(0);
+ a.array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
{
int bi=g_curArgTypeName.find('(');
@@ -401,67 +401,67 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
while (fi>=0 && (isId(g_curArgTypeName.at(fi)) || g_curArgTypeName.at(fi)==':')) fi--;
if (fi>=0)
{
- a->type = g_curArgTypeName.left(fi+1);
- a->name = g_curArgTypeName.mid(fi+1,bi-fi-1).stripWhiteSpace();
- a->array = g_curArgTypeName.right(l-bi);
+ a.type = g_curArgTypeName.left(fi+1);
+ a.name = g_curArgTypeName.mid(fi+1,bi-fi-1).stripWhiteSpace();
+ a.array = g_curArgTypeName.right(l-bi);
}
else
{
- a->type = g_curArgTypeName;
+ a.type = g_curArgTypeName;
}
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name
- a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1)).stripWhiteSpace();
- a->name = g_curArgTypeName.right(l-i-1).stripWhiteSpace();
+ a.type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1)).stripWhiteSpace();
+ a.name = g_curArgTypeName.right(l-i-1).stripWhiteSpace();
// if the type becomes a type specifier only then we make a mistake
// and need to correct it to avoid seeing a nameless parameter
// "struct A" as a parameter with type "struct" and name "A".
int sv=0;
- if (a->type.left(6)=="const ") sv=6;
- else if (a->type.left(9)=="volatile ") sv=9;
+ if (a.type.left(6)=="const ") sv=6;
+ else if (a.type.left(9)=="volatile ") sv=9;
- if (a->type.mid(sv)=="struct" ||
- a->type.mid(sv)=="union" ||
- a->type.mid(sv)=="class" ||
- a->type.mid(sv)=="typename" ||
- nameIsActuallyPartOfType(a->name)
+ if (a.type.mid(sv)=="struct" ||
+ a.type.mid(sv)=="union" ||
+ a.type.mid(sv)=="class" ||
+ a.type.mid(sv)=="typename" ||
+ nameIsActuallyPartOfType(a.name)
)
{
- a->type = a->type + " " + a->name;
- a->name.resize(0);
+ a.type = a.type + " " + a.name;
+ a.name.resize(0);
}
//printf(" --> a->type='%s' a->name='%s'\n",a->type.data(),a->name.data());
}
else // assume only the type was specified, try to determine name later
{
- a->type = removeRedundantWhiteSpace(g_curArgTypeName);
+ a.type = removeRedundantWhiteSpace(g_curArgTypeName);
}
- if (!a->type.isEmpty() && a->type.at(0)=='$') // typeless PHP name?
+ if (!a.type.isEmpty() && a.type.at(0)=='$') // typeless PHP name?
{
- a->name = a->type;
- a->type = "";
+ a.name = a.type;
+ a.type = "";
}
- a->array += removeRedundantWhiteSpace(g_curArgArray);
+ a.array += removeRedundantWhiteSpace(g_curArgArray);
//printf("array=%s\n",a->array.data());
- int alen = a->array.length();
- if (alen>2 && a->array.at(0)=='(' &&
- a->array.at(alen-1)==')') // fix-up for int *(a[10])
+ int alen = a.array.length();
+ if (alen>2 && a.array.at(0)=='(' &&
+ a.array.at(alen-1)==')') // fix-up for int *(a[10])
{
- int i=a->array.find('[')-1;
- a->array = a->array.mid(1,alen-2);
- if (i>0 && a->name.isEmpty())
+ int i=a.array.find('[')-1;
+ a.array = a.array.mid(1,alen-2);
+ if (i>0 && a.name.isEmpty())
{
- a->name = a->array.left(i).stripWhiteSpace();
- a->array = a->array.mid(i);
+ a.name = a.array.left(i).stripWhiteSpace();
+ a.array = a.array.mid(i);
}
}
- a->defval = g_curArgDefValue.copy();
+ a.defval = g_curArgDefValue.copy();
//printf("a->type=%s a->name=%s a->defval=\"%s\"\n",a->type.data(),a->name.data(),a->defval.data());
- a->docs = g_curArgDocs.stripWhiteSpace();
+ a.docs = g_curArgDocs.stripWhiteSpace();
//printf("Argument '%s' '%s' adding docs='%s'\n",a->type.data(),a->name.data(),a->docs.data());
- g_argList->append(a);
+ g_argList->push_back(a);
}
g_curArgAttrib.resize(0);
g_curArgTypeName.resize(0);
@@ -601,9 +601,8 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
* for complex types are written to
*/
-void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extraTypeChars)
+void stringToArgumentList(const char *argsString,ArgumentList& al,QCString *extraTypeChars)
{
- if (al==0) return;
if (argsString==0) return;
printlex(yy_flex_debug, TRUE, __FILE__, NULL);
@@ -623,19 +622,17 @@ void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extr
g_curArgTypeName.resize(0);
g_curArgDefValue.resize(0);
g_curArgName.resize(0);
- g_argList = al;
+ g_argList = &al;
defargsYYrestart( defargsYYin );
BEGIN( Start );
defargsYYlex();
+ if (g_argList->empty())
+ {
+ g_argList->noParameters = TRUE;
+ }
if (extraTypeChars) *extraTypeChars=g_extraTypeChars;
//printf("stringToArgumentList(%s) result=%s\n",argsString,argListToString(al).data());
printlex(yy_flex_debug, FALSE, __FILE__, NULL);
}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void defargsYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
#include "defargs.l.h"
diff --git a/src/defgen.cpp b/src/defgen.cpp
index aa9a1da..f5e12aa 100644
--- a/src/defgen.cpp
+++ b/src/defgen.cpp
@@ -144,71 +144,66 @@ void generateDEFForMember(MemberDef *md,
if (isFunc) //function
{
- ArgumentList *declAl = new ArgumentList;
- const ArgumentList *defAl = md->argumentList();
+ const ArgumentList &defAl = md->argumentList();
+ ArgumentList declAl;
stringToArgumentList(md->argsString(),declAl);
QCString fcnPrefix = " " + memPrefix + "param-";
- if (defAl && declAl->count()>0)
+ auto defIt = defAl.begin();
+ for (const Argument &a : declAl)
{
- ArgumentListIterator declAli(*declAl);
- ArgumentListIterator defAli(*defAl);
- Argument *a;
- for (declAli.toFirst();(a=declAli.current());++declAli)
+ const Argument *defArg = 0;
+ if (defIt!=defAl.end())
{
- Argument *defArg = defAli.current();
- t << memPrefix << "param = {" << endl;
- if (!a->attrib.isEmpty())
- {
- t << fcnPrefix << "attributes = ";
- writeDEFString(t,a->attrib);
- t << ';' << endl;
- }
- if (!a->type.isEmpty())
- {
- t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl
- << a->type << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- if (!a->name.isEmpty())
- {
- t << fcnPrefix << "declname = ";
- writeDEFString(t,a->name);
- t << ';' << endl;
- }
- if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
- {
- t << fcnPrefix << "defname = ";
- writeDEFString(t,defArg->name);
- t << ';' << endl;
- }
- if (!a->array.isEmpty())
- {
- t << fcnPrefix << "array = ";
- writeDEFString(t,a->array);
- t << ';' << endl;
- }
- if (!a->defval.isEmpty())
- {
- t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_" << endl
- << a->defval << endl << "_EnD_oF_dEf_TeXt_;" << endl;
- }
- if (defArg) ++defAli;
- t << " }; /*" << fcnPrefix << "-param */" << endl;
+ defArg = &(*defIt);
+ ++defIt;
}
+ t << memPrefix << "param = {" << endl;
+ if (!a.attrib.isEmpty())
+ {
+ t << fcnPrefix << "attributes = ";
+ writeDEFString(t,a.attrib);
+ t << ';' << endl;
+ }
+ if (!a.type.isEmpty())
+ {
+ t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl
+ << a.type << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ if (!a.name.isEmpty())
+ {
+ t << fcnPrefix << "declname = ";
+ writeDEFString(t,a.name);
+ t << ';' << endl;
+ }
+ if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
+ {
+ t << fcnPrefix << "defname = ";
+ writeDEFString(t,defArg->name);
+ t << ';' << endl;
+ }
+ if (!a.array.isEmpty())
+ {
+ t << fcnPrefix << "array = ";
+ writeDEFString(t,a.array);
+ t << ';' << endl;
+ }
+ if (!a.defval.isEmpty())
+ {
+ t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_" << endl
+ << a.defval << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ t << " }; /*" << fcnPrefix << "-param */" << endl;
}
- delete declAl;
}
else if ( md->memberType()==MemberType_Define
&& md->argsString()!=0)
{
- ArgumentListIterator ali(*md->argumentList());
- Argument *a;
QCString defPrefix = " " + memPrefix + "def-";
-
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : md->argumentList())
{
t << memPrefix << "param = {" << endl;
- t << defPrefix << "name = '" << a->type << "';" << endl;
+ t << defPrefix << "name = '" << a.type << "';" << endl;
t << " }; /*" << defPrefix << "-param */" << endl;
}
}
diff --git a/src/definition.cpp b/src/definition.cpp
index 3b5fea1..86f8789 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -15,6 +15,7 @@
*
*/
+#include <algorithm>
#include <ctype.h>
#include <qregexp.h>
#include "md5.h"
@@ -50,22 +51,21 @@
class DefinitionImpl::IMPL
{
public:
- IMPL();
~IMPL();
void init(const char *df, const char *n);
void setDefFileName(const QCString &df);
- SectionDict *sectionDict; // dictionary of all sections, not accessible
+ SectionDict *sectionDict = 0; // dictionary of all sections, not accessible
- MemberSDict *sourceRefByDict;
- MemberSDict *sourceRefsDict;
- QList<ListItemInfo> *xrefListItems;
- GroupList *partOfGroups;
+ MemberSDict *sourceRefByDict = 0;
+ MemberSDict *sourceRefsDict = 0;
+ std::vector<ListItemInfo> xrefListItems;
+ GroupList *partOfGroups = 0;
- DocInfo *details; // not exported
- DocInfo *inbodyDocs; // not exported
- BriefInfo *brief; // not exported
- BodyInfo *body; // not exported
+ DocInfo *details = 0; // not exported
+ DocInfo *inbodyDocs = 0; // not exported
+ BriefInfo *brief = 0; // not exported
+ BodyInfo *body = 0; // not exported
QCString briefSignatures;
QCString docSignatures;
@@ -74,16 +74,17 @@ class DefinitionImpl::IMPL
QCString qualifiedName;
QCString ref; // reference to external documentation
- bool hidden;
- bool isArtificial;
+ bool hidden = FALSE;
+ bool isArtificial = FALSE;
+ bool isAnonymous = FALSE;
- Definition *outerScope; // not owner
+ Definition *outerScope = 0; // not owner
// where the item was defined
QCString defFileName;
QCString defFileExt;
- SrcLangExt lang;
+ SrcLangExt lang = SrcLangExt_Unknown;
QCString id; // clang unique id
@@ -95,13 +96,6 @@ class DefinitionImpl::IMPL
Cookie *cookie;
};
-DefinitionImpl::IMPL::IMPL()
- : sectionDict(0), sourceRefByDict(0), sourceRefsDict(0),
- xrefListItems(0), partOfGroups(0),
- details(0), inbodyDocs(0), brief(0), body(0), hidden(FALSE), isArtificial(FALSE),
- outerScope(0), lang(SrcLangExt_Unknown)
-{
-}
DefinitionImpl::IMPL::~IMPL()
{
@@ -109,7 +103,6 @@ DefinitionImpl::IMPL::~IMPL()
delete sourceRefByDict;
delete sourceRefsDict;
delete partOfGroups;
- delete xrefListItems;
delete brief;
delete details;
delete body;
@@ -150,7 +143,6 @@ void DefinitionImpl::IMPL::init(const char *df, const char *n)
sectionDict = 0,
outerScope = Doxygen::globalScope;
partOfGroups = 0;
- xrefListItems = 0;
hidden = FALSE;
isArtificial = FALSE;
lang = SrcLangExt_Unknown;
@@ -305,7 +297,7 @@ DefinitionImpl::DefinitionImpl(const char *df,int dl,int dc,
const char *d,bool isSymbol)
{
m_impl = new DefinitionImpl::IMPL;
- m_impl->name = name;
+ setName(name);
m_impl->defLine = dl;
m_impl->defColumn = dc;
m_impl->init(df,name);
@@ -327,7 +319,6 @@ DefinitionImpl::DefinitionImpl(const DefinitionImpl &d)
m_impl->sourceRefByDict = 0;
m_impl->sourceRefsDict = 0;
m_impl->partOfGroups = 0;
- m_impl->xrefListItems = 0;
m_impl->brief = 0;
m_impl->details = 0;
m_impl->body = 0;
@@ -371,10 +362,6 @@ DefinitionImpl::DefinitionImpl(const DefinitionImpl &d)
makePartOfGroup(gd);
}
}
- if (d.m_impl->xrefListItems)
- {
- setRefItems(d.m_impl->xrefListItems);
- }
if (d.m_impl->brief)
{
m_impl->brief = new BriefInfo(*d.m_impl->brief);
@@ -412,6 +399,9 @@ void DefinitionImpl::setName(const char *name)
{
if (name==0) return;
m_impl->name = name;
+ m_impl->isAnonymous = m_impl->name.isEmpty() ||
+ m_impl->name.at(0)=='@' ||
+ m_impl->name.find("::@")!=-1;
}
void DefinitionImpl::setId(const char *id)
@@ -420,7 +410,7 @@ void DefinitionImpl::setId(const char *id)
m_impl->id = id;
if (Doxygen::clangUsrMap)
{
- //printf("DefinitionImpl::setId '%s'->'%s'\n",id,m_name.data());
+ //printf("DefinitionImpl::setId '%s'->'%s'\n",id,m_impl->name.data());
Doxygen::clangUsrMap->insert(id,this);
}
}
@@ -430,13 +420,10 @@ QCString DefinitionImpl::id() const
return m_impl->id;
}
-void DefinitionImpl::addSectionsToDefinition(QList<SectionInfo> *anchorList)
+void DefinitionImpl::addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList)
{
- if (!anchorList) return;
//printf("%s: addSectionsToDefinition(%d)\n",name().data(),anchorList->count());
- QListIterator<SectionInfo> it(*anchorList);
- SectionInfo *si;
- for (;(si=it.current());++it)
+ for (const SectionInfo *si : anchorList)
{
//printf("Add section '%s' to definition '%s'\n",
// si->label.data(),name().data());
@@ -757,12 +744,12 @@ class FilterCache
// file already processed, get the results after filtering from the tmp file
Debug::print(Debug::FilterOutput,0,"Reusing filter result for %s from %s at offset=%d size=%d\n",
qPrint(fileName),qPrint(Doxygen::filterDBFileName),(int)item->filePos,(int)item->fileSize);
- f = portable_fopen(Doxygen::filterDBFileName,"rb");
+ f = Portable::fopen(Doxygen::filterDBFileName,"rb");
if (f)
{
bool success=TRUE;
str.resize(item->fileSize+1);
- if (portable_fseek(f,item->filePos,SEEK_SET)==-1)
+ if (Portable::fseek(f,item->filePos,SEEK_SET)==-1)
{
err("Failed to seek to position %d in filter database file %s\n",(int)item->filePos,qPrint(Doxygen::filterDBFileName));
success=FALSE;
@@ -793,8 +780,8 @@ class FilterCache
// filter file
QCString cmd=filter+" \""+fileName+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",qPrint(cmd));
- f = portable_popen(cmd,"r");
- FILE *bf = portable_fopen(Doxygen::filterDBFileName,"a+b");
+ f = Portable::popen(cmd,"r");
+ FILE *bf = Portable::fopen(Doxygen::filterDBFileName,"a+b");
FilterCacheItem *item = new FilterCacheItem;
item->filePos = m_endPos;
if (bf==0)
@@ -803,7 +790,7 @@ class FilterCache
err("Error opening filter database file %s\n",qPrint(Doxygen::filterDBFileName));
str.addChar('\0');
delete item;
- portable_pclose(f);
+ Portable::pclose(f);
return FALSE;
}
// append the filtered output to the database file
@@ -819,7 +806,7 @@ class FilterCache
qPrint(Doxygen::filterDBFileName),bytesWritten,bytesRead);
str.addChar('\0');
delete item;
- portable_pclose(f);
+ Portable::pclose(f);
fclose(bf);
return FALSE;
}
@@ -834,14 +821,14 @@ class FilterCache
qPrint(fileName),qPrint(Doxygen::filterDBFileName),(int)item->filePos,(int)item->fileSize);
// update end of file position
m_endPos += size;
- portable_pclose(f);
+ Portable::pclose(f);
fclose(bf);
}
else // no filtering
{
// normal file
//printf("getFileContents(%s): no filter\n",qPrint(fileName));
- f = portable_fopen(fileName,"r");
+ f = Portable::fopen(fileName,"r");
while (!feof(f))
{
int bytesRead = fread(buf,1,blockSize,f);
@@ -1010,7 +997,7 @@ bool readCodeFragment(const char *fileName,
}
result = transcodeCharacterStringToUTF8(result);
if (!result.isEmpty() && result.at(result.length()-1)!='\n') result += "\n";
- //fprintf(stderr,"readCodeFragement(%d-%d)=%s\n",startLine,endLine,result.data());
+ //printf("readCodeFragment(%d-%d)=%s\n",startLine,endLine,result.data());
return found;
}
@@ -1275,26 +1262,26 @@ void DefinitionImpl::writeInlineCode(OutputList &ol,const char *scopeName) const
{
//printf("Adding code fragment '%s' ext='%s'\n",
// codeFragment.data(),m_impl->defFileExt.data());
- ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt);
- pIntf->resetCodeParserState();
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(m_impl->defFileExt);
+ intf.resetCodeParserState();
//printf("Read:\n'%s'\n\n",codeFragment.data());
const MemberDef *thisMd = 0;
if (definitionType()==TypeMember) thisMd = dynamic_cast <const MemberDef*>(this);
ol.startCodeFragment();
- pIntf->parseCode(ol, // codeOutIntf
- scopeName, // scope
- codeFragment, // input
- m_impl->lang, // lang
- FALSE, // isExample
- 0, // exampleName
- m_impl->body->fileDef, // fileDef
- actualStart, // startLine
- actualEnd, // endLine
- TRUE, // inlineFragment
- thisMd, // memberDef
- TRUE // show line numbers
- );
+ intf.parseCode(ol, // codeOutIntf
+ scopeName, // scope
+ codeFragment, // input
+ m_impl->lang, // lang
+ FALSE, // isExample
+ 0, // exampleName
+ m_impl->body->fileDef, // fileDef
+ actualStart, // startLine
+ actualEnd, // endLine
+ TRUE, // inlineFragment
+ thisMd, // memberDef
+ TRUE // show line numbers
+ );
ol.endCodeFragment();
}
}
@@ -1617,76 +1604,47 @@ void DefinitionImpl::makePartOfGroup(GroupDef *gd)
m_impl->partOfGroups->append(gd);
}
-void DefinitionImpl::setRefItems(const QList<ListItemInfo> *sli)
+void DefinitionImpl::setRefItems(const std::vector<ListItemInfo> &sli)
{
- //printf("%s::setRefItems()\n",name().data());
- if (sli)
- {
- // deep copy the list
- if (m_impl->xrefListItems==0)
- {
- m_impl->xrefListItems=new QList<ListItemInfo>;
- m_impl->xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- m_impl->xrefListItems->append(new ListItemInfo(*lii));
- }
- }
+ m_impl->xrefListItems.insert(m_impl->xrefListItems.end(), sli.cbegin(), sli.cend());
}
void DefinitionImpl::mergeRefItems(Definition *d)
{
- //printf("%s::mergeRefItems()\n",name().data());
- QList<ListItemInfo> *xrefList = d->xrefListItems();
- if (xrefList!=0)
- {
- // deep copy the list
- if (m_impl->xrefListItems==0)
- {
- m_impl->xrefListItems=new QList<ListItemInfo>;
- m_impl->xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*xrefList);
- QListIterator<ListItemInfo> mlii(*m_impl->xrefListItems);
- ListItemInfo *lii;
- ListItemInfo *mii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- bool found = false;
- for (mlii.toFirst();(mii=mlii.current());++mlii)
- {
- if ((qstrcmp(lii->type,mii->type)==0) && (lii->itemId == mii->itemId))
- {
- found = true;
- break;
- }
- }
- if (!found) m_impl->xrefListItems->append(new ListItemInfo(*lii));
- }
- }
+ auto otherXrefList = d->xrefListItems();
+
+ // append vectors
+ m_impl->xrefListItems.reserve(m_impl->xrefListItems.size()+otherXrefList.size());
+ m_impl->xrefListItems.insert (m_impl->xrefListItems.end(),
+ otherXrefList.begin(),otherXrefList.end());
+
+ // sort results on itemId
+ std::sort(m_impl->xrefListItems.begin(),m_impl->xrefListItems.end(),
+ [](const ListItemInfo &left,const ListItemInfo &right)
+ { return left.itemId<right.itemId ||
+ (left.itemId==right.itemId && qstrcmp(left.type,right.type)<0);
+ });
+
+ // filter out duplicates
+ auto last = std::unique(m_impl->xrefListItems.begin(),m_impl->xrefListItems.end(),
+ [](const ListItemInfo &left,const ListItemInfo &right)
+ { return left.itemId==right.itemId && left.type==right.type; });
+ m_impl->xrefListItems.erase(last, m_impl->xrefListItems.end());
}
int DefinitionImpl::_getXRefListId(const char *listName) const
{
- if (m_impl->xrefListItems)
+ for (const ListItemInfo &lii : m_impl->xrefListItems)
{
- QListIterator<ListItemInfo> slii(*m_impl->xrefListItems);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
+ if (lii.type==listName)
{
- if (qstrcmp(lii->type,listName)==0)
- {
- return lii->itemId;
- }
+ return lii.itemId;
}
}
return -1;
}
-QList<ListItemInfo> *DefinitionImpl::xrefListItems() const
+const std::vector<ListItemInfo> &DefinitionImpl::xrefListItems() const
{
return m_impl->xrefListItems;
}
@@ -2241,6 +2199,11 @@ QCString DefinitionImpl::name() const
return m_impl->name;
}
+bool DefinitionImpl::isAnonymous() const
+{
+ return m_impl->isAnonymous;
+}
+
int DefinitionImpl::getDefLine() const
{
return m_impl->defLine;
diff --git a/src/definition.h b/src/definition.h
index db9bbbc..b3ece2c 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -18,6 +18,7 @@
#ifndef DEFINITION_H
#define DEFINITION_H
+#include <vector>
#include <qlist.h>
#include <qdict.h>
@@ -111,6 +112,11 @@ class Definition : public DefinitionIntf
/*! Returns the name of the definition */
virtual QCString name() const = 0;
+ /*! Returns TRUE iff this definition has an artificially generated name
+ * (typically starting with a @) that is used for nameless definitions
+ */
+ virtual bool isAnonymous() const = 0;
+
/*! Returns the name of the definition as it appears in the output */
virtual QCString displayName(bool includeScope=TRUE) const = 0;
@@ -257,7 +263,7 @@ class Definition : public DefinitionIntf
virtual GroupList *partOfGroups() const = 0;
virtual bool isLinkableViaGroup() const = 0;
- virtual QList<ListItemInfo> *xrefListItems() const = 0;
+ virtual const std::vector<ListItemInfo> &xrefListItems() const = 0;
virtual Definition *findInnerCompound(const char *name) const = 0;
virtual Definition *getOuterScope() const = 0;
@@ -313,7 +319,7 @@ class Definition : public DefinitionIntf
virtual void setBodySegment(int bls,int ble) = 0;
virtual void setBodyDef(FileDef *fd) = 0;
- virtual void setRefItems(const QList<ListItemInfo> *sli) = 0;
+ virtual void setRefItems(const std::vector<ListItemInfo> &sli) = 0;
virtual void setOuterScope(Definition *d) = 0;
virtual void setHidden(bool b) = 0;
@@ -331,7 +337,7 @@ class Definition : public DefinitionIntf
/*! Add the list of anchors that mark the sections that are found in the
* documentation.
*/
- virtual void addSectionsToDefinition(QList<SectionInfo> *anchorList) = 0;
+ virtual void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList) = 0;
virtual void addSourceReferencedBy(const MemberDef *d) = 0;
virtual void addSourceReferences(const MemberDef *d) = 0;
virtual void mergeRefItems(Definition *d) = 0;
diff --git a/src/definitionimpl.h b/src/definitionimpl.h
index 4dd324b..2d8886d 100644
--- a/src/definitionimpl.h
+++ b/src/definitionimpl.h
@@ -32,6 +32,7 @@ class DefinitionImpl : virtual public Definition
virtual bool isAlias() const { return FALSE; }
virtual QCString name() const;
+ virtual bool isAnonymous() const;
virtual QCString localName() const;
virtual QCString qualifiedName() const;
virtual QCString symbolName() const;
@@ -66,7 +67,7 @@ class DefinitionImpl : virtual public Definition
virtual SrcLangExt getLanguage() const;
virtual GroupList *partOfGroups() const;
virtual bool isLinkableViaGroup() const;
- virtual QList<ListItemInfo> *xrefListItems() const;
+ virtual const std::vector<ListItemInfo> &xrefListItems() const;
virtual Definition *findInnerCompound(const char *name) const;
virtual Definition *getOuterScope() const;
virtual MemberSDict *getReferencesMembers() const;
@@ -83,12 +84,12 @@ class DefinitionImpl : virtual public Definition
virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine);
virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine);
virtual void setReference(const char *r);
- virtual void addSectionsToDefinition(QList<SectionInfo> *anchorList);
+ virtual void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList);
virtual void setBodySegment(int bls,int ble);
virtual void setBodyDef(FileDef *fd);
virtual void addSourceReferencedBy(const MemberDef *d);
virtual void addSourceReferences(const MemberDef *d);
- virtual void setRefItems(const QList<ListItemInfo> *sli);
+ virtual void setRefItems(const std::vector<ListItemInfo> &sli);
virtual void mergeRefItems(Definition *d);
virtual void addInnerCompound(const Definition *d);
virtual void setOuterScope(Definition *d);
@@ -142,6 +143,8 @@ class DefinitionAliasImpl : virtual public Definition
virtual bool isAlias() const { return TRUE; }
virtual QCString name() const
{ return m_def->name(); }
+ virtual bool isAnonymous() const
+ { return m_def->isAnonymous(); }
virtual QCString localName() const
{ return m_def->localName(); }
virtual QCString qualifiedName() const
@@ -210,7 +213,7 @@ class DefinitionAliasImpl : virtual public Definition
{ return m_def->partOfGroups(); }
virtual bool isLinkableViaGroup() const
{ return m_def->isLinkableViaGroup(); }
- virtual QList<ListItemInfo> *xrefListItems() const
+ virtual const std::vector<ListItemInfo> &xrefListItems() const
{ return m_def->xrefListItems(); }
virtual Definition *findInnerCompound(const char *name) const
{ return m_def->findInnerCompound(name); }
@@ -241,12 +244,12 @@ class DefinitionAliasImpl : virtual public Definition
virtual void setBriefDescription(const char *b,const char *briefFile,int briefLine) {}
virtual void setInbodyDocumentation(const char *d,const char *docFile,int docLine) {}
virtual void setReference(const char *r) {}
- virtual void addSectionsToDefinition(QList<SectionInfo> *anchorList) {}
+ virtual void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList) {}
virtual void setBodySegment(int bls,int ble) {}
virtual void setBodyDef(FileDef *fd) {}
virtual void addSourceReferencedBy(const MemberDef *d) {}
virtual void addSourceReferences(const MemberDef *d) {}
- virtual void setRefItems(const QList<ListItemInfo> *sli) {}
+ virtual void setRefItems(const std::vector<ListItemInfo> &sli) {}
virtual void mergeRefItems(Definition *d) {}
virtual void addInnerCompound(const Definition *d) {}
virtual void setOuterScope(Definition *d) {}
diff --git a/src/dia.cpp b/src/dia.cpp
index 8dab5b0..4a00a17 100644
--- a/src/dia.cpp
+++ b/src/dia.cpp
@@ -29,7 +29,7 @@ void writeDiaGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,DiaOutputFormat format)
{
QCString absOutFile = outDir;
- absOutFile+=portable_pathSeparator();
+ absOutFile+=Portable::pathSeparator();
absOutFile+=outFile;
// chdir to the output dir, so dot can find the font file.
@@ -37,7 +37,7 @@ void writeDiaGraphFromFile(const char *inFile,const char *outDir,
// go to the html output directory (i.e. path)
QDir::setCurrent(outDir);
//printf("Going to dir %s\n",QDir::currentDirPath().data());
- QCString diaExe = Config_getString(DIA_PATH)+"dia"+portable_commandExtension();
+ QCString diaExe = Config_getString(DIA_PATH)+"dia"+Portable::commandExtension();
QCString diaArgs;
QCString extension;
diaArgs+="-n ";
@@ -62,26 +62,26 @@ void writeDiaGraphFromFile(const char *inFile,const char *outDir,
int exitCode;
//printf("*** running: %s %s outDir:%s %s\n",diaExe.data(),diaArgs.data(),outDir,outFile);
- portable_sysTimerStart();
- if ((exitCode=portable_system(diaExe,diaArgs,FALSE))!=0)
+ Portable::sysTimerStart();
+ if ((exitCode=Portable::system(diaExe,diaArgs,FALSE))!=0)
{
err("Problems running %s. Check your installation or look typos in you dia file %s\n",
diaExe.data(),inFile);
- portable_sysTimerStop();
+ Portable::sysTimerStop();
goto error;
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
if ( (format==DIA_EPS) && (Config_getBool(USE_PDFLATEX)) )
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
outFile,outFile);
- portable_sysTimerStart();
- if (portable_system("epstopdf",epstopdfArgs)!=0)
+ Portable::sysTimerStart();
+ if (Portable::system("epstopdf",epstopdfArgs)!=0)
{
err("Problems running epstopdf. Check your TeX installation!\n");
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
}
error:
diff --git a/src/diagram.cpp b/src/diagram.cpp
index 2dadc12..e8dc83a 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -107,7 +107,7 @@ class DiagramRowIterator : public QListIterator<DiagramRow>
: QListIterator<DiagramRow>(d) {}
};
-/** Class represeting the tree layout for the built-in class diagram. */
+/** Class representing the tree layout for the built-in class diagram. */
class TreeDiagram : public QList<DiagramRow>
{
public:
@@ -308,7 +308,7 @@ QCString DiagramItem::label() const
QCString result;
if (!templSpec.isEmpty())
{
- // we use classDef->name() here and not diplayName() in order
+ // we use classDef->name() here and not displayName() in order
// to get the name used in the inheritance relation.
QCString n = classDef->name();
if (/*n.right(2)=="-g" ||*/ n.right(2)=="-p")
@@ -1338,14 +1338,14 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path,
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
epsBaseName.data(),epsBaseName.data());
//printf("Converting eps using '%s'\n",epstopdfArgs.data());
- portable_sysTimerStart();
- if (portable_system("epstopdf",epstopdfArgs)!=0)
+ Portable::sysTimerStart();
+ if (Portable::system("epstopdf",epstopdfArgs)!=0)
{
err("Problems running epstopdf. Check your TeX installation!\n");
- portable_sysTimerStop();
+ Portable::sysTimerStop();
return;
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
}
}
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 5db8b99..ba792e1 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -94,7 +94,7 @@ static int g_dirCount=0;
DirDefImpl::DirDefImpl(const char *path) : DefinitionImpl(path,1,1,path)
{
bool fullPathNames = Config_getBool(FULL_PATH_NAMES);
- // get display name (stipping the paths mentioned in STRIP_FROM_PATH)
+ // get display name (stripping the paths mentioned in STRIP_FROM_PATH)
// get short name (last part of path)
m_shortName = path;
m_diskName = path;
diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp
index 7fe849a..083aac3 100644
--- a/src/docbookgen.cpp
+++ b/src/docbookgen.cpp
@@ -233,7 +233,7 @@ void DocbookCodeGenerator::writeLineNumber(const char *ref,const char *fileName,
{
m_t << l << " ";
}
-
+ m_col=0;
}
void DocbookCodeGenerator::setCurrentDoc(const Definition *,const char *,bool)
{
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index ce3a845..43673de 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -36,6 +36,7 @@
#include "htmlentity.h"
#include "emoji.h"
#include "plantuml.h"
+#include "growbuf.h"
#if 0
#define DB_VIS_C DB_VIS_C1(m_t)
@@ -49,6 +50,25 @@
#define DB_VIS_C2a(x,y)
#endif
+static QCString filterId(const char *s)
+{
+ static GrowBuf growBuf;
+ growBuf.clear();
+ if (s==0) return "";
+ const unsigned char *p=(const unsigned char *)s;
+ char c;
+ while ((c=*p++))
+ {
+ switch (c)
+ {
+ case ':': growBuf.addStr("_1"); break;
+ default: growBuf.addChar(c); break;
+ }
+ }
+ growBuf.addChar(0);
+ return growBuf.get();
+}
+
void DocbookDocVisitor::visitCaption(const QList<DocNode> &children)
{
QListIterator<DocNode> cli(children);
@@ -280,8 +300,8 @@ DB_VIS_C
{
case DocVerbatim::Code: // fall though
m_t << "<literallayout><computeroutput>";
- Doxygen::parserManager->getParser(m_langExt)
- ->parseCode(m_ci,s->context(),s->text(),langExt,
+ Doxygen::parserManager->getCodeParser(m_langExt)
+ .parseCode(m_ci,s->context(),s->text(),langExt,
s->isExample(),s->exampleFile());
m_t << "</computeroutput></literallayout>";
break;
@@ -374,7 +394,7 @@ void DocbookDocVisitor::visit(DocAnchor *anc)
{
DB_VIS_C
if (m_hide) return;
- m_t << "<anchor xml:id=\"_" << stripPath(anc->file()) << "_1" << anc->anchor() << "\"/>";
+ m_t << "<anchor xml:id=\"_" << stripPath(anc->file()) << "_1" << filterId(anc->anchor()) << "\"/>";
}
void DocbookDocVisitor::visit(DocInclude *inc)
@@ -389,8 +409,8 @@ DB_VIS_C
m_t << "<literallayout><computeroutput>";
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -401,8 +421,8 @@ DB_VIS_C
break;
case DocInclude::Include:
m_t << "<literallayout><computeroutput>";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -421,8 +441,8 @@ DB_VIS_C
break;
case DocInclude::Snippet:
m_t << "<literallayout><computeroutput>";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -436,8 +456,8 @@ DB_VIS_C
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "<literallayout><computeroutput>";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -489,8 +509,8 @@ DB_VIS_C
fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
}
- Doxygen::parserManager->getParser(locLangExt)
- ->parseCode(m_ci,op->context(),
+ Doxygen::parserManager->getCodeParser(locLangExt)
+ .parseCode(m_ci,op->context(),
op->text(),langExt,op->isExample(),
op->exampleFile(),
fd, // fileDef
@@ -550,7 +570,7 @@ void DocbookDocVisitor::visit(DocCite *cite)
{
DB_VIS_C
if (m_hide) return;
- if (!cite->file().isEmpty()) startLink(cite->file(),cite->anchor());
+ if (!cite->file().isEmpty()) startLink(cite->file(),filterId(cite->anchor()));
filter(cite->text());
if (!cite->file().isEmpty()) endLink();
}
diff --git a/src/docgroup.cpp b/src/docgroup.cpp
index ecaa1af..fbdb842 100644
--- a/src/docgroup.cpp
+++ b/src/docgroup.cpp
@@ -23,7 +23,6 @@
void DocGroup::enterFile(const char *fileName,int)
{
m_openCount = 0;
- m_autoGroupStack.setAutoDelete(TRUE);
m_autoGroupStack.clear();
m_memberGroupId = DOX_NOGROUP;
m_memberGroupDocs.resize(0);
@@ -40,7 +39,7 @@ void DocGroup::leaveFile(const char *fileName,int line)
m_memberGroupId=DOX_NOGROUP;
m_memberGroupRelates.resize(0);
m_memberGroupDocs.resize(0);
- if (!m_autoGroupStack.isEmpty())
+ if (!m_autoGroupStack.empty())
{
warn(fileName,line,"end of file while inside a group");
}
@@ -109,10 +108,10 @@ void DocGroup::open(Entry *e,const char *,int, bool implicit)
{
if (!implicit) m_openCount++;
//printf("==> openGroup(name=%s,sec=%x) m_autoGroupStack=%d\n",
- // e->name.data(),e->section,m_autoGroupStack.count());
+ // e->name.data(),e->section,m_autoGroupStack.size());
if (e->section==Entry::GROUPDOC_SEC) // auto group
{
- m_autoGroupStack.push(new Grouping(e->name,e->groupingPri()));
+ m_autoGroupStack.push_back(Grouping(e->name,e->groupingPri()));
}
else // start of a member group
{
@@ -148,7 +147,7 @@ void DocGroup::close(Entry *e,const char *fileName,int line,bool foundInline,boo
}
}
//printf("==> closeGroup(name=%s,sec=%x,file=%s,line=%d) m_autoGroupStack=%d\n",
- // e->name.data(),e->section,fileName,line,m_autoGroupStack.count());
+ // e->name.data(),e->section,fileName,line,m_autoGroupStack.size());
if (m_memberGroupId!=DOX_NOGROUP) // end of member group
{
MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(m_memberGroupId);
@@ -164,13 +163,13 @@ void DocGroup::close(Entry *e,const char *fileName,int line,bool foundInline,boo
if (!foundInline) e->mGrpId=DOX_NOGROUP;
//printf("new group id=%d\n",m_memberGroupId);
}
- else if (!m_autoGroupStack.isEmpty()) // end of auto group
+ else if (!m_autoGroupStack.empty()) // end of auto group
{
- Grouping *grp = m_autoGroupStack.pop();
+ Grouping grp = m_autoGroupStack.back();
+ m_autoGroupStack.pop_back();
// see bug577005: we should not remove the last group for e
- if (!foundInline) e->groups->removeLast();
+ if (!foundInline && !e->groups.empty()) e->groups.pop_back();
//printf("Removing %s e=%p\n",grp->groupname.data(),e);
- delete grp;
if (!foundInline) initGroupInfo(e);
}
}
@@ -181,12 +180,12 @@ void DocGroup::initGroupInfo(Entry *e)
// m_memberGroupRelates.data(),e);
e->mGrpId = m_memberGroupId;
e->relates = m_memberGroupRelates;
- if (!m_autoGroupStack.isEmpty())
+ if (!m_autoGroupStack.empty())
{
//printf("Appending group %s to %s: count=%d entry=%p\n",
// m_autoGroupStack.top()->groupname.data(),
// e->name.data(),e->groups->count(),e);
- e->groups->append(new Grouping(*m_autoGroupStack.top()));
+ e->groups.push_back(Grouping(m_autoGroupStack.back()));
}
}
diff --git a/src/docgroup.h b/src/docgroup.h
index 4775d90..3ccef0d 100644
--- a/src/docgroup.h
+++ b/src/docgroup.h
@@ -16,7 +16,7 @@
#ifndef DOCGROUP_H
#define DOCGROUP_H
-#include <qstack.h>
+#include <vector>
#include <qstring.h>
#include "membergroup.h"
@@ -42,12 +42,12 @@ class DocGroup
private:
int findExistingGroup(int &groupId,const MemberGroupInfo *info);
- int m_openCount;
+ int m_openCount = 0;
QCString m_memberGroupHeader;
- int m_memberGroupId;
+ int m_memberGroupId = 0;
QCString m_memberGroupRelates;
QCString m_memberGroupDocs;
- QStack<Grouping> m_autoGroupStack;
+ std::vector<Grouping> m_autoGroupStack;
QCString m_compoundName;
};
diff --git a/src/docparser.cpp b/src/docparser.cpp
index f655475..1e43993 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -369,12 +369,12 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type, bool
epstopdfArgs.sprintf("\"%s/%s.eps\" --outfile=\"%s/%s.pdf\"",
outputDir.data(), baseName.data(),
outputDir.data(), baseName.data());
- portable_sysTimerStart();
- if (portable_system("epstopdf",epstopdfArgs)!=0)
+ Portable::sysTimerStart();
+ if (Portable::system("epstopdf",epstopdfArgs)!=0)
{
err("Problems running epstopdf. Check your TeX installation!\n");
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
return baseName;
}
}
@@ -413,12 +413,12 @@ static void checkArgumentName(const QCString &name)
{
if (!Config_getBool(WARN_IF_DOC_ERROR)) return;
if (g_memberDef==0) return; // not a member
- const ArgumentList *al=g_memberDef->isDocsForDefinition() ?
+ const ArgumentList &al=g_memberDef->isDocsForDefinition() ?
g_memberDef->argumentList() :
g_memberDef->declArgumentList();
SrcLangExt lang = g_memberDef->getLanguage();
//printf("isDocsForDefinition()=%d\n",g_memberDef->isDocsForDefinition());
- if (al==0) return; // no argument list
+ if (al.empty()) return; // no argument list
static QRegExp re("$?[a-zA-Z0-9_\\x80-\\xFF]+\\.*");
int p=0,i=0,l;
@@ -427,12 +427,10 @@ static void checkArgumentName(const QCString &name)
QCString aName=name.mid(i,l);
if (lang==SrcLangExt_Fortran) aName=aName.lower();
//printf("aName='%s'\n",aName.data());
- ArgumentListIterator ali(*al);
- const Argument *a;
bool found=FALSE;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : al)
{
- QCString argName = g_memberDef->isDefine() ? a->type : a->name;
+ QCString argName = g_memberDef->isDefine() ? a.type : a.name;
if (lang==SrcLangExt_Fortran) argName=argName.lower();
argName=argName.stripWhiteSpace();
//printf("argName='%s' aName=%s\n",argName.data(),aName.data());
@@ -460,7 +458,6 @@ static void checkArgumentName(const QCString &name)
inheritedMd->docLine(),qPrint(inheritedMd->docFile()));
docFile = g_memberDef->getDefFileName();
docLine = g_memberDef->getDefLine();
-
}
QCString alStr = argListToString(al);
warn_doc_error(docFile,docLine,
@@ -500,30 +497,28 @@ static void checkUnOrMultipleDocumentedParams()
{
if (g_memberDef && g_hasParamCommand && Config_getBool(WARN_IF_DOC_ERROR))
{
- const ArgumentList *al=g_memberDef->isDocsForDefinition() ?
+ const ArgumentList &al=g_memberDef->isDocsForDefinition() ?
g_memberDef->argumentList() :
g_memberDef->declArgumentList();
SrcLangExt lang = g_memberDef->getLanguage();
- if (al!=0)
+ if (!al.empty())
{
- ArgumentListIterator ali(*al);
- const Argument *a;
- bool found=FALSE;
- for (ali.toFirst();(a=ali.current());++ali)
+ int notArgCnt=0;
+ for (const Argument &a: al)
{
int count = 0;
- QCString argName = g_memberDef->isDefine() ? a->type : a->name;
+ QCString argName = g_memberDef->isDefine() ? a.type : a.name;
if (lang==SrcLangExt_Fortran) argName = argName.lower();
argName=argName.stripWhiteSpace();
QCString aName = argName;
if (argName.right(3)=="...") argName=argName.left(argName.length()-3);
if (lang==SrcLangExt_Python && (argName=="self" || argName=="cls"))
- {
+ {
// allow undocumented self / cls parameter for Python
}
- else if (!argName.isEmpty() && g_paramsFound.find(argName)==0 && a->docs.isEmpty())
+ else if (!argName.isEmpty() && g_paramsFound.find(argName)==0 && a.docs.isEmpty())
{
- found = TRUE;
+ notArgCnt++;
}
else
{
@@ -544,24 +539,26 @@ static void checkUnOrMultipleDocumentedParams()
" has multiple @param documentation sections");
}
}
- if (found)
+ if (notArgCnt>0)
{
bool first=TRUE;
QCString errMsg=
- "The following parameters of "+
+ "The following parameter";
+ errMsg+= (notArgCnt>1 ? "s" : "");
+ errMsg+=" of "+
QCString(g_memberDef->qualifiedName()) +
QCString(argListToString(al)) +
- " are not documented:\n";
- for (ali.toFirst();(a=ali.current());++ali)
+ (notArgCnt>1 ? " are" : " is") + " not documented:\n";
+ for (const Argument &a : al)
{
- QCString argName = g_memberDef->isDefine() ? a->type : a->name;
+ QCString argName = g_memberDef->isDefine() ? a.type : a.name;
if (lang==SrcLangExt_Fortran) argName = argName.lower();
argName=argName.stripWhiteSpace();
if (lang==SrcLangExt_Python && (argName=="self" || argName=="cls"))
- {
+ {
// allow undocumented self / cls parameter for Python
}
- else if (!argName.isEmpty() && g_paramsFound.find(argName)==0)
+ else if (!argName.isEmpty() && g_paramsFound.find(argName)==0)
{
if (!first)
{
@@ -806,14 +803,15 @@ static bool findDocsForMemberOrCompound(const char *commandName,
inline void errorHandleDefaultToken(DocNode *parent,int tok,
QList<DocNode> &children,const char *txt)
{
+ const char *cmd_start = "\\";
switch (tok)
{
case TK_COMMAND_AT:
- // fall through
+ cmd_start = "@";
case TK_COMMAND_BS:
children.append(new DocWord(parent,TK_COMMAND_CHAR(tok) + g_token->name));
warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a %s",
- qPrint(TK_COMMAND_CHAR(tok) + g_token->name), txt);
+ qPrint(cmd_start + g_token->name),txt);
break;
case TK_SYMBOL:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unsupported symbol %s found found as part of a %s",
@@ -1820,7 +1818,7 @@ static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children,
static void readTextFileByName(const QCString &file,QCString &text)
{
- if (portable_isAbsolutePath(file.data()))
+ if (Portable::isAbsolutePath(file.data()))
{
QFileInfo fi(file);
if (fi.exists())
@@ -1833,7 +1831,7 @@ static void readTextFileByName(const QCString &file,QCString &text)
char *s=examplePathList.first();
while (s)
{
- QCString absFileName = QCString(s)+portable_pathSeparator()+file;
+ QCString absFileName = QCString(s)+Portable::pathSeparator()+file;
QFileInfo fi(absFileName);
if (fi.exists())
{
@@ -2315,6 +2313,7 @@ void DocSecRefList::parse()
{
if (tok==TK_COMMAND_AT || tok == TK_COMMAND_BS)
{
+ const char *cmd_start = (tok==TK_COMMAND_AT ? "@" : "\\");
switch (Mappers::cmdMapper->map(g_token->name))
{
case CMD_SECREFITEM:
@@ -2342,7 +2341,7 @@ void DocSecRefList::parse()
goto endsecreflist;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\secreflist",
- qPrint(g_token->name));
+ qPrint(cmd_start + g_token->name));
goto endsecreflist;
}
}
@@ -2649,9 +2648,11 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
{
if (!defaultHandleToken(this,tok,m_children,FALSE))
{
+ const char *cmd_start = "\\";
switch (tok)
{
case TK_COMMAND_AT:
+ cmd_start = "@";
// fall through
case TK_COMMAND_BS:
switch (Mappers::cmdMapper->map(g_token->name))
@@ -2664,7 +2665,7 @@ QCString DocLink::parse(bool isJavaLink,bool isXmlLink)
goto endlink;
default:
warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s as part of a \\link",
- qPrint(g_token->name));
+ qPrint(cmd_start + g_token->name));
break;
}
break;
@@ -3796,9 +3797,11 @@ int DocHtmlDescTitle::parse()
{
if (!defaultHandleToken(this,tok,m_children))
{
+ const char *cmd_start = "\\";
switch (tok)
{
case TK_COMMAND_AT:
+ cmd_start = "@";
// fall through
case TK_COMMAND_BS:
{
@@ -3869,8 +3872,8 @@ int DocHtmlDescTitle::parse()
break;
default:
- warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command \\%s found as part of a <dt> tag",
- qPrint(g_token->name));
+ warn_doc_error(g_fileName,doctokenizerYYlineno,"Illegal command %s found as part of a <dt> tag",
+ qPrint(cmd_start + g_token->name));
}
}
break;
@@ -4565,7 +4568,7 @@ void DocSimpleSect::appendLinkWord(const QCString &word)
{
p = (DocPara *)m_children.getLast();
- // Comma-seperate <seealso> links.
+ // Comma-separate <seealso> links.
p->injectToken(TK_WORD,",");
p->injectToken(TK_WHITESPACE," ");
}
@@ -5900,6 +5903,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
switch (tagId)
{
case HTML_UL:
+ if (!g_token->emptyTag)
{
DocHtmlList *list = new DocHtmlList(this,tagHtmlAttribs,DocHtmlList::Unordered);
m_children.append(list);
@@ -5907,6 +5911,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
break;
case HTML_OL:
+ if (!g_token->emptyTag)
{
DocHtmlList *list = new DocHtmlList(this,tagHtmlAttribs,DocHtmlList::Ordered);
m_children.append(list);
@@ -5914,6 +5919,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
break;
case HTML_LI:
+ if (g_token->emptyTag) break;
if (!insideUL(this) && !insideOL(this))
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"lonely <li> tag found");
@@ -5924,21 +5930,22 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
break;
case HTML_BOLD:
- handleStyleEnter(this,m_children,DocStyleChange::Bold,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Bold,&g_token->attribs);
break;
case HTML_STRIKE:
- handleStyleEnter(this,m_children,DocStyleChange::Strike,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Strike,&g_token->attribs);
break;
case HTML_DEL:
- handleStyleEnter(this,m_children,DocStyleChange::Del,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Del,&g_token->attribs);
break;
case HTML_UNDERLINE:
- handleStyleEnter(this,m_children,DocStyleChange::Underline,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Underline,&g_token->attribs);
break;
case HTML_INS:
- handleStyleEnter(this,m_children,DocStyleChange::Ins,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Ins,&g_token->attribs);
break;
case HTML_CODE:
+ if (g_token->emptyTag) break;
if (/*getLanguageFromFileName(g_fileName)==SrcLangExt_CSharp ||*/ g_xmlComment)
// for C# source or inside a <summary> or <remark> section we
// treat <code> as an XML tag (so similar to @code)
@@ -5952,27 +5959,28 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
break;
case HTML_EMPHASIS:
- handleStyleEnter(this,m_children,DocStyleChange::Italic,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Italic,&g_token->attribs);
break;
case HTML_DIV:
- handleStyleEnter(this,m_children,DocStyleChange::Div,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Div,&g_token->attribs);
break;
case HTML_SPAN:
- handleStyleEnter(this,m_children,DocStyleChange::Span,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Span,&g_token->attribs);
break;
case HTML_SUB:
- handleStyleEnter(this,m_children,DocStyleChange::Subscript,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Subscript,&g_token->attribs);
break;
case HTML_SUP:
- handleStyleEnter(this,m_children,DocStyleChange::Superscript,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Superscript,&g_token->attribs);
break;
case HTML_CENTER:
- handleStyleEnter(this,m_children,DocStyleChange::Center,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Center,&g_token->attribs);
break;
case HTML_SMALL:
- handleStyleEnter(this,m_children,DocStyleChange::Small,&g_token->attribs);
+ if (!g_token->emptyTag) handleStyleEnter(this,m_children,DocStyleChange::Small,&g_token->attribs);
break;
case HTML_PRE:
+ if (g_token->emptyTag) break;
handleStyleEnter(this,m_children,DocStyleChange::Preformatted,&g_token->attribs);
setInsidePreformatted(TRUE);
doctokenizerYYsetInsidePre(TRUE);
@@ -5981,6 +5989,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
retval=TK_NEWPARA;
break;
case HTML_DL:
+ if (!g_token->emptyTag)
{
DocHtmlDescList *list = new DocHtmlDescList(this,tagHtmlAttribs);
m_children.append(list);
@@ -5994,6 +6003,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected tag <dd> found");
break;
case HTML_TABLE:
+ if (!g_token->emptyTag)
{
DocHtmlTable *table = new DocHtmlTable(this,tagHtmlAttribs);
m_children.append(table);
@@ -6028,22 +6038,22 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
retval=handleAHref(this,m_children,tagHtmlAttribs);
break;
case HTML_H1:
- retval=handleHtmlHeader(tagHtmlAttribs,1);
+ if (!g_token->emptyTag) retval=handleHtmlHeader(tagHtmlAttribs,1);
break;
case HTML_H2:
- retval=handleHtmlHeader(tagHtmlAttribs,2);
+ if (!g_token->emptyTag) retval=handleHtmlHeader(tagHtmlAttribs,2);
break;
case HTML_H3:
- retval=handleHtmlHeader(tagHtmlAttribs,3);
+ if (!g_token->emptyTag) retval=handleHtmlHeader(tagHtmlAttribs,3);
break;
case HTML_H4:
- retval=handleHtmlHeader(tagHtmlAttribs,4);
+ if (!g_token->emptyTag) retval=handleHtmlHeader(tagHtmlAttribs,4);
break;
case HTML_H5:
- retval=handleHtmlHeader(tagHtmlAttribs,5);
+ if (!g_token->emptyTag) retval=handleHtmlHeader(tagHtmlAttribs,5);
break;
case HTML_H6:
- retval=handleHtmlHeader(tagHtmlAttribs,6);
+ if (!g_token->emptyTag) retval=handleHtmlHeader(tagHtmlAttribs,6);
break;
case HTML_IMG:
{
@@ -6051,6 +6061,7 @@ int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &ta
}
break;
case HTML_BLOCKQUOTE:
+ if (!g_token->emptyTag)
{
DocHtmlBlockQuote *block = new DocHtmlBlockQuote(this,tagHtmlAttribs);
m_children.append(block);
diff --git a/src/docparser.h b/src/docparser.h
index 02fe135..5999eae 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -173,10 +173,10 @@ class DocNode
protected:
/*! Sets whether or not this item is inside a preformatted section */
void setInsidePreformatted(bool p) { m_insidePre = p; }
- DocNode *m_parent;
+ DocNode *m_parent = 0;
private:
- bool m_insidePre;
+ bool m_insidePre = false;
};
/** Default accept implementation for compound nodes in the abstract
@@ -294,7 +294,7 @@ class DocURL : public DocNode
private:
QCString m_url;
- bool m_isEmail;
+ bool m_isEmail = false;
};
/** Node representing a line break */
@@ -401,9 +401,9 @@ class DocStyleChange : public DocNode
const HtmlAttribList &attribs() const { return m_attribs; }
private:
- uint m_position;
- Style m_style;
- bool m_enable;
+ uint m_position = 0;
+ Style m_style = Bold;
+ bool m_enable = false;
HtmlAttribList m_attribs;
};
@@ -488,7 +488,7 @@ class DocSymbol : public DocNode
static SymType decodeSymbol(const QCString &symName);
private:
- SymType m_symbol;
+ SymType m_symbol = Sym_Unknown;
};
/** Node representing a n emoji */
@@ -503,7 +503,7 @@ class DocEmoji : public DocNode
private:
QCString m_symName;
- int m_index;
+ int m_index = 0;
};
/** Node representing some amount of white space */
@@ -562,12 +562,12 @@ class DocVerbatim : public DocNode
private:
QCString m_context;
QCString m_text;
- Type m_type;
- bool m_isExample;
+ Type m_type = Code;
+ bool m_isExample = false;
QCString m_exampleFile;
QCString m_relPath;
QCString m_lang;
- bool m_isBlock;
+ bool m_isBlock = false;
QCString m_width;
QCString m_height;
QList<DocNode> m_children;
@@ -610,9 +610,9 @@ class DocInclude : public DocNode
QCString m_file;
QCString m_context;
QCString m_text;
- Type m_type;
- bool m_isExample;
- bool m_isBlock;
+ Type m_type = Include;
+ bool m_isExample = false;
+ bool m_isBlock = false;
QCString m_exampleFile;
QCString m_blockId;
};
@@ -656,15 +656,15 @@ class DocIncOperator : public DocNode
void parse();
private:
- Type m_type;
- int m_line;
- bool m_showLineNo;
+ Type m_type = Line;
+ int m_line = 0;
+ bool m_showLineNo = false;
QCString m_text;
QCString m_pattern;
QCString m_context;
- bool m_isFirst;
- bool m_isLast;
- bool m_isExample;
+ bool m_isFirst = false;
+ bool m_isLast = false;
+ bool m_isExample = false;
QCString m_exampleFile;
QCString m_includeFileName;
};
@@ -686,7 +686,7 @@ class DocFormula : public DocNode
QCString m_name;
QCString m_text;
QCString m_relPath;
- int m_id;
+ int m_id = 0;
};
/** Node representing an entry in the index. */
@@ -704,8 +704,8 @@ class DocIndexEntry : public DocNode
private:
QCString m_entry;
- const Definition *m_scope;
- const MemberDef *m_member;
+ const Definition *m_scope = 0;
+ const MemberDef *m_member = 0;
};
//-----------------------------------------------------------------------
@@ -722,9 +722,9 @@ class DocAutoList : public CompAccept<DocAutoList>
int parse();
private:
- int m_indent;
- bool m_isEnumList;
- int m_depth;
+ int m_indent = 0;
+ bool m_isEnumList = false;
+ int m_depth = 0;
};
/** Node representing an item of a auto list */
@@ -737,8 +737,8 @@ class DocAutoListItem : public CompAccept<DocAutoListItem>
int parse();
private:
- int m_indent;
- int m_itemNum;
+ int m_indent = 0;
+ int m_itemNum = 0;
};
@@ -770,7 +770,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>
bool parse();
private:
- int m_id;
+ int m_id = 0;
QCString m_key;
QCString m_file;
QCString m_anchor;
@@ -801,12 +801,12 @@ class DocImage : public CompAccept<DocImage>
private:
HtmlAttribList m_attribs;
QCString m_name;
- Type m_type;
+ Type m_type = Html;
QCString m_width;
QCString m_height;
QCString m_relPath;
QCString m_url;
- bool m_inlineImage;
+ bool m_inlineImage = false;
};
/** Node representing a dot file */
@@ -929,8 +929,8 @@ class DocRef : public CompAccept<DocRef>
private:
enum RefType { Unknown, Anchor, Section, Table };
- RefType m_refType;
- bool m_isSubPage;
+ RefType m_refType = Unknown;
+ bool m_isSubPage = false;
QCString m_file;
QCString m_relPath;
QCString m_ref;
@@ -986,7 +986,7 @@ class DocHtmlHeader : public CompAccept<DocHtmlHeader>
int parse();
private:
- int m_level;
+ int m_level = 0;
HtmlAttribList m_attribs;
};
@@ -1033,7 +1033,7 @@ class DocSection : public CompAccept<DocSection>
int parse();
private:
- int m_level;
+ int m_level = 0;
QCString m_id;
QCString m_title;
QCString m_anchor;
@@ -1117,7 +1117,7 @@ class DocHtmlList : public CompAccept<DocHtmlList>
int parseXml();
private:
- Type m_type;
+ Type m_type = Unordered;
HtmlAttribList m_attribs;
};
@@ -1143,8 +1143,8 @@ class DocSimpleSect : public CompAccept<DocSimpleSect>
bool hasTitle() const { return m_title->hasTitle(); }
private:
- Type m_type;
- DocTitle * m_title;
+ Type m_type = Unknown;
+ DocTitle * m_title = 0;
};
/** Node representing a separator between two simple sections of the
@@ -1183,9 +1183,9 @@ class DocParamSect : public CompAccept<DocParamSect>
bool hasTypeSpecifier() const { return m_hasTypeSpecifier; }
private:
- Type m_type;
- bool m_hasInOutSpecifier;
- bool m_hasTypeSpecifier;
+ Type m_type = Unknown;
+ bool m_hasInOutSpecifier = false;
+ bool m_hasTypeSpecifier = false;
};
/** Node representing a paragraph in the documentation tree */
@@ -1230,8 +1230,8 @@ class DocPara : public CompAccept<DocPara>
private:
QCString m_sectionId;
- bool m_isFirst;
- bool m_isLast;
+ bool m_isFirst = false;
+ bool m_isLast = false;
HtmlAttribList m_attribs;
};
@@ -1271,10 +1271,10 @@ class DocParamList : public DocNode
QList<DocPara> m_paragraphs;
QList<DocNode> m_params;
QList<DocNode> m_paramTypes;
- DocParamSect::Type m_type;
- DocParamSect::Direction m_dir;
- bool m_isFirst;
- bool m_isLast;
+ DocParamSect::Type m_type = DocParamSect::Unknown;
+ DocParamSect::Direction m_dir = DocParamSect::Unspecified;
+ bool m_isFirst = false;
+ bool m_isLast = false;
};
/** Node representing a simple list item */
@@ -1294,7 +1294,7 @@ class DocSimpleListItem : public DocNode
}
private:
- DocPara *m_paragraph;
+ DocPara *m_paragraph = 0;
};
/** Node representing a HTML list item */
@@ -1311,7 +1311,7 @@ class DocHtmlListItem : public CompAccept<DocHtmlListItem>
private:
HtmlAttribList m_attribs;
- int m_itemNum;
+ int m_itemNum = 0;
};
/** Node representing a HTML description data */
@@ -1355,12 +1355,12 @@ class DocHtmlCell : public CompAccept<DocHtmlCell>
private:
void setRowIndex(int idx) { m_rowIdx = idx; }
void setColumnIndex(int idx) { m_colIdx = idx; }
- bool m_isHeading;
- bool m_isFirst;
- bool m_isLast;
+ bool m_isHeading = false;
+ bool m_isFirst = false;
+ bool m_isLast = false;
HtmlAttribList m_attribs;
- int m_rowIdx;
- int m_colIdx;
+ int m_rowIdx = -1;
+ int m_colIdx = -1;
};
/** Node representing a HTML table caption */
@@ -1377,7 +1377,7 @@ class DocHtmlCaption : public CompAccept<DocHtmlCaption>
private:
HtmlAttribList m_attribs;
- bool m_hasCaptionId;
+ bool m_hasCaptionId = false;
QCString m_file;
QCString m_anchor;
};
@@ -1414,8 +1414,8 @@ class DocHtmlRow : public CompAccept<DocHtmlRow>
private:
void setRowIndex(int idx) { m_rowIdx = idx; }
HtmlAttribList m_attribs;
- int m_visibleCells;
- int m_rowIdx;
+ int m_visibleCells = -1;
+ int m_rowIdx = -1;
};
/** Node representing a HTML table */
@@ -1442,9 +1442,9 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>
private:
void computeTableGrid();
- DocHtmlCaption *m_caption;
+ DocHtmlCaption *m_caption = 0;
HtmlAttribList m_attribs;
- int m_numCols;
+ int m_numCols = 0;
};
/** Node representing an HTML blockquote */
@@ -1483,8 +1483,8 @@ class DocRoot : public CompAccept<DocRoot>
bool isEmpty() const { return m_children.isEmpty(); }
private:
- bool m_indent;
- bool m_singleLine;
+ bool m_indent = false;
+ bool m_singleLine = false;
};
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index f89069c..badf23e 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -80,8 +80,8 @@ struct TokenInfo
// comment blocks
// list token info
- bool isEnumList;
- int indent;
+ bool isEnumList = false;
+ int indent = 0;
// sections
QCString sectionId;
@@ -94,22 +94,22 @@ struct TokenInfo
QCString verb;
// xrefitem
- int id;
+ int id = -1;
// html tag
HtmlAttribList attribs;
- bool endTag;
- bool emptyTag;
+ bool endTag = false;
+ bool emptyTag = false;
// whitespace
QCString chars;
// url
- bool isEMailAddr;
+ bool isEMailAddr = false;
// param attributes
enum ParamDir { In=1, Out=2, InOut=3, Unspecified=0 };
- ParamDir paramDir;
+ ParamDir paramDir = Unspecified;
};
// globals
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 22b14a0..c45bc9e 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -329,8 +329,8 @@ static int yyread(char *buf,int max_size)
//--------------------------------------------------------------------------
//#define REAL_YY_DECL int doctokenizerYYlex (void)
-//#define YY_DECL static int local_doctokinizer(void)
-//#define LOCAL_YY_DECL local_doctokinizer()
+//#define YY_DECL static int local_doctokenizer(void)
+//#define LOCAL_YY_DECL local_doctokenizer()
%}
@@ -674,7 +674,7 @@ REFWORD_NOCV {FILEMASK}|{LABELID}|{REFWORD2_NOCV}|{REFWORD3}|{REFWORD4_NOCV}
<St_Para,St_HtmlOnly,St_ManOnly,St_LatexOnly,St_RtfOnly,St_XmlOnly,St_DbOnly>"$("{ID}"("{ID}"))" { /* environment variable */
QCString name = &yytext[2];
name = name.left(name.length()-1);
- QCString value = portable_getenv(name);
+ QCString value = Portable::getenv(name);
for (int i=value.length()-1;i>=0;i--) unput(value.at(i));
}
<St_Para>{HTMLTAG} { /* html tag */
@@ -1611,10 +1611,5 @@ void doctokenizerYYendAutoList()
// printlex(yy_flex_debug, FALSE, __FILE__, g_fileName);
// return retval;
//}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void doctokenizerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
#include "doctokenizer.l.h"
diff --git a/src/dot.cpp b/src/dot.cpp
index 5ad3916..4e4c4bc 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -38,12 +38,12 @@ static QCString g_dotFontPath;
static void setDotFontPath(const char *path)
{
ASSERT(g_dotFontPath.isEmpty());
- g_dotFontPath = portable_getenv("DOTFONTPATH");
+ g_dotFontPath = Portable::getenv("DOTFONTPATH");
QCString newFontPath = Config_getString(DOT_FONTPATH);
QCString spath = path;
if (!newFontPath.isEmpty() && !spath.isEmpty())
{
- newFontPath.prepend(spath+portable_pathListSeparator());
+ newFontPath.prepend(spath+Portable::pathListSeparator());
}
else if (newFontPath.isEmpty() && !spath.isEmpty())
{
@@ -51,21 +51,21 @@ static void setDotFontPath(const char *path)
}
else
{
- portable_unsetenv("DOTFONTPATH");
+ Portable::unsetenv("DOTFONTPATH");
return;
}
- portable_setenv("DOTFONTPATH",newFontPath);
+ Portable::setenv("DOTFONTPATH",newFontPath);
}
static void unsetDotFontPath()
{
if (g_dotFontPath.isEmpty())
{
- portable_unsetenv("DOTFONTPATH");
+ Portable::unsetenv("DOTFONTPATH");
}
else
{
- portable_setenv("DOTFONTPATH",g_dotFontPath);
+ Portable::setenv("DOTFONTPATH",g_dotFontPath);
}
g_dotFontPath="";
}
@@ -183,7 +183,7 @@ bool DotManager::run() const
setDotFontPath(Config_getString(DOCBOOK_OUTPUT));
setPath=TRUE;
}
- portable_sysTimerStart();
+ Portable::sysTimerStart();
// fill work queue with dot operations
DotRunner *dr;
int prev=1;
@@ -211,7 +211,7 @@ bool DotManager::run() const
msg("Running dot for graph %d/%d\n",prev,numDotRuns);
prev++;
}
- portable_sleep(100);
+ Portable::sleep(100);
}
while ((int)numDotRuns>=prev)
{
@@ -229,7 +229,7 @@ bool DotManager::run() const
m_workers.at(i)->wait();
}
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
if (setPath)
{
unsetDotFontPath();
diff --git a/src/dotcallgraph.cpp b/src/dotcallgraph.cpp
index 15d408a..b024f09 100644
--- a/src/dotcallgraph.cpp
+++ b/src/dotcallgraph.cpp
@@ -212,6 +212,11 @@ bool DotCallGraph::isTrivial() const
bool DotCallGraph::isTooBig() const
{
- int numNodes = m_startNode->children() ? m_startNode->children()->count() : 0;
- return numNodes>=DOT_GRAPH_MAX_NODES;
+ return numNodes()>=DOT_GRAPH_MAX_NODES;
}
+
+int DotCallGraph::numNodes() const
+{
+ return m_startNode->children() ? m_startNode->children()->count() : 0;
+}
+
diff --git a/src/dotcallgraph.h b/src/dotcallgraph.h
index c96b9cf..bba976c 100644
--- a/src/dotcallgraph.h
+++ b/src/dotcallgraph.h
@@ -28,6 +28,7 @@ class DotCallGraph : public DotGraph
~DotCallGraph();
bool isTrivial() const;
bool isTooBig() const;
+ int numNodes() const;
QCString writeGraph(FTextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef,
const char *path,const char *fileName,
const char *relPath,bool writeImageMap=TRUE,
diff --git a/src/dotclassgraph.cpp b/src/dotclassgraph.cpp
index 3f5d228..da272b4 100644
--- a/src/dotclassgraph.cpp
+++ b/src/dotclassgraph.cpp
@@ -420,13 +420,18 @@ bool DotClassGraph::isTrivial() const
bool DotClassGraph::isTooBig() const
{
+ return numNodes()>=DOT_GRAPH_MAX_NODES;
+}
+
+int DotClassGraph::numNodes() const
+{
int numNodes = 0;
numNodes+= m_startNode->children() ? m_startNode->children()->count() : 0;
if (m_graphType==Inheritance)
{
numNodes+= m_startNode->parents() ? m_startNode->parents()->count() : 0;
}
- return numNodes>=DOT_GRAPH_MAX_NODES;
+ return numNodes;
}
DotClassGraph::~DotClassGraph()
diff --git a/src/dotclassgraph.h b/src/dotclassgraph.h
index b3b9291..1874f54 100644
--- a/src/dotclassgraph.h
+++ b/src/dotclassgraph.h
@@ -28,6 +28,7 @@ public:
~DotClassGraph();
bool isTrivial() const;
bool isTooBig() const;
+ int numNodes() const;
QCString writeGraph(FTextStream &t,GraphOutputFormat gf,EmbeddedOutputFormat ef,
const char *path, const char *fileName, const char *relPath,
bool TBRank=TRUE,bool imageMap=TRUE,int graphId=-1);
diff --git a/src/dotdirdeps.cpp b/src/dotdirdeps.cpp
index 98c7ca7..c70128c 100644
--- a/src/dotdirdeps.cpp
+++ b/src/dotdirdeps.cpp
@@ -140,8 +140,8 @@ void writeDotDirDepGraph(FTextStream &t,const DirDef *dd,bool linkRelations)
for (udi.toFirst();(udir=udi.current());++udi) // foreach used dir
{
const DirDef *usedDir=udir->dir();
- if ((dir!=dd || !udir->inherited()) && // only show direct dependendies for this dir
- (usedDir!=dd || !udir->inherited()) && // only show direct dependendies for this dir
+ if ((dir!=dd || !udir->inherited()) && // only show direct dependencies for this dir
+ (usedDir!=dd || !udir->inherited()) && // only show direct dependencies for this dir
!usedDir->isParentOf(dir) && // don't point to own parent
dirsInGraph.find(usedDir->getOutputFileBase())) // only point to nodes that are in the graph
{
diff --git a/src/dotdirdeps.h b/src/dotdirdeps.h
index f5eef65..a71e8f1 100644
--- a/src/dotdirdeps.h
+++ b/src/dotdirdeps.h
@@ -43,9 +43,9 @@ class DotDirDeps : public DotGraph
virtual QCString getImgAltText() const;
private:
- const DirDef *m_dir;
+ const DirDef *m_dir = 0;
- bool m_linkRelations;
+ bool m_linkRelations = false;
};
#endif
diff --git a/src/dotgraph.cpp b/src/dotgraph.cpp
index bbffaf0..9b7ddb7 100644
--- a/src/dotgraph.cpp
+++ b/src/dotgraph.cpp
@@ -117,7 +117,7 @@ QCString DotGraph::writeGraph(
EmbeddedOutputFormat ef, // html, latex, ...
const char* path, // output folder
const char* fileName, // name of the code file (for code patcher)
- const char* relPath, // output folder relativ to code file
+ const char* relPath, // output folder relative to code file
bool generateImageMap, // in case of bitmap, shall there be code generated?
int graphId) // number of this graph in the current code, used in svg code
{
diff --git a/src/dotgraph.h b/src/dotgraph.h
index 0eda3a8..edba009 100644
--- a/src/dotgraph.h
+++ b/src/dotgraph.h
@@ -74,22 +74,22 @@ class DotGraph
QCString relImgName() const { return m_relPath + imgName(); }
// the following variables are used while writing the graph to a .dot file
- GraphOutputFormat m_graphFormat;
- EmbeddedOutputFormat m_textFormat;
+ GraphOutputFormat m_graphFormat = GOF_BITMAP;
+ EmbeddedOutputFormat m_textFormat = EOF_Html;
QDir m_dir;
QCString m_fileName;
QCString m_relPath;
- bool m_generateImageMap;
- int m_graphId;
+ bool m_generateImageMap = false;
+ int m_graphId = 0;
QCString m_absPath;
QCString m_baseName;
QGString m_theGraph;
- bool m_regenerate;
- bool m_doNotAddImageToIndex;
- bool m_noDivTag;
- bool m_zoomable;
- bool m_urlOnly;
+ bool m_regenerate = false;
+ bool m_doNotAddImageToIndex = false;
+ bool m_noDivTag = false;
+ bool m_zoomable = true;
+ bool m_urlOnly = false;
private:
DotGraph(const DotGraph &);
diff --git a/src/dotgroupcollaboration.cpp b/src/dotgroupcollaboration.cpp
index f9a11e7..0a56460 100644
--- a/src/dotgroupcollaboration.cpp
+++ b/src/dotgroupcollaboration.cpp
@@ -42,6 +42,16 @@ DotGroupCollaboration::DotGroupCollaboration(const GroupDef* gd)
DotGroupCollaboration::~DotGroupCollaboration()
{
+ // delete all created Nodes saved in m_usedNodes:QDict
+ if(m_usedNodes != NULL)
+ {
+ QDictIterator<DotNode> it(*m_usedNodes);
+ for(;it.current(); ++it)
+ {
+ delete it.current();
+ }
+ }
+
delete m_usedNodes;
}
diff --git a/src/dotincldepgraph.cpp b/src/dotincldepgraph.cpp
index 23588db..05a96d9 100644
--- a/src/dotincldepgraph.cpp
+++ b/src/dotincldepgraph.cpp
@@ -213,8 +213,12 @@ bool DotInclDepGraph::isTrivial() const
bool DotInclDepGraph::isTooBig() const
{
- int numNodes = m_startNode->children() ? m_startNode->children()->count() : 0;
- return numNodes>=Config_getInt(DOT_GRAPH_MAX_NODES);
+ return numNodes()>=Config_getInt(DOT_GRAPH_MAX_NODES);
+}
+
+int DotInclDepGraph::numNodes() const
+{
+ return m_startNode->children() ? m_startNode->children()->count() : 0;
}
void DotInclDepGraph::writeXML(FTextStream &t)
diff --git a/src/dotincldepgraph.h b/src/dotincldepgraph.h
index b664ccb..5807ce8 100644
--- a/src/dotincldepgraph.h
+++ b/src/dotincldepgraph.h
@@ -32,6 +32,7 @@ class DotInclDepGraph : public DotGraph
bool writeImageMap=TRUE,int graphId=-1);
bool isTrivial() const;
bool isTooBig() const;
+ int numNodes() const;
void writeXML(FTextStream &t);
void writeDocbook(FTextStream &t);
diff --git a/src/dotrunner.cpp b/src/dotrunner.cpp
index a97d8af..fbfeaca 100644
--- a/src/dotrunner.cpp
+++ b/src/dotrunner.cpp
@@ -34,7 +34,7 @@
// support the PNG format, we need to check the result.
static void checkPngResult(const char *imgName)
{
- FILE *f = portable_fopen(imgName,"rb");
+ FILE *f = Portable::fopen(imgName,"rb");
if (f)
{
char data[4];
@@ -115,7 +115,7 @@ bool DotRunner::readBoundingBox(const char *fileName,int *width,int *height,bool
{
const char *bb = isEps ? "%%PageBoundingBox:" : "/MediaBox [";
int bblen = strlen(bb);
- FILE *f = portable_fopen(fileName,"rb");
+ FILE *f = Portable::fopen(fileName,"rb");
if (!f)
{
//printf("readBoundingBox: could not open %s\n",fileName);
@@ -191,14 +191,14 @@ bool DotRunner::run()
dotArgs+=' ';
dotArgs+=s->args.data();
}
- if ((exitCode=portable_system(m_dotExe.data(),dotArgs,FALSE))!=0) goto error;
+ if ((exitCode=Portable::system(m_dotExe.data(),dotArgs,FALSE))!=0) goto error;
}
else
{
for (li.toFirst();(s=li.current());++li)
{
dotArgs=QCString("\"")+m_file.data()+"\" "+s->args.data();
- if ((exitCode=portable_system(m_dotExe.data(),dotArgs,FALSE))!=0) goto error;
+ if ((exitCode=Portable::system(m_dotExe.data(),dotArgs,FALSE))!=0) goto error;
}
}
@@ -214,7 +214,7 @@ bool DotRunner::run()
{
if (!resetPDFSize(width,height,getBaseNameOfOutput(s->output.data()))) goto error;
dotArgs=QCString("\"")+m_file.data()+"\" "+s->args.data();
- if ((exitCode=portable_system(m_dotExe.data(),dotArgs,FALSE))!=0) goto error;
+ if ((exitCode=Portable::system(m_dotExe.data(),dotArgs,FALSE))!=0) goto error;
}
}
@@ -228,14 +228,14 @@ bool DotRunner::run()
if (m_cleanUp)
{
//printf("removing dot file %s\n",m_file.data());
- portable_unlink(m_file.data());
+ Portable::unlink(m_file.data());
}
// create checksum file
if (!m_md5Hash.isEmpty())
{
QCString md5Name = getBaseNameOfOutput(m_file.data()) + ".md5";
- FILE *f = portable_fopen(md5Name,"w");
+ FILE *f = Portable::fopen(md5Name,"w");
if (f)
{
fwrite(m_md5Hash.data(),1,32,f);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index e1d7967..4c489d2 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -75,10 +75,12 @@
#include "searchindex.h"
#include "parserintf.h"
#include "htags.h"
+#include "pycode.h"
#include "pyscanner.h"
+#include "fortrancode.h"
#include "fortranscanner.h"
-#include "xmlscanner.h"
-#include "sqlscanner.h"
+#include "xmlcode.h"
+#include "sqlcode.h"
#include "tclscanner.h"
#include "code.h"
#include "objcache.h"
@@ -171,6 +173,7 @@ bool Doxygen::generatingXmlOutput = FALSE;
bool Doxygen::markdownSupport = TRUE;
GenericsSDict *Doxygen::genericsDict;
DocGroup Doxygen::docGroup;
+Preprocessor *Doxygen::preprocessor = 0;
// locally accessible globals
static std::unordered_map< std::string, const Entry* > g_classEntries;
@@ -294,7 +297,7 @@ void statistics()
static void addMemberDocs(const Entry *root,MemberDef *md, const char *funcDecl,
- ArgumentList *al,bool over_load,uint64 spec);
+ const ArgumentList *al,bool over_load,uint64 spec);
static void findMember(const Entry *root,
const QCString &relates,
const QCString &type,
@@ -315,7 +318,7 @@ static bool findClassRelation(
const Entry *root,
Definition *context,
ClassDef *cd,
- BaseInfo *bi,
+ const BaseInfo *bi,
QDict<int> *templateNames,
/*bool insertUndocumented*/
FindBaseClassRelation_Mode mode,
@@ -419,9 +422,9 @@ static STLInfo g_stlinfo[] =
{ 0, 0, 0, 0, 0, 0, 0, FALSE, FALSE }
};
-static void addSTLMember(const std::unique_ptr<Entry> &root,const char *type,const char *name)
+static void addSTLMember(const std::shared_ptr<Entry> &root,const char *type,const char *name)
{
- std::unique_ptr<Entry> memEntry = std::make_unique<Entry>();
+ std::shared_ptr<Entry> memEntry = std::make_shared<Entry>();
memEntry->name = name;
memEntry->type = type;
memEntry->protection = Public;
@@ -432,9 +435,9 @@ static void addSTLMember(const std::unique_ptr<Entry> &root,const char *type,con
root->moveToSubEntryAndKeep(memEntry);
}
-static void addSTLIterator(const std::unique_ptr<Entry> &classEntry,const char *name)
+static void addSTLIterator(const std::shared_ptr<Entry> &classEntry,const char *name)
{
- std::unique_ptr<Entry> iteratorClassEntry = std::make_unique<Entry>();
+ std::shared_ptr<Entry> iteratorClassEntry = std::make_shared<Entry>();
iteratorClassEntry->fileName = "[STL]";
iteratorClassEntry->startLine = 1;
iteratorClassEntry->name = name;
@@ -445,14 +448,14 @@ static void addSTLIterator(const std::unique_ptr<Entry> &classEntry,const char *
classEntry->moveToSubEntryAndKeep(iteratorClassEntry);
}
-static void addSTLClass(const std::unique_ptr<Entry> &root,const STLInfo *info)
+static void addSTLClass(const std::shared_ptr<Entry> &root,const STLInfo *info)
{
//printf("Adding STL class %s\n",info->className);
QCString fullName = info->className;
fullName.prepend("std::");
// add fake Entry for the class
- std::unique_ptr<Entry> classEntry = std::make_unique<Entry>();
+ std::shared_ptr<Entry> classEntry = std::make_shared<Entry>();
classEntry->fileName = "[STL]";
classEntry->startLine = 1;
classEntry->name = fullName;
@@ -464,21 +467,18 @@ static void addSTLClass(const std::unique_ptr<Entry> &root,const STLInfo *info)
// add template arguments to class
if (info->templType1)
{
- ArgumentList *al = new ArgumentList;
- Argument *a=new Argument;
- a->type="typename";
- a->name=info->templType1;
- al->append(a);
+ ArgumentList al;
+ Argument a;
+ a.type="typename";
+ a.name=info->templType1;
+ al.push_back(a);
if (info->templType2) // another template argument
{
- a=new Argument;
- a->type="typename";
- a->name=info->templType2;
- al->append(a);
+ a.type="typename";
+ a.name=info->templType2;
+ al.push_back(a);
}
- classEntry->tArgLists = new QList<ArgumentList>;
- classEntry->tArgLists->setAutoDelete(TRUE);
- classEntry->tArgLists->append(al);
+ classEntry->tArgLists.push_back(al);
}
// add member variables
if (info->templName1)
@@ -490,9 +490,9 @@ static void addSTLClass(const std::unique_ptr<Entry> &root,const STLInfo *info)
addSTLMember(classEntry,info->templType2,info->templName2);
}
if (fullName=="std::auto_ptr" || fullName=="std::smart_ptr" || fullName=="std::shared_ptr" ||
- fullName=="std::unique_ptr" || fullName=="std::weak_ptr")
+ fullName=="std::shared_ptr" || fullName=="std::weak_ptr")
{
- std::unique_ptr<Entry> memEntry = std::make_unique<Entry>();
+ std::shared_ptr<Entry> memEntry = std::make_shared<Entry>();
memEntry->name = "operator->";
memEntry->args = "()";
memEntry->type = "T*";
@@ -505,11 +505,11 @@ static void addSTLClass(const std::unique_ptr<Entry> &root,const STLInfo *info)
}
if (info->baseClass1)
{
- classEntry->extends->append(new BaseInfo(info->baseClass1,Public,info->virtualInheritance?Virtual:Normal));
+ classEntry->extends.push_back(BaseInfo(info->baseClass1,Public,info->virtualInheritance?Virtual:Normal));
}
if (info->baseClass2)
{
- classEntry->extends->append(new BaseInfo(info->baseClass2,Public,info->virtualInheritance?Virtual:Normal));
+ classEntry->extends.push_back(BaseInfo(info->baseClass2,Public,info->virtualInheritance?Virtual:Normal));
}
if (info->iterators)
{
@@ -523,9 +523,9 @@ static void addSTLClass(const std::unique_ptr<Entry> &root,const STLInfo *info)
}
-static void addSTLClasses(const std::unique_ptr<Entry> &root)
+static void addSTLClasses(const std::shared_ptr<Entry> &root)
{
- std::unique_ptr<Entry> namespaceEntry = std::make_unique<Entry>();
+ std::shared_ptr<Entry> namespaceEntry = std::make_shared<Entry>();
namespaceEntry->fileName = "[STL]";
namespaceEntry->startLine = 1;
namespaceEntry->name = "std";
@@ -547,7 +547,7 @@ static void addSTLClasses(const std::unique_ptr<Entry> &root)
//----------------------------------------------------------------------------
static Definition *findScopeFromQualifiedName(Definition *startScope,const QCString &n,
- FileDef *fileScope,TagInfo *tagInfo);
+ FileDef *fileScope,const TagInfo *tagInfo);
static void addPageToContext(PageDef *pd,Entry *root)
{
@@ -560,7 +560,7 @@ static void addPageToContext(PageDef *pd,Entry *root)
}
scope = stripAnonymousNamespaceScope(scope);
scope+="::"+pd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,root->tagInfo);
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,root->tagInfo());
if (d)
{
pd->setPageScope(d);
@@ -571,11 +571,9 @@ static void addPageToContext(PageDef *pd,Entry *root)
static void addRelatedPage(Entry *root)
{
GroupDef *gd=0;
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ for (const Grouping &g : root->groups)
{
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) break;
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname))) break;
}
//printf("---> addRelatedPage() %s gd=%p\n",root->name.data(),gd);
QCString doc;
@@ -588,10 +586,10 @@ static void addRelatedPage(Entry *root)
doc=root->brief+"\n\n"+root->doc+root->inbodyDocs;
}
- PageDef *pd = addRelatedPage(root->name,root->args,doc,root->anchors,
+ PageDef *pd = addRelatedPage(root->name,root->args,doc,
root->docFile,root->docLine,
root->sli,
- gd,root->tagInfo,
+ gd,root->tagInfo(),
FALSE,
root->lang
);
@@ -607,8 +605,8 @@ static void addRelatedPage(Entry *root)
static void buildGroupListFiltered(const Entry *root,bool additional, bool includeExternal)
{
if (root->section==Entry::GROUPDOC_SEC && !root->name.isEmpty() &&
- ((!includeExternal && root->tagInfo==0) ||
- ( includeExternal && root->tagInfo!=0))
+ ((!includeExternal && root->tagInfo()==0) ||
+ ( includeExternal && root->tagInfo()!=0))
)
{
if ((root->groupDocType==Entry::GROUPDOC_NORMAL && !additional) ||
@@ -639,10 +637,10 @@ static void buildGroupListFiltered(const Entry *root,bool additional, bool inclu
}
else
{
- if (root->tagInfo)
+ if (root->tagInfo())
{
- gd = createGroupDef(root->fileName,root->startLine,root->name,root->type,root->tagInfo->fileName);
- gd->setReference(root->tagInfo->tagName);
+ gd = createGroupDef(root->fileName,root->startLine,root->name,root->type,root->tagInfo()->fileName);
+ gd->setReference(root->tagInfo()->tagName);
}
else
{
@@ -692,7 +690,7 @@ static void findGroupScope(const Entry *root)
}
scope = stripAnonymousNamespaceScope(scope);
scope+="::"+gd->name();
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,root->tagInfo);
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,scope,0,root->tagInfo());
if (d)
{
gd->setGroupScope(d);
@@ -736,7 +734,7 @@ static void buildFileList(const Entry *root)
{
if (((root->section==Entry::FILEDOC_SEC) ||
((root->section & Entry::FILE_MASK) && Config_getBool(EXTRACT_ALL))) &&
- !root->name.isEmpty() && !root->tagInfo // skip any file coming from tag files
+ !root->name.isEmpty() && !root->tagInfo() // skip any file coming from tag files
)
{
bool ambig;
@@ -762,12 +760,10 @@ static void buildFileList(const Entry *root)
fd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
fd->addSectionsToDefinition(root->anchors);
fd->setRefItems(root->sli);
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
{
gd->addFile(fd);
fd->makePartOfGroup(gd);
@@ -958,7 +954,7 @@ static Definition *findScope(Entry *root,int level=0)
* not found and set the parent/child scope relation if the scope is found.
*/
static Definition *buildScopeFromQualifiedName(const QCString name,
- int level,SrcLangExt lang,TagInfo *tagInfo)
+ int level,SrcLangExt lang,const TagInfo *tagInfo)
{
//printf("buildScopeFromQualifiedName(%s) level=%d\n",name.data(),level);
int i=0;
@@ -1017,7 +1013,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,
}
static Definition *findScopeFromQualifiedName(Definition *startScope,const QCString &n,
- FileDef *fileScope,TagInfo *tagInfo)
+ FileDef *fileScope,const TagInfo *tagInfo)
{
//printf("<findScopeFromQualifiedName(%s,%s)\n",startScope ? startScope->name().data() : 0, n.data());
Definition *resultScope=startScope;
@@ -1105,17 +1101,15 @@ static Definition *findScopeFromQualifiedName(Definition *startScope,const QCStr
return resultScope;
}
-ArgumentList *getTemplateArgumentsFromName(
+ArgumentList getTemplateArgumentsFromName(
const QCString &name,
- const QList<ArgumentList> *tArgLists)
+ const std::vector<ArgumentList> &tArgLists)
{
- if (tArgLists==0) return 0;
-
- QListIterator<ArgumentList> ali(*tArgLists);
// for each scope fragment, check if it is a template and advance through
// the list if so.
int i,p=0;
- while ((i=name.find("::",p))!=-1)
+ auto alIt = tArgLists.begin();
+ while ((i=name.find("::",p))!=-1 && alIt!=tArgLists.end())
{
NamespaceDef *nd = Doxygen::namespaceSDict->find(name.left(i));
if (nd==0)
@@ -1123,15 +1117,15 @@ ArgumentList *getTemplateArgumentsFromName(
ClassDef *cd = getClass(name.left(i));
if (cd)
{
- if (cd->templateArguments())
+ if (!cd->templateArguments().empty())
{
- ++ali;
+ ++alIt;
}
}
}
p=i+2;
}
- return ali.current();
+ return alIt!=tArgLists.end() ? *alIt : ArgumentList();
}
static
@@ -1240,13 +1234,12 @@ static void addClassToContext(const Entry *root)
}
//cd->setName(fullName); // change name to match docs
- if (cd->templateArguments()==0 || (cd->isForwardDeclared() && (root->spec&Entry::ForwardDecl)==0))
+ if (cd->templateArguments().empty() || (cd->isForwardDeclared() && (root->spec&Entry::ForwardDecl)==0))
{
// this happens if a template class declared with @class is found
// before the actual definition or if a forward declaration has different template
// parameter names.
- ArgumentList *tArgList =
- getTemplateArgumentsFromName(cd->name(),root->tArgLists);
+ ArgumentList tArgList = getTemplateArgumentsFromName(cd->name(),root->tArgLists);
cd->setTemplateArguments(tArgList);
}
@@ -1267,7 +1260,7 @@ static void addClassToContext(const Entry *root)
QCString tagName;
QCString refFileName;
- TagInfo *tagInfo = root->tagInfo;
+ const TagInfo *tagInfo = root->tagInfo();
int i;
if (tagInfo)
{
@@ -1280,12 +1273,11 @@ static void addClassToContext(const Entry *root)
buildScopeFromQualifiedName(fullName,fullName.contains("::"),root->lang,tagInfo);
}
}
- ArgumentList *tArgList = 0;
+ ArgumentList tArgList;
if ((root->lang==SrcLangExt_CSharp || root->lang==SrcLangExt_Java) && (i=fullName.find('<'))!=-1)
{
// a Java/C# generic class looks like a C++ specialization, so we need to split the
// name and template arguments here
- tArgList = new ArgumentList;
stringToArgumentList(fullName.mid(i),tArgList);
fullName=fullName.left(i);
}
@@ -1296,7 +1288,7 @@ static void addClassToContext(const Entry *root)
cd=createClassDef(tagInfo?tagName:root->fileName,root->startLine,root->startColumn,
fullName,sec,tagName,refFileName,TRUE,root->spec&Entry::Enum);
Debug::print(Debug::Classes,0," New class '%s' (sec=0x%08x)! #tArgLists=%d tagInfo=%p\n",
- qPrint(fullName),sec,root->tArgLists ? (int)root->tArgLists->count() : -1, tagInfo);
+ qPrint(fullName),sec,root->tArgLists.size(), tagInfo);
cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
cd->setLanguage(root->lang);
@@ -1328,7 +1320,7 @@ static void addClassToContext(const Entry *root)
//printf("ClassDict.insert(%s)\n",fullName.data());
Doxygen::classSDict->append(fullName,cd);
- if (cd->isGeneric()) // generics are also stored in a separate dictionary for fast lookup of instantions
+ if (cd->isGeneric()) // generics are also stored in a separate dictionary for fast lookup of instances
{
//printf("inserting generic '%s' cd=%p\n",fullName.data(),cd);
Doxygen::genericsDict->insert(fullName,cd);
@@ -1422,7 +1414,7 @@ static void resolveClassNestingRelations()
d->addInnerCompound(aliasCd);
QCString aliasFullName = d->qualifiedName()+"::"+aliasCd->localName();
Doxygen::classSDict->append(aliasFullName,aliasCd);
- printf("adding %s to %s as %s\n",qPrint(aliasCd->name()),qPrint(d->name()),qPrint(aliasFullName));
+ //printf("adding %s to %s as %s\n",qPrint(aliasCd->name()),qPrint(d->name()),qPrint(aliasFullName));
aliasCd->setVisited(TRUE);
}
}
@@ -1561,7 +1553,7 @@ static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QC
md->typeString(),md->name(),md->argsString(),md->excpString(),
md->protection(),md->virtualness(),md->isStatic(),Member,
md->memberType(),
- 0,0,"");
+ ArgumentList(),ArgumentList(),"");
imd->setMemberClass(cd);
imd->setDocumentation(md->documentation(),md->docFile(),md->docLine());
imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine());
@@ -1615,7 +1607,7 @@ static void processTagLessClasses(ClassDef *rootCd,
if (type.find(icd->name())!=-1) // matching tag less struct/union
{
QCString name = md->name();
- if (name.at(0)=='@') name = "__unnamed__";
+ if (md->isAnonymous()) name = "__unnamed__";
if (!prefix.isEmpty()) name.prepend(prefix+".");
//printf(" found %s for class %s\n",name.data(),cd->name().data());
ClassDef *ncd = createTagLessInstance(rootCd,icd,name);
@@ -1723,7 +1715,7 @@ static void buildNamespaceList(const Entry *root)
{
nd->setLanguage(root->lang);
}
- if (root->tagInfo==0) // if we found the namespace in a tag file
+ if (root->tagInfo()==0) // if we found the namespace in a tag file
// and also in a project file, then remove
// the tag file reference
{
@@ -1743,7 +1735,7 @@ static void buildNamespaceList(const Entry *root)
{
QCString tagName;
QCString tagFileName;
- TagInfo *tagInfo = root->tagInfo;
+ const TagInfo *tagInfo = root->tagInfo();
if (tagInfo)
{
tagName = tagInfo->tagName;
@@ -1954,12 +1946,13 @@ static void findUsingDirectives(const Entry *root)
nd->setMetaData(root->metaData);
nd->setInline((root->spec&Entry::Inline)!=0);
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ //QListIterator<Grouping> gli(*root->groups);
+ //Grouping *g;
+ //for (;(g=gli.current());++gli)
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
gd->addNamespace(nd);
}
@@ -2055,7 +2048,7 @@ static void findUsingDeclarations(const Entry *root)
if (usingCd==0) // definition not in the input => add an artificial class
{
Debug::print(Debug::Classes,0," New using class '%s' (sec=0x%08x)! #tArgLists=%d\n",
- qPrint(name),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
+ qPrint(name),root->section,root->tArgLists.size());
usingCd = createClassDef(
"<using>",1,1,
name,
@@ -2131,12 +2124,12 @@ static void findUsingDeclImports(const Entry *root)
MemberDef *newMd = 0;
{
QCString fileName = root->fileName;
- if (fileName.isEmpty() && root->tagInfo)
+ if (fileName.isEmpty() && root->tagInfo())
{
- fileName = root->tagInfo->tagName;
+ fileName = root->tagInfo()->tagName;
}
- const ArgumentList *templAl = md->templateArguments();
- const ArgumentList *al = md->templateArguments();
+ const ArgumentList &templAl = md->templateArguments();
+ const ArgumentList &al = md->templateArguments();
newMd = createMemberDef(
fileName,root->startLine,root->startColumn,
md->typeString(),memName,md->argsString(),
@@ -2326,9 +2319,9 @@ static MemberDef *addVariableToClass(
}
QCString fileName = root->fileName;
- if (fileName.isEmpty() && root->tagInfo)
+ if (fileName.isEmpty() && root->tagInfo())
{
- fileName = root->tagInfo->tagName;
+ fileName = root->tagInfo()->tagName;
}
// new member variable, typedef or enum value
@@ -2336,8 +2329,9 @@ static MemberDef *addVariableToClass(
fileName,root->startLine,root->startColumn,
type,name,args,root->exception,
prot,Normal,root->stat,related,
- mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0, root->metaData);
- md->setTagInfo(root->tagInfo);
+ mtype,!root->tArgLists.empty() ? root->tArgLists.back() : ArgumentList(),
+ ArgumentList(), root->metaData);
+ md->setTagInfo(root->tagInfo());
md->setMemberClass(cd); // also sets outer scope (i.e. getOuterScope())
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
@@ -2470,7 +2464,7 @@ static MemberDef *addVariableToFile(
QCString def;
// determine the definition of the global variable
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@' &&
+ if (nd && !nd->isAnonymous() &&
!Config_getBool(HIDE_SCOPE_NAMES)
)
// variable is inside a namespace, so put the scope before the name
@@ -2583,20 +2577,21 @@ static MemberDef *addVariableToFile(
}
QCString fileName = root->fileName;
- if (fileName.isEmpty() && root->tagInfo)
+ if (fileName.isEmpty() && root->tagInfo())
{
- fileName = root->tagInfo->tagName;
+ fileName = root->tagInfo()->tagName;
}
Debug::print(Debug::Variables,0,
- " new variable, nd=%s tagInfo=%p!\n",nd?qPrint(nd->name()):"<global>",root->tagInfo);
+ " new variable, nd=%s tagInfo=%p!\n",nd?qPrint(nd->name()):"<global>",root->tagInfo());
// new global variable, enum value or typedef
MemberDef *md=createMemberDef(
fileName,root->startLine,root->startColumn,
type,name,args,0,
root->protection, Normal,root->stat,Member,
- mtype,root->tArgLists ? root->tArgLists->getLast() : 0,0, root->metaData);
- md->setTagInfo(root->tagInfo);
+ mtype,!root->tArgLists.empty() ? root->tArgLists.back() : ArgumentList(),
+ ArgumentList(), root->metaData);
+ md->setTagInfo(root->tagInfo());
md->setMemberSpecifiers(root->spec);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
@@ -2624,7 +2619,7 @@ static MemberDef *addVariableToFile(
addMemberToGroups(root,md);
md->setRefItems(root->sli);
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
+ if (nd && !nd->isAnonymous())
{
md->setNamespace(nd);
nd->insertMember(md);
@@ -2739,19 +2734,16 @@ static bool isVarWithConstructor(const Entry *root)
// we need to rely on heuristics :-(
{
//printf("typeIsClass\n");
- ArgumentList *al = root->argList;
- if (al==0 || al->isEmpty())
+ if (root->argList.empty())
{
result=FALSE; // empty arg list -> function prototype.
goto done;
}
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : root->argList)
{
- if (!a->name.isEmpty() || !a->defval.isEmpty())
+ if (!a.name.isEmpty() || !a.defval.isEmpty())
{
- if (a->name.find(initChars)==0)
+ if (a.name.find(initChars)==0)
{
result=TRUE;
}
@@ -2761,31 +2753,31 @@ static bool isVarWithConstructor(const Entry *root)
}
goto done;
}
- if (a->type.isEmpty() || getResolvedClass(ctx,fd,a->type)!=0)
+ if (a.type.isEmpty() || getResolvedClass(ctx,fd,a.type)!=0)
{
result=FALSE; // arg type is a known type
goto done;
}
- if (checkIfTypedef(ctx,fd,a->type))
+ if (checkIfTypedef(ctx,fd,a.type))
{
//printf("%s:%d: false (arg is typedef)\n",__FILE__,__LINE__);
result=FALSE; // argument is a typedef
goto done;
}
- if (a->type.at(a->type.length()-1)=='*' ||
- a->type.at(a->type.length()-1)=='&')
+ if (a.type.at(a.type.length()-1)=='*' ||
+ a.type.at(a.type.length()-1)=='&')
// type ends with * or & => pointer or reference
{
result=FALSE;
goto done;
}
- if (a->type.find(initChars)==0)
+ if (a.type.find(initChars)==0)
{
result=TRUE; // argument type starts with typical initializer char
goto done;
}
- QCString resType=resolveTypeDef(ctx,a->type);
- if (resType.isEmpty()) resType=a->type;
+ QCString resType=resolveTypeDef(ctx,a.type);
+ if (resType.isEmpty()) resType=a.type;
int len;
if (idChars.match(resType,0,&len)==0) // resType starts with identifier
{
@@ -3122,15 +3114,15 @@ static void addInterfaceOrServiceToServiceOrSingleton(
? MemberType_Interface
: MemberType_Service;
QCString fileName = root->fileName;
- if (fileName.isEmpty() && root->tagInfo)
+ if (fileName.isEmpty() && root->tagInfo())
{
- fileName = root->tagInfo->tagName;
+ fileName = root->tagInfo()->tagName;
}
MemberDef *const md = createMemberDef(
fileName, root->startLine, root->startColumn, root->type, rname,
"", "", root->protection, root->virt, root->stat, Member,
- type, 0, root->argList, root->metaData);
- md->setTagInfo(root->tagInfo);
+ type, ArgumentList(), root->argList, root->metaData);
+ md->setTagInfo(root->tagInfo());
md->setMemberClass(cd);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(false);
@@ -3206,7 +3198,7 @@ static void buildInterfaceAndServiceList(const Entry *root)
qPrint(root->fileName),
root->startLine,
root->bodyLine,
- root->tArgLists ? (int)root->tArgLists->count() : -1,
+ root->tArgLists.size(),
root->mGrpId,
root->spec,
root->proto,
@@ -3300,9 +3292,9 @@ static void addMethodToClass(const Entry *root,ClassDef *cd,
}
QCString fileName = root->fileName;
- if (fileName.isEmpty() && root->tagInfo)
+ if (fileName.isEmpty() && root->tagInfo())
{
- fileName = root->tagInfo->tagName;
+ fileName = root->tagInfo()->tagName;
}
//printf("root->name='%s; args='%s' root->argList='%s'\n",
@@ -3317,8 +3309,9 @@ static void addMethodToClass(const Entry *root,ClassDef *cd,
stat && root->relatesType != MemberOf,
relates.isEmpty() ? Member :
root->relatesType == MemberOf ? Foreign : Related,
- mtype,root->tArgLists ? root->tArgLists->getLast() : 0,root->argList, root->metaData);
- md->setTagInfo(root->tagInfo);
+ mtype,!root->tArgLists.empty() ? root->tArgLists.back() : ArgumentList(),
+ root->argList, root->metaData);
+ md->setTagInfo(root->tagInfo());
md->setMemberClass(cd);
md->setDocumentation(root->doc,root->docFile,root->docLine);
md->setDocsForDefinition(!root->proto);
@@ -3347,54 +3340,27 @@ static void addMethodToClass(const Entry *root,ClassDef *cd,
// for PHP we use Class::method and Namespace\method
scopeSeparator="::";
}
+// QCString optArgs = root->argList.empty() ? args : QCString();
if (!relates.isEmpty() || isFriend || Config_getBool(HIDE_SCOPE_NAMES))
{
if (!type.isEmpty())
{
- if (root->argList)
- {
- def=type+" "+name;
- }
- else
- {
- def=type+" "+name+args;
- }
+ def=type+" "+name; //+optArgs;
}
else
{
- if (root->argList)
- {
- def=name;
- }
- else
- {
- def=name+args;
- }
+ def=name; //+optArgs;
}
}
else
{
if (!type.isEmpty())
{
- if (root->argList)
- {
- def=type+" "+qualScope+scopeSeparator+name;
- }
- else
- {
- def=type+" "+qualScope+scopeSeparator+name+args;
- }
+ def=type+" "+qualScope+scopeSeparator+name; //+optArgs;
}
else
{
- if (root->argList)
- {
- def=qualScope+scopeSeparator+name;
- }
- else
- {
- def=qualScope+scopeSeparator+name+args;
- }
+ def=qualScope+scopeSeparator+name; //+optArgs;
}
}
if (def.left(7)=="friend ") def=def.right(def.length()-7);
@@ -3457,7 +3423,7 @@ static void buildFunctionList(const Entry *root)
qPrint(root->fileName),
root->startLine,
root->bodyLine,
- root->tArgLists ? (int)root->tArgLists->count() : -1,
+ root->tArgLists.size(),
root->mGrpId,
root->spec,
root->proto,
@@ -3577,16 +3543,16 @@ static void buildFunctionList(const Entry *root)
if (rnd) rnsName = rnd->name().copy();
//printf("matching arguments for %s%s %s%s\n",
// md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data());
- ArgumentList *mdAl = md->argumentList();
- const ArgumentList *mdTempl = md->templateArguments();
+ ArgumentList &mdAl = md->argumentList();
+ const ArgumentList &mdTempl = md->templateArguments();
// in case of template functions, we need to check if the
// functions have the same number of template parameters
bool sameNumTemplateArgs = TRUE;
bool matchingReturnTypes = TRUE;
- if (mdTempl!=0 && root->tArgLists)
+ if (!mdTempl.empty() && !root->tArgLists.empty())
{
- if (mdTempl->count()!=root->tArgLists->getLast()->count())
+ if (mdTempl.size()!=root->tArgLists.back().size())
{
sameNumTemplateArgs = FALSE;
}
@@ -3609,9 +3575,9 @@ static void buildFunctionList(const Entry *root)
)
{
GroupDef *gd=0;
- if (root->groups->getFirst() && !root->groups->getFirst()->groupname.isEmpty())
+ if (!root->groups.empty() && !root->groups.front().groupname.isEmpty())
{
- gd = Doxygen::groupSDict->find(root->groups->getFirst()->groupname);
+ gd = Doxygen::groupSDict->find(root->groups.front().groupname);
}
//printf("match!\n");
//printf("mnd=%p rnd=%p nsName=%s rnsName=%s\n",mnd,rnd,nsName.data(),rnsName.data());
@@ -3634,11 +3600,12 @@ static void buildFunctionList(const Entry *root)
if (found)
{
// merge argument lists
- mergeArguments(mdAl,root->argList,!root->doc.isEmpty());
+ ArgumentList mergedArgList = root->argList;
+ mergeArguments(mdAl,mergedArgList,!root->doc.isEmpty());
// merge documentation
if (md->documentation().isEmpty() && !root->doc.isEmpty())
{
- ArgumentList *argList = new ArgumentList;
+ ArgumentList argList;
stringToArgumentList(root->args,argList);
if (root->proto)
{
@@ -3674,16 +3641,15 @@ static void buildFunctionList(const Entry *root)
md->enableReferencesRelation(md->hasReferencesRelation() || root->referencesRelation);
// merge ingroup specifiers
- if (md->getGroupDef()==0 && root->groups->getFirst()!=0)
+ if (md->getGroupDef()==0 && !root->groups.empty())
{
addMemberToGroups(root,md);
}
- else if (md->getGroupDef()!=0 && root->groups->count()==0)
+ else if (md->getGroupDef()!=0 && root->groups.empty())
{
//printf("existing member is grouped, new member not\n");
- root->groups->append(new Grouping(md->getGroupDef()->name(), md->getGroupPri()));
}
- else if (md->getGroupDef()!=0 && root->groups->getFirst()!=0)
+ else if (md->getGroupDef()!=0 && !root->groups.empty())
{
//printf("both members are grouped\n");
}
@@ -3712,15 +3678,16 @@ static void buildFunctionList(const Entry *root)
// root->type.data(),rname.data(),root->args.data(),root->bodyLine);
// new global function
- ArgumentList *tArgList = root->tArgLists ? root->tArgLists->getLast() : 0;
QCString name=removeRedundantWhiteSpace(rname);
md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
root->type,name,root->args,root->exception,
root->protection,root->virt,root->stat,Member,
- MemberType_Function,tArgList,root->argList,root->metaData);
+ MemberType_Function,
+ !root->tArgLists.empty() ? root->tArgLists.back() : ArgumentList(),
+ root->argList,root->metaData);
- md->setTagInfo(root->tagInfo);
+ md->setTagInfo(root->tagInfo());
md->setLanguage(root->lang);
md->setId(root->id);
//md->setDefFile(root->fileName);
@@ -3762,27 +3729,14 @@ static void buildFunctionList(const Entry *root)
}
QCString def;
+ //QCString optArgs = root->argList.empty() ? QCString() : root->args;
if (!root->type.isEmpty())
{
- if (root->argList)
- {
- def=root->type+" "+scope+name;
- }
- else
- {
- def=root->type+" "+scope+name+root->args;
- }
+ def=root->type+" "+scope+name; //+optArgs;
}
else
{
- if (root->argList)
- {
- def=scope+name.copy();
- }
- else
- {
- def=scope+name+root->args;
- }
+ def=scope+name; //+optArgs;
}
Debug::print(Debug::Functions,0,
" Global Function:\n"
@@ -3906,8 +3860,8 @@ static void findFriends()
) // if the member is related and the arguments match then the
// function is actually a friend.
{
- ArgumentList *mmdAl = mmd->argumentList();
- ArgumentList *fmdAl = fmd->argumentList();
+ ArgumentList &mmdAl = mmd->argumentList();
+ ArgumentList &fmdAl = fmd->argumentList();
mergeArguments(mmdAl,fmdAl);
if (!fmd->documentation().isEmpty())
{
@@ -3988,7 +3942,7 @@ static void transferFunctionDocumentation()
MemberNameIterator mni2(*mn);
for (;(mdef=mni2.current());++mni2)
{
- if (!mdec->isAlias() && !mdef->isAlias())
+ if (mdec!=mdef && !mdec->isAlias() && !mdef->isAlias())
{
combineDeclarationAndDefinition(mdec,mdef);
}
@@ -4023,8 +3977,8 @@ static void transferFunctionReferences()
}
if (mdef && mdec)
{
- ArgumentList *mdefAl = mdef->argumentList();
- ArgumentList *mdecAl = mdec->argumentList();
+ ArgumentList &mdefAl = mdef->argumentList();
+ ArgumentList &mdecAl = mdec->argumentList();
if (
matchArguments2(mdef->getOuterScope(),mdef->getFileDef(),mdefAl,
mdec->getOuterScope(),mdec->getFileDef(),mdecAl,
@@ -4144,31 +4098,26 @@ static void transferRelatedFunctionDocumentation()
* Example: A template class A with template arguments <R,S,T>
* that inherits from B<T,T,S> will have T and S in the dictionary.
*/
-static QDict<int> *getTemplateArgumentsInName(ArgumentList *templateArguments,const QCString &name)
+static QDict<int> *getTemplateArgumentsInName(const ArgumentList &templateArguments,const QCString &name)
{
QDict<int> *templateNames = new QDict<int>(17);
templateNames->setAutoDelete(TRUE);
static QRegExp re("[a-z_A-Z][a-z_A-Z0-9:]*");
- if (templateArguments)
+ int count=0;
+ for (const Argument &arg : templateArguments)
{
- ArgumentListIterator ali(*templateArguments);
- Argument *arg;
- int count=0;
- for (ali.toFirst();(arg=ali.current());++ali,count++)
+ int i,p=0,l;
+ while ((i=re.match(name,p,&l))!=-1)
{
- int i,p=0,l;
- while ((i=re.match(name,p,&l))!=-1)
+ QCString n = name.mid(i,l);
+ if (n==arg.name)
{
- QCString n = name.mid(i,l);
- if (n==arg->name)
+ if (templateNames->find(n)==0)
{
- if (templateNames->find(n)==0)
- {
- templateNames->insert(n,new int(count));
- }
+ templateNames->insert(n,new int(count));
}
- p=i+l;
}
+ p=i+l;
}
}
return templateNames;
@@ -4219,12 +4168,12 @@ static void findUsedClassesForClass(const Entry *root,
ClassDef *masterCd,
ClassDef *instanceCd,
bool isArtificial,
- ArgumentList *actualArgs=0,
+ const ArgumentList &actualArgs=ArgumentList(),
QDict<int> *templateNames=0
)
{
masterCd->setVisited(TRUE);
- ArgumentList *formalArgs = masterCd->templateArguments();
+ const ArgumentList &formalArgs = masterCd->templateArguments();
if (masterCd->memberNameInfoSDict())
{
MemberNameInfoSDict::Iterator mnili(*masterCd->memberNameInfoSDict());
@@ -4250,10 +4199,7 @@ static void findUsedClassesForClass(const Entry *root,
QCString templSpec;
bool found=FALSE;
// the type can contain template variables, replace them if present
- if (actualArgs)
- {
- type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
- }
+ type = substituteTemplateArgumentsInString(type,formalArgs,actualArgs);
//printf(" template substitution gives=%s\n",type.data());
while (!found && extractClassNameFromType(type,pos,usedClassName,templSpec,root->lang)!=-1)
@@ -4293,37 +4239,32 @@ static void findUsedClassesForClass(const Entry *root,
BaseInfo bi(usedName,Public,Normal);
findClassRelation(root,context,instanceCd,&bi,templateNames,TemplateInstances,isArtificial);
- if (masterCd->templateArguments())
+ int count=0;
+ for (const Argument &arg : masterCd->templateArguments())
{
- ArgumentListIterator ali(*masterCd->templateArguments());
- Argument *arg;
- int count=0;
- for (ali.toFirst();(arg=ali.current());++ali,++count)
+ if (arg.name==usedName) // type is a template argument
{
- if (arg->name==usedName) // type is a template argument
- {
- found=TRUE;
- Debug::print(Debug::Classes,0," New used class '%s'\n", qPrint(usedName));
+ found=TRUE;
+ Debug::print(Debug::Classes,0," New used class '%s'\n", qPrint(usedName));
- ClassDef *usedCd = Doxygen::hiddenClasses->find(usedName);
- if (usedCd==0)
- {
- usedCd = createClassDef(
- masterCd->getDefFileName(),masterCd->getDefLine(),
- masterCd->getDefColumn(),
- usedName,
- ClassDef::Class);
- //printf("making %s a template argument!!!\n",usedCd->name().data());
- usedCd->makeTemplateArgument();
- usedCd->setUsedOnly(TRUE);
- usedCd->setLanguage(masterCd->getLanguage());
- Doxygen::hiddenClasses->append(usedName,usedCd);
- }
- if (isArtificial) usedCd->setArtificial(TRUE);
- Debug::print(Debug::Classes,0," Adding used class '%s' (1)\n", qPrint(usedCd->name()));
- instanceCd->addUsedClass(usedCd,md->name(),md->protection());
- usedCd->addUsedByClass(instanceCd,md->name(),md->protection());
+ ClassDef *usedCd = Doxygen::hiddenClasses->find(usedName);
+ if (usedCd==0)
+ {
+ usedCd = createClassDef(
+ masterCd->getDefFileName(),masterCd->getDefLine(),
+ masterCd->getDefColumn(),
+ usedName,
+ ClassDef::Class);
+ //printf("making %s a template argument!!!\n",usedCd->name().data());
+ usedCd->makeTemplateArgument();
+ usedCd->setUsedOnly(TRUE);
+ usedCd->setLanguage(masterCd->getLanguage());
+ Doxygen::hiddenClasses->append(usedName,usedCd);
}
+ if (isArtificial) usedCd->setArtificial(TRUE);
+ Debug::print(Debug::Classes,0," Adding used class '%s' (1)\n", qPrint(usedCd->name()));
+ instanceCd->addUsedClass(usedCd,md->name(),md->protection());
+ usedCd->addUsedByClass(instanceCd,md->name(),md->protection());
}
}
@@ -4390,31 +4331,26 @@ static void findBaseClassesForClass(
ClassDef *instanceCd,
FindBaseClassRelation_Mode mode,
bool isArtificial,
- ArgumentList *actualArgs=0,
+ const ArgumentList &actualArgs=ArgumentList(),
QDict<int> *templateNames=0
)
{
//if (masterCd->visited) return;
masterCd->setVisited(TRUE);
// The base class could ofcouse also be a non-nested class
- ArgumentList *formalArgs = masterCd->templateArguments();
- QListIterator<BaseInfo> bii(*root->extends);
- BaseInfo *bi=0;
- for (bii.toFirst();(bi=bii.current());++bii)
+ const ArgumentList &formalArgs = masterCd->templateArguments();
+ for (const BaseInfo &bi : root->extends)
{
//printf("masterCd=%s bi->name='%s' #actualArgs=%d\n",
// masterCd->localName().data(),bi->name.data(),actualArgs?(int)actualArgs->count():-1);
bool delTempNames=FALSE;
if (templateNames==0)
{
- templateNames = getTemplateArgumentsInName(formalArgs,bi->name);
+ templateNames = getTemplateArgumentsInName(formalArgs,bi.name);
delTempNames=TRUE;
}
- BaseInfo tbi(bi->name,bi->prot,bi->virt);
- if (actualArgs) // substitute the formal template arguments of the base class
- {
- tbi.name = substituteTemplateArgumentsInString(bi->name,formalArgs,actualArgs);
- }
+ BaseInfo tbi = bi;
+ tbi.name = substituteTemplateArgumentsInString(bi.name,formalArgs,actualArgs);
//printf("bi->name=%s tbi.name=%s\n",bi->name.data(),tbi.name.data());
if (mode==DocumentedOnly)
@@ -4492,14 +4428,13 @@ static bool findTemplateInstanceRelation(const Entry *root,
const Entry *templateRoot = it->second;
Debug::print(Debug::Classes,0," template root found %s templSpec=%s!\n",
qPrint(templateRoot->name),qPrint(templSpec));
- ArgumentList *templArgs = new ArgumentList;
+ ArgumentList templArgs;
stringToArgumentList(templSpec,templArgs);
findBaseClassesForClass(templateRoot,context,templateClass,instanceClass,
TemplateInstances,isArtificial,templArgs,templateNames);
findUsedClassesForClass(templateRoot,context,templateClass,instanceClass,
isArtificial,templArgs,templateNames);
- delete templArgs;
}
else
{
@@ -4612,7 +4547,7 @@ static bool findClassRelation(
const Entry *root,
Definition *context,
ClassDef *cd,
- BaseInfo *bi,
+ const BaseInfo *bi,
QDict<int> *templateNames,
FindBaseClassRelation_Mode mode,
bool isArtificial
@@ -4840,13 +4775,13 @@ static bool findClassRelation(
usedName=biName;
//printf("***** usedName=%s templSpec=%s\n",usedName.data(),templSpec.data());
}
- static bool sipSupport = Config_getBool(SIP_SUPPORT);
- if (sipSupport) bi->prot=Public;
+ Protection prot = bi->prot;
+ if (Config_getBool(SIP_SUPPORT)) prot=Public;
if (!cd->isSubClass(baseClass)) // check for recursion, see bug690787
{
- cd->insertBaseClass(baseClass,usedName,bi->prot,bi->virt,templSpec);
+ cd->insertBaseClass(baseClass,usedName,prot,bi->virt,templSpec);
// add this class as super class to the base class
- baseClass->insertSubClass(cd,bi->prot,bi->virt,templSpec);
+ baseClass->insertSubClass(cd,prot,bi->virt,templSpec);
}
else
{
@@ -4895,7 +4830,7 @@ static bool findClassRelation(
int si = baseClassName.findRev("::");
if (si!=-1) // class is nested
{
- Definition *sd = findScopeFromQualifiedName(Doxygen::globalScope,baseClassName.left(si),0,root->tagInfo);
+ Definition *sd = findScopeFromQualifiedName(Doxygen::globalScope,baseClassName.left(si),0,root->tagInfo());
if (sd==0 || sd==Doxygen::globalScope) // outer scope not found
{
baseClass->setArtificial(TRUE); // see bug678139
@@ -4978,8 +4913,8 @@ static bool isClassSection(const Entry *root)
else if (root->section & Entry::COMPOUNDDOC_MASK)
// is it a documentation block with inheritance info.
{
- bool extends = root->extends->count()>0;
- if (extends) return TRUE;
+ bool hasExtends = !root->extends.empty();
+ if (hasExtends) return TRUE;
}
}
return FALSE;
@@ -5107,20 +5042,17 @@ static void computeTemplateClassRelations()
{
Debug::print(Debug::Classes,0," Template instance %s : \n",qPrint(tcd->name()));
QCString templSpec = tdi.currentKey();
- ArgumentList *templArgs = new ArgumentList;
+ ArgumentList templArgs;
stringToArgumentList(templSpec,templArgs);
- QList<BaseInfo> *baseList=root->extends;
- QListIterator<BaseInfo> it(*baseList);
- BaseInfo *bi;
- for (;(bi=it.current());++it) // for each base class of the template
+ for (const BaseInfo &bi : root->extends)
{
// check if the base class is a template argument
- BaseInfo tbi(bi->name,bi->prot,bi->virt);
- ArgumentList *tl = cd->templateArguments();
- if (tl)
+ BaseInfo tbi = bi;
+ const ArgumentList &tl = cd->templateArguments();
+ if (!tl.empty())
{
QDict<int> *baseClassNames = tcd->getTemplateBaseClassNames();
- QDict<int> *templateNames = getTemplateArgumentsInName(tl,bi->name);
+ QDict<int> *templateNames = getTemplateArgumentsInName(tl,bi.name);
// for each template name that we inherit from we need to
// substitute the formal with the actual arguments
QDict<int> *actualTemplateNames = new QDict<int>(17);
@@ -5129,23 +5061,25 @@ static void computeTemplateClassRelations()
for (qdi.toFirst();qdi.current();++qdi)
{
int templIndex = *qdi.current();
- Argument *actArg = 0;
- if (templIndex<(int)templArgs->count())
+ Argument actArg;
+ bool hasActArg=FALSE;
+ if (templIndex<(int)templArgs.size())
{
- actArg=templArgs->at(templIndex);
+ actArg=templArgs.at(templIndex);
+ hasActArg=TRUE;
}
- if (actArg!=0 &&
+ if (hasActArg &&
baseClassNames!=0 &&
- baseClassNames->find(actArg->type)!=0 &&
- actualTemplateNames->find(actArg->type)==0
+ baseClassNames->find(actArg.type)!=0 &&
+ actualTemplateNames->find(actArg.type)==0
)
{
- actualTemplateNames->insert(actArg->type,new int(templIndex));
+ actualTemplateNames->insert(actArg.type,new int(templIndex));
}
}
delete templateNames;
- tbi.name = substituteTemplateArgumentsInString(bi->name,tl,templArgs);
+ tbi.name = substituteTemplateArgumentsInString(bi.name,tl,templArgs);
// find a documented base class in the correct scope
if (!findClassRelation(root,cd,tcd,&tbi,actualTemplateNames,DocumentedOnly,FALSE))
{
@@ -5155,7 +5089,6 @@ static void computeTemplateClassRelations()
delete actualTemplateNames;
}
}
- delete templArgs;
} // class has no base classes
}
}
@@ -5250,7 +5183,7 @@ static void addListReferences()
name = pd->getGroupDef()->getOutputFileBase();
}
{
- QList<ListItemInfo> *xrefItems = pd->xrefListItems();
+ const std::vector<ListItemInfo> &xrefItems = pd->xrefListItems();
addRefItem(xrefItems,
name,
theTranslator->trPage(TRUE,TRUE),
@@ -5267,7 +5200,7 @@ static void addListReferences()
//{
// name = dd->getGroupDef()->getOutputFileBase();
//}
- QList<ListItemInfo> *xrefItems = dd->xrefListItems();
+ const std::vector<ListItemInfo> &xrefItems = dd->xrefListItems();
addRefItem(xrefItems,
name,
theTranslator->trDir(TRUE,TRUE),
@@ -5294,13 +5227,13 @@ static void generateXRefPages()
static void addMemberDocs(const Entry *root,
MemberDef *md, const char *funcDecl,
- ArgumentList *al,
+ const ArgumentList *al,
bool over_load,
uint64 spec
)
{
- //printf("addMemberDocs: '%s'::'%s' '%s' funcDecl='%s' mSpec=%d\n",
- // root->parent->name.data(),md->name().data(),md->argsString(),funcDecl,spec);
+ //printf("addMemberDocs: '%s'::'%s' '%s' funcDecl='%s' mSpec=%lld\n",
+ // root->parent()->name.data(),md->name().data(),md->argsString(),funcDecl,spec);
QCString fDecl=funcDecl;
// strip extern specifier
fDecl.stripPrefix("extern ");
@@ -5324,11 +5257,12 @@ static void addMemberDocs(const Entry *root,
// TODO determine scope based on root not md
Definition *rscope = md->getOuterScope();
- ArgumentList *mdAl = md->argumentList();
+ ArgumentList &mdAl = md->argumentList();
if (al)
{
+ ArgumentList mergedAl = *al;
//printf("merging arguments (1) docs=%d\n",root->doc.isEmpty());
- mergeArguments(mdAl,al,!root->doc.isEmpty());
+ mergeArguments(mdAl,mergedAl,!root->doc.isEmpty());
}
else
{
@@ -5340,7 +5274,8 @@ static void addMemberDocs(const Entry *root,
)
{
//printf("merging arguments (2)\n");
- mergeArguments(mdAl,root->argList,!root->doc.isEmpty());
+ ArgumentList mergedArgList = root->argList;
+ mergeArguments(mdAl,mergedArgList,!root->doc.isEmpty());
}
}
if (over_load) // the \overload keyword was used
@@ -5511,9 +5446,9 @@ static bool findGlobalMember(const Entry *root,
NamespaceDef *rnd = 0;
if (!namespaceName.isEmpty()) rnd = Doxygen::namespaceSDict->find(namespaceName);
- const ArgumentList *mdAl = const_cast<const MemberDef *>(md)->argumentList();
+ const ArgumentList &mdAl = const_cast<const MemberDef *>(md)->argumentList();
bool matching=
- (mdAl==0 && root->argList->count()==0) ||
+ (mdAl.empty() && root->argList.empty()) ||
md->isVariable() || md->isTypedef() || /* in case of function pointers */
matchArguments2(md->getOuterScope(),const_cast<const MemberDef *>(md)->getFileDef(),mdAl,
rnd ? rnd : Doxygen::globalScope,fd,root->argList,
@@ -5522,15 +5457,12 @@ static bool findGlobalMember(const Entry *root,
// for template members we need to check if the number of
// template arguments is the same, otherwise we are dealing with
// different functions.
- if (matching && root->tArgLists)
+ if (matching && !root->tArgLists.empty())
{
- const ArgumentList *mdTempl = md->templateArguments();
- if (mdTempl)
+ const ArgumentList &mdTempl = md->templateArguments();
+ if (root->tArgLists.back().size()!=mdTempl.size())
{
- if (root->tArgLists->getLast()->count()!=mdTempl->count())
- {
- matching=FALSE;
- }
+ matching=FALSE;
}
}
@@ -5550,11 +5482,11 @@ static bool findGlobalMember(const Entry *root,
}
// for template member we also need to check the return type
- if (md->templateArguments()!=0 && root->tArgLists!=0)
+ if (!md->templateArguments().empty() && !root->tArgLists.empty())
{
//printf("Comparing return types '%s'<->'%s'\n",
// md->typeString(),type);
- if (md->templateArguments()->count()!=root->tArgLists->getLast()->count() ||
+ if (md->templateArguments().size()!=root->tArgLists.back().size() ||
qstrcmp(md->typeString(),type)!=0)
{
//printf(" ---> no matching\n");
@@ -5565,7 +5497,7 @@ static bool findGlobalMember(const Entry *root,
if (matching) // add docs to the member
{
Debug::print(Debug::FindMembers,0,"5. Match found\n");
- addMemberDocs(root,md->resolveAlias(),decl,root->argList,FALSE,root->spec);
+ addMemberDocs(root,md->resolveAlias(),decl,&root->argList,FALSE,root->spec);
found=TRUE;
}
}
@@ -5573,7 +5505,7 @@ static bool findGlobalMember(const Entry *root,
if (!found && root->relatesType != Duplicate && root->section==Entry::FUNCTION_SEC) // no match
{
QCString fullFuncDecl=decl;
- if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE);
+ if (!root->argList.empty()) fullFuncDecl+=argListToString(root->argList,TRUE);
QCString warnMsg =
QCString("no matching file member found for \n")+substitute(fullFuncDecl,"%","%%");
if (mn->count()>0)
@@ -5609,17 +5541,17 @@ static bool findGlobalMember(const Entry *root,
}
static bool isSpecialization(
- const QList<ArgumentList> &srcTempArgLists,
- const QList<ArgumentList> &dstTempArgLists
+ const std::vector<ArgumentList> &srcTempArgLists,
+ const std::vector<ArgumentList> &dstTempArgLists
)
{
- QListIterator<ArgumentList> srclali(srcTempArgLists);
- QListIterator<ArgumentList> dstlali(dstTempArgLists);
- for (;srclali.current();++srclali,++dstlali)
+ auto srcIt = srcTempArgLists.begin();
+ auto dstIt = dstTempArgLists.begin();
+ while (srcIt!=srcTempArgLists.end() && dstIt!=dstTempArgLists.end())
{
- ArgumentList *sal = srclali.current();
- ArgumentList *dal = dstlali.current();
- if (!(sal && dal && sal->count()==dal->count())) return TRUE;
+ if ((*srcIt).size()!=(*dstIt).size()) return TRUE;
+ ++srcIt;
+ ++dstIt;
}
return FALSE;
}
@@ -5629,15 +5561,15 @@ static bool scopeIsTemplate(const Definition *d)
bool result=FALSE;
if (d && d->definitionType()==Definition::TypeClass)
{
- result = (dynamic_cast<const ClassDef*>(d))->templateArguments() || scopeIsTemplate(d->getOuterScope());
+ result = !(dynamic_cast<const ClassDef*>(d))->templateArguments().empty() ||
+ scopeIsTemplate(d->getOuterScope());
}
return result;
}
static QCString substituteTemplatesInString(
- const QList<ArgumentList> &srcTempArgLists,
- const QList<ArgumentList> &dstTempArgLists,
- ArgumentList *funcTempArgList, // can be used to match template specializations
+ const std::vector<ArgumentList> &srcTempArgLists,
+ const std::vector<ArgumentList> &dstTempArgLists,
const QCString &src
)
{
@@ -5651,61 +5583,59 @@ static QCString substituteTemplatesInString(
dst+=src.mid(p,i-p);
QCString name=src.mid(i,l);
- QListIterator<ArgumentList> srclali(srcTempArgLists);
- QListIterator<ArgumentList> dstlali(dstTempArgLists);
- for (;srclali.current() && !found;++srclali,++dstlali)
+ auto srcIt = srcTempArgLists.begin();
+ auto dstIt = dstTempArgLists.begin();
+ while (srcIt!=srcTempArgLists.end() && !found)
{
- ArgumentListIterator tsali(*srclali.current());
- ArgumentListIterator tdali(*dstlali.current());
- ArgumentListIterator *fali=0;
- Argument *tsa =0,*tda=0, *fa=0;
- if (funcTempArgList)
+ const ArgumentList *tdAli = 0;
+ std::vector<Argument>::const_iterator tdaIt;
+ if (dstIt!=dstTempArgLists.end())
{
- fali = new ArgumentListIterator(*funcTempArgList);
- fa = fali->current();
+ tdAli = &(*dstIt);
+ tdaIt = tdAli->begin();
+ ++dstIt;
}
- for (tsali.toFirst();(tsa=tsali.current()) && !found;++tsali)
+ const ArgumentList &tsaLi = *srcIt;
+ for (auto tsaIt = tsaLi.begin(); tsaIt!=tsaLi.end() && !found; ++tsaIt)
{
- tda = tdali.current();
+ Argument tsa = *tsaIt;
+ const Argument *tda = 0;
+ if (tdAli && tdaIt!=tdAli->end())
+ {
+ tda = &(*tdaIt);
+ ++tdaIt;
+ }
//if (tda) printf("tsa=%s|%s tda=%s|%s\n",
- // tsa->type.data(),tsa->name.data(),
+ // tsa.type.data(),tsa.name.data(),
// tda->type.data(),tda->name.data());
- if (name==tsa->name)
+ if (name==tsa.name)
{
if (tda && tda->name.isEmpty())
{
+ QCString tdaName = tda->name;
+ QCString tdaType = tda->type;
int vc=0;
- if (tda->type.left(6)=="class ") vc=6;
- else if (tda->type.left(9)=="typename ") vc=9;
+ if (tdaType.left(6)=="class ") vc=6;
+ else if (tdaType.left(9)=="typename ") vc=9;
if (vc>0) // convert type=="class T" to type=="class" name=="T"
{
- tda->name = tda->type.mid(vc);
- tda->type = tda->type.left(vc-1);
+ tdaName = tdaType.mid(vc);
+ }
+ if (!tdaName.isEmpty())
+ {
+ name=tdaName; // substitute
+ found=TRUE;
}
- }
- if (tda && !tda->name.isEmpty())
- {
- name=tda->name; // substitute
- found=TRUE;
- }
- else if (fa)
- {
- name=fa->type;
- found=TRUE;
}
}
- if (tda)
- ++tdali;
- else if (fali)
- { ++(*fali); fa=fali->current(); }
}
- delete fali;
//printf(" srcList='%s' dstList='%s faList='%s'\n",
// argListToString(srclali.current()).data(),
// argListToString(dstlali.current()).data(),
// funcTempArgList ? argListToString(funcTempArgList).data() : "<none>");
+ ++srcIt;
}
dst+=name;
p=i+l;
@@ -5717,48 +5647,39 @@ static QCString substituteTemplatesInString(
}
static void substituteTemplatesInArgList(
- const QList<ArgumentList> &srcTempArgLists,
- const QList<ArgumentList> &dstTempArgLists,
- ArgumentList *src,
- ArgumentList *dst,
- ArgumentList *funcTempArgs = 0
+ const std::vector<ArgumentList> &srcTempArgLists,
+ const std::vector<ArgumentList> &dstTempArgLists,
+ const ArgumentList &src,
+ ArgumentList &dst
)
{
- ArgumentListIterator sali(*src);
- ArgumentListIterator dali(*dst);
- Argument *sa=0;
- Argument *da=dali.current();
-
- for (sali.toFirst();(sa=sali.current());++sali) // for each member argument
+ auto dstIt = dst.begin();
+ for (const Argument &sa : src)
{
- QCString dstType = substituteTemplatesInString(
- srcTempArgLists,dstTempArgLists,funcTempArgs,
- sa->type);
- QCString dstArray = substituteTemplatesInString(
- srcTempArgLists,dstTempArgLists,funcTempArgs,
- sa->array);
- if (da==0)
+ QCString dstType = substituteTemplatesInString(srcTempArgLists,dstTempArgLists,sa.type);
+ QCString dstArray = substituteTemplatesInString(srcTempArgLists,dstTempArgLists,sa.array);
+ if (dstIt == dst.end())
{
- da=new Argument(*sa);
- dst->append(da);
- da->type=dstType;
- da->array=dstArray;
- da=0;
+ Argument da = sa;
+ da.type = dstType;
+ da.array = dstArray;
+ dst.push_back(da);
+ dstIt = dst.end();
}
else
{
- da->type=dstType;
- da->type=dstArray;
- ++dali;
- da=dali.current();
+ Argument da = *dstIt;
+ da.type = dstType;
+ da.array = dstArray;
+ ++dstIt;
}
}
- dst->constSpecifier = src->constSpecifier;
- dst->volatileSpecifier = src->volatileSpecifier;
- dst->pureSpecifier = src->pureSpecifier;
- dst->trailingReturnType = substituteTemplatesInString(
+ dst.constSpecifier = src.constSpecifier;
+ dst.volatileSpecifier = src.volatileSpecifier;
+ dst.pureSpecifier = src.pureSpecifier;
+ dst.trailingReturnType = substituteTemplatesInString(
srcTempArgLists,dstTempArgLists,
- funcTempArgs,src->trailingReturnType);
+ src.trailingReturnType);
//printf("substituteTemplatesInArgList: replacing %s with %s\n",
// argListToString(src).data(),argListToString(dst).data()
// );
@@ -5786,10 +5707,10 @@ static void findMember(const Entry *root,
{
Debug::print(Debug::FindMembers,0,
"findMember(root=%p,funcDecl='%s',related='%s',overload=%d,"
- "isFunc=%d mGrpId=%d tArgList=%p (#=%d) "
+ "isFunc=%d mGrpId=%d #tArgList=%d "
"spec=%lld lang=%x\n",
root,qPrint(funcDecl),qPrint(relates),overloaded,isFunc,root->mGrpId,
- root->tArgLists,root->tArgLists ? root->tArgLists->count() : 0,
+ root->tArgLists.size(),
root->spec,root->lang
);
@@ -5946,9 +5867,8 @@ static void findMember(const Entry *root,
// empty while funcSpec is not empty we assume this is a
// specialization of a method. If not, we clear the funcSpec and treat
// this as a normal method of a template class.
- if (!(root->tArgLists &&
- root->tArgLists->count()>0 &&
- root->tArgLists->getFirst()->count()==0
+ if (!(root->tArgLists.size()>0 &&
+ root->tArgLists.front().size()==0
)
)
{
@@ -5995,7 +5915,7 @@ static void findMember(const Entry *root,
if (funcSpec.isEmpty())
{
int argListIndex=0;
- tempScopeName=cd->qualifiedNameWithTemplateParameters(root->tArgLists,&argListIndex);
+ tempScopeName=cd->qualifiedNameWithTemplateParameters(&root->tArgLists,&argListIndex);
}
else
{
@@ -6145,39 +6065,33 @@ static void findMember(const Entry *root,
"4. class definition %s found\n",cd->name().data());
// get the template parameter lists found at the member declaration
- QList<ArgumentList> declTemplArgs;
- cd->getTemplateParameterLists(declTemplArgs);
- const ArgumentList *templAl = md->templateArguments();
- if (templAl)
+ std::vector<ArgumentList> declTemplArgs = cd->getTemplateParameterLists();
+ const ArgumentList &templAl = md->templateArguments();
+ if (!templAl.empty())
{
- declTemplArgs.append(templAl);
+ declTemplArgs.push_back(templAl);
}
// get the template parameter lists found at the member definition
- QList<ArgumentList> *defTemplArgs = root->tArgLists;
+ const std::vector<ArgumentList> &defTemplArgs = root->tArgLists;
//printf("defTemplArgs=%p\n",defTemplArgs);
// do we replace the decl argument lists with the def argument lists?
bool substDone=FALSE;
- ArgumentList *argList=0;
+ ArgumentList argList;
/* substitute the occurrences of class template names in the
* argument list before matching
*/
- ArgumentList *mdAl = md->argumentList();
- if (declTemplArgs.count()>0 && defTemplArgs &&
- declTemplArgs.count()==defTemplArgs->count() &&
- mdAl
- )
+ const ArgumentList &mdAl = md->argumentList();
+ if (declTemplArgs.size()>0 && declTemplArgs.size()==defTemplArgs.size())
{
/* the function definition has template arguments
* and the class definition also has template arguments, so
* we must substitute the template names of the class by that
* of the function definition before matching.
*/
- argList = new ArgumentList;
- substituteTemplatesInArgList(declTemplArgs,*defTemplArgs,
- mdAl,argList);
+ substituteTemplatesInArgList(declTemplArgs,defTemplArgs,mdAl,argList);
substDone=TRUE;
}
@@ -6194,7 +6108,7 @@ static void findMember(const Entry *root,
bool matching=
md->isVariable() || md->isTypedef() || // needed for function pointers
- (mdAl==0 && root->argList->count()==0) ||
+ (mdAl.empty() && root->argList.empty()) ||
matchArguments2(
md->getClassDef(),md->getFileDef(),argList,
cd,fd,root->argList,
@@ -6206,7 +6120,7 @@ static void findMember(const Entry *root,
}
// for template member we also need to check the return type
- if (md->templateArguments()!=0 && root->tArgLists!=0)
+ if (!md->templateArguments().empty() && !root->tArgLists.empty())
{
QCString memType = md->typeString();
memType.stripPrefix("static "); // see bug700696
@@ -6217,8 +6131,8 @@ static void findMember(const Entry *root,
Debug::print(Debug::FindMembers,0,
"5b. Comparing return types '%s'<->'%s' #args %d<->%d\n",
qPrint(md->typeString()),qPrint(funcType),
- md->templateArguments()->count(),root->tArgLists->getLast()->count());
- if (md->templateArguments()->count()!=root->tArgLists->getLast()->count() ||
+ md->templateArguments().size(),root->tArgLists.back().size());
+ if (md->templateArguments().size()!=root->tArgLists.back().size() ||
qstrcmp(memType,funcType))
{
//printf(" ---> no matching\n");
@@ -6227,9 +6141,9 @@ static void findMember(const Entry *root,
}
bool rootIsUserDoc = (root->section&Entry::MEMBERDOC_SEC)!=0;
bool classIsTemplate = scopeIsTemplate(md->getClassDef());
- bool mdIsTemplate = md->templateArguments()!=0;
+ bool mdIsTemplate = md->templateArguments().hasParameters();
bool classOrMdIsTemplate = mdIsTemplate || classIsTemplate;
- bool rootIsTemplate = root->tArgLists!=0;
+ bool rootIsTemplate = !root->tArgLists.empty();
//printf("classIsTemplate=%d mdIsTemplate=%d rootIsTemplate=%d\n",classIsTemplate,mdIsTemplate,rootIsTemplate);
if (!rootIsUserDoc && // don't check out-of-line @fn references, see bug722457
(mdIsTemplate || rootIsTemplate) && // either md or root is a template
@@ -6245,19 +6159,19 @@ static void findMember(const Entry *root,
Debug::print(Debug::FindMembers,0,
- "6. match results of matchArguments2 = %d\n",matching);
+ "6. match results of matchArguments2 = %d substDone=%d\n",matching,substDone);
if (substDone) // found a new argument list
{
if (matching) // replace member's argument list
{
md->setDefinitionTemplateParameterLists(root->tArgLists);
- md->setArgumentList(argList); // new owner of the list => no delete
+ md->setArgumentList(argList);
}
else // no match
{
if (!funcTempList.isEmpty() &&
- isSpecialization(declTemplArgs,*defTemplArgs))
+ isSpecialization(declTemplArgs,defTemplArgs))
{
// check if we are dealing with a partial template
// specialization. In this case we add it to the class
@@ -6267,7 +6181,6 @@ static void findMember(const Entry *root,
md->protection(),md->isStatic(),md->virtualness(),spec,relates);
return;
}
- delete argList;
}
}
if (matching)
@@ -6303,9 +6216,9 @@ static void findMember(const Entry *root,
//printf("ccd->name()==%s className=%s\n",ccd->name().data(),className.data());
if (ccd!=0 && rightScopeMatch(ccd->name(),className))
{
- const ArgumentList *templAl = md->templateArguments();
- if (root->tArgLists && templAl!=0 &&
- root->tArgLists->getLast()->count()<=templAl->count())
+ const ArgumentList &templAl = md->templateArguments();
+ if (!root->tArgLists.empty() && !templAl.empty() &&
+ root->tArgLists.back().size()<=templAl.size())
{
Debug::print(Debug::FindMembers,0,"7. add template specialization\n");
addMethodToClass(root,ccd,type,md->name(),args,isFriend,
@@ -6356,17 +6269,13 @@ static void findMember(const Entry *root,
if (noMatchCount>1) warnMsg+="uniquely ";
warnMsg+="matching class member found for \n";
- if (root->tArgLists)
+ for (const ArgumentList &al : root->tArgLists)
{
- QListIterator<ArgumentList> alli(*root->tArgLists);
- ArgumentList *al;
- for (;(al=alli.current());++alli)
- {
- warnMsg+=" template ";
- warnMsg+=tempArgListToString(al,root->lang);
- warnMsg+='\n';
- }
+ warnMsg+=" template ";
+ warnMsg+=tempArgListToString(al,root->lang);
+ warnMsg+='\n';
}
+
QCString fullFuncDecl=funcDecl.copy();
if (isFunc) fullFuncDecl+=argListToString(root->argList,TRUE);
@@ -6382,14 +6291,15 @@ static void findMember(const Entry *root,
const ClassDef *cd=md->getClassDef();
if (cd!=0 && rightScopeMatch(cd->name(),className))
{
- const ArgumentList *templAl = md->templateArguments();
- if (templAl!=0)
+ const ArgumentList &templAl = md->templateArguments();
+ warnMsg+=" '";
+ if (templAl.hasParameters())
{
- warnMsg+=" 'template ";
+ warnMsg+="template ";
warnMsg+=tempArgListToString(templAl,root->lang);
warnMsg+='\n';
+ warnMsg+=" ";
}
- warnMsg+=" ";
if (md->typeString())
{
warnMsg+=md->typeString();
@@ -6430,7 +6340,7 @@ static void findMember(const Entry *root,
}
}
MemberType mtype=MemberType_Function;
- ArgumentList *tArgList = new ArgumentList;
+ ArgumentList tArgList;
// getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
md=createMemberDef(
root->fileName,root->startLine,root->startColumn,
@@ -6439,7 +6349,7 @@ static void findMember(const Entry *root,
root->virt,root->stat,Member,
mtype,tArgList,root->argList,root->metaData);
//printf("new specialized member %s args='%s'\n",md->name().data(),funcArgs.data());
- md->setTagInfo(root->tagInfo);
+ md->setTagInfo(root->tagInfo());
md->setLanguage(root->lang);
md->setId(root->id);
md->setMemberClass(cd);
@@ -6464,7 +6374,6 @@ static void findMember(const Entry *root,
mn->append(md);
cd->insertMember(md);
md->setRefItems(root->sli);
- delete tArgList;
}
else
{
@@ -6499,7 +6408,7 @@ static void findMember(const Entry *root,
else mtype=MemberType_Function;
// new overloaded member function
- ArgumentList *tArgList =
+ ArgumentList tArgList =
getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
//printf("new related member %s args='%s'\n",md->name().data(),funcArgs.data());
MemberDef *md=createMemberDef(
@@ -6507,7 +6416,7 @@ static void findMember(const Entry *root,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,Related,
mtype,tArgList,root->argList,root->metaData);
- md->setTagInfo(root->tagInfo);
+ md->setTagInfo(root->tagInfo());
md->setLanguage(root->lang);
md->setId(root->id);
md->setTypeConstraints(root->typeConstr);
@@ -6590,7 +6499,7 @@ static void findMember(const Entry *root,
MemberDef *rmd;
while ((rmd=mni.current()) && newMember) // see if we got another member with matching arguments
{
- ArgumentList *rmdAl = rmd->argumentList();
+ const ArgumentList &rmdAl = rmd->argumentList();
newMember=
className!=rmd->getOuterScope()->name() ||
@@ -6634,7 +6543,7 @@ static void findMember(const Entry *root,
// first note that we pass:
// (root->tArgLists ? root->tArgLists->last() : 0)
- // for the template arguments fo the new "member."
+ // for the template arguments for the new "member."
// this accurately reflects the template arguments of
// the related function, which don't have to do with
// those of the related class.
@@ -6645,8 +6554,9 @@ static void findMember(const Entry *root,
root->stat && !isMemberOf,
isMemberOf ? Foreign : Related,
mtype,
- (root->tArgLists ? root->tArgLists->getLast() : 0),
- funcArgs.isEmpty() ? 0 : root->argList,root->metaData);
+ (!root->tArgLists.empty() ? root->tArgLists.back() : ArgumentList()),
+ funcArgs.isEmpty() ? ArgumentList() : root->argList,
+ root->metaData);
if (isDefine && mdDefine)
{
@@ -6666,7 +6576,7 @@ static void findMember(const Entry *root,
//
md->setDefinitionTemplateParameterLists(root->tArgLists);
- md->setTagInfo(root->tagInfo);
+ md->setTagInfo(root->tagInfo());
@@ -6685,7 +6595,7 @@ static void findMember(const Entry *root,
const MemberDef *rmd;
while ((rmd=rmni.current()) && !found) // see if we got another member with matching arguments
{
- const ArgumentList *rmdAl = rmd->argumentList();
+ const ArgumentList &rmdAl = rmd->argumentList();
// check for matching argument lists
if (
matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl,
@@ -6786,8 +6696,8 @@ localObjCMethod:
root->fileName,root->startLine,root->startColumn,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,Member,
- MemberType_Function,0,root->argList,root->metaData);
- md->setTagInfo(root->tagInfo);
+ MemberType_Function,ArgumentList(),root->argList,root->metaData);
+ md->setTagInfo(root->tagInfo());
md->setLanguage(root->lang);
md->setId(root->id);
md->makeImplementationDetail();
@@ -7120,7 +7030,7 @@ static void findEnums(const Entry *root)
mnsd=Doxygen::memberNameSDict;
isGlobal=FALSE;
}
- else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
+ else if (nd) // found enum inside namespace
{
mnsd=Doxygen::functionNameSDict;
isGlobal=TRUE;
@@ -7141,8 +7051,8 @@ static void findEnums(const Entry *root)
root->protection,Normal,FALSE,
isMemberOf ? Foreign : isRelated ? Related : Member,
MemberType_Enumeration,
- 0,0,root->metaData);
- md->setTagInfo(root->tagInfo);
+ ArgumentList(),ArgumentList(),root->metaData);
+ md->setTagInfo(root->tagInfo());
md->setLanguage(root->lang);
md->setId(root->id);
if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd);
@@ -7169,7 +7079,7 @@ static void findEnums(const Entry *root)
baseType.prepend(" : ");
}
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
+ if (nd)
{
if (isRelated || Config_getBool(HIDE_SCOPE_NAMES))
{
@@ -7188,7 +7098,7 @@ static void findEnums(const Entry *root)
// even if we have already added the enum to a namespace, we still
// also want to add it to other appropriate places such as file
// or class.
- if (isGlobal)
+ if (isGlobal && (nd==0 || !nd->isAnonymous()))
{
if (!defSet) md->setDefinition(name+baseType);
if (fd==0 && root->parent())
@@ -7297,7 +7207,7 @@ static void addEnumValuesToEnums(const Entry *root)
mnsd=Doxygen::memberNameSDict;
isGlobal=FALSE;
}
- else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
+ else if (nd && !nd->isAnonymous()) // found enum inside namespace
{
//printf("Enum in namespace '%s'::'%s'\n",nd->name().data(),name.data());
mnsd=Doxygen::functionNameSDict;
@@ -7340,7 +7250,7 @@ static void addEnumValuesToEnums(const Entry *root)
//printf("md->qualifiedName()=%s e->name=%s tagInfo=%p name=%s\n",
// md->qualifiedName().data(),e->name.data(),e->tagInfo,e->name.data());
QCString qualifiedName = substitute(root->name,"::",".");
- if (!scope.isEmpty() && root->tagInfo)
+ if (!scope.isEmpty() && root->tagInfo())
{
qualifiedName=substitute(scope,"::",".")+"."+qualifiedName;
}
@@ -7349,20 +7259,20 @@ static void addEnumValuesToEnums(const Entry *root)
)
{
QCString fileName = e->fileName;
- if (fileName.isEmpty() && e->tagInfo)
+ if (fileName.isEmpty() && e->tagInfo())
{
- fileName = e->tagInfo->tagName;
+ fileName = e->tagInfo()->tagName;
}
MemberDef *fmd=createMemberDef(
fileName,e->startLine,e->startColumn,
e->type,e->name,e->args,0,
e->protection, Normal,e->stat,Member,
- MemberType_EnumValue,0,0,e->metaData);
+ MemberType_EnumValue,ArgumentList(),ArgumentList(),e->metaData);
if (md->getClassDef()) fmd->setMemberClass(md->getClassDef());
else if (md->getNamespaceDef()) fmd->setNamespace(md->getNamespaceDef());
else if (md->getFileDef()) fmd->setFileDef(md->getFileDef());
fmd->setOuterScope(md->getOuterScope());
- fmd->setTagInfo(e->tagInfo);
+ fmd->setTagInfo(e->tagInfo());
fmd->setLanguage(e->lang);
fmd->setId(e->id);
fmd->setDocumentation(e->doc,e->docFile,e->docLine);
@@ -7405,7 +7315,7 @@ static void addEnumValuesToEnums(const Entry *root)
{
//printf("found enum value with same name %s in scope %s\n",
// fmd->name().data(),fmd->getOuterScope()->name().data());
- if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
+ if (nd && !nd->isAnonymous())
{
const NamespaceDef *fnd=fmd->getNamespaceDef();
if (fnd==nd) // enum value is inside a namespace
@@ -7544,7 +7454,7 @@ static void findEnumDocumentation(const Entry *root)
md->setRefItems(root->sli);
const GroupDef *gd=md->getGroupDef();
- if (gd==0 &&root->groups->getFirst()!=0) // member not grouped but out-of-line documentation is
+ if (gd==0 && !root->groups.empty()) // member not grouped but out-of-line documentation is
{
addMemberToGroups(root,md);
}
@@ -7578,7 +7488,7 @@ static void findEnumDocumentation(const Entry *root)
md->setMemberGroupId(root->mGrpId);
const GroupDef *gd=md->getGroupDef();
- if (gd==0 && root->groups->getFirst()!=0) // member not grouped but out-of-line documentation is
+ if (gd==0 && !root->groups.empty()) // member not grouped but out-of-line documentation is
{
addMemberToGroups(root,md);
}
@@ -7755,8 +7665,8 @@ static void computeMemberRelations()
mcd->isBaseClass(bmcd,TRUE))
{
//printf(" derived scope\n");
- ArgumentList *bmdAl = bmd->argumentList();
- ArgumentList *mdAl = md->argumentList();
+ const ArgumentList &bmdAl = bmd->argumentList();
+ const ArgumentList &mdAl = md->argumentList();
//printf(" Base argList='%s'\n Super argList='%s'\n",
// argListToString(bmdAl.pointer()).data(),
// argListToString(mdAl.pointer()).data()
@@ -8587,12 +8497,13 @@ static void findDefineDocumentation(Entry *root)
//printf("found define '%s' '%s' brief='%s' doc='%s'\n",
// root->name.data(),root->args.data(),root->brief.data(),root->doc.data());
- if (root->tagInfo && !root->name.isEmpty()) // define read from a tag file
+ if (root->tagInfo() && !root->name.isEmpty()) // define read from a tag file
{
- MemberDef *md=createMemberDef(root->tagInfo->tagName,1,1,
+ MemberDef *md=createMemberDef(root->tagInfo()->tagName,1,1,
"#define",root->name,root->args,0,
- Public,Normal,FALSE,Member,MemberType_Define,0,0,"");
- md->setTagInfo(root->tagInfo);
+ Public,Normal,FALSE,Member,MemberType_Define,
+ ArgumentList(),ArgumentList(),"");
+ md->setTagInfo(root->tagInfo());
md->setLanguage(root->lang);
//printf("Searching for '%s' fd=%p\n",filePathName.data(),fd);
md->setFileDef(root->parent()->fileDef());
@@ -8811,7 +8722,7 @@ static void findMainPage(Entry *root)
{
if (root->section == Entry::MAINPAGEDOC_SEC)
{
- if (Doxygen::mainPage==0 && root->tagInfo==0)
+ if (Doxygen::mainPage==0 && root->tagInfo()==0)
{
//printf("Found main page! \n======\n%s\n=======\n",root->doc.data());
QCString title=root->args.stripWhiteSpace();
@@ -8850,7 +8761,7 @@ static void findMainPage(Entry *root)
Doxygen::mainPage->addSectionsToDefinition(root->anchors);
}
}
- else if (root->tagInfo==0)
+ else if (root->tagInfo()==0)
{
warn(root->fileName,root->startLine,
"found more than one \\mainpage comment block! (first occurrence: %s, line %d), Skipping current block!",
@@ -8865,7 +8776,7 @@ static void findMainPageTagFiles(Entry *root)
{
if (root->section == Entry::MAINPAGEDOC_SEC)
{
- if (Doxygen::mainPage && root->tagInfo)
+ if (Doxygen::mainPage && root->tagInfo())
{
Doxygen::mainPage->addSectionsToDefinition(root->anchors);
}
@@ -8886,11 +8797,9 @@ static void computePageRelations(Entry *root)
Doxygen::mainPage;
if (pd)
{
- QListIterator<BaseInfo> bii(*root->extends);
- BaseInfo *bi;
- for (bii.toFirst();(bi=bii.current());++bii)
+ for (const BaseInfo &bi : root->extends)
{
- PageDef *subPd = Doxygen::pageSDict->find(bi->name);
+ PageDef *subPd = Doxygen::pageSDict->find(bi.name);
if (pd==subPd)
{
err("page defined at line %d of file %s with label %s is a direct "
@@ -9085,7 +8994,8 @@ static void generateExampleDocs()
for (pdi.toFirst();(pd=pdi.current());++pdi)
{
msg("Generating docs for example %s...\n",pd->name().data());
- resetCCodeParserState();
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(".c"); // TODO: do this on code type
+ intf.resetCodeParserState();
QCString n=pd->getOutputFileBase();
startFile(*g_outputList,n,n,pd->name());
startTitle(*g_outputList,n);
@@ -9291,7 +9201,7 @@ static void compareDoxyfile()
//----------------------------------------------------------------------------
-static void readTagFile(const std::unique_ptr<Entry> &root,const char *tl)
+static void readTagFile(const std::shared_ptr<Entry> &root,const char *tl)
{
QCString tagLine = tl;
QCString fileName;
@@ -9441,7 +9351,7 @@ static void copyExtraFiles(QStrList files,const QCString &filesOption,const QCSt
//----------------------------------------------------------------------------
-static ParserInterface *getParserForFile(const char *fn)
+static OutlineParserInterface &getParserForFile(const char *fn)
{
QCString fileName=fn;
QCString extension;
@@ -9456,11 +9366,11 @@ static ParserInterface *getParserForFile(const char *fn)
extension = ".no_extension";
}
- return Doxygen::parserManager->getParser(extension);
+ return Doxygen::parserManager->getOutlineParser(extension);
}
-static void parseFile(ParserInterface *parser,
- const std::unique_ptr<Entry> &root,FileDef *fd,const char *fn,
+static void parseFile(OutlineParserInterface &parser,
+ const std::shared_ptr<Entry> &root,FileDef *fd,const char *fn,
bool sameTu,QStrList &filesInSameTu)
{
#if USE_LIBCLANG
@@ -9484,12 +9394,12 @@ static void parseFile(ParserInterface *parser,
BufStr preBuf(fi.size()+4096);
if (Config_getBool(ENABLE_PREPROCESSING) &&
- parser->needsPreprocessing(extension))
+ parser.needsPreprocessing(extension))
{
BufStr inBuf(fi.size()+4096);
msg("Preprocessing %s...\n",fn);
readInputFile(fileName,inBuf);
- preprocessFile(fileName,inBuf,preBuf);
+ Doxygen::preprocessor->processFile(fileName,inBuf,preBuf);
}
else // no preprocessing
{
@@ -9513,15 +9423,15 @@ static void parseFile(ParserInterface *parser,
fd->getAllIncludeFilesRecursively(filesInSameTu);
}
- std::unique_ptr<Entry> fileRoot = std::make_unique<Entry>();
+ std::shared_ptr<Entry> fileRoot = std::make_shared<Entry>();
// use language parse to parse the file
- parser->parseInput(fileName,convBuf.data(),fileRoot,sameTu,filesInSameTu);
+ parser.parseInput(fileName,convBuf.data(),fileRoot,sameTu,filesInSameTu);
fileRoot->setFileDef(fd);
root->moveToSubEntryAndKeep(fileRoot);
}
//! parse the list of input files
-static void parseFiles(const std::unique_ptr<Entry> &root)
+static void parseFiles(const std::shared_ptr<Entry> &root)
{
#if USE_LIBCLANG
static bool clangAssistedParsing = Config_getBool(CLANG_ASSISTED_PARSING);
@@ -9547,8 +9457,8 @@ static void parseFiles(const std::unique_ptr<Entry> &root)
if (fd->isSource() && !fd->isReference()) // this is a source file
{
QStrList filesInSameTu;
- ParserInterface * parser = getParserForFile(s->data());
- parser->startTranslationUnit(s->data());
+ OutlineParserInterface &parser = getParserForFile(s->data());
+ parser.startTranslationUnit(s->data());
parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
//printf(" got %d extra files in tu\n",filesInSameTu.count());
@@ -9570,7 +9480,7 @@ static void parseFiles(const std::unique_ptr<Entry> &root)
}
incFile = filesInSameTu.next();
}
- parser->finishTranslationUnit();
+ parser.finishTranslationUnit();
g_processedFiles.insert(*s,(void*)0x8);
}
}
@@ -9583,15 +9493,15 @@ static void parseFiles(const std::unique_ptr<Entry> &root)
QStrList filesInSameTu;
FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
ASSERT(fd!=0);
- ParserInterface * parser = getParserForFile(s->data());
- parser->startTranslationUnit(s->data());
+ OutlineParserInterface &parser = getParserForFile(s->data());
+ parser.startTranslationUnit(s->data());
parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
- parser->finishTranslationUnit();
+ parser.finishTranslationUnit();
g_processedFiles.insert(*s,(void*)0x8);
}
}
}
- else // normal pocessing
+ else // normal processing
#endif
{
StringListIterator it(g_inputFiles);
@@ -9602,8 +9512,8 @@ static void parseFiles(const std::unique_ptr<Entry> &root)
QStrList filesInSameTu;
FileDef *fd=findFileDef(Doxygen::inputNameDict,s->data(),ambig);
ASSERT(fd!=0);
- ParserInterface * parser = getParserForFile(s->data());
- parser->startTranslationUnit(s->data());
+ OutlineParserInterface &parser = getParserForFile(s->data());
+ parser.startTranslationUnit(s->data());
parseFile(parser,root,fd,s->data(),FALSE,filesInSameTu);
}
}
@@ -9682,7 +9592,7 @@ static QDict<void> g_pathsVisited(1009);
//----------------------------------------------------------------------------
// Read all files matching at least one pattern in 'patList' in the
// directory represented by 'fi'.
-// The directory is read iff the recusiveFlag is set.
+// The directory is read iff the recursiveFlag is set.
// The contents of all files is append to the input string
int readDir(QFileInfo *fi,
@@ -10116,29 +10026,31 @@ static void usage(const char *name,const char *versionString)
msg("You can use doxygen in a number of ways:\n\n");
msg("1) Use doxygen to generate a template configuration file:\n");
msg(" %s [-s] -g [configName]\n\n",name);
- msg(" If - is used for configName doxygen will write to standard output.\n\n");
msg("2) Use doxygen to update an old configuration file:\n");
msg(" %s [-s] -u [configName]\n\n",name);
msg("3) Use doxygen to generate documentation using an existing ");
msg("configuration file:\n");
msg(" %s [configName]\n\n",name);
- msg(" If - is used for configName doxygen will read from standard input.\n\n");
msg("4) Use doxygen to generate a template file controlling the layout of the\n");
msg(" generated documentation:\n");
- msg(" %s -l [layoutFileName.xml]\n\n",name);
+ msg(" %s -l [layoutFileName]\n\n",name);
+ msg(" In case layoutFileName is omitted layoutFileName.xml will be used as filename.\n");
+ msg(" If - is used for layoutFileName doxygen will write to standard output.\n\n");
msg("5) Use doxygen to generate a template style sheet file for RTF, HTML or Latex.\n");
msg(" RTF: %s -w rtf styleSheetFile\n",name);
msg(" HTML: %s -w html headerFile footerFile styleSheetFile [configFile]\n",name);
msg(" LaTeX: %s -w latex headerFile footerFile styleSheetFile [configFile]\n\n",name);
msg("6) Use doxygen to generate a rtf extensions file\n");
msg(" RTF: %s -e rtf extensionsFile\n\n",name);
+ msg(" If - is used for extensionsFile doxygen will write to standard output.\n\n");
msg("7) Use doxygen to compare the used configuration file with the template configuration file\n");
msg(" %s -x [configFile]\n\n",name);
msg("8) Use doxygen to show a list of built-in emojis.\n");
msg(" %s -f emoji outputFileName\n\n",name);
msg(" If - is used for outputFileName doxygen will write to standard output.\n\n");
msg("If -s is specified the comments of the configuration items in the config file will be omitted.\n");
- msg("If configName is omitted 'Doxyfile' will be used as a default.\n\n");
+ msg("If configName is omitted 'Doxyfile' will be used as a default.\n");
+ msg("If - is used for configFile doxygen will write / read the configuration to /from standard output / input.\n\n");
msg("-v print version string\n");
}
@@ -10158,32 +10070,55 @@ static const char *getArg(int argc,char **argv,int &optind)
//----------------------------------------------------------------------------
+/** @brief /dev/null outline parser */
+class NullOutlineParser : public OutlineParserInterface
+{
+ public:
+ void startTranslationUnit(const char *) {}
+ void finishTranslationUnit() {}
+ void parseInput(const char *, const char *,const std::shared_ptr<Entry> &, bool, QStrList &) {}
+ bool needsPreprocessing(const QCString &) const { return FALSE; }
+ void parsePrototype(const char *) {}
+};
+
+
+
void initDoxygen()
{
initResources();
- const char *lang = portable_getenv("LC_ALL");
- if (lang) portable_setenv("LANG",lang);
+ const char *lang = Portable::getenv("LC_ALL");
+ if (lang) Portable::setenv("LANG",lang);
setlocale(LC_ALL,"");
setlocale(LC_CTYPE,"C"); // to get isspace(0xA0)==0, needed for UTF-8
setlocale(LC_NUMERIC,"C");
- portable_correct_path();
+ Portable::correct_path();
Doxygen::runningTime.start();
- initPreprocessor();
-
- Doxygen::parserManager = new ParserManager;
- Doxygen::parserManager->registerDefaultParser( new FileParser);
- Doxygen::parserManager->registerParser("c", new CLanguageScanner);
- Doxygen::parserManager->registerParser("python", new PythonLanguageScanner);
- Doxygen::parserManager->registerParser("fortran", new FortranLanguageScanner);
- Doxygen::parserManager->registerParser("fortranfree", new FortranLanguageScannerFree);
- Doxygen::parserManager->registerParser("fortranfixed", new FortranLanguageScannerFixed);
- Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner);
- Doxygen::parserManager->registerParser("xml", new XMLScanner);
- Doxygen::parserManager->registerParser("sql", new SQLScanner);
- Doxygen::parserManager->registerParser("tcl", new TclLanguageScanner);
- Doxygen::parserManager->registerParser("md", new MarkdownFileParser);
+ Doxygen::preprocessor = new Preprocessor();
+
+ Doxygen::parserManager = new ParserManager( std::make_unique<NullOutlineParser>(),
+ std::make_unique<FileCodeParser>());
+ Doxygen::parserManager->registerParser("c", std::make_unique<COutlineParser>(),
+ std::make_unique<CCodeParser>());
+ Doxygen::parserManager->registerParser("python", std::make_unique<PythonOutlineParser>(),
+ std::make_unique<PythonCodeParser>());
+ Doxygen::parserManager->registerParser("fortran", std::make_unique<FortranOutlineParser>(),
+ std::make_unique<FortranCodeParser>());
+ Doxygen::parserManager->registerParser("fortranfree", std::make_unique<FortranOutlineParserFree>(),
+ std::make_unique<FortranCodeParserFree>());
+ Doxygen::parserManager->registerParser("fortranfixed", std::make_unique<FortranOutlineParserFixed>(),
+ std::make_unique<FortranCodeParserFixed>());
+ Doxygen::parserManager->registerParser("vhdl", std::make_unique<VHDLOutlineParser>(),
+ std::make_unique<VHDLCodeParser>());
+ Doxygen::parserManager->registerParser("xml", std::make_unique<NullOutlineParser>(),
+ std::make_unique<XMLCodeParser>());
+ Doxygen::parserManager->registerParser("sql", std::make_unique<NullOutlineParser>(),
+ std::make_unique<SQLCodeParser>());
+ Doxygen::parserManager->registerParser("tcl", std::make_unique<TclOutlineParser>(),
+ std::make_unique<TclCodeParser>());
+ Doxygen::parserManager->registerParser("md", std::make_unique<MarkdownOutlineParser>(),
+ std::make_unique<FileCodeParser>());
// register any additional parsers here...
@@ -10274,11 +10209,10 @@ void cleanUpDoxygen()
delete Doxygen::globalScope;
delete Doxygen::xrefLists;
delete Doxygen::parserManager;
- cleanUpPreprocessor();
+ delete Doxygen::preprocessor;
delete theTranslator;
delete g_outputList;
Mappers::freeMappers();
- codeFreeScanner();
if (Doxygen::symbolMap)
{
@@ -10365,9 +10299,14 @@ void readConfiguration(int argc, char **argv)
genConfig=TRUE;
break;
case 'l':
- layoutName=getArg(argc,argv,optind);
- if (!layoutName)
- { layoutName="DoxygenLayout.xml"; }
+ if (optind+1>=argc)
+ {
+ layoutName="DoxygenLayout.xml";
+ }
+ else
+ {
+ layoutName=argv[optind+1];
+ }
writeDefaultLayoutFile(layoutName);
cleanUpDoxygen();
exit(0);
@@ -10749,7 +10688,7 @@ void adjustConfiguration()
while (s)
{
QFileInfo fi(s);
- addSearchDir(fi.absFilePath().utf8());
+ Doxygen::preprocessor->addSearchDir(fi.absFilePath().utf8());
s=includePath.next();
}
@@ -11189,7 +11128,7 @@ void parseInput()
signal(SIGINT, stopDoxygen);
#endif
- uint pid = portable_pid();
+ uint pid = Portable::pid();
Doxygen::objDBFileName.sprintf("doxygen_objdb_%d.tmp",pid);
Doxygen::objDBFileName.prepend(outputDirectory+"/");
Doxygen::entryDBFileName.sprintf("doxygen_entrydb_%d.tmp",pid);
@@ -11249,18 +11188,18 @@ void parseInput()
QCString curFontPath = Config_getString(DOT_FONTPATH);
if (curFontPath.isEmpty())
{
- portable_getenv("DOTFONTPATH");
+ Portable::getenv("DOTFONTPATH");
QCString newFontPath = ".";
if (!curFontPath.isEmpty())
{
- newFontPath+=portable_pathListSeparator();
+ newFontPath+=Portable::pathListSeparator();
newFontPath+=curFontPath;
}
- portable_setenv("DOTFONTPATH",newFontPath);
+ Portable::setenv("DOTFONTPATH",newFontPath);
}
else
{
- portable_setenv("DOTFONTPATH",curFontPath);
+ Portable::setenv("DOTFONTPATH",curFontPath);
}
}
@@ -11327,7 +11266,7 @@ void parseInput()
* Handle Tag Files *
**************************************************************************/
- std::unique_ptr<Entry> root = std::make_unique<Entry>();
+ std::shared_ptr<Entry> root = std::make_shared<Entry>();
msg("Reading and parsing tag files\n");
QStrList &tagFileList = Config_getList(TAGFILES);
@@ -11353,8 +11292,6 @@ void parseInput()
// we are done with input scanning now, so free up the buffers used by flex
// (can be around 4MB)
- preFreeScanner();
- scanFreeScanner();
pyscanFreeScanner();
/**************************************************************************
@@ -11887,7 +11824,7 @@ void generateOutput()
{
searchDataFile="searchdata.xml";
}
- if (!portable_isAbsolutePath(searchDataFile))
+ if (!Portable::isAbsolutePath(searchDataFile))
{
searchDataFile.prepend(Config_getString(OUTPUT_DIRECTORY)+"/");
}
@@ -11949,12 +11886,13 @@ void generateOutput()
g_s.begin("Running html help compiler...\n");
QString oldDir = QDir::currentDirPath();
QDir::setCurrent(Config_getString(HTML_OUTPUT));
- portable_sysTimerStart();
- if (portable_system(Config_getString(HHC_LOCATION), "index.hhp", Debug::isFlagSet(Debug::ExtCmd))!=1)
+ Portable::setShortDir();
+ Portable::sysTimerStart();
+ if (Portable::system(Config_getString(HHC_LOCATION), "index.hhp", Debug::isFlagSet(Debug::ExtCmd))!=1)
{
err("failed to run html help compiler on index.hhp\n");
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
QDir::setCurrent(oldDir);
g_s.end();
}
@@ -11969,12 +11907,12 @@ void generateOutput()
QCString const args = QCString().sprintf("%s -o \"%s\"", qhpFileName.data(), qchFileName.data());
QString const oldDir = QDir::currentDirPath();
QDir::setCurrent(Config_getString(HTML_OUTPUT));
- portable_sysTimerStart();
- if (portable_system(Config_getString(QHG_LOCATION), args.data(), FALSE))
+ Portable::sysTimerStart();
+ if (Portable::system(Config_getString(QHG_LOCATION), args.data(), FALSE))
{
err("failed to run qhelpgenerator on index.qhp\n");
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
QDir::setCurrent(oldDir);
g_s.end();
}
@@ -11995,7 +11933,7 @@ void generateOutput()
{
msg("Total elapsed time: %.3f seconds\n(of which %.3f seconds waiting for external tools to finish)\n",
((double)Doxygen::runningTime.elapsed())/1000.0,
- portable_getSysElapsedTime()
+ Portable::getSysElapsedTime()
);
g_s.print();
}
@@ -12011,7 +11949,7 @@ void generateOutput()
cleanUpDoxygen();
- finializeSearchIndexer();
+ finalizeSearchIndexer();
// Doxygen::symbolStorage->close();
QDir thisDir;
thisDir.remove(Doxygen::objDBFileName);
diff --git a/src/doxygen.h b/src/doxygen.h
index c8eee7c..a23a678 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -60,6 +60,7 @@ class FormulaList;
class FormulaDict;
class FormulaNameDict;
class SectionDict;
+class Preprocessor;
struct MemberGroupInfo;
typedef QList<QCString> StringList;
@@ -152,6 +153,7 @@ class Doxygen
static bool markdownSupport;
static GenericsSDict *genericsDict;
static DocGroup docGroup;
+ static Preprocessor *preprocessor;
};
void initDoxygen();
diff --git a/src/entry.cpp b/src/entry.cpp
index 8ec7846..cc8cd1f 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -38,19 +38,9 @@ Entry::Entry()
num++;
m_parent=0;
section = EMPTY_SEC;
- extends = new QList<BaseInfo>;
- extends->setAutoDelete(TRUE);
- groups = new QList<Grouping>;
- groups->setAutoDelete(TRUE);
- anchors = new QList<SectionInfo>; // Doxygen::sectionDict takes ownership of the items!
- argList = new ArgumentList;
- argList->setAutoDelete(TRUE);
//printf("Entry::Entry() tArgList=0\n");
- tArgLists = 0;
- typeConstr = 0;
mGrpId = -1;
- tagInfo = 0;
- sli = 0;
+ hasTagInfo = FALSE;
relatesType = Simple;
hidden = FALSE;
groupDocType = GROUPDOC_NORMAL;
@@ -64,7 +54,8 @@ Entry::Entry(const Entry &e)
section = e.section;
type = e.type;
name = e.name;
- tagInfo = e.tagInfo;
+ hasTagInfo = e.hasTagInfo;
+ tagInfoData = e.tagInfoData;
protection = e.protection;
mtype = e.mtype;
spec = e.spec;
@@ -81,8 +72,8 @@ Entry::Entry(const Entry &e)
virt = e.virt;
args = e.args;
bitfields = e.bitfields;
- argList = e.argList->deepCopy();
- tArgLists = 0;
+ argList = e.argList;
+ tArgLists = e.tArgLists;
program = e.program;
initializer = e.initializer;
includeFile = e.includeFile;
@@ -102,85 +93,31 @@ Entry::Entry(const Entry &e)
write = e.write;
inside = e.inside;
exception = e.exception;
- typeConstr = 0;
+ typeConstr = e.typeConstr;
bodyLine = e.bodyLine;
endBodyLine = e.endBodyLine;
mGrpId = e.mGrpId;
- extends = new QList<BaseInfo>;
- extends->setAutoDelete(TRUE);
- groups = new QList<Grouping>;
- groups->setAutoDelete(TRUE);
- anchors = new QList<SectionInfo>;
+ anchors = e.anchors;
fileName = e.fileName;
startLine = e.startLine;
startColumn = e.startColumn;
- if (e.sli)
- {
- sli = new QList<ListItemInfo>;
- sli->setAutoDelete(TRUE);
- QListIterator<ListItemInfo> slii(*e.sli);
- ListItemInfo *ili;
- for (slii.toFirst();(ili=slii.current());++slii)
- {
- sli->append(new ListItemInfo(*ili));
- }
- }
- else
- {
- sli=0;
- }
+ sli = e.sli;
lang = e.lang;
hidden = e.hidden;
artificial = e.artificial;
groupDocType = e.groupDocType;
id = e.id;
+ extends = e.extends;
+ groups = e.groups;
+ m_fileDef = e.m_fileDef;
m_parent = e.m_parent;
-
// deep copy child entries
m_sublist.reserve(e.m_sublist.size());
for (const auto &cur : e.m_sublist)
{
- m_sublist.push_back(std::make_unique<Entry>(*cur));
- }
-
- // deep copy base class list
- QListIterator<BaseInfo> bli(*e.extends);
- BaseInfo *bi;
- for (;(bi=bli.current());++bli)
- {
- extends->append(new BaseInfo(*bi));
- }
-
- // deep copy group list
- QListIterator<Grouping> gli(*e.groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- groups->append(new Grouping(*g));
+ m_sublist.push_back(std::make_shared<Entry>(*cur));
}
-
- QListIterator<SectionInfo> sli2(*e.anchors);
- SectionInfo *s;
- for (;(s=sli2.current());++sli2)
- {
- anchors->append(s); // shallow copy, object are owned by Doxygen::sectionDict
- }
-
- // deep copy type constraint list
- if (e.typeConstr)
- {
- typeConstr = e.typeConstr->deepCopy();
- }
-
- // deep copy template argument lists
- if (e.tArgLists)
- {
- tArgLists = copyArgumentLists(e.tArgLists);
- }
-
- m_fileDef = e.m_fileDef;
-
}
Entry::~Entry()
@@ -189,14 +126,6 @@ Entry::~Entry()
//printf("Deleting entry %d name %s type %x children %d\n",
// num,name.data(),section,sublist->count());
- delete extends;
- delete groups;
- delete anchors;
- delete argList;
- delete tArgLists;
- delete tagInfo;
- delete typeConstr;
- delete sli;
num--;
}
@@ -207,11 +136,11 @@ void Entry::moveToSubEntryAndRefresh(Entry *&current)
current = new Entry;
}
-void Entry::moveToSubEntryAndRefresh(std::unique_ptr<Entry> &current)
+void Entry::moveToSubEntryAndRefresh(std::shared_ptr<Entry> &current)
{
current->m_parent=this;
- m_sublist.push_back(std::move(current));
- current = std::make_unique<Entry>();
+ m_sublist.push_back(current);
+ current = std::make_shared<Entry>();
}
void Entry::moveToSubEntryAndKeep(Entry *current)
@@ -220,10 +149,10 @@ void Entry::moveToSubEntryAndKeep(Entry *current)
m_sublist.emplace_back(current);
}
-void Entry::moveToSubEntryAndKeep(std::unique_ptr<Entry> &current)
+void Entry::moveToSubEntryAndKeep(std::shared_ptr<Entry> &current)
{
current->m_parent=this;
- m_sublist.push_back(std::move(current));
+ m_sublist.push_back(current);
}
void Entry::copyToSubEntry(Entry *current)
@@ -233,20 +162,20 @@ void Entry::copyToSubEntry(Entry *current)
m_sublist.emplace_back(copy);
}
-void Entry::copyToSubEntry(const std::unique_ptr<Entry> &current)
+void Entry::copyToSubEntry(const std::shared_ptr<Entry> &current)
{
- std::unique_ptr<Entry> copy = std::make_unique<Entry>(*current);
+ std::shared_ptr<Entry> copy = std::make_shared<Entry>(*current);
copy->m_parent=this;
- m_sublist.push_back(std::move(copy));
+ m_sublist.push_back(copy);
}
-void Entry::moveFromSubEntry(const Entry *child,std::unique_ptr<Entry> &moveTo)
+void Entry::moveFromSubEntry(const Entry *child,std::shared_ptr<Entry> &moveTo)
{
auto it = std::find_if(m_sublist.begin(),m_sublist.end(),
- [child](const std::unique_ptr<Entry>&elem) { return elem.get()==child; });
+ [child](const std::shared_ptr<Entry>&elem) { return elem.get()==child; });
if (it!=m_sublist.end())
{
- moveTo = std::move(*it);
+ moveTo = *it;
m_sublist.erase(it);
}
else
@@ -258,7 +187,7 @@ void Entry::moveFromSubEntry(const Entry *child,std::unique_ptr<Entry> &moveTo)
void Entry::removeSubEntry(const Entry *e)
{
auto it = std::find_if(m_sublist.begin(),m_sublist.end(),
- [e](const std::unique_ptr<Entry>&elem) { return elem.get()==e; });
+ [e](const std::shared_ptr<Entry>&elem) { return elem.get()==e; });
if (it!=m_sublist.end())
{
m_sublist.erase(it);
@@ -321,24 +250,17 @@ void Entry::reset()
id.resize(0);
metaData.resize(0);
m_sublist.clear();
- extends->clear();
- groups->clear();
- anchors->clear();
- argList->clear();
- if (tagInfo) { delete tagInfo; tagInfo=0; }
- if (tArgLists) { delete tArgLists; tArgLists=0; }
- if (sli) { delete sli; sli=0; }
- if (typeConstr) { delete typeConstr; typeConstr=0; }
- //if (mtArgList) { delete mtArgList; mtArgList=0; }
+ extends.clear();
+ groups.clear();
+ anchors.clear();
+ argList.clear();
+ tArgLists.clear();
+ argList.reset();
+ typeConstr.reset();
+ sli.clear();
m_fileDef = 0;
}
-
-int Entry::getSize()
-{
- return sizeof(Entry);
-}
-
void Entry::setFileDef(FileDef *fd)
{
m_fileDef = fd;
@@ -350,15 +272,10 @@ void Entry::setFileDef(FileDef *fd)
void Entry::addSpecialListItem(const char *listName,int itemId)
{
- if (sli==0)
- {
- sli = new QList<ListItemInfo>;
- sli->setAutoDelete(TRUE);
- }
- ListItemInfo *ili=new ListItemInfo;
- ili->type = listName;
- ili->itemId = itemId;
- sli->append(ili);
+ ListItemInfo ili;
+ ili.type = listName;
+ ili.itemId = itemId;
+ sli.push_back(ili);
}
diff --git a/src/entry.h b/src/entry.h
index c078936..0391075 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -18,20 +18,17 @@
#ifndef ENTRY_H
#define ENTRY_H
-#include "types.h"
-
-#include <qlist.h>
#include <qgstring.h>
#include <vector>
#include <memory>
+#include "types.h"
+#include "arguments.h"
+
struct SectionInfo;
class QFile;
class FileDef;
-class FileStorage;
-class StorageIntf;
-class ArgumentList;
struct ListItemInfo;
/** This class stores information about an inheritance relation
@@ -197,9 +194,6 @@ class Entry
Entry(const Entry &);
~Entry();
- /*! Returns the static size of the Entry (so excluding any dynamic memory) */
- int getSize();
-
void addSpecialListItem(const char *listName,int index);
/*! Returns the parent for this Entry or 0 if this entry has no parent. */
@@ -208,27 +202,26 @@ class Entry
/*! Returns the list of children for this Entry
* @see addSubEntry() and removeSubEntry()
*/
- //const QList<Entry> *children() const { return m_sublist; }
- const std::vector< std::unique_ptr<Entry> > &children() const { return m_sublist; }
+ const std::vector< std::shared_ptr<Entry> > &children() const { return m_sublist; }
/*! @name add entry as a child and pass ownership.
* @note This makes the entry passed invalid! (TODO: tclscanner.l still has use after move!)
* @{
*/
void moveToSubEntryAndKeep(Entry* e);
- void moveToSubEntryAndKeep(std::unique_ptr<Entry> &e);
+ void moveToSubEntryAndKeep(std::shared_ptr<Entry> &e);
/*! @} */
/*! @name add entry as a child, pass ownership and reinitialize entry */
void moveToSubEntryAndRefresh(Entry* &e);
- void moveToSubEntryAndRefresh(std::unique_ptr<Entry> &e);
+ void moveToSubEntryAndRefresh(std::shared_ptr<Entry> &e);
/*! take \a child of of to list of children and move it into \a moveTo */
- void moveFromSubEntry(const Entry *child,std::unique_ptr<Entry> &moveTo);
+ void moveFromSubEntry(const Entry *child,std::shared_ptr<Entry> &moveTo);
/*! make a copy of \a e and add it as a child to this entry */
void copyToSubEntry (Entry* e);
- void copyToSubEntry (const std::unique_ptr<Entry> &e);
+ void copyToSubEntry (const std::shared_ptr<Entry> &e);
/*! Removes entry \a e from the list of children.
* The entry will be deleted if found.
@@ -244,13 +237,13 @@ class Entry
void setFileDef(FileDef *fd);
FileDef *fileDef() const { return m_fileDef; }
- public:
-
// identification
int section; //!< entry type (see Sections);
QCString type; //!< member type
QCString name; //!< member name
- TagInfo *tagInfo; //!< tag file info
+ bool hasTagInfo; //!< is tag info valid
+ TagInfo tagInfoData; //!< tag file info data
+ const TagInfo *tagInfo() const { return hasTagInfo ? &tagInfoData : 0; }
// content
Protection protection; //!< class protection
@@ -268,8 +261,8 @@ class Entry
Specifier virt; //!< virtualness of the entry
QCString args; //!< member argument string
QCString bitfields; //!< member's bit fields
- ArgumentList *argList; //!< member arguments as a list
- QList<ArgumentList> *tArgLists; //!< template argument declarations
+ ArgumentList argList; //!< member arguments as a list
+ std::vector<ArgumentList> tArgLists; //!< template argument declarations
QGString program; //!< the program text
QGString initializer; //!< initial value (for variables)
QCString includeFile; //!< include file (2 arg of \\class, must be unique)
@@ -289,17 +282,17 @@ class Entry
QCString write; //!< property write accessor
QCString inside; //!< name of the class in which documents are found
QCString exception; //!< throw specification
- ArgumentList *typeConstr; //!< where clause (C#) for type constraints
+ ArgumentList typeConstr; //!< where clause (C#) for type constraints
int bodyLine; //!< line number of the definition in the source
int endBodyLine; //!< line number where the definition ends
int mGrpId; //!< member group id
- QList<BaseInfo> *extends; //!< list of base classes
- QList<Grouping> *groups; //!< list of groups this entry belongs to
- QList<SectionInfo> *anchors; //!< list of anchors defined in this entry
+ std::vector<BaseInfo> extends; //!< list of base classes
+ std::vector<Grouping> groups; //!< list of groups this entry belongs to
+ std::vector<const SectionInfo*> anchors; //!< list of anchors defined in this entry
QCString fileName; //!< file this entry was extracted from
int startLine; //!< start line of entry in the source
int startColumn; //!< start column of entry in the source
- QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in
+ std::vector<ListItemInfo> sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in
SrcLangExt lang; //!< programming language in which this entry was found
bool hidden; //!< does this represent an entity that is hidden from the output
bool artificial; //!< Artificially introduced item
@@ -339,7 +332,7 @@ class Entry
private:
Entry *m_parent; //!< parent node in the tree
- std::vector< std::unique_ptr<Entry> > m_sublist;
+ std::vector< std::shared_ptr<Entry> > m_sublist;
Entry &operator=(const Entry &);
FileDef *m_fileDef;
};
diff --git a/src/filedef.cpp b/src/filedef.cpp
index e4f6c86..e028bab 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -664,7 +664,8 @@ void FileDefImpl::writeIncludeGraph(OutputList &ol)
DotInclDepGraph incDepGraph(this,FALSE);
if (incDepGraph.isTooBig())
{
- warn_uncond("Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
+ warn_uncond("Include graph for '%s' not generated, too many nodes (%d), threshold is %d. Consider increasing DOT_GRAPH_MAX_NODES.\n",
+ name().data(), incDepGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
}
else if (!incDepGraph.isTrivial())
{
@@ -688,7 +689,8 @@ void FileDefImpl::writeIncludedByGraph(OutputList &ol)
DotInclDepGraph incDepGraph(this,TRUE);
if (incDepGraph.isTooBig())
{
- warn_uncond("Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
+ warn_uncond("Included by graph for '%s' not generated, too many nodes (%d), threshold is %d. Consider increasing DOT_GRAPH_MAX_NODES.\n",
+ name().data(), incDepGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
}
else if (!incDepGraph.isTrivial())
{
@@ -735,7 +737,7 @@ void FileDefImpl::writeClassDeclarations(OutputList &ol,const QCString &title,Cl
void FileDefImpl::writeInlineClasses(OutputList &ol)
{
- // temporarily undo the disbling could be done by startMemberDocumentation()
+ // temporarily undo the disabling could be done by startMemberDocumentation()
// as a result of setting SEPARATE_MEMBER_PAGES to YES; see bug730512
bool isEnabled = ol.isEnabled(OutputGenerator::Html);
ol.enable(OutputGenerator::Html);
@@ -1231,8 +1233,8 @@ void FileDefImpl::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu
else
#endif
{
- ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
- pIntf->resetCodeParserState();
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(getDefFileExtension());
+ intf.resetCodeParserState();
ol.startCodeFragment();
bool needs2PassParsing =
Doxygen::parseSourcesNeeded && // we need to parse (filtered) sources for cross-references
@@ -1242,13 +1244,13 @@ void FileDefImpl::writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu
if (needs2PassParsing)
{
// parse code for cross-references only (see bug707641)
- pIntf->parseCode(devNullIntf,0,
+ intf.parseCode(devNullIntf,0,
fileToString(absFilePath(),TRUE,TRUE),
getLanguage(),
FALSE,0,this
);
}
- pIntf->parseCode(ol,0,
+ intf.parseCode(ol,0,
fileToString(absFilePath(),filterSourceFiles,TRUE),
getLanguage(), // lang
FALSE, // isExampleBlock
@@ -1293,9 +1295,9 @@ void FileDefImpl::parseSource(bool sameTu,QStrList &filesInSameTu)
else
#endif
{
- ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
- pIntf->resetCodeParserState();
- pIntf->parseCode(
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(getDefFileExtension());
+ intf.resetCodeParserState();
+ intf.parseCode(
devNullIntf,0,
fileToString(absFilePath(),filterSourceFiles,TRUE),
getLanguage(),
@@ -1680,7 +1682,7 @@ bool FileDefImpl::generateSourceFile() const
void FileDefImpl::addListReferences()
{
{
- QList<ListItemInfo> *xrefItems = xrefListItems();
+ const std::vector<ListItemInfo> &xrefItems = xrefListItems();
addRefItem(xrefItems,
getOutputFileBase(),
theTranslator->trFile(TRUE,TRUE),
@@ -2013,7 +2015,7 @@ void FileDefImpl::acquireFileVersion()
msg("Version of %s : ",m_filePath.data());
QCString cmd = vercmd+" \""+m_filePath+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",qPrint(cmd));
- FILE *f=portable_popen(cmd,"r");
+ FILE *f=Portable::popen(cmd,"r");
if (!f)
{
err("could not execute %s\n",vercmd.data());
@@ -2022,7 +2024,7 @@ void FileDefImpl::acquireFileVersion()
const int bufSize=1024;
char buf[bufSize];
int numRead = (int)fread(buf,1,bufSize-1,f);
- portable_pclose(f);
+ Portable::pclose(f);
if (numRead>0 && numRead<bufSize)
{
buf[numRead]='\0';
diff --git a/src/fileparser.cpp b/src/fileparser.cpp
index 45bdc81..34085dc 100644
--- a/src/fileparser.cpp
+++ b/src/fileparser.cpp
@@ -16,7 +16,7 @@
#include "fileparser.h"
#include "outputgen.h"
-void FileParser::parseCode(CodeOutputInterface &codeOutIntf,
+void FileCodeParser::parseCode(CodeOutputInterface &codeOutIntf,
const char *, // scopeName
const QCString & input,
SrcLangExt, // lang
diff --git a/src/fileparser.h b/src/fileparser.h
index 7c3f40c..3245878 100644
--- a/src/fileparser.h
+++ b/src/fileparser.h
@@ -18,15 +18,11 @@
#include "parserintf.h"
-/** @brief General file parser */
-class FileParser : public ParserInterface
+/** @brief Generic code parser */
+class FileCodeParser : public CodeParserInterface
{
public:
- virtual ~FileParser() {}
- void startTranslationUnit(const char *) {}
- void finishTranslationUnit() {}
- void parseInput(const char *, const char *,const std::unique_ptr<Entry> &, bool, QStrList &) {}
- bool needsPreprocessing(const QCString &) { return FALSE; }
+ virtual ~FileCodeParser() {}
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
const QCString &input,
@@ -43,8 +39,6 @@ class FileParser : public ParserInterface
bool collectXRefs=TRUE
);
void resetCodeParserState() {}
- void parsePrototype(const char *) {}
};
-
#endif
diff --git a/src/formula.cpp b/src/formula.cpp
index 534f56a..c884eba 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -100,15 +100,15 @@ void FormulaList::generateBitmaps(const char *path)
//printf("Running latex...\n");
//system("latex _formulas.tex </dev/null >/dev/null");
QCString latexCmd = "latex";
- portable_sysTimerStart();
- if (portable_system(latexCmd,"_formulas.tex")!=0)
+ Portable::sysTimerStart();
+ if (Portable::system(latexCmd,"_formulas.tex")!=0)
{
err("Problems running latex. Check your installation or look "
"for typos in _formulas.tex and check _formulas.log!\n");
formulaError=TRUE;
//return;
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
//printf("Running dvips...\n");
QListIterator<int> pli(pagesToGenerate);
int *pagePtr;
@@ -125,27 +125,27 @@ void FormulaList::generateBitmaps(const char *path)
// postscript file.
sprintf(dviArgs,"-q -D 600 -n 1 -p %d -o %s_tmp.ps _formulas.dvi",
pageIndex,formBase.data());
- portable_sysTimerStart();
- if (portable_system("dvips",dviArgs)!=0)
+ Portable::sysTimerStart();
+ if (Portable::system("dvips",dviArgs)!=0)
{
err("Problems running dvips. Check your installation!\n");
- portable_sysTimerStop();
+ Portable::sysTimerStop();
QDir::setCurrent(oldDir);
return;
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
// run ps2epsi to convert to an encapsulated postscript file with
// boundingbox (dvips with -E has some problems here).
sprintf(psArgs,"%s_tmp.ps %s.eps",formBase.data(),formBase.data());
- portable_sysTimerStart();
- if (portable_system("ps2epsi",psArgs)!=0)
+ Portable::sysTimerStart();
+ if (Portable::system("ps2epsi",psArgs)!=0)
{
err("Problems running ps2epsi. Check your installation!\n");
- portable_sysTimerStop();
+ Portable::sysTimerStop();
QDir::setCurrent(oldDir);
return;
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
// now we read the generated postscript file to extract the bounding box
QFileInfo fi(formBase+".eps");
if (fi.exists())
@@ -193,20 +193,20 @@ void FormulaList::generateBitmaps(const char *path)
// used.
char gsArgs[4096];
- sprintf(gsArgs,"-q -g%dx%d -r%dx%dx -sDEVICE=ppmraw "
- "-sOutputFile=%s.pnm -dNOPAUSE -dBATCH -- %s.ps",
+ sprintf(gsArgs,"-q -g%dx%d -r%dx%d -sDEVICE=ppmraw "
+ "-sOutputFile=%s.pnm -dNOPAUSE -dBATCH -dNOSAFER %s.ps",
gx,gy,(int)(scaleFactor*72),(int)(scaleFactor*72),
formBase.data(),formBase.data()
);
- portable_sysTimerStart();
- if (portable_system(portable_ghostScriptCommand(),gsArgs)!=0)
+ Portable::sysTimerStart();
+ if (Portable::system(Portable::ghostScriptCommand(),gsArgs)!=0)
{
- err("Problem running ghostscript %s %s. Check your installation!\n",portable_ghostScriptCommand(),gsArgs);
- portable_sysTimerStop();
+ err("Problem running ghostscript %s %s. Check your installation!\n",Portable::ghostScriptCommand(),gsArgs);
+ Portable::sysTimerStop();
QDir::setCurrent(oldDir);
return;
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
f.setName(formBase+".pnm");
uint imageX=0,imageY=0;
// we read the generated image again, to obtain the pixel data.
diff --git a/src/fortrancode.h b/src/fortrancode.h
index 4df20a9..8391a0b 100644
--- a/src/fortrancode.h
+++ b/src/fortrancode.h
@@ -18,7 +18,7 @@
#ifndef FORTRANCODE_H
#define FORTRANCODE_H
-#include "types.h"
+#include "parserintf.h"
class CodeOutputInterface;
class FileDef;
@@ -26,13 +26,45 @@ class MemberDef;
class QCString;
class Definition;
-void parseFortranCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
- bool collectRefs, FortranFormat format);
-void resetFortranCodeParserState();
void codeFreeScanner();
const int fixedCommentAfter = 72;
+
+class FortranCodeParser : public CodeParserInterface
+{
+ public:
+ FortranCodeParser(FortranFormat format=FortranFormat_Unknown) : m_format(format) { }
+ void parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt lang,
+ bool isExampleBlock,
+ const char *exampleName=0,
+ FileDef *fileDef=0,
+ int startLine=-1,
+ int endLine=-1,
+ bool inlineFragment=FALSE,
+ const MemberDef *memberDef=0,
+ bool showLineNumbers=TRUE,
+ const Definition *searchCtx=0,
+ bool collectXRefs=TRUE
+ );
+ void resetCodeParserState();
+
+ private:
+ FortranFormat m_format;
+};
+
+class FortranCodeParserFree : public FortranCodeParser
+{
+ public:
+ FortranCodeParserFree() : FortranCodeParser(FortranFormat_Free) { }
+};
+
+class FortranCodeParserFixed : public FortranCodeParser
+{
+ public:
+ FortranCodeParserFixed() : FortranCodeParser(FortranFormat_Fixed) { }
+};
+
#endif
diff --git a/src/fortrancode.l b/src/fortrancode.l
index 303bbfb..21d1fa5 100644
--- a/src/fortrancode.l
+++ b/src/fortrancode.l
@@ -17,7 +17,7 @@
*/
/**
- @todo - continutation lines not always recognized
+ @todo - continuation lines not always recognized
- merging of use-statements with same module name and different only-names
- rename part of use-statement
- links to interface functions
@@ -1395,16 +1395,34 @@ void parseFortranCode(CodeOutputInterface &od,const char *,const QCString &s,
return;
}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void fortrancodeYYdummy() { yy_flex_realloc(0,0); }
+//---------------------------------------------------------
+
+void FortranCodeParser::parseCode(CodeOutputInterface & codeOutIntf,
+ const char * scopeName,
+ const QCString & input,
+ SrcLangExt /*lang*/,
+ bool isExampleBlock,
+ const char * exampleName,
+ FileDef * fileDef,
+ int startLine,
+ int endLine,
+ bool inlineFragment,
+ const MemberDef *memberDef,
+ bool showLineNumbers,
+ const Definition *searchCtx,
+ bool collectXRefs
+ )
+{
+ ::parseFortranCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
+ fileDef,startLine,endLine,inlineFragment,memberDef,
+ showLineNumbers,searchCtx,collectXRefs,m_format);
}
-#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
-#else
-extern "C" { // some bogus code to keep the compiler happy
- void fortrancodeYYdummy() { yy_top_state(); }
+
+void FortranCodeParser::resetCodeParserState()
+{
+ ::resetFortranCodeParserState();
}
-#endif
+
+//---------------------------------------------------------
#include "fortrancode.l.h"
diff --git a/src/fortranscanner.h b/src/fortranscanner.h
index 7490cde..7a13f47 100644
--- a/src/fortranscanner.h
+++ b/src/fortranscanner.h
@@ -24,51 +24,35 @@
*
* This is the Fortran language parser for doxygen.
*/
-class FortranLanguageScanner : public ParserInterface
+class FortranOutlineParser : public OutlineParserInterface
{
public:
- FortranLanguageScanner(FortranFormat format=FortranFormat_Unknown) : m_format(format) { }
- virtual ~FortranLanguageScanner() {}
+ FortranOutlineParser(FortranFormat format=FortranFormat_Unknown) : m_format(format) { }
void startTranslationUnit(const char *) {}
void finishTranslationUnit() {}
void parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList &filesInSameTranslationUnit);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt lang,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- const MemberDef *memberDef=0,
- bool showLineNumbers=TRUE,
- const Definition *searchCtx=0,
- bool collectXRefs=TRUE
- );
- void resetCodeParserState();
+ bool needsPreprocessing(const QCString &extension) const;
void parsePrototype(const char *text);
private:
FortranFormat m_format;
};
-class FortranLanguageScannerFree : public FortranLanguageScanner
+class FortranOutlineParserFree : public FortranOutlineParser
{
public:
- FortranLanguageScannerFree() : FortranLanguageScanner(FortranFormat_Free) { }
+ FortranOutlineParserFree() : FortranOutlineParser(FortranFormat_Free) { }
};
-class FortranLanguageScannerFixed : public FortranLanguageScanner
+class FortranOutlineParserFixed : public FortranOutlineParser
{
public:
- FortranLanguageScannerFixed() : FortranLanguageScanner(FortranFormat_Fixed) { }
+ FortranOutlineParserFixed() : FortranOutlineParser(FortranFormat_Fixed) { }
};
+
#endif
diff --git a/src/fortranscanner.l b/src/fortranscanner.l
index d7eefd6..08c7a6a 100644
--- a/src/fortranscanner.l
+++ b/src/fortranscanner.l
@@ -136,16 +136,16 @@ static const char *directionParam[] =
*
* statics
*/
-static ParserInterface *g_thisParser;
+static OutlineParserInterface *g_thisParser;
static const char * inputString;
static int inputPosition;
static bool isFixedForm;
static QCString inputStringPrepass; ///< Input string for prepass of line cont. '&'
-static QCString inputStringSemi; ///< Input string after command separetor ';'
+static QCString inputStringSemi; ///< Input string after command separator ';'
static unsigned int inputPositionPrepass;
static int lineCountPrepass = 0;
-static QList<Entry> subrCurrent;
+static std::vector< std::shared_ptr<Entry> > subrCurrent;
struct CommentInPrepass {
int column;
@@ -162,14 +162,15 @@ static QFile inputFile;
static QCString yyFileName;
static int yyLineNr = 1 ;
static int yyColNr = 0 ;
-static Entry* current_root = 0 ;
-static Entry* global_root = 0 ;
-static Entry* file_root = 0 ;
-static Entry* last_entry = 0 ;
-static Entry* last_enum = 0 ;
-static std::unique_ptr<Entry> current;
+static Entry *current_root = 0;
+static Entry *global_scope = 0;
+static std::shared_ptr<Entry> global_root;
+static std::shared_ptr<Entry> file_root;
+static std::shared_ptr<Entry> last_entry;
+static std::shared_ptr<Entry> last_enum;
+static std::shared_ptr<Entry> current;
static ScanVar v_type = V_IGNORE; // type of parsed variable
-static std::vector<Entry*> moduleProcedures; // list of all interfaces which contain unresolved
+static std::vector<std::shared_ptr<Entry> > moduleProcedures; // list of all interfaces which contain unresolved
// module procedures
static QCString docBlock;
static bool docBlockInBody = FALSE;
@@ -181,7 +182,7 @@ static Specifier virt;
static QCString debugStr;
static QCString result; // function result
-static Argument *parameter; // element of parameter list
+static Argument *parameter; // element of parameter list
static QCString argType; // fortran type of an argument of a parameter list
static QCString argName; // last identifier name in variable list
static QCString initializer; // initial value of a variable
@@ -202,7 +203,6 @@ static SymbolModifiers currentModifiers;
//! Holds program scope->symbol name->symbol modifiers.
static QMap<Entry*,QMap<QCString,SymbolModifiers> > modifiers;
-static Entry *global_scope = 0;
static int anonCount = 0 ;
//-----------------------------------------------------------------------------
@@ -491,13 +491,13 @@ SCOPENAME ({ID}{BS}"::"{BS})*
QCString name = QCString(yytext).stripWhiteSpace();
name = name.right(name.length() - 9).stripWhiteSpace().lower();
addInterface(name, ifType);
- startScope(last_entry);
+ startScope(last_entry.get());
}
}
<InterfaceBody>^{BS}end{BS}interface({BS_}{ID})? {
// end scope only if GENERIC interface
- if (ifType == IF_GENERIC)last_entry->parent()->endBodyLine = yyLineNr - 1;
+ if (ifType == IF_GENERIC) last_entry->parent()->endBodyLine = yyLineNr - 1;
if (ifType == IF_GENERIC && !endScope(current_root))
yyterminate();
@@ -510,12 +510,12 @@ SCOPENAME ({ID}{BS}"::"{BS})*
<ModuleProcedure>{ID} { if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
{
addInterface(yytext, ifType);
- startScope(last_entry);
+ startScope(last_entry.get());
}
current->section = Entry::FUNCTION_SEC ;
current->name = yytext;
- moduleProcedures.push_back(current.get());
+ moduleProcedures.push_back(current);
addCurrentEntry(true);
}
<ModuleProcedure>"\n" { yyColNr -= 1;
@@ -617,7 +617,7 @@ abstract {
}
extends{ARGS} {
QCString basename = extractFromParens(yytext).lower();
- current->extends->append(new BaseInfo(basename, Public, Normal));
+ current->extends.push_back(BaseInfo(basename, Public, Normal));
}
public {
current->protection = Public;
@@ -639,7 +639,7 @@ private {
current->startLine = yyLineNr;
/* if type is part of a module, mod name is necessary for output */
- if ((current_root) &&
+ if (current_root &&
(current_root->section == Entry::CLASS_SEC
|| current_root->section == Entry::NAMESPACE_SEC))
{
@@ -647,7 +647,7 @@ private {
}
addCurrentEntry(true);
- startScope(last_entry);
+ startScope(last_entry.get());
BEGIN(TypedefBody);
}
}
@@ -727,7 +727,7 @@ private {
if (!endScope(current_root))
yyterminate();
- subrCurrent.remove(0u);
+ subrCurrent.pop_back();
yy_pop_state() ;
}
<BlockData>{
@@ -736,7 +736,7 @@ private {
}
<Start,ModuleBody,TypedefBody,SubprogBody,Enum>{
^{BS}{TYPE_SPEC}/{SEPARATE} {
- last_enum = 0;
+ last_enum.reset();
if (YY_START == Enum)
{
argType = "@"; // enum marker
@@ -867,7 +867,7 @@ private {
{
current_root->copyToSubEntry(current);
// add to the scope surrounding the enum (copy!)
- last_enum = current.get();
+ last_enum = current;
current_root->parent()->moveToSubEntryAndRefresh(current);
initEntry();
}
@@ -1066,7 +1066,7 @@ private {
}
addCurrentEntry(true);
- startScope(last_entry);
+ startScope(last_entry.get());
BEGIN( Enum ) ;
}
<Enum>"end"{BS}"enum" {
@@ -1083,7 +1083,7 @@ private {
if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
{
addInterface("$interface$", ifType);
- startScope(last_entry);
+ startScope(last_entry.get());
}
// TYPE_SPEC is for old function style function result
@@ -1109,7 +1109,7 @@ private {
if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
{
addInterface("$interface$", ifType);
- startScope(last_entry);
+ startScope(last_entry.get());
}
result = QCString(yytext).stripWhiteSpace();
@@ -1136,14 +1136,16 @@ private {
current->args += ")";
current->args = removeRedundantWhiteSpace(current->args);
addCurrentEntry(true);
- startScope(last_entry);
+ startScope(last_entry.get());
BEGIN(SubprogBody);
}
<Parameterlist>{COMMA}|{BS} { current->args += yytext;
CommentInPrepass *c = locatePrepassComment(yyColNr-(int)yyleng, yyColNr);
- if (c!=NULL) {
- if(current->argList->count()>0) {
- current->argList->at(current->argList->count()-1)->docs = c->str;
+ if (c!=NULL)
+ {
+ if (!current->argList.empty())
+ {
+ current->argList.back().docs = c->str;
}
}
}
@@ -1152,17 +1154,15 @@ private {
QCString param = yytext;
// std::cout << "3=========> got parameter " << param << std::endl;
current->args += param;
- Argument *arg = new Argument;
- arg->name = param;
- arg->type = "";
- current->argList->append(arg);
+ Argument arg;
+ arg.name = param;
+ current->argList.push_back(arg);
}
<Parameterlist>{NOARGS} {
newLine();
//printf("3=========> without parameterlist \n");
- //current->argList = ;
addCurrentEntry(true);
- startScope(last_entry);
+ startScope(last_entry.get());
BEGIN(SubprogBody);
}
<SubprogBody>result{BS}\({BS}{ID} {
@@ -1214,20 +1214,19 @@ private {
unput(*yytext);
if (v_type == V_VARIABLE)
{
- std::unique_ptr<Entry> tmp_entry;
- current.swap(tmp_entry);
+ std::shared_ptr<Entry> tmp_entry = current;
// temporarily switch to the previous entry
if (last_enum)
{
- current.reset(last_enum);
+ current = last_enum;
}
else
{
- current.reset(last_entry);
+ current = last_entry;
}
handleCommentBlock(docBlock,TRUE);
// switch back
- tmp_entry.swap(current);
+ current = tmp_entry;
}
else if (v_type == V_PARAMETER)
{
@@ -1280,9 +1279,9 @@ private {
<PrototypeArgs>{
"("|")"|","|{BS_} { current->args += yytext; }
{ID} { current->args += yytext;
- Argument *a = new Argument;
- a->name = QCString(yytext).lower();
- current->argList->append(a);
+ Argument a;
+ a.name = QCString(yytext).lower();
+ current->argList.push_back(a);
}
}
@@ -1779,7 +1778,7 @@ static void popBuffer() {
}
/** used to copy entry to an interface module procedure */
-static void copyEntry(Entry *dest, const std::unique_ptr<Entry> &src)
+static void copyEntry(std::shared_ptr<Entry> dest, const std::shared_ptr<Entry> &src)
{
dest->type = src->type;
dest->fileName = src->fileName;
@@ -1787,8 +1786,7 @@ static void copyEntry(Entry *dest, const std::unique_ptr<Entry> &src)
dest->bodyLine = src->bodyLine;
dest->endBodyLine = src->endBodyLine;
dest->args = src->args;
- delete dest->argList;
- dest->argList = new ArgumentList(*src->argList);
+ dest->argList = src->argList;
dest->doc = src->doc;
dest->brief = src->brief;
}
@@ -1842,7 +1840,7 @@ static QCString extractFromParens(const QCString name)
return extracted;
}
-/*! remove unuseful spaces from bind statement */
+/*! remove useless spaces from bind statement */
static QCString extractBind(const QCString name)
{
QCString parensPart = extractFromParens(name);
@@ -2011,14 +2009,13 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfStringArg)
static Argument *findArgument(Entry* subprog, QCString name, bool byTypeName = FALSE)
{
QCString cname(name.lower());
- for (unsigned int i=0; i<subprog->argList->count(); i++)
+ for (Argument &arg : subprog->argList)
{
- Argument *arg = subprog->argList->at(i);
- if ((!byTypeName && arg->name.lower() == cname) ||
- (byTypeName && arg->type.lower() == cname)
+ if ((!byTypeName && arg.name.lower() == cname) ||
+ (byTypeName && arg.type.lower() == cname)
)
{
- return arg;
+ return &arg;
}
}
return 0;
@@ -2212,7 +2209,9 @@ static bool endScope(Entry *scope, bool isGlobalRoot)
Argument *arg = findArgument(scope, it.key());
if (arg)
+ {
applyModifiers(arg, it.data());
+ }
}
// find return type for function
@@ -2306,7 +2305,7 @@ static int yyread(char *buf,int max_size)
static void initParser()
{
- last_entry = 0;
+ last_entry.reset();
}
static void initEntry()
@@ -2333,7 +2332,7 @@ static void addCurrentEntry(bool case_insens)
{
if (case_insens) current->name = current->name.lower();
//printf("===Adding entry %s to %s\n", current->name.data(), current_root->name.data());
- last_entry = current.get();
+ last_entry = current;
current_root->moveToSubEntryAndRefresh(current);
initEntry();
}
@@ -2367,14 +2366,14 @@ static void addModule(const char *name, bool isModule)
current->startLine = yyLineNr;
current->protection = Public ;
addCurrentEntry(true);
- startScope(last_entry);
+ startScope(last_entry.get());
}
static void addSubprogram(const char *text)
{
DBG_CTX((stderr,"1=========> got subprog, type: %s\n",text));
- subrCurrent.prepend(current.get());
+ subrCurrent.push_back(current);
current->section = Entry::FUNCTION_SEC ;
QCString subtype = text; subtype=subtype.lower().stripWhiteSpace();
functionLine = (subtype.find("function") != -1);
@@ -2384,7 +2383,7 @@ static void addSubprogram(const char *text)
current->bodyLine = yyLineNr; // used for source reference start of body of routine
current->startLine = yyLineNr; // used for source reference start of definition
current->args.resize(0);
- current->argList->clear();
+ current->argList.clear();
docBlock.resize(0);
}
@@ -2439,18 +2438,15 @@ static void addInterface(QCString name, InterfaceType type)
/*! Get the argument \a name.
*/
-static Argument* getParameter(const QCString &name)
+static Argument *getParameter(const QCString &name)
{
// std::cout<<"addFortranParameter(): "<<name<<" DOCS:"<<(docs.isNull()?QCString("null"):docs)<<std::endl;
Argument *ret = 0;
- if (current_root->argList==0) return 0;
- ArgumentListIterator ali(*current_root->argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (Argument &a:current_root->argList)
{
- if (a->name.lower()==name.lower())
+ if (a.name.lower()==name.lower())
{
- ret=a;
+ ret=&a;
//printf("parameter found: %s\n",(const char*)name);
break;
}
@@ -2490,7 +2486,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
QCString processedDoc = preprocessCommentBlock(doc,yyFileName,lineNr);
while (parseCommentBlock(
g_thisParser,
- docBlockInBody ? subrCurrent.getFirst() : current.get(),
+ docBlockInBody ? subrCurrent.back().get() : current.get(),
processedDoc, // text
yyFileName, // file
lineNr,
@@ -2518,9 +2514,8 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
QCString loc_doc;
loc_doc = doc.stripWhiteSpace();
- std::unique_ptr<Entry> tmp_entry;
- current.swap(tmp_entry);
- current.reset(subrCurrent.getFirst()); // temporarily switch to the entry of the subroutine / function
+ std::shared_ptr<Entry> tmp_entry = current;
+ current = subrCurrent.back(); // temporarily switch to the entry of the subroutine / function
// Still in the specification section so no inbodyDocs yet, but parameter documentation
current->inbodyDocs = "";
@@ -2543,7 +2538,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
// strip direction
loc_doc = loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::IN]));
loc_doc.stripWhiteSpace();
- // in case of empty documentation or (now) just name, consider it as no documemntation
+ // in case of empty documentation or (now) just name, consider it as no documentation
if (!loc_doc.isEmpty() && (loc_doc.lower() != argName.lower()))
{
handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::IN] + " " +
@@ -2569,7 +2564,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
loc_doc.stripWhiteSpace();
if (loc_doc.isEmpty() || (loc_doc.lower() == argName.lower()))
{
- tmp_entry.swap(current);
+ current = tmp_entry;
return;
}
handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::OUT] + " " +
@@ -2613,7 +2608,7 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
// reset current back to the part inside the routine
- tmp_entry.swap(current);
+ current = tmp_entry;
}
//----------------------------------------------------------------------------
/// Handle result description as defined after the declaration of the parameter
@@ -2622,9 +2617,8 @@ static void subrHandleCommentBlockResult(const QCString &doc,bool brief)
QCString loc_doc;
loc_doc = doc.stripWhiteSpace();
- std::unique_ptr<Entry> tmp_entry;
- current.swap(tmp_entry);
- current.reset(subrCurrent.getFirst()); // temporarily switch to the entry of the subroutine / function
+ std::shared_ptr<Entry> tmp_entry = current;
+ current = subrCurrent.back(); // temporarily switch to the entry of the subroutine / function
// Still in the specification section so no inbodyDocs yet, but parameter documentation
current->inbodyDocs = "";
@@ -2643,7 +2637,7 @@ static void subrHandleCommentBlockResult(const QCString &doc,bool brief)
}
// reset current back to the part inside the routine
- tmp_entry.swap(current);
+ current = tmp_entry;
}
//----------------------------------------------------------------------------
@@ -2664,7 +2658,7 @@ level--;
static void parseMain(const char *fileName,const char *fileBuf,
- const std::unique_ptr<Entry> &rt, FortranFormat format)
+ const std::shared_ptr<Entry> &rt, FortranFormat format)
{
char *tmpBuf = NULL;
initParser();
@@ -2680,7 +2674,7 @@ static void parseMain(const char *fileName,const char *fileBuf,
gstat = FALSE;
virt = Normal;
current_root = rt.get();
- global_root = rt.get();
+ global_root = rt;
inputFile.setName(fileName);
if (inputFile.open(IO_ReadOnly))
{
@@ -2722,11 +2716,11 @@ static void parseMain(const char *fileName,const char *fileBuf,
Doxygen::docGroup.enterFile(yyFileName,yyLineNr);
// add entry for the file
- current = std::make_unique<Entry>();
+ current = std::make_shared<Entry>();
current->lang = SrcLangExt_Fortran;
current->name = yyFileName;
current->section = Entry::SOURCE_SEC;
- file_root = current.get();
+ file_root = current;
current_root->moveToSubEntryAndRefresh(current);
current->lang = SrcLangExt_Fortran;
@@ -2760,9 +2754,9 @@ static void parseMain(const char *fileName,const char *fileBuf,
//----------------------------------------------------------------------------
-void FortranLanguageScanner::parseInput(const char *fileName,
+void FortranOutlineParser::parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool /*sameTranslationUnit*/,
QStrList & /*filesInSameTranslationUnit*/)
{
@@ -2775,37 +2769,11 @@ void FortranLanguageScanner::parseInput(const char *fileName,
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
}
-void FortranLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
- const char * scopeName,
- const QCString & input,
- SrcLangExt /*lang*/,
- bool isExampleBlock,
- const char * exampleName,
- FileDef * fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- const MemberDef *memberDef,
- bool showLineNumbers,
- const Definition *searchCtx,
- bool collectXRefs
- )
-{
- ::parseFortranCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers,searchCtx,collectXRefs,m_format);
-}
-
-bool FortranLanguageScanner::needsPreprocessing(const QCString &extension)
+bool FortranOutlineParser::needsPreprocessing(const QCString &extension) const
{
return extension!=extension.lower(); // use preprocessor only for upper case extensions
}
-void FortranLanguageScanner::resetCodeParserState()
-{
- ::resetFortranCodeParserState();
-}
-
-void FortranLanguageScanner::parsePrototype(const char *text)
+void FortranOutlineParser::parsePrototype(const char *text)
{
QCString buffer = QCString(text);
pushBuffer(buffer);
@@ -2816,6 +2784,8 @@ void FortranLanguageScanner::parsePrototype(const char *text)
popBuffer();
}
+//----------------------------------------------------------------------------
+
static void scanner_abort()
{
fprintf(stderr,"********************************************************************\n");
@@ -2826,7 +2796,7 @@ static void scanner_abort()
for (const auto &ce : global_root->children())
{
- if (ce.get() == file_root) start=TRUE;
+ if (ce == file_root) start=TRUE;
if (start) ce->reset();
}
@@ -2839,11 +2809,4 @@ static void scanner_abort()
//----------------------------------------------------------------------------
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void fortranscannernerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
#include "fortranscanner.l.h"
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 00e42d7..0d6d43f 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -396,15 +396,13 @@ bool GroupDefImpl::insertMember(MemberDef *md,bool docOnly)
(srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
md->getOuterScope()->definitionType()==Definition::TypeFile);
- const ArgumentList *srcMdAl = srcMd->argumentList();
- const ArgumentList *mdAl = md->argumentList();
- const ArgumentList *tSrcMdAl = srcMd->templateArguments();
- const ArgumentList *tMdAl = md->templateArguments();
-
+ const ArgumentList &srcMdAl = srcMd->argumentList();
+ const ArgumentList &mdAl = md->argumentList();
+ const ArgumentList &tSrcMdAl = srcMd->templateArguments();
+ const ArgumentList &tMdAl = md->templateArguments();
+
if (srcMd->isFunction() && md->isFunction() && // both are a function
- ((tSrcMdAl==0 && tMdAl==0) ||
- (tSrcMdAl!=0 && tMdAl!=0 && tSrcMdAl->count()==tMdAl->count())
- ) && // same number of template arguments
+ (tSrcMdAl.size()==tMdAl.size()) && // same number of template arguments
matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl,
md->getOuterScope(),md->getFileDef(),mdAl,
TRUE
@@ -1462,12 +1460,10 @@ void GroupDefImpl::writeQuickMemberLinks(OutputList &ol,const MemberDef *current
void addClassToGroups(const Entry *root,ClassDef *cd)
{
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
{
if (gd->addClass(cd))
{
@@ -1480,14 +1476,12 @@ void addClassToGroups(const Entry *root,ClassDef *cd)
void addNamespaceToGroups(const Entry *root,NamespaceDef *nd)
{
- //printf("root->groups->count()=%d\n",root->groups->count());
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ //printf("root->groups.size()=%d\n",root->groups.size());
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
//printf("group '%s'\n",s->data());
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
{
if (gd->addNamespace(nd)) nd->makePartOfGroup(gd);
//printf("Namespace %s: in group %s\n",nd->name().data(),s->data());
@@ -1497,14 +1491,12 @@ void addNamespaceToGroups(const Entry *root,NamespaceDef *nd)
void addDirToGroups(const Entry *root,DirDef *dd)
{
- //printf("*** root->groups->count()=%d\n",root->groups->count());
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ //printf("*** root->groups.size()=%d\n",root->groups.size());
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
//printf("group '%s'\n",g->groupname.data());
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
{
gd->addDir(dd);
dd->makePartOfGroup(gd);
@@ -1515,14 +1507,11 @@ void addDirToGroups(const Entry *root,DirDef *dd)
void addGroupToGroups(const Entry *root,GroupDef *subGroup)
{
- //printf("addGroupToGroups for %s groups=%d\n",root->name.data(),
- // root->groups?root->groups->count():-1);
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ //printf("addGroupToGroups for %s groups=%d\n",root->name.data(),root->groups.size());
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
{
if (gd==subGroup)
{
@@ -1548,20 +1537,18 @@ void addMemberToGroups(const Entry *root,MemberDef *md)
{
//printf("addMemberToGroups: Root %p = %s, md %p=%s groups=%d\n",
// root, root->name.data(), md, md->name().data(), root->groups->count() );
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
// Search entry's group list for group with highest pri.
Grouping::GroupPri_t pri = Grouping::GROUPING_LOWEST;
GroupDef *fgd=0;
- for (;(g=gli.current());++gli)
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g->groupname.isEmpty() &&
- (gd=Doxygen::groupSDict->find(g->groupname)) &&
- g->pri >= pri)
+ if (!g.groupname.isEmpty() &&
+ (gd=Doxygen::groupSDict->find(g.groupname)) &&
+ g.pri >= pri)
{
- if (fgd && gd!=fgd && g->pri==pri)
+ if (fgd && gd!=fgd && g.pri==pri)
{
warn(root->fileName.data(), root->startLine,
"Member %s found in multiple %s groups! "
@@ -1572,7 +1559,7 @@ void addMemberToGroups(const Entry *root,MemberDef *md)
}
fgd = gd;
- pri = g->pri;
+ pri = g.pri;
}
}
//printf("fgd=%p\n",fgd);
@@ -1652,12 +1639,10 @@ void addMemberToGroups(const Entry *root,MemberDef *md)
void addExampleToGroups(const Entry *root,PageDef *eg)
{
- QListIterator<Grouping> gli(*root->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
+ for (const Grouping &g : root->groups)
{
GroupDef *gd=0;
- if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
+ if (!g.groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g.groupname)))
{
gd->addExample(eg);
eg->makePartOfGroup(gd);
@@ -1674,7 +1659,7 @@ QCString GroupDefImpl::getOutputFileBase() const
void GroupDefImpl::addListReferences()
{
{
- QList<ListItemInfo> *xrefItems = xrefListItems();
+ const std::vector<ListItemInfo> &xrefItems = xrefListItems();
addRefItem(xrefItems,
getOutputFileBase(),
theTranslator->trGroup(TRUE,TRUE),
diff --git a/src/htags.cpp b/src/htags.cpp
index 51cd6d9..1a240b1 100644
--- a/src/htags.cpp
+++ b/src/htags.cpp
@@ -89,13 +89,13 @@ bool Htags::execute(const QCString &htmldir)
QCString oldDir = QDir::currentDirPath().utf8();
QDir::setCurrent(g_inputDir.absPath());
//printf("CommandLine=[%s]\n",commandLine.data());
- portable_sysTimerStart();
- bool result=portable_system("htags",commandLine,FALSE)==0;
+ Portable::sysTimerStart();
+ bool result=Portable::system("htags",commandLine,FALSE)==0;
if (!result)
{
err("Problems running %s. Check your installation\n", "htags");
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
QDir::setCurrent(oldDir);
return result;
}
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 513c3a4..3dec509 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -518,8 +518,8 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
case DocVerbatim::Code:
forceEndParagraph(s);
m_t << PREFRAG_START;
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(lang)
+ .parseCode(m_ci,
s->context(),
s->text(),
langExt,
@@ -666,8 +666,8 @@ void HtmlDocVisitor::visit(DocInclude *inc)
case DocInclude::Include:
forceEndParagraph(inc);
m_t << PREFRAG_START;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
inc->text(),
langExt,
@@ -690,8 +690,8 @@ void HtmlDocVisitor::visit(DocInclude *inc)
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
inc->text(),
langExt,
@@ -732,8 +732,8 @@ void HtmlDocVisitor::visit(DocInclude *inc)
{
forceEndParagraph(inc);
m_t << PREFRAG_START;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -757,8 +757,8 @@ void HtmlDocVisitor::visit(DocInclude *inc)
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -810,8 +810,8 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
QFileInfo cfi( op->includeFileName() );
fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
}
- Doxygen::parserManager->getParser(locLangExt)
- ->parseCode(
+ Doxygen::parserManager->getCodeParser(locLangExt)
+ .parseCode(
m_ci,
op->context(),
op->text(),
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 402b4e4..df39d32 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -548,6 +548,7 @@ void HtmlCodeGenerator::writeLineNumber(const char *ref,const char *filename,
}
m_t << "</span>";
m_t << "&#160;";
+ m_col=0;
}
void HtmlCodeGenerator::writeCodeLink(const char *ref,const char *f,
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index 20cb6ca..c514102 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -93,7 +93,7 @@ HtmlHelpIndex::~HtmlHelpIndex()
}
/*! Stores an item in the index if it is not already present.
- * Items are stored in alphetical order, by sorting on the
+ * Items are stored in alphabetical order, by sorting on the
* concatenation of \a level1 and \a level2 (if present).
*
* \param level1 the string at level 1 in the index.
diff --git a/src/index.cpp b/src/index.cpp
index 1acd941..edc302b 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -368,7 +368,7 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
{
const MemberList *enumList = md->enumFieldList();
bool isDir = enumList!=0 && md->isEnumerate();
- bool isAnonymous = md->name().find('@')!=-1;
+ bool isAnonymous = md->isAnonymous();
static bool hideUndocMembers = Config_getBool(HIDE_UNDOC_MEMBERS);
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
if (!isAnonymous &&
@@ -1660,7 +1660,7 @@ static void writeNamespaceTree(const NamespaceSDict *nsDict,FTVHelp *ftv,
const NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
- if (nd->localName().find('@')==-1 &&
+ if (!nd->isAnonymous() &&
(!rootOnly || nd->getOuterScope()==Doxygen::globalScope))
{
@@ -4060,7 +4060,7 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
{
const MemberList *enumList = md->enumFieldList();
bool isDir = enumList!=0 && md->isEnumerate();
- if (md->isVisible() && md->name().find('@')==-1)
+ if (md->isVisible() && !md->isAnonymous())
{
Doxygen::indexList->addContentsItem(isDir,
md->name(),md->getReference(),
diff --git a/src/languages.py b/src/languages.py
index 5bb65cf..ea3f348 100755
--- a/src/languages.py
+++ b/src/languages.py
@@ -74,7 +74,7 @@ for f in new_list:
tmp = tmp.replace("\n","")
l = re.sub('[^"]*"([^"]*)".*','\\1',tmp)
l1 = l.replace("-","")
- # capatalize first letter
+ # capitalize first letter
l = l.title()
print("""\
<EnumProperty
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index a0bbf73..5fd2e78 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -349,8 +349,8 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
m_t << "\n\\begin{DoxyCode}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,s->context(),s->text(),langExt,
+ Doxygen::parserManager->getCodeParser(lang)
+ .parseCode(m_ci,s->context(),s->text(),langExt,
s->isExample(),s->exampleFile());
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCode}\n";
@@ -461,8 +461,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -482,8 +482,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
case DocInclude::Include:
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),langExt,inc->isExample(),
inc->exampleFile(),
0, // fileDef
@@ -512,8 +512,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
{
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -530,8 +530,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -583,8 +583,8 @@ void LatexDocVisitor::visit(DocIncOperator *op)
fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
}
- Doxygen::parserManager->getParser(locLangExt)
- ->parseCode(m_ci,op->context(),op->text(),langExt,
+ Doxygen::parserManager->getCodeParser(locLangExt)
+ .parseCode(m_ci,op->context(),op->text(),langExt,
op->isExample(),op->exampleFile(),
fd, // fileDef
op->line(), // startLine
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index e6c6861..094232f 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -223,6 +223,7 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co
{
m_t << l << " ";
}
+ m_col=0;
}
@@ -1919,7 +1920,7 @@ void LatexGenerator::endMemberDescription()
void LatexGenerator::writeNonBreakableSpace(int)
{
- //printf("writeNonBreakbleSpace()\n");
+ //printf("writeNonBreakableSpace()\n");
if (insideTabbing)
{
t << "\\>";
diff --git a/src/layout.cpp b/src/layout.cpp
index 38a55f4..946b612 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -1561,6 +1561,7 @@ void writeDefaultLayoutFile(const char *fileName)
return;
}
QTextStream t(&f);
+ t.setEncoding(QTextStream::UnicodeUTF8);
t << substitute(layout_default,"$doxygenversion",getVersion());
}
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 21e7cb9..3db556d 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -204,8 +204,8 @@ void ManDocVisitor::visit(DocVerbatim *s)
if (!m_firstCol) m_t << endl;
m_t << ".PP" << endl;
m_t << ".nf" << endl;
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,s->context(),s->text(),
+ Doxygen::parserManager->getCodeParser(lang)
+ .parseCode(m_ci,s->context(),s->text(),
langExt,
s->isExample(),s->exampleFile());
if (!m_firstCol) m_t << endl;
@@ -257,8 +257,8 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".nf" << endl;
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -281,8 +281,8 @@ void ManDocVisitor::visit(DocInclude *inc)
if (!m_firstCol) m_t << endl;
m_t << ".PP" << endl;
m_t << ".nf" << endl;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -318,8 +318,8 @@ void ManDocVisitor::visit(DocInclude *inc)
if (!m_firstCol) m_t << endl;
m_t << ".PP" << endl;
m_t << ".nf" << endl;
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -338,8 +338,8 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".nf" << endl;
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -397,8 +397,8 @@ void ManDocVisitor::visit(DocIncOperator *op)
fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
}
- Doxygen::parserManager->getParser(locLangExt)
- ->parseCode(m_ci,op->context(),op->text(),langExt,
+ Doxygen::parserManager->getCodeParser(locLangExt)
+ .parseCode(m_ci,op->context(),op->text(),langExt,
op->isExample(),op->exampleFile(),
fd, // fileDef
op->line(), // startLine
diff --git a/src/mangen.h b/src/mangen.h
index d912923..192be6d 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -132,7 +132,7 @@ class ManGenerator : public OutputGenerator
void writeAnchor(const char *,const char *) {}
void startCodeFragment();
void endCodeFragment();
- void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
+ void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; col=0; }
void startCodeLine(bool) {}
void endCodeLine() { codify("\n"); col=0; }
void startEmphasis() { t << "\\fI"; firstCol=FALSE; }
diff --git a/src/markdown.cpp b/src/markdown.cpp
index d1a6a63..42ea2ff 100644
--- a/src/markdown.cpp
+++ b/src/markdown.cpp
@@ -2021,7 +2021,7 @@ static int writeBlockQuote(GrowBuf &out,const char *data,int size)
out.addStr("<blockquote>\n");
}
}
- else if (level<curLevel) // quote level descreased => add end markers
+ else if (level<curLevel) // quote level decreased => add end markers
{
for (l=level;l<curLevel;l++)
{
@@ -2176,7 +2176,7 @@ static void writeFencedCodeBlock(GrowBuf &out,const char *data,const char *lng,
}
out.addStr(data+blockStart,blockEnd-blockStart);
out.addStr("\n");
- out.addStr("@endcode");
+ out.addStr("@endcode\n");
}
static QCString processQuotations(const QCString &s,int refIndent)
@@ -2470,7 +2470,7 @@ static QCString detab(const QCString &s,int &refIndent)
while (stop--) out.addChar(' ');
}
break;
- case '\n': // reset colomn counter
+ case '\n': // reset column counter
out.addChar(c);
col=0;
break;
@@ -2576,13 +2576,13 @@ QCString markdownFileNameToId(const QCString &fileName)
}
-void MarkdownFileParser::parseInput(const char *fileName,
+void MarkdownOutlineParser::parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool /*sameTranslationUnit*/,
QStrList & /*filesInSameTranslationUnit*/)
{
- std::unique_ptr<Entry> current = std::make_unique<Entry>();
+ std::shared_ptr<Entry> current = std::make_shared<Entry>();
current->lang = SrcLangExt_Markdown;
current->fileName = fileName;
current->docFile = fileName;
@@ -2660,47 +2660,14 @@ void MarkdownFileParser::parseInput(const char *fileName,
g_indentLevel=0;
}
-void MarkdownFileParser::parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt lang,
- bool isExampleBlock,
- const char *exampleName,
- FileDef *fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- const MemberDef *memberDef,
- bool showLineNumbers,
- const Definition *searchCtx,
- bool collectXRefs
- )
+void MarkdownOutlineParser::parsePrototype(const char *text)
{
- ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
- if (pIntf!=this)
+ OutlineParserInterface &intf = Doxygen::parserManager->getOutlineParser("*.cpp");
+ if (&intf!=this)
{
- pIntf->parseCode(
- codeOutIntf,scopeName,input,lang,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,showLineNumbers,
- searchCtx,collectXRefs);
+ intf.parsePrototype(text);
}
}
-void MarkdownFileParser::resetCodeParserState()
-{
- ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
- if (pIntf!=this)
- {
- pIntf->resetCodeParserState();
- }
-}
-
-void MarkdownFileParser::parsePrototype(const char *text)
-{
- ParserInterface *pIntf = Doxygen::parserManager->getParser("*.cpp");
- if (pIntf!=this)
- {
- pIntf->parsePrototype(text);
- }
-}
+//------------------------------------------------------------------------
diff --git a/src/markdown.h b/src/markdown.h
index f101e5a..3ffd155 100644
--- a/src/markdown.h
+++ b/src/markdown.h
@@ -25,38 +25,20 @@ class Entry;
QCString processMarkdown(const QCString &fileName,const int lineNr,Entry *e,const QCString &s);
QCString markdownFileNameToId(const QCString &fileName);
-class MarkdownFileParser : public ParserInterface
+class MarkdownOutlineParser : public OutlineParserInterface
{
public:
- virtual ~MarkdownFileParser() {}
+ virtual ~MarkdownOutlineParser() {}
void startTranslationUnit(const char *) {}
void finishTranslationUnit() {}
void parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList &filesInSameTranslationUnit);
- bool needsPreprocessing(const QCString &) { return FALSE; }
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt lang,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- const MemberDef *memberDef=0,
- bool showLineNumbers=TRUE,
- const Definition *searchCtx=0,
- bool collectXRefs=TRUE
- );
- void resetCodeParserState();
+ bool needsPreprocessing(const QCString &) const { return FALSE; }
void parsePrototype(const char *text);
};
-
-
#endif
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 4f44baa..85d1cdf 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -54,8 +54,8 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
MemberDefImpl(const char *defFileName,int defLine,int defColumn,
const char *type,const char *name,const char *args,
const char *excp,Protection prot,Specifier virt,bool stat,
- Relationship related,MemberType t,const ArgumentList *tal,
- const ArgumentList *al,const char *metaData);
+ Relationship related,MemberType t,const ArgumentList &tal,
+ const ArgumentList &al,const char *metaData);
virtual ~MemberDefImpl();
virtual DefType definitionType() const { return TypeMember; }
@@ -202,11 +202,11 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
virtual bool hasExamples() const;
virtual ExampleSDict *getExamples() const;
virtual bool isPrototype() const;
- virtual const ArgumentList *argumentList() const;
- virtual ArgumentList *argumentList();
- virtual const ArgumentList *declArgumentList() const;
- virtual const ArgumentList *templateArguments() const;
- virtual const QList<ArgumentList> *definitionTemplateParameterLists() const;
+ virtual const ArgumentList &argumentList() const;
+ virtual ArgumentList &argumentList();
+ virtual const ArgumentList &declArgumentList() const;
+ virtual const ArgumentList &templateArguments() const;
+ virtual const std::vector<ArgumentList> &definitionTemplateParameterLists() const;
virtual int getMemberGroupId() const;
virtual MemberGroup *getMemberGroup() const;
virtual bool fromAnonymousScope() const;
@@ -233,7 +233,7 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
virtual QCString displayName(bool=TRUE) const;
virtual QCString getDeclType() const;
virtual void getLabels(QStrList &sl,const Definition *container) const;
- virtual const ArgumentList *typeConstraints() const;
+ virtual const ArgumentList &typeConstraints() const;
virtual QCString documentation() const;
virtual QCString briefDescription(bool abbr=FALSE) const;
virtual QCString fieldType() const;
@@ -262,7 +262,7 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
virtual void makeRelated();
virtual void makeForeign();
virtual void setInheritsDocsFrom(MemberDef *md);
- virtual void setTagInfo(TagInfo *i);
+ virtual void setTagInfo(const TagInfo *i);
virtual void setArgsString(const char *as);
virtual void setReimplements(MemberDef *md);
virtual void insertReimplementedBy(MemberDef *md);
@@ -276,10 +276,10 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
virtual void setPrototype(bool p,const QCString &df,int line, int column);
virtual void setExplicitExternal(bool b,const QCString &df,int line,int column);
virtual void setDeclFile(const QCString &df,int line,int column);
- virtual void setArgumentList(ArgumentList *al);
- virtual void setDeclArgumentList(ArgumentList *al);
- virtual void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
- virtual void setTypeConstraints(ArgumentList *al);
+ virtual void setArgumentList(const ArgumentList &al);
+ virtual void setDeclArgumentList(const ArgumentList &al);
+ virtual void setDefinitionTemplateParameterLists(const std::vector<ArgumentList> &lists);
+ virtual void setTypeConstraints(const ArgumentList &al);
virtual void setType(const char *t);
virtual void setAccessorType(ClassDef *cd,const char *t);
virtual void setNamespace(NamespaceDef *nd);
@@ -324,8 +324,8 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
virtual void warnIfUndocumented() const;
virtual void warnIfUndocumentedParams() const;
virtual void detectUndocumentedParams(bool hasParamCommand,bool hasReturnCommand) const;
- virtual MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
- ArgumentList *actualArgs) const;
+ virtual MemberDef *createTemplateInstanceMember(const ArgumentList &formalArgs,
+ const ArgumentList &actualArgs) const;
virtual void findSectionsInDocumentation();
virtual void writeLink(OutputList &ol,
const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd,
@@ -367,8 +367,8 @@ class MemberDefImpl : public DefinitionImpl, public MemberDef
MemberDef *createMemberDef(const char *defFileName,int defLine,int defColumn,
const char *type,const char *name,const char *args,
const char *excp,Protection prot,Specifier virt,bool stat,
- Relationship related,MemberType t,const ArgumentList *tal,
- const ArgumentList *al,const char *metaData)
+ Relationship related,MemberType t,const ArgumentList &tal,
+ const ArgumentList &al,const char *metaData)
{
return new MemberDefImpl(defFileName,defLine,defColumn,type,name,args,excp,prot,virt,
stat,related,t,tal,al,metaData);
@@ -661,13 +661,13 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
{ return getMdAlias()->getExamples(); }
virtual bool isPrototype() const
{ return getMdAlias()->isPrototype(); }
- virtual const ArgumentList *argumentList() const
+ virtual const ArgumentList &argumentList() const
{ return getMdAlias()->argumentList(); }
- virtual const ArgumentList *declArgumentList() const
+ virtual const ArgumentList &declArgumentList() const
{ return getMdAlias()->declArgumentList(); }
- virtual const ArgumentList *templateArguments() const
+ virtual const ArgumentList &templateArguments() const
{ return getMdAlias()->templateArguments(); }
- virtual const QList<ArgumentList> *definitionTemplateParameterLists() const
+ virtual const std::vector<ArgumentList> &definitionTemplateParameterLists() const
{ return getMdAlias()->definitionTemplateParameterLists(); }
virtual int getMemberGroupId() const
{ return getMdAlias()->getMemberGroupId(); }
@@ -721,7 +721,7 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
{ return getMdAlias()->getDeclType(); }
virtual void getLabels(QStrList &sl,const Definition *container) const
{ return getMdAlias()->getLabels(sl,container); }
- virtual const ArgumentList *typeConstraints() const
+ virtual const ArgumentList &typeConstraints() const
{ return getMdAlias()->typeConstraints(); }
virtual QCString documentation() const
{ return getMdAlias()->documentation(); }
@@ -747,8 +747,10 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
{ err("non-const getNamespaceDef() called on aliased member. Please report as a bug.\n"); return 0; }
virtual GroupDef *getGroupDef()
{ err("non-const getGroupDef() called on aliased member. Please report as a bug.\n"); return 0; }
- virtual ArgumentList *argumentList()
- { err("non-const argumentList() called on aliased member. Please report as bug.\n"); return 0; }
+ virtual ArgumentList &argumentList()
+ { err("non-const argumentList() called on aliased member. Please report as bug.\n");
+ static ArgumentList dummy; return dummy;
+ }
virtual void setEnumBaseType(const QCString &type) {}
virtual void setMemberType(MemberType t) {}
@@ -772,7 +774,7 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
virtual void makeRelated() {}
virtual void makeForeign() {}
virtual void setInheritsDocsFrom(MemberDef *md) {}
- virtual void setTagInfo(TagInfo *i) {}
+ virtual void setTagInfo(const TagInfo *i) {}
virtual void setArgsString(const char *as) {}
virtual void setReimplements(MemberDef *md) {}
virtual void insertReimplementedBy(MemberDef *md) {}
@@ -786,10 +788,10 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
virtual void setPrototype(bool p,const QCString &df,int line, int column) {}
virtual void setExplicitExternal(bool b,const QCString &df,int line,int column) {}
virtual void setDeclFile(const QCString &df,int line,int column) {}
- virtual void setArgumentList(ArgumentList *al) {}
- virtual void setDeclArgumentList(ArgumentList *al) {}
- virtual void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) {}
- virtual void setTypeConstraints(ArgumentList *al) {}
+ virtual void setArgumentList(const ArgumentList &al) {}
+ virtual void setDeclArgumentList(const ArgumentList &al) {}
+ virtual void setDefinitionTemplateParameterLists(const std::vector<ArgumentList> &lists) {}
+ virtual void setTypeConstraints(const ArgumentList &al) {}
virtual void setType(const char *t) {}
virtual void setAccessorType(ClassDef *cd,const char *t) {}
virtual void setNamespace(NamespaceDef *nd) {}
@@ -821,8 +823,8 @@ class MemberDefAliasImpl : public DefinitionAliasImpl, public MemberDef
virtual void setHidden(bool b) {}
virtual void addToSearchIndex() const {}
virtual void findSectionsInDocumentation() {}
- virtual MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
- ArgumentList *actualArgs) const
+ virtual MemberDef *createTemplateInstanceMember(const ArgumentList &formalArgs,
+ const ArgumentList &actualArgs) const
{ return getMdAlias()->createTemplateInstanceMember(formalArgs,actualArgs); }
virtual void incrementFlowKeyWordCount() {}
@@ -934,10 +936,10 @@ static QCString addTemplateNames(const QCString &s,const QCString &n,const QCStr
static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const MemberDef *md)
{
- const ArgumentList *defArgList=(md->isDocsForDefinition()) ?
+ const ArgumentList &defArgList=(md->isDocsForDefinition()) ?
md->argumentList() : md->declArgumentList();
//printf("writeDefArgumentList '%s' isDocsForDefinition()=%d\n",md->name().data(),md->isDocsForDefinition());
- if (defArgList==0 || md->isProperty())
+ if (!defArgList.hasParameters() || md->isProperty())
{
return FALSE; // member has no function like argument list
}
@@ -945,23 +947,21 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
// simple argument list for tcl
if (md->getLanguage()==SrcLangExt_Tcl)
{
- if (defArgList->count()==0) return FALSE;
- ArgumentListIterator ali(*defArgList);
- Argument *a;
+ if (defArgList.empty()) return FALSE;
ol.endMemberDocName();
ol.startParameterList(FALSE);
ol.startParameterType(TRUE,0);
ol.endParameterType();
ol.startParameterName(FALSE);
- for (;(a=ali.current());++ali)
+ for (const Argument &a : defArgList)
{
- if (a->defval.isEmpty())
+ if (a.defval.isEmpty())
{
- ol.docify(a->name+" ");
+ ol.docify(a.name+" ");
}
else
{
- ol.docify("?"+a->name+"? ");
+ ol.docify("?"+a.name+"? ");
}
}
ol.endParameterName(TRUE,FALSE,FALSE);
@@ -1008,9 +1008,10 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
cName=cName.mid(il,ir-il+1);
//printf("1. cName=%s\n",cName.data());
}
- else if (scope->definitionType()==Definition::TypeClass && (dynamic_cast<const ClassDef*>(scope))->templateArguments())
+ else if (scope->definitionType()==Definition::TypeClass)
{
- cName=tempArgListToString((dynamic_cast<const ClassDef*>(scope))->templateArguments(),scope->getLanguage());
+ cName=tempArgListToString((dynamic_cast<const ClassDef*>(scope))->templateArguments(),
+ scope->getLanguage());
//printf("2. cName=%s\n",cName.data());
}
else // no template specifier
@@ -1023,10 +1024,10 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
bool first=TRUE;
bool paramTypeStarted=FALSE;
bool isDefine = md->isDefine();
- ArgumentListIterator ali(*defArgList);
- Argument *a=ali.current();
- while (a)
+ auto alIt = defArgList.begin();
+ while (alIt!=defArgList.end())
{
+ Argument a = *alIt;
if (isDefine || first)
{
ol.startParameterType(first,0);
@@ -1038,30 +1039,30 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
}
}
QRegExp re(")("),res("(.*\\*");
- int vp=a->type.find(re);
- int wp=a->type.find(res);
+ int vp=a.type.find(re);
+ int wp=a.type.find(res);
// use the following to put the function pointer type before the name
bool hasFuncPtrType=FALSE;
- if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
+ if (!a.attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
{
- ol.docify(a->attrib+" ");
+ ol.docify(a.attrib+" ");
}
if (hasFuncPtrType) // argument type is a function pointer
{
- //printf("a->type='%s' a->name='%s'\n",a->type.data(),a->name.data());
- QCString n=a->type.left(vp);
- if (hasFuncPtrType) n=a->type.left(wp);
+ //printf("a.type='%s' a.name='%s'\n",a.type.data(),a.name.data());
+ QCString n=a.type.left(vp);
+ if (hasFuncPtrType) n=a.type.left(wp);
if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n);
}
else // non-function pointer type
{
- QCString n=a->type;
+ QCString n=a.type;
if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
- if (a->type!="...")
+ if (a.type!="...")
{
if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),md,n);
@@ -1074,13 +1075,13 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
ol.endParameterType();
paramTypeStarted=FALSE;
}
- ol.startParameterName(defArgList->count()<2);
+ ol.startParameterName(defArgList.size()<2);
}
if (hasFuncPtrType)
{
- ol.docify(a->type.mid(wp,vp-wp));
+ ol.docify(a.type.mid(wp,vp-wp));
}
- if (!a->name.isEmpty() || a->type=="...") // argument has a name
+ if (!a.name.isEmpty() || a.type=="...") // argument has a name
{
//if (!hasFuncPtrType)
//{
@@ -1096,7 +1097,7 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
ol.enable(OutputGenerator::Man);
if (latexOn) ol.enable(OutputGenerator::Latex);
if (docbookOn) ol.enable(OutputGenerator::Docbook);
- if (a->name.isEmpty()) ol.docify(a->type); else ol.docify(a->name);
+ if (a.name.isEmpty()) ol.docify(a.type); else ol.docify(a.name);
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::Docbook);
@@ -1105,19 +1106,19 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
if (latexOn) ol.enable(OutputGenerator::Latex);
if (docbookOn) ol.enable(OutputGenerator::Docbook);
}
- if (!a->array.isEmpty())
+ if (!a.array.isEmpty())
{
- ol.docify(a->array);
+ ol.docify(a.array);
}
if (hasFuncPtrType) // write the part of the argument type
// that comes after the name
{
linkifyText(TextGeneratorOLImpl(ol),scope,md->getBodyDef(),
- md,a->type.right(a->type.length()-vp));
+ md,a.type.right(a.type.length()-vp));
}
- if (!a->defval.isEmpty()) // write the default value
+ if (!a.defval.isEmpty()) // write the default value
{
- QCString n=a->defval;
+ QCString n=a.defval;
if (!cName.isEmpty()) n=addTemplateNames(n,scope->name(),cName);
ol.docify(" = ");
@@ -1126,19 +1127,19 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
ol.endTypewriter();
}
- ++ali;
- a=ali.current();
- if (a)
+ ++alIt;
+ if (alIt!=defArgList.end())
{
+ a = *alIt;
if (!md->isObjCMethod()) ol.docify(", "); // there are more arguments
if (!isDefine)
{
QCString key;
- if (md->isObjCMethod() && a->attrib.length()>=2)
+ if (md->isObjCMethod() && a.attrib.length()>=2)
{
- //printf("Found parameter keyword %s\n",a->attrib.data());
+ //printf("Found parameter keyword %s\n",a.attrib.data());
// strip [ and ]
- key=a->attrib.mid(1,a->attrib.length()-2);
+ key=a.attrib.mid(1,a.attrib.length()-2);
if (key!=",") key+=":"; // for normal keywords add colon
}
ol.endParameterName(FALSE,FALSE,!md->isObjCMethod());
@@ -1165,36 +1166,36 @@ static bool writeDefArgumentList(OutputList &ol,const Definition *scope,const Me
if (htmlOn) ol.enable(OutputGenerator::Html);
if (latexOn) ol.enable(OutputGenerator::Latex);
if (docbookOn) ol.enable(OutputGenerator::Docbook);
- if (first) ol.startParameterName(defArgList->count()<2);
- ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
+ if (first) ol.startParameterName(defArgList.size()<2);
+ ol.endParameterName(TRUE,defArgList.size()<2,!md->isObjCMethod());
ol.popGeneratorState();
if (md->extraTypeChars())
{
ol.docify(md->extraTypeChars());
}
- if (defArgList->constSpecifier)
+ if (defArgList.constSpecifier)
{
ol.docify(" const");
}
- if (defArgList->volatileSpecifier)
+ if (defArgList.volatileSpecifier)
{
ol.docify(" volatile");
}
- if (defArgList->refQualifier==RefQualifierLValue)
+ if (defArgList.refQualifier==RefQualifierLValue)
{
ol.docify(" &");
}
- else if (defArgList->refQualifier==RefQualifierRValue)
+ else if (defArgList.refQualifier==RefQualifierRValue)
{
ol.docify(" &&");
}
- if (!defArgList->trailingReturnType.isEmpty())
+ if (!defArgList.trailingReturnType.isEmpty())
{
linkifyText(TextGeneratorOLImpl(ol), // out
scope, // scope
md->getBodyDef(), // fileScope
md, // self
- defArgList->trailingReturnType, // text
+ defArgList.trailingReturnType, // text
FALSE // autoBreak
);
@@ -1264,24 +1265,22 @@ static void writeExceptionList(OutputList &ol, const ClassDef *cd, const MemberD
}
}
-static void writeTemplatePrefix(OutputList &ol,const ArgumentList *al)
+static void writeTemplatePrefix(OutputList &ol,const ArgumentList &al)
{
ol.docify("template<");
- ArgumentListIterator ali(*al);
- Argument *a = ali.current();
- while (a)
+ for (auto it = al.begin(); it!=al.end();)
{
- ol.docify(a->type);
+ Argument a = *it;
+ ol.docify(a.type);
ol.docify(" ");
- ol.docify(a->name);
- if (a->defval.length()!=0)
+ ol.docify(a.name);
+ if (a.defval.length()!=0)
{
ol.docify(" = ");
- ol.docify(a->defval);
+ ol.docify(a.defval);
}
- ++ali;
- a=ali.current();
- if (a) ol.docify(", ");
+ ++it;
+ if (it!=al.end()) ol.docify(", ");
}
ol.docify("> ");
}
@@ -1297,36 +1296,36 @@ class MemberDefImpl::IMPL
~IMPL();
void init(Definition *def,const char *t,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,
- MemberType mt,const ArgumentList *tal,
- const ArgumentList *al,const char *meta
+ MemberType mt,const ArgumentList &tal,
+ const ArgumentList &al,const char *meta
);
- ClassDef *classDef; // member of or related to
- FileDef *fileDef; // member of file definition
- NamespaceDef *nspace; // the namespace this member is in.
+ ClassDef *classDef = 0; // member of or related to
+ FileDef *fileDef = 0; // member of file definition
+ NamespaceDef *nspace = 0; // the namespace this member is in.
- MemberDef *enumScope; // the enclosing scope, if this is an enum field
- bool livesInsideEnum;
- const MemberDef *annEnumType; // the anonymous enum that is the type of this member
- MemberList *enumFields; // enumeration fields
+ MemberDef *enumScope = 0; // the enclosing scope, if this is an enum field
+ bool livesInsideEnum = false;
+ const MemberDef *annEnumType = 0; // the anonymous enum that is the type of this member
+ MemberList *enumFields = 0; // enumeration fields
- MemberDef *redefines; // the members that this member redefines
- MemberList *redefinedBy; // the list of members that redefine this one
+ MemberDef *redefines = 0; // the members that this member redefines
+ MemberList *redefinedBy = 0; // the list of members that redefine this one
- MemberDef *memDef; // member definition for this declaration
- MemberDef *memDec; // member declaration for this definition
- ClassDef *relatedAlso; // points to class marked by relatedAlso
+ MemberDef *memDef = 0; // member definition for this declaration
+ MemberDef *memDec = 0; // member declaration for this definition
+ ClassDef *relatedAlso = 0; // points to class marked by relatedAlso
- ExampleSDict *exampleSDict; // a dictionary of all examples for quick access
+ ExampleSDict *exampleSDict = 0; // a dictionary of all examples for quick access
QCString type; // return actual type
QCString accessorType; // return type that tell how to get to this member
- ClassDef *accessorClass; // class that this member accesses (for anonymous types)
+ ClassDef *accessorClass = 0; // class that this member accesses (for anonymous types)
QCString args; // function arguments/variable array specifiers
QCString def; // member definition in code (fully qualified name)
QCString anc; // HTML anchor name
- Specifier virt; // normal/virtual/pure virtual
- Protection prot; // protection type [Public/Protected/Private]
+ Specifier virt = Normal; // normal/virtual/pure virtual
+ Protection prot = Public; // protection type [Public/Protected/Private]
QCString decl; // member declaration in class
QCString bitfields; // struct member bitfields
@@ -1336,21 +1335,21 @@ class MemberDefImpl::IMPL
QCString initializer; // initializer
QCString extraTypeChars; // extra type info found after the argument list
QCString enumBaseType; // base type of the enum (C++11)
- int initLines; // number of lines in the initializer
+ int initLines = 0; // number of lines in the initializer
- uint64 memSpec; // The specifiers present for this member
- MemberType mtype; // returns the kind of member
- int maxInitLines; // when the initializer will be displayed
- int userInitLines; // result of explicit \hideinitializer or \showinitializer
- MemberDef *annMemb;
+ uint64 memSpec = 0; // The specifiers present for this member
+ MemberType mtype = MemberType_Define; // returns the kind of member
+ int maxInitLines = 0; // when the initializer will be displayed
+ int userInitLines = 0; // result of explicit \hideinitializer or \showinitializer
+ MemberDef *annMemb = 0;
- ArgumentList *defArgList; // argument list of this member definition
- ArgumentList *declArgList; // argument list of this member declaration
+ ArgumentList defArgList; // argument list of this member definition
+ ArgumentList declArgList; // argument list of this member declaration
- ArgumentList *tArgList; // template argument list of function template
- ArgumentList *typeConstraints; // type constraints for template parameters
+ ArgumentList tArgList; // template argument list of function template
+ ArgumentList typeConstraints; // type constraints for template parameters
MemberDef *templateMaster;
- QList<ArgumentList> *defTmpArgLists; // lists of template argument lists
+ std::vector<ArgumentList> defTmpArgLists; // lists of template argument lists
// (for template functions in nested template classes)
QCString metaData; // Slice metadata.
@@ -1359,19 +1358,19 @@ class MemberDefImpl::IMPL
// as its type then this is computed by
// getClassDefOfAnonymousType() and
// cached here.
- SDict<MemberList> *classSectionSDict; // not accessible
+ SDict<MemberList> *classSectionSDict = 0; // not accessible
- const MemberDef *groupAlias; // Member containing the definition
- int grpId; // group id
- MemberGroup *memberGroup; // group's member definition
- GroupDef *group; // group in which this member is in
+ const MemberDef *groupAlias = 0; // Member containing the definition
+ int grpId = 0; // group id
+ MemberGroup *memberGroup = 0; // group's member definition
+ GroupDef *group = 0; // group in which this member is in
Grouping::GroupPri_t grouppri; // priority of this definition
QCString groupFileName; // file where this grouping was defined
- int groupStartLine; // line " " " " "
- MemberDef *groupMember;
+ int groupStartLine = 0; // line " " " " "
+ MemberDef *groupMember = 0;
- bool isTypedefValCached;
- const ClassDef *cachedTypedefValue;
+ bool isTypedefValCached = false;
+ const ClassDef *cachedTypedefValue = 0;
QCString cachedTypedefTemplSpec;
QCString cachedResolvedType;
@@ -1381,52 +1380,47 @@ class MemberDefImpl::IMPL
//QCString inbodyDocs;
// documentation inheritance
- MemberDef *docProvider;
+ MemberDef *docProvider = 0;
// to store the output file base from tag files
QCString explicitOutputFileBase;
// objective-c
- bool implOnly; // function found in implementation but not
- // in the interface
- mutable bool hasDocumentedParams;
- mutable bool hasDocumentedReturnType;
- bool isDMember;
- Relationship related; // relationship of this to the class
- bool stat; // is it a static function?
- bool proto; // is it a prototype;
- bool docEnumValues; // is an enum with documented enum values.
-
- mutable bool annScope; // member is part of an anonymous scope
- mutable bool annUsed; // ugly: needs to be mutable to allow setAnonymousUsed to act as a
- // const member.
- bool hasCallGraph;
- bool hasCallerGraph;
- bool hasReferencedByRelation;
- bool hasReferencesRelation;
- bool explExt; // member was explicitly declared external
- bool tspec; // member is a template specialization
- bool groupHasDocs; // true if the entry that caused the grouping was documented
- bool docsForDefinition; // TRUE => documentation block is put before
- // definition.
- // FALSE => block is put before declaration.
- ClassDef *category;
- MemberDef *categoryRelation;
+ bool implOnly = false; // function found in implementation but not
+ // in the interface
+ mutable bool hasDocumentedParams = false;
+ mutable bool hasDocumentedReturnType = false;
+ bool isDMember = false;
+ Relationship related = Member; // relationship of this to the class
+ bool stat = false; // is it a static function?
+ bool proto = false; // is it a prototype?
+ bool docEnumValues = false; // is an enum with documented enum values.
+
+ mutable bool annScope = false; // member is part of an anonymous scope
+ mutable bool annUsed = false; // ugly: needs to be mutable to allow setAnonymousUsed to act as a
+ // const member.
+ bool hasCallGraph = false;
+ bool hasCallerGraph = false;
+ bool hasReferencedByRelation = false;
+ bool hasReferencesRelation = false;
+ bool explExt = false; // member was explicitly declared external
+ bool tspec = false; // member is a template specialization
+ bool groupHasDocs = false; // true if the entry that caused the grouping was documented
+ bool docsForDefinition = false; // TRUE => documentation block is put before
+ // definition.
+ // FALSE => block is put before declaration.
+ ClassDef *category = 0;
+ MemberDef *categoryRelation = 0;
QCString declFileName;
- int declLine;
- int declColumn;
- int numberOfFlowKW;
+ int declLine = 0;
+ int declColumn = 0;
+ int numberOfFlowKW = 0;
};
MemberDefImpl::IMPL::IMPL() :
enumFields(0),
redefinedBy(0),
exampleSDict(0),
- defArgList(0),
- declArgList(0),
- tArgList(0),
- typeConstraints(0),
- defTmpArgLists(0),
classSectionSDict(0),
category(0),
categoryRelation(0),
@@ -1441,19 +1435,14 @@ MemberDefImpl::IMPL::~IMPL()
delete redefinedBy;
delete exampleSDict;
delete enumFields;
- delete defArgList;
- delete tArgList;
- delete typeConstraints;
- delete defTmpArgLists;
delete classSectionSDict;
- delete declArgList;
}
void MemberDefImpl::IMPL::init(Definition *def,
const char *t,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,
- MemberType mt,const ArgumentList *tal,
- const ArgumentList *al,const char *meta
+ MemberType mt,const ArgumentList &tal,
+ const ArgumentList &al,const char *meta
)
{
classDef=0;
@@ -1471,7 +1460,6 @@ void MemberDefImpl::IMPL::init(Definition *def,
enumFields=0;
enumScope=0;
livesInsideEnum=FALSE;
- defTmpArgLists=0;
hasCallGraph = FALSE;
hasCallerGraph = FALSE;
hasReferencedByRelation = FALSE;
@@ -1508,36 +1496,17 @@ void MemberDefImpl::IMPL::init(Definition *def,
userInitLines=-1;
docEnumValues=FALSE;
// copy function template arguments (if any)
- if (tal)
- {
- tArgList = tal->deepCopy();
- }
- else
- {
- tArgList=0;
- }
+ tArgList = tal;
//printf("new member al=%p\n",al);
// copy function definition arguments (if any)
- if (al)
- {
- defArgList = al->deepCopy();
- }
- else
- {
- defArgList=0;
- }
+ defArgList = al;
// convert function declaration arguments (if any)
if (!args.isEmpty())
{
- declArgList = new ArgumentList;
stringToArgumentList(args,declArgList,&extraTypeChars);
//printf("setDeclArgList %s to %s const=%d\n",args.data(),
// argListToString(declArgList).data(),declArgList->constSpecifier);
}
- else
- {
- declArgList = 0;
- }
metaData = meta;
templateMaster = 0;
classSectionSDict = 0;
@@ -1584,7 +1553,7 @@ void MemberDefImpl::IMPL::init(Definition *def,
MemberDefImpl::MemberDefImpl(const char *df,int dl,int dc,
const char *t,const char *na,const char *a,const char *e,
Protection p,Specifier v,bool s,Relationship r,MemberType mt,
- const ArgumentList *tal,const ArgumentList *al,const char *meta
+ const ArgumentList &tal,const ArgumentList &al,const char *meta
) : DefinitionImpl(df,dl,dc,removeRedundantWhiteSpace(na))
{
//printf("MemberDefImpl::MemberDef(%s)\n",na);
@@ -1613,12 +1582,7 @@ MemberDef *MemberDefImpl::deepCopy() const
result->m_impl->redefinedBy= 0;
result->m_impl->exampleSDict=0;
result->m_impl->enumFields=0;
- result->m_impl->defArgList=0;
- result->m_impl->tArgList=0;
- result->m_impl->typeConstraints=0;
- result->m_impl->defTmpArgLists=0;
result->m_impl->classSectionSDict=0;
- result->m_impl->declArgList=0;
// replace pointers owned by the object by deep copies
if (m_impl->redefinedBy)
{
@@ -1647,18 +1611,9 @@ MemberDef *MemberDefImpl::deepCopy() const
result->insertEnumField(md);
}
}
- if (m_impl->defArgList)
- {
- result->m_impl->defArgList = m_impl->defArgList->deepCopy();
- }
- if (m_impl->tArgList)
- {
- result->m_impl->tArgList = m_impl->tArgList->deepCopy();
- }
- if (m_impl->typeConstraints)
- {
- result->m_impl->typeConstraints = m_impl->typeConstraints->deepCopy();
- }
+ result->m_impl->defArgList = m_impl->defArgList;
+ result->m_impl->tArgList = m_impl->tArgList;
+ result->m_impl->typeConstraints = m_impl->typeConstraints;
result->setDefinitionTemplateParameterLists(m_impl->defTmpArgLists);
if (m_impl->classSectionSDict)
{
@@ -1670,10 +1625,7 @@ MemberDef *MemberDefImpl::deepCopy() const
result->m_impl->classSectionSDict->append(it.currentKey(),ml);
}
}
- if (m_impl->declArgList)
- {
- result->m_impl->declArgList = m_impl->declArgList->deepCopy();
- }
+ result->m_impl->declArgList = m_impl->declArgList;
return result;
}
@@ -1819,7 +1771,7 @@ QCString MemberDefImpl::getOutputFileBase() const
return baseName;
}
}
- else if (nspace && nspace->isLinkableInProject())
+ else if (nspace)
{
baseName=nspace->getOutputFileBase();
}
@@ -1925,7 +1877,7 @@ void MemberDefImpl::_computeLinkableInProject()
m_isLinkableCached = templateMaster()->isLinkableInProject() ? 2 : 1;
return;
}
- if (name().isEmpty() || name().at(0)=='@')
+ if (isAnonymous())
{
//printf("name invalid\n");
m_isLinkableCached = 1; // not a valid or a dummy name
@@ -2033,13 +1985,9 @@ bool MemberDefImpl::isLinkable() const
}
-void MemberDefImpl::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
+void MemberDefImpl::setDefinitionTemplateParameterLists(const std::vector<ArgumentList> &lists)
{
- if (lists)
- {
- if (m_impl->defTmpArgLists) delete m_impl->defTmpArgLists;
- m_impl->defTmpArgLists = copyArgumentLists(lists);
- }
+ m_impl->defTmpArgLists = lists;
}
void MemberDefImpl::writeLink(OutputList &ol,
@@ -2225,9 +2173,8 @@ bool MemberDefImpl::isBriefSectionVisible() const
// hide default constructors or destructors (no args) without
// documentation
bool visibleIfNotDefaultCDTor = !(cOrDTor &&
- m_impl->defArgList &&
- (m_impl->defArgList->isEmpty() ||
- m_impl->defArgList->getFirst()->type == "void"
+ (m_impl->defArgList.empty() ||
+ m_impl->defArgList.front().type == "void"
) &&
!hasDocs
);
@@ -2310,10 +2257,10 @@ void MemberDefImpl::writeDeclaration(OutputList &ol,
ol.startMemberDeclaration();
// start a new member declaration
- bool isAnonymous = annoClassDef || m_impl->annMemb || m_impl->annEnumType;
+ bool isAnonType = annoClassDef || m_impl->annMemb || m_impl->annEnumType;
///printf("startMemberItem for %s\n",name().data());
ol.startMemberItem(anchor(),
- isAnonymous ? 1 : m_impl->tArgList ? 3 : 0,
+ isAnonType ? 1 : !m_impl->tArgList.empty() ? 3 : 0,
inheritId
);
@@ -2352,11 +2299,11 @@ void MemberDefImpl::writeDeclaration(OutputList &ol,
}
// *** write template lists
- if (m_impl->tArgList && getLanguage()==SrcLangExt_Cpp)
+ if (m_impl->tArgList.hasParameters() && getLanguage()==SrcLangExt_Cpp)
{
- if (!isAnonymous) ol.startMemberTemplateParams();
+ if (!isAnonType) ol.startMemberTemplateParams();
writeTemplatePrefix(ol,m_impl->tArgList);
- if (!isAnonymous) ol.endMemberTemplateParams(anchor(),inheritId);
+ if (!isAnonType) ol.endMemberTemplateParams(anchor(),inheritId);
}
// *** write type
@@ -2396,7 +2343,7 @@ void MemberDefImpl::writeDeclaration(OutputList &ol,
QCString varName=ltype.right(ltype.length()-ir).stripWhiteSpace();
//printf(">>>>>> ltype='%s' varName='%s'\n",ltype.data(),varName.data());
ol.docify("}");
- if (varName.isEmpty() && (name().isEmpty() || name().at(0)=='@'))
+ if (varName.isEmpty() && isAnonymous())
{
ol.docify(";");
}
@@ -2474,17 +2421,17 @@ void MemberDefImpl::writeDeclaration(OutputList &ol,
}
else
{
- ol.insertMemberAlign(m_impl->tArgList!=0);
+ ol.insertMemberAlign(m_impl->tArgList.hasParameters());
}
// *** write name
- if (!name().isEmpty() && name().at(0)!='@') // hide anonymous stuff
+ if (!isAnonymous()) // hide anonymous stuff
{
static bool extractPrivate = Config_getBool(EXTRACT_PRIVATE);
static bool extractPrivateVirtual = Config_getBool(EXTRACT_PRIV_VIRTUAL);
static bool extractStatic = Config_getBool(EXTRACT_STATIC);
//printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d hasDocumentation=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable(),hasDocumentation());
- if (!(name().isEmpty() || name().at(0)=='@') && // name valid
+ if (!name().isEmpty() && // name valid
(hasDocumentation() || isReference()) && // has docs
!(m_impl->prot==Private && !extractPrivate && (m_impl->virt==Normal || !extractPrivateVirtual) && m_impl->mtype!=MemberType_Friend) && // hidden due to protection
!(isStatic() && getClassDef()==0 && !extractStatic) // hidden due to static-ness
@@ -2532,7 +2479,7 @@ void MemberDefImpl::writeDeclaration(OutputList &ol,
}
// add to index
- if (isEnumerate() && name().at(0)=='@')
+ if (isEnumerate() && isAnonymous())
{
// don't add to index
}
@@ -2754,7 +2701,7 @@ bool MemberDefImpl::isDetailedSectionLinkable() const
//(initLines>0 && initLines<maxInitLines) ||
(hasMultiLineInitializer() && !hideUndocMembers) ||
// has one or more documented arguments
- (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()) ||
+ (m_impl->defArgList.hasDocumentation()) ||
// is an attribute or property - need to display that tag
(m_impl->memSpec & (Entry::Attribute|Entry::Property)) ||
// has user comments
@@ -2930,7 +2877,8 @@ void MemberDefImpl::_writeCallGraph(OutputList &ol) const
DotCallGraph callGraph(this,FALSE);
if (callGraph.isTooBig())
{
- warn_uncond("Call graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
+ warn_uncond("Call graph for '%s' not generated, too many nodes (%d), threshold is %d. Consider increasing DOT_GRAPH_MAX_NODES.\n",
+ qPrint(qualifiedName()), callGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
}
else if (!callGraph.isTrivial())
{
@@ -2953,7 +2901,8 @@ void MemberDefImpl::_writeCallerGraph(OutputList &ol) const
DotCallGraph callerGraph(this, TRUE);
if (callerGraph.isTooBig())
{
- warn_uncond("Caller graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",qPrint(qualifiedName()));
+ warn_uncond("Caller graph for '%s' not generated, too many nodes (%d), threshold is %d. Consider increasing DOT_GRAPH_MAX_NODES.\n",
+ qPrint(qualifiedName()), callerGraph.numNodes(), Config_getInt(DOT_GRAPH_MAX_NODES));
}
else if (!callerGraph.isTrivial())
{
@@ -3169,7 +3118,7 @@ void MemberDefImpl::_writeExamples(OutputList &ol) const
void MemberDefImpl::_writeTypeConstraints(OutputList &ol) const
{
- if (m_impl->typeConstraints)
+ if (m_impl->typeConstraints.hasParameters())
{
writeTypeConstraints(ol,this,m_impl->typeConstraints);
}
@@ -3255,7 +3204,7 @@ QCString MemberDefImpl::displayDefinition() const
QCString title = name();
if (isEnumerate())
{
- if (title.at(0)=='@')
+ if (isAnonymous())
{
ldef = title = "anonymous enum";
if (!m_impl->enumBaseType.isEmpty())
@@ -3274,7 +3223,7 @@ QCString MemberDefImpl::displayDefinition() const
}
else if (isEnumValue())
{
- if (ldef.at(0)=='@')
+ if (isAnonymous())
{
ldef=ldef.mid(2);
}
@@ -3460,7 +3409,7 @@ void MemberDefImpl::writeDocumentation(const MemberList *ml,
ldef=ldef.mid(2);
}
}
- else if (isFunction())
+ else if (isFunction() && !isObjCMethod())
{
title += "()";
}
@@ -3546,14 +3495,12 @@ void MemberDefImpl::writeDocumentation(const MemberList *ml,
{
bool first=TRUE;
SrcLangExt lang = getLanguage();
- if (m_impl->defTmpArgLists && lang==SrcLangExt_Cpp)
+ if (!m_impl->defTmpArgLists.empty() && lang==SrcLangExt_Cpp)
// definition has explicit template parameter declarations
{
- QListIterator<ArgumentList> ali(*m_impl->defTmpArgLists);
- ArgumentList *tal;
- for (ali.toFirst();(tal=ali.current());++ali)
+ for (const ArgumentList &tal : m_impl->defTmpArgLists)
{
- if (tal->count()>0)
+ if (!tal.empty())
{
if (!first) ol.docify(" ");
ol.startMemberDocPrefixItem();
@@ -3567,14 +3514,9 @@ void MemberDefImpl::writeDocumentation(const MemberList *ml,
{
if (cd && lang==SrcLangExt_Cpp && !isTemplateSpecialization())
{
- QList<ArgumentList> tempParamLists;
- cd->getTemplateParameterLists(tempParamLists);
- //printf("#tempParamLists=%d\n",tempParamLists.count());
- QListIterator<ArgumentList> ali(tempParamLists);
- ArgumentList *tal;
- for (ali.toFirst();(tal=ali.current());++ali)
+ for (const ArgumentList &tal : cd->getTemplateParameterLists())
{
- if (tal->count()>0)
+ if (!tal.empty())
{
if (!first) ol.docify(" ");
ol.startMemberDocPrefixItem();
@@ -3583,7 +3525,7 @@ void MemberDefImpl::writeDocumentation(const MemberList *ml,
}
}
}
- if (m_impl->tArgList && lang==SrcLangExt_Cpp) // function template prefix
+ if (m_impl->tArgList.hasParameters() && lang==SrcLangExt_Cpp) // function template prefix
{
ol.startMemberDocPrefixItem();
writeTemplatePrefix(ol,m_impl->tArgList);
@@ -3765,17 +3707,17 @@ void MemberDefImpl::writeDocumentation(const MemberList *ml,
else
ol.parseText(theTranslator->trInitialValue());
ol.endBold();
- ParserInterface *pIntf = Doxygen::parserManager->getParser(getDefFileExtension());
- pIntf->resetCodeParserState();
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(getDefFileExtension());
+ intf.resetCodeParserState();
ol.startCodeFragment();
- pIntf->parseCode(ol,scopeName,m_impl->initializer,lang,FALSE,0,const_cast<FileDef*>(getFileDef()),
+ intf.parseCode(ol,scopeName,m_impl->initializer,lang,FALSE,0,const_cast<FileDef*>(getFileDef()),
-1,-1,TRUE,this,FALSE,this);
ol.endCodeFragment();
}
QCString brief = briefDescription();
QCString detailed = documentation();
- ArgumentList *docArgList = m_impl->defArgList;
+ ArgumentList &docArgList = m_impl->defArgList;
if (m_impl->templateMaster)
{
brief = m_impl->templateMaster->briefDescription();
@@ -3832,18 +3774,16 @@ void MemberDefImpl::writeDocumentation(const MemberList *ml,
//printf("***** defArgList=%p name=%s docs=%s hasDocs=%d\n",
// defArgList,
// defArgList?defArgList->hasDocumentation():-1);
- if (docArgList!=0 && docArgList->hasDocumentation())
+ if (docArgList.hasDocumentation())
{
QCString paramDocs;
- ArgumentListIterator ali(*docArgList);
- Argument *a;
- // convert the parameter documentation into a list of @param commands
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : docArgList)
{
- if (a->hasDocumentation())
+ if (a.hasDocumentation())
{
- QCString direction = extractDirection(a->docs);
- paramDocs+="@param"+direction+" "+a->name+" "+a->docs;
+ QCString docsWithoutDir = a.docs;
+ QCString direction = extractDirection(docsWithoutDir);
+ paramDocs+="@param"+direction+" "+a.name+" "+a.docs;
}
}
// feed the result to the documentation parser
@@ -4146,41 +4086,37 @@ void MemberDefImpl::detectUndocumentedParams(bool hasParamCommand,bool hasReturn
}
else if (!m_impl->hasDocumentedParams)
{
- const ArgumentList *al = argumentList();
- const ArgumentList *declAl = declArgumentList();
+ const ArgumentList &al = argumentList();
+ const ArgumentList &declAl = declArgumentList();
bool allDoc=TRUE; // no parameter => all parameters are documented
if ( // member has parameters
- al!=0 && // but the member has a parameter list
- al->count()>0 // with at least one parameter (that is not void)
+ al.hasParameters() // with at least one parameter (that is not void)
)
{
- ArgumentListIterator ali(*al);
- Argument *a;
-
// see if all parameters have documentation
- for (ali.toFirst();(a=ali.current()) && allDoc;++ali)
+ for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
{
- if (!a->name.isEmpty() && a->type!="void" &&
- !(isPython && (a->name=="self" || a->name=="cls"))
+ Argument a = *it;
+ if (!a.name.isEmpty() && a.type!="void" &&
+ !(isPython && (a.name=="self" || a.name=="cls"))
)
{
- allDoc = !a->docs.isEmpty();
+ allDoc = !a.docs.isEmpty();
}
//printf("a->type=%s a->name=%s doc=%s\n",
// a->type.data(),a->name.data(),a->docs.data());
}
- if (!allDoc && declAl!=0) // try declaration arguments as well
+ if (!allDoc && declAl.empty()) // try declaration arguments as well
{
allDoc=TRUE;
- ArgumentListIterator ali(*declAl);
- Argument *a;
- for (ali.toFirst();(a=ali.current()) && allDoc;++ali)
+ for (auto it = al.begin(); it!=al.end() && allDoc; ++it)
{
- if (!a->name.isEmpty() && a->type!="void" &&
- !(isPython && (a->name=="self" || a->name=="cls"))
+ Argument a = *it;
+ if (!a.name.isEmpty() && a.type!="void" &&
+ !(isPython && (a.name=="self" || a.name=="cls"))
)
{
- allDoc = !a->docs.isEmpty();
+ allDoc = !a.docs.isEmpty();
}
//printf("a->name=%s doc=%s\n",a->name.data(),a->docs.data());
}
@@ -4269,14 +4205,14 @@ bool MemberDefImpl::isDocumentedFriendClass() const
bool MemberDefImpl::isDeleted() const
{
- return m_impl->defArgList && m_impl->defArgList->isDeleted;
+ return m_impl->defArgList.isDeleted;
}
bool MemberDefImpl::hasDocumentation() const
{
return DefinitionImpl::hasDocumentation() ||
(m_impl->mtype==MemberType_Enumeration && m_impl->docEnumValues) || // has enum values
- (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments
+ (m_impl->defArgList.hasDocumentation()); // has doc arguments
}
#if 0
@@ -4344,10 +4280,10 @@ void MemberDefImpl::setAnchor()
// include number of template arguments as well,
// to distinguish between two template
// specializations that only differ in the template parameters.
- if (m_impl->tArgList)
+ if (m_impl->tArgList.hasParameters())
{
char buf[20];
- qsnprintf(buf,20,"%d:",m_impl->tArgList->count());
+ qsnprintf(buf,20,"%d:",(int)m_impl->tArgList.size());
buf[19]='\0';
memAnchor.prepend(buf);
}
@@ -4356,7 +4292,6 @@ void MemberDefImpl::setAnchor()
uchar md5_sig[16];
QCString sigStr(33);
MD5Buffer((const unsigned char *)memAnchor.data(),memAnchor.length(),md5_sig);
- //printf("memAnchor=%s\n",memAnchor.data());
MD5SigToString(md5_sig,sigStr.rawData(),33);
m_impl->anc = "a"+sigStr;
}
@@ -4405,23 +4340,21 @@ void MemberDefImpl::setNamespace(NamespaceDef *nd)
}
MemberDef *MemberDefImpl::createTemplateInstanceMember(
- ArgumentList *formalArgs,ArgumentList *actualArgs) const
+ const ArgumentList &formalArgs,const ArgumentList &actualArgs) const
{
//printf(" Member %s %s %s\n",typeString(),name().data(),argsString());
- ArgumentList *actualArgList = 0;
- if (m_impl->defArgList)
+ ArgumentList actualArgList;
+ if (!m_impl->defArgList.empty())
{
- actualArgList = m_impl->defArgList->deepCopy();
+ actualArgList = m_impl->defArgList;
// replace formal arguments with actuals
- ArgumentListIterator ali(*actualArgList);
- Argument *arg;
- for (;(arg=ali.current());++ali)
+ for (Argument &arg : actualArgList)
{
- arg->type = substituteTemplateArgumentsInString(arg->type,formalArgs,actualArgs);
+ arg.type = substituteTemplateArgumentsInString(arg.type,formalArgs,actualArgs);
}
- actualArgList->trailingReturnType =
- substituteTemplateArgumentsInString(actualArgList->trailingReturnType,formalArgs,actualArgs);
+ actualArgList.trailingReturnType =
+ substituteTemplateArgumentsInString(actualArgList.trailingReturnType,formalArgs,actualArgs);
}
QCString methodName=name();
@@ -4436,7 +4369,8 @@ MemberDef *MemberDefImpl::createTemplateInstanceMember(
methodName,
substituteTemplateArgumentsInString(m_impl->args,formalArgs,actualArgs),
m_impl->exception, m_impl->prot,
- m_impl->virt, m_impl->stat, m_impl->related, m_impl->mtype, 0, 0, ""
+ m_impl->virt, m_impl->stat, m_impl->related, m_impl->mtype,
+ ArgumentList(), ArgumentList(), ""
);
imd->setArgumentList(actualArgList);
imd->setDefinition(substituteTemplateArgumentsInString(m_impl->def,formalArgs,actualArgs));
@@ -4528,14 +4462,11 @@ void MemberDefImpl::addListReference(Definition *)
memArgs = argsString();
}
}
- QList<ListItemInfo> *xrefItems = xrefListItems();
- if (xrefItems)
- {
- addRefItem(xrefItems,
+ const std::vector<ListItemInfo> &xrefItems = xrefListItems();
+ addRefItem(xrefItems,
qualifiedName()+argsString(), // argsString is needed for overloaded functions (see bug 609624)
memLabel,
getOutputFileBase()+"#"+anchor(),memName,memArgs,pd);
- }
}
const MemberList *MemberDefImpl::getSectionList() const
@@ -4879,30 +4810,19 @@ void MemberDefImpl::writeEnumDeclaration(OutputList &typeDecl,
}
}
-void MemberDefImpl::setArgumentList(ArgumentList *al)
+void MemberDefImpl::setArgumentList(const ArgumentList &al)
{
- if (m_impl->defArgList) delete m_impl->defArgList;
m_impl->defArgList = al;
}
-void MemberDefImpl::setDeclArgumentList(ArgumentList *al)
+void MemberDefImpl::setDeclArgumentList(const ArgumentList &al)
{
- if (m_impl->declArgList) delete m_impl->declArgList;
m_impl->declArgList = al;
}
-void MemberDefImpl::setTypeConstraints(ArgumentList *al)
+void MemberDefImpl::setTypeConstraints(const ArgumentList &al)
{
- if (al==0) return;
- if (m_impl->typeConstraints) delete m_impl->typeConstraints;
- m_impl->typeConstraints = new ArgumentList;
- m_impl->typeConstraints->setAutoDelete(TRUE);
- ArgumentListIterator ali(*al);
- Argument *a;
- for (;(a=ali.current());++ali)
- {
- m_impl->typeConstraints->append(new Argument(*a));
- }
+ m_impl->typeConstraints = al;
}
void MemberDefImpl::setType(const char *t)
@@ -5007,7 +4927,7 @@ QCString MemberDefImpl::qualifiedName() const
}
}
-void MemberDefImpl::setTagInfo(TagInfo *ti)
+void MemberDefImpl::setTagInfo(const TagInfo *ti)
{
if (ti)
{
@@ -5557,27 +5477,27 @@ bool MemberDefImpl::isPrototype() const
return m_impl->proto;
}
-const ArgumentList *MemberDefImpl::argumentList() const
+const ArgumentList &MemberDefImpl::argumentList() const
{
return m_impl->defArgList;
}
-ArgumentList *MemberDefImpl::argumentList()
+ArgumentList &MemberDefImpl::argumentList()
{
return m_impl->defArgList;
}
-const ArgumentList *MemberDefImpl::declArgumentList() const
+const ArgumentList &MemberDefImpl::declArgumentList() const
{
return m_impl->declArgList;
}
-const ArgumentList *MemberDefImpl::templateArguments() const
+const ArgumentList &MemberDefImpl::templateArguments() const
{
return m_impl->tArgList;
}
-const QList<ArgumentList> *MemberDefImpl::definitionTemplateParameterLists() const
+const std::vector<ArgumentList> &MemberDefImpl::definitionTemplateParameterLists() const
{
return m_impl->defTmpArgLists;
}
@@ -5931,47 +5851,44 @@ void MemberDefImpl::cacheTypedefVal(const ClassDef*val, const QCString & templSp
void MemberDefImpl::copyArgumentNames(MemberDef *bmd)
{
{
- const ArgumentList *arguments = bmd->argumentList();
- if (m_impl->defArgList && arguments)
+ const ArgumentList &srcAl = bmd->argumentList();
+ ArgumentList &dstAl = m_impl->defArgList;
+ auto srcIt = srcAl.begin();
+ auto dstIt = dstAl.begin();
+ while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
{
- ArgumentListIterator aliDst(*m_impl->defArgList);
- ArgumentListIterator aliSrc(*arguments);
- Argument *argDst;
- const Argument *argSrc;
- for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
- {
- argDst->name = argSrc->name;
- argDst->docs = argSrc->docs;
- }
+ Argument &argDst = *dstIt;
+ const Argument &argSrc = *srcIt;
+ argDst.name = argSrc.name;
+ argDst.docs = argSrc.docs;
+ ++srcIt;
+ ++dstIt;
}
}
+
{
- const ArgumentList *arguments = bmd->declArgumentList();
- if (m_impl->declArgList && arguments)
+ const ArgumentList &srcAl = bmd->declArgumentList();
+ ArgumentList &dstAl = m_impl->declArgList;
+ auto srcIt = srcAl.begin();
+ auto dstIt = dstAl.begin();
+
+ while ( srcIt!=srcAl.end() && dstIt!=dstAl.end())
{
- ArgumentListIterator aliDst(*m_impl->declArgList);
- ArgumentListIterator aliSrc(*arguments);
- Argument *argDst;
- const Argument *argSrc;
- for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc)
- {
- argDst->name = argSrc->name;
- argDst->docs = argSrc->docs;
- }
+ Argument &argDst = *dstIt;
+ const Argument &argSrc = *srcIt;
+ argDst.name = argSrc.name;
+ argDst.docs = argSrc.docs;
+ ++srcIt;
+ ++dstIt;
}
}
}
-static void invalidateCachedTypesInArgumentList(ArgumentList *al)
+static void invalidateCachedTypesInArgumentList(ArgumentList &al)
{
- if (al)
+ for (Argument &a : al)
{
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- a->canType.resize(0);
- }
+ a.canType.resize(0);
}
}
@@ -6025,29 +5942,21 @@ void MemberDefImpl::addToSearchIndex() const
//----------------
-static void transferArgumentDocumentation(ArgumentList *decAl,ArgumentList *defAl)
+static void transferArgumentDocumentation(ArgumentList &decAl,ArgumentList &defAl)
{
- if (decAl && defAl)
+ for (auto decIt = decAl.begin(), defIt = defAl.begin();
+ decIt!= decAl.end() && defIt!= defAl.end();
+ ++decIt, ++defIt)
{
- ArgumentListIterator decAli(*decAl);
- ArgumentListIterator defAli(*defAl);
- Argument *decA,*defA;
- for (decAli.toFirst(),defAli.toFirst();
- (decA=decAli.current()) && (defA=defAli.current());
- ++decAli,++defAli)
+ Argument decA = *decIt;
+ Argument defA = *defIt;
+ if (decA.docs.isEmpty() && !defA.docs.isEmpty())
{
- //printf("Argument decA->name=%s (doc=%s) defA->name=%s (doc=%s)\n",
- // decA->name.data(),decA->docs.data(),
- // defA->name.data(),defA->docs.data()
- // );
- if (decA->docs.isEmpty() && !defA->docs.isEmpty())
- {
- decA->docs = defA->docs.copy();
- }
- else if (defA->docs.isEmpty() && !decA->docs.isEmpty())
- {
- defA->docs = decA->docs.copy();
- }
+ decA.docs = defA.docs;
+ }
+ else if (defA.docs.isEmpty() && !decA.docs.isEmpty())
+ {
+ defA.docs = decA.docs;
}
}
}
@@ -6066,8 +5975,8 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
const MemberDef *cmdec = const_cast<const MemberDef*>(mdec);
const MemberDef *cmdef = const_cast<const MemberDef*>(mdef);
- ArgumentList *mdefAl = mdef->argumentList();
- ArgumentList *mdecAl = mdec->argumentList();
+ ArgumentList &mdefAl = mdef->argumentList();
+ ArgumentList &mdecAl = mdec->argumentList();
if (matchArguments2(cmdef->getOuterScope(),cmdef->getFileDef(),mdefAl,
cmdec->getOuterScope(),cmdec->getFileDef(),mdecAl,
TRUE
@@ -6097,9 +6006,9 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
//printf("transferring docs mdef->mdec (%s->%s)\n",mdef->argsString(),mdec->argsString());
mdec->setDocumentation(mdef->documentation(),mdef->docFile(),mdef->docLine());
mdec->setDocsForDefinition(mdef->isDocsForDefinition());
- if (mdefAl!=0)
+ if (mdefAl.hasParameters())
{
- ArgumentList *mdefAlComb = new ArgumentList;
+ ArgumentList mdefAlComb;
stringToArgumentList(mdef->argsString(),mdefAlComb);
transferArgumentDocumentation(mdefAl,mdefAlComb);
mdec->setArgumentList(mdefAlComb);
@@ -6110,9 +6019,9 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef)
//printf("transferring docs mdec->mdef (%s->%s)\n",mdec->argsString(),mdef->argsString());
mdef->setDocumentation(mdec->documentation(),mdec->docFile(),mdec->docLine());
mdef->setDocsForDefinition(mdec->isDocsForDefinition());
- if (mdecAl!=0)
+ if (mdecAl.hasParameters())
{
- ArgumentList *mdecAlComb = new ArgumentList;
+ ArgumentList mdecAlComb;
stringToArgumentList(mdec->argsString(),mdecAlComb);
transferArgumentDocumentation(mdecAl,mdecAlComb);
mdef->setDeclArgumentList(mdecAlComb);
@@ -6210,7 +6119,7 @@ QCString MemberDefImpl::documentation() const
}
}
-const ArgumentList *MemberDefImpl::typeConstraints() const
+const ArgumentList &MemberDefImpl::typeConstraints() const
{
return m_impl->typeConstraints;
}
diff --git a/src/memberdef.h b/src/memberdef.h
index 97bf819..a9103e1 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -18,6 +18,8 @@
#ifndef MEMBERDEF_H
#define MEMBERDEF_H
+#include <vector>
+
#include <qlist.h>
#include <sys/types.h>
@@ -221,11 +223,11 @@ class MemberDef : virtual public Definition
virtual bool isPrototype() const = 0;
// argument related members
- virtual const ArgumentList *argumentList() const = 0;
- virtual ArgumentList *argumentList() = 0;
- virtual const ArgumentList *declArgumentList() const = 0;
- virtual const ArgumentList *templateArguments() const = 0;
- virtual const QList<ArgumentList> *definitionTemplateParameterLists() const = 0;
+ virtual const ArgumentList &argumentList() const = 0;
+ virtual ArgumentList &argumentList() = 0;
+ virtual const ArgumentList &declArgumentList() const = 0;
+ virtual const ArgumentList &templateArguments() const = 0;
+ virtual const std::vector<ArgumentList> &definitionTemplateParameterLists() const = 0;
// member group related members
virtual int getMemberGroupId() const = 0;
@@ -265,7 +267,7 @@ class MemberDef : virtual public Definition
virtual QCString getDeclType() const = 0;
virtual void getLabels(QStrList &sl,const Definition *container) const = 0;
- virtual const ArgumentList *typeConstraints() const = 0;
+ virtual const ArgumentList &typeConstraints() const = 0;
// overrules
virtual QCString documentation() const = 0;
@@ -305,7 +307,7 @@ class MemberDef : virtual public Definition
virtual void makeRelated() = 0;
virtual void makeForeign() = 0;
virtual void setInheritsDocsFrom(MemberDef *md) = 0;
- virtual void setTagInfo(TagInfo *i) = 0;
+ virtual void setTagInfo(const TagInfo *i) = 0;
virtual void setArgsString(const char *as) = 0;
virtual void incrementFlowKeyWordCount() = 0;
@@ -331,10 +333,10 @@ class MemberDef : virtual public Definition
virtual void setDeclFile(const QCString &df,int line,int column) = 0;
// argument related members
- virtual void setArgumentList(ArgumentList *al) = 0;
- virtual void setDeclArgumentList(ArgumentList *al) = 0;
- virtual void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) = 0;
- virtual void setTypeConstraints(ArgumentList *al) = 0;
+ virtual void setArgumentList(const ArgumentList &al) = 0;
+ virtual void setDeclArgumentList(const ArgumentList &al) = 0;
+ virtual void setDefinitionTemplateParameterLists(const std::vector<ArgumentList> &lists) = 0;
+ virtual void setTypeConstraints(const ArgumentList &al) = 0;
virtual void setType(const char *t) = 0;
virtual void setAccessorType(ClassDef *cd,const char *t) = 0;
@@ -384,8 +386,8 @@ class MemberDef : virtual public Definition
// --- actions ----
//-----------------------------------------------------------------------------------
- virtual MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
- ArgumentList *actualArgs) const = 0;
+ virtual MemberDef *createTemplateInstanceMember(const ArgumentList &formalArgs,
+ const ArgumentList &actualArgs) const = 0;
virtual void findSectionsInDocumentation() = 0;
virtual void addToSearchIndex() const = 0;
@@ -421,8 +423,8 @@ class MemberDef : virtual public Definition
MemberDef *createMemberDef(const char *defFileName,int defLine,int defColumn,
const char *type,const char *name,const char *args,
const char *excp,Protection prot,Specifier virt,bool stat,
- Relationship related,MemberType t,const ArgumentList *tal,
- const ArgumentList *al,const char *metaData);
+ Relationship related,MemberType t,const ArgumentList &tal,
+ const ArgumentList &al,const char *metaData);
MemberDef *createMemberDefAlias(const Definition *newScope,const MemberDef *aliasMd);
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index c127302..05c38c3 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -56,7 +56,6 @@ MemberGroup::MemberGroup(int id,const char *hdr,const char *d,const char *docFil
m_numDocMembers = -1;
m_docFile = docFile;
m_docLine = docLine;
- m_xrefListItems = 0;
//printf("Member group docs='%s'\n",doc.data());
}
@@ -340,7 +339,7 @@ QCString MemberGroup::anchor() const
void MemberGroup::addListReferences(Definition *def)
{
memberList->addListReferences(def);
- if (m_xrefListItems && def)
+ if (def)
{
QCString name = def->getOutputFileBase()+"#"+anchor();
addRefItem(m_xrefListItems,
@@ -357,23 +356,9 @@ void MemberGroup::findSectionsInDocumentation(const Definition *d)
memberList->findSectionsInDocumentation(d);
}
-void MemberGroup::setRefItems(const QList<ListItemInfo> *sli)
+void MemberGroup::setRefItems(const std::vector<ListItemInfo> &sli)
{
- if (sli)
- {
- // deep copy the list
- if (m_xrefListItems==0)
- {
- m_xrefListItems=new QList<ListItemInfo>;
- m_xrefListItems->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
- {
- m_xrefListItems->append(new ListItemInfo(*lii));
- }
- }
+ m_xrefListItems.insert(m_xrefListItems.end(), sli.cbegin(), sli.cend());
}
void MemberGroup::writeTagFile(FTextStream &tagFile)
@@ -383,18 +368,7 @@ void MemberGroup::writeTagFile(FTextStream &tagFile)
//--------------------------------------------------------------------------
-void MemberGroupInfo::setRefItems(const QList<ListItemInfo> *sli)
+void MemberGroupInfo::setRefItems(const std::vector<ListItemInfo> &sli)
{
- if (!sli) return;
- if (m_sli==0)
- {
- m_sli = new QList<ListItemInfo>;
- m_sli->setAutoDelete(TRUE);
- }
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *ili;
- for (slii.toFirst();(ili=slii.current());++slii)
- {
- m_sli->append(new ListItemInfo(*ili));
- }
+ m_sli.insert(m_sli.end(), sli.cbegin(), sli.cend());
}
diff --git a/src/membergroup.h b/src/membergroup.h
index c332b56..aa30063 100644
--- a/src/membergroup.h
+++ b/src/membergroup.h
@@ -18,6 +18,8 @@
#ifndef MEMBERGROUP_H
#define MEMBERGROUP_H
+#include <vector>
+
#include <qlist.h>
#include "sortdict.h"
#include "types.h"
@@ -32,7 +34,6 @@ class FileDef;
class GroupDef;
class OutputList;
class Definition;
-class StorageIntf;
class FTextStream;
struct ListItemInfo;
@@ -80,7 +81,7 @@ class MemberGroup
int countInheritableMembers(const ClassDef *inheritedFrom) const;
void setInGroup(bool b);
void addListReferences(Definition *d);
- void setRefItems(const QList<ListItemInfo> *sli);
+ void setRefItems(const std::vector<ListItemInfo> &sli);
MemberList *members() const { return memberList; }
QCString anchor() const;
@@ -88,19 +89,19 @@ class MemberGroup
int docLine() const { return m_docLine; }
private:
- MemberList *memberList; // list of all members in the group
- MemberList *inDeclSection;
- int grpId;
+ MemberList *memberList = 0; // list of all members in the group
+ MemberList *inDeclSection = 0;
+ int grpId = 0;
QCString grpHeader;
QCString fileName; // base name of the generated file
QCString doc;
- bool inSameSection;
- int m_numDecMembers;
- int m_numDocMembers;
- const Definition *m_parent;
+ bool inSameSection = 0;
+ int m_numDecMembers = 0;
+ int m_numDocMembers = 0;
+ const Definition *m_parent = 0;
QCString m_docFile;
- int m_docLine;
- QList<ListItemInfo> *m_xrefListItems;
+ int m_docLine = 0;
+ std::vector<ListItemInfo> m_xrefListItems;
};
/** A list of MemberGroup objects. */
@@ -132,15 +133,13 @@ class MemberGroupSDict : public SIntDict<MemberGroup>
/** Data collected for a member group */
struct MemberGroupInfo
{
- MemberGroupInfo() : docLine(-1), m_sli(0) {}
- ~MemberGroupInfo() { delete m_sli; m_sli=0; }
- void setRefItems(const QList<ListItemInfo> *sli);
+ void setRefItems(const std::vector<ListItemInfo> &sli);
QCString header;
QCString doc;
QCString docFile;
- int docLine;
+ int docLine = -1;
QCString compoundName;
- QList<ListItemInfo> *m_sli;
+ std::vector<ListItemInfo> m_sli;
};
#endif
diff --git a/src/memberlist.h b/src/memberlist.h
index 0697df4..422c162 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -26,7 +26,6 @@
class GroupDef;
class MemberGroup;
class MemberGroupList;
-class StorageIntf;
/** A list of MemberDef objects. */
class MemberList : private QList<MemberDef>
diff --git a/src/message.cpp b/src/message.cpp
index ddf757a..591267d 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -90,7 +90,7 @@ void initWarningFormat()
if (!Config_getString(WARN_LOGFILE).isEmpty())
{
- warnFile = portable_fopen(Config_getString(WARN_LOGFILE),"w");
+ warnFile = Portable::fopen(Config_getString(WARN_LOGFILE),"w");
}
if (!warnFile) // point it to something valid, because warn() relies on it
{
diff --git a/src/msc.cpp b/src/msc.cpp
index 51e23fa..29c9334 100644
--- a/src/msc.cpp
+++ b/src/msc.cpp
@@ -95,7 +95,7 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,MscOutputFormat format)
{
QCString absOutFile = outDir;
- absOutFile+=portable_pathSeparator();
+ absOutFile+=Portable::pathSeparator();
absOutFile+=outFile;
mscgen_format_t msc_format;
@@ -130,12 +130,12 @@ void writeMscGraphFromFile(const char *inFile,const char *outDir,
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
absOutFile.data(),absOutFile.data());
- portable_sysTimerStart();
- if (portable_system("epstopdf",epstopdfArgs)!=0)
+ Portable::sysTimerStart();
+ if (Portable::system("epstopdf",epstopdfArgs)!=0)
{
err("Problems running epstopdf. Check your TeX installation!\n");
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
}
Doxygen::indexList->addImageFile(imgName);
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 9a98e0d..220f300 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -124,23 +124,23 @@ class NamespaceDefImpl : public DefinitionImpl, public NamespaceDef
QCString fileName;
FileList files;
- NamespaceSDict *usingDirList;
- SDict<Definition> *usingDeclList;
- SDict<Definition> *m_innerCompounds;
+ NamespaceSDict *usingDirList = 0;
+ SDict<Definition> *usingDeclList = 0;
+ SDict<Definition> *m_innerCompounds = 0;
- MemberSDict *m_allMembersDict;
+ MemberSDict *m_allMembersDict = 0;
QList<MemberList> m_memberLists;
- MemberGroupSDict *memberGroupSDict;
- ClassSDict *classSDict;
- ClassSDict *interfaceSDict;
- ClassSDict *structSDict;
- ClassSDict *exceptionSDict;
- NamespaceSDict *namespaceSDict;
- bool m_subGrouping;
+ MemberGroupSDict *memberGroupSDict = 0;
+ ClassSDict *classSDict = 0;
+ ClassSDict *interfaceSDict = 0;
+ ClassSDict *structSDict = 0;
+ ClassSDict *exceptionSDict = 0;
+ NamespaceSDict *namespaceSDict = 0;
+ bool m_subGrouping = false;
enum { NAMESPACE, MODULE, CONSTANT_GROUP, LIBRARY } m_type;
- bool m_isPublished;
+ bool m_isPublished = false;
QCString metaData;
- bool m_inline;
+ bool m_inline = false;
};
NamespaceDef *createNamespaceDef(const char *defFileName,int defLine,int defColumn,
@@ -246,7 +246,7 @@ class NamespaceDefAliasImpl : public DefinitionAliasImpl, public NamespaceDef
bool isVisited() const { return m_visited; }
private:
- bool m_visited;
+ bool m_visited = false;
};
NamespaceDef *createNamespaceDefAlias(const Definition *newScope,const NamespaceDef *nd)
@@ -1269,7 +1269,7 @@ void NamespaceDefImpl::addListReferences()
{
//bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
{
- QList<ListItemInfo> *xrefItems = xrefListItems();
+ const std::vector<ListItemInfo> &xrefItems = xrefListItems();
addRefItem(xrefItems,
qualifiedName(),
getLanguage()==SrcLangExt_Fortran ?
diff --git a/src/parserintf.h b/src/parserintf.h
index a269bfb..5095a1e 100644
--- a/src/parserintf.h
+++ b/src/parserintf.h
@@ -18,10 +18,11 @@
#ifndef PARSERINTF_H
#define PARSERINTF_H
-#include <qdict.h>
#include <qstrlist.h>
#include <memory>
+#include <map>
+#include <string>
#include "types.h"
@@ -31,16 +32,16 @@ class CodeOutputInterface;
class MemberDef;
class Definition;
-/** \brief Abstract interface for programming language parsers.
+/** \brief Abstract interface for outline parsers.
*
* By implementing the methods of this interface one can add
- * a new language parser to doxygen. The parser can make use of the
+ * a new language parser to doxygen. The parser implementation can make use of the
* comment block parser to parse the contents of special comment blocks.
*/
-class ParserInterface
+class OutlineParserInterface
{
public:
- virtual ~ParserInterface() {}
+ virtual ~OutlineParserInterface() {}
/** Starts processing a translation unit (source files + headers).
* After this call parseInput() is called with sameTranslationUnit
@@ -69,7 +70,7 @@ class ParserInterface
*/
virtual void parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList &filesInSameTranslationUnit) = 0;
@@ -78,8 +79,29 @@ class ParserInterface
* parser.
* @see parseInput()
*/
- virtual bool needsPreprocessing(const QCString &extension) = 0;
+ virtual bool needsPreprocessing(const QCString &extension) const = 0;
+ /** Callback function called by the comment block scanner.
+ * It provides a string \a text containing the prototype of a function
+ * or variable. The parser should parse this and store the information
+ * in the Entry node that corresponds with the node for which the
+ * comment block parser was invoked.
+ */
+ virtual void parsePrototype(const char *text) = 0;
+
+};
+
+/** \brief Abstract interface for code parsers.
+ *
+ * By implementing the methods of this interface one can add
+ * a new language parser to doxygen. This interface is used for
+ * syntax highlighting, but also to extract cross references and call graphs.
+ */
+class CodeParserInterface
+{
+ public:
+ virtual ~CodeParserInterface() {}
+
/** Parses a source file or fragment with the goal to produce
* highlighted and cross-referenced output.
* @param[in] codeOutIntf Abstract interface for writing the result.
@@ -125,14 +147,6 @@ class ParserInterface
*/
virtual void resetCodeParserState() = 0;
- /** Callback function called by the comment block scanner.
- * It provides a string \a text containing the prototype of a function
- * or variable. The parser should parse this and store the information
- * in the Entry node that corresponds with the node for which the
- * comment block parser was invoked.
- */
- virtual void parsePrototype(const char *text) = 0;
-
};
//-----------------------------------------------------------------------------
@@ -145,18 +159,22 @@ class ParserInterface
class ParserManager
{
public:
- /** Creates the parser manager object.
- */
- ParserManager()
- : m_defaultParser(0) { m_parsers.setAutoDelete(TRUE); }
- ~ParserManager()
+ struct ParserPair
{
- delete m_defaultParser;
- }
+ ParserPair(std::unique_ptr<OutlineParserInterface> oli,
+ std::unique_ptr<CodeParserInterface> cpi)
+ : outlineParser(std::move(oli)), codeParser(std::move(cpi))
+ {
+ }
- void registerDefaultParser(ParserInterface *parser)
+ std::unique_ptr<OutlineParserInterface> outlineParser;
+ std::unique_ptr<CodeParserInterface> codeParser;
+ };
+
+ ParserManager(std::unique_ptr<OutlineParserInterface> outlineParser,
+ std::unique_ptr<CodeParserInterface> codeParser)
+ : m_defaultParsers(std::move(outlineParser),std::move(codeParser))
{
- m_defaultParser = parser;
}
/** Registers an additional parser.
@@ -165,9 +183,11 @@ class ParserManager
* @param[in] parser The parser that is to be used for the
* given name.
*/
- void registerParser(const char *name,ParserInterface *parser)
+ void registerParser(const char *name,std::unique_ptr<OutlineParserInterface> outlineParser,
+ std::unique_ptr<CodeParserInterface> codeParser)
{
- m_parsers.insert(name,parser);
+ m_parsers.emplace(std::string(name),
+ ParserPair(std::move(outlineParser),std::move(codeParser)));
}
/** Registers a file \a extension with a parser with name \a parserName.
@@ -176,13 +196,16 @@ class ParserManager
bool registerExtension(const char *extension, const char *parserName)
{
if (parserName==0 || extension==0) return FALSE;
- ParserInterface *intf = m_parsers.find(parserName);
- if (intf==0) return FALSE;
- if (m_extensions.find(extension)!=0) // extension already exists
+
+ const auto &parserIt = m_parsers.find(parserName);
+ if (parserIt == m_parsers.end()) return FALSE;
+
+ auto extensionIt = m_extensions.find(extension);
+ if (extensionIt != m_extensions.end()) // extension already exists
{
- m_extensions.remove(extension); // remove it
+ m_extensions.erase(extensionIt); // remove it (e.g. user specified extension overrules built in one)
}
- m_extensions.insert(extension,intf); // add new mapping
+ m_extensions.emplace(std::string(extension),parserIt->second); // add new mapping
return TRUE;
}
@@ -190,22 +213,36 @@ class ParserManager
* If there is no parser explicitly registered for the supplied extension,
* the interface to the default parser will be returned.
*/
- ParserInterface *getParser(const char *extension)
+ OutlineParserInterface &getOutlineParser(const char *extension)
{
- QCString ext = QCString(extension).lower();
+ return *getParsers(extension).outlineParser;
+ }
+
+ /** Gets the interface to the parser associated with given \a extension.
+ * If there is no parser explicitly registered for the supplied extension,
+ * the interface to the default parser will be returned.
+ */
+ CodeParserInterface &getCodeParser(const char *extension)
+ {
+ return *getParsers(extension).codeParser;
+ }
+
+ private:
+ ParserPair &getParsers(const char *extension)
+ {
+ QCString ext = QCString(extension).lower().data();
if (ext.isEmpty()) ext=".no_extension";
- ParserInterface *intf = m_extensions.find(ext);
- if (intf==0 && ext.length()>4)
+ auto it = m_extensions.find(ext.data());
+ if (it==m_extensions.end() && ext.length()>4)
{
- intf = m_extensions.find(ext.left(4));
+ it = m_extensions.find(ext.left(4).data());
}
- return intf ? intf : m_defaultParser;
+ return it!=m_extensions.end() ? it->second : m_defaultParsers;
}
- private:
- QDict<ParserInterface> m_parsers;
- QDict<ParserInterface> m_extensions;
- ParserInterface *m_defaultParser;
+ std::map<std::string,ParserPair> m_parsers;
+ std::map<std::string,ParserPair &> m_extensions;
+ ParserPair m_defaultParsers;
};
#endif
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index a288e0e..be226b7 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -1422,23 +1422,20 @@ void PerlModDocVisitor::visitPost(DocParBlock *)
}
-static void addTemplateArgumentList(ArgumentList *al,PerlModOutput &output,const char *)
+static void addTemplateArgumentList(const ArgumentList &al,PerlModOutput &output,const char *)
{
- if (!al)
- return;
+ if (!al.hasParameters()) return;
output.openList("template_parameters");
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : al)
{
output.openHash();
- if (!a->type.isEmpty())
- output.addFieldQuotedString("type", a->type);
- if (!a->name.isEmpty())
- output.addFieldQuotedString("declaration_name", a->name)
- .addFieldQuotedString("definition_name", a->name);
- if (!a->defval.isEmpty())
- output.addFieldQuotedString("default", a->defval);
+ if (!a.type.isEmpty())
+ output.addFieldQuotedString("type", a.type);
+ if (!a.name.isEmpty())
+ output.addFieldQuotedString("declaration_name", a.name)
+ .addFieldQuotedString("definition_name", a.name);
+ if (!a.defval.isEmpty())
+ output.addFieldQuotedString("default", a.defval);
output.closeHash();
}
output.closeList();
@@ -1609,45 +1606,46 @@ void PerlModGenerator::generatePerlModForMember(const MemberDef *md,const Defini
md->memberType()!=MemberType_Enumeration)
m_output.addFieldQuotedString("type", md->typeString());
- const ArgumentList *al = md->argumentList();
+ const ArgumentList &al = md->argumentList();
if (isFunc) //function
{
- m_output.addFieldBoolean("const", al!=0 && al->constSpecifier)
- .addFieldBoolean("volatile", al!=0 && al->volatileSpecifier);
+ m_output.addFieldBoolean("const", al.constSpecifier)
+ .addFieldBoolean("volatile", al.volatileSpecifier);
m_output.openList("parameters");
- const ArgumentList *declAl = md->declArgumentList();
- const ArgumentList *defAl = md->argumentList();
- if (declAl && defAl && declAl->count()>0)
+ const ArgumentList &declAl = md->declArgumentList();
+ if (!declAl.empty())
{
- ArgumentListIterator declAli(*declAl);
- ArgumentListIterator defAli(*defAl);
- const Argument *a;
- for (declAli.toFirst();(a=declAli.current());++declAli)
+ auto defIt = al.begin();
+ for (const Argument &a : declAl)
{
- const Argument *defArg = defAli.current();
+ const Argument *defArg = 0;
+ if (defIt!=al.end())
+ {
+ defArg = &(*defIt);
+ ++defIt;
+ }
m_output.openHash();
- if (!a->name.isEmpty())
- m_output.addFieldQuotedString("declaration_name", a->name);
+ if (!a.name.isEmpty())
+ m_output.addFieldQuotedString("declaration_name", a.name);
- if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
+ if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
m_output.addFieldQuotedString("definition_name", defArg->name);
- if (!a->type.isEmpty())
- m_output.addFieldQuotedString("type", a->type);
+ if (!a.type.isEmpty())
+ m_output.addFieldQuotedString("type", a.type);
- if (!a->array.isEmpty())
- m_output.addFieldQuotedString("array", a->array);
+ if (!a.array.isEmpty())
+ m_output.addFieldQuotedString("array", a.array);
- if (!a->defval.isEmpty())
- m_output.addFieldQuotedString("default_value", a->defval);
+ if (!a.defval.isEmpty())
+ m_output.addFieldQuotedString("default_value", a.defval);
- if (!a->attrib.isEmpty())
- m_output.addFieldQuotedString("attributes", a->attrib);
+ if (!a.attrib.isEmpty())
+ m_output.addFieldQuotedString("attributes", a.attrib);
m_output.closeHash();
- if (defArg) ++defAli;
}
}
m_output.closeList();
@@ -1656,12 +1654,10 @@ void PerlModGenerator::generatePerlModForMember(const MemberDef *md,const Defini
md->argsString()!=0) // define
{
m_output.openList("parameters");
- ArgumentListIterator ali(*al);
- const Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : al)
{
m_output.openHash()
- .addFieldQuotedString("name", a->type)
+ .addFieldQuotedString("name", a.type)
.closeHash();
}
m_output.closeList();
@@ -1796,9 +1792,9 @@ void PerlModGenerator::generatePerlModForClass(const ClassDef *cd)
// + standard member sections
// + detailed member documentation
// - examples using the class
-
+
if (cd->isReference()) return; // skip external references.
- if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
+ if (cd->isAnonymous()) return; // skip anonymous compounds.
if (cd->templateMaster()!=0) return; // skip generated template instances.
m_output.openHash()
diff --git a/src/plantuml.cpp b/src/plantuml.cpp
index ff4ebd3..fa50f2d 100644
--- a/src/plantuml.cpp
+++ b/src/plantuml.cpp
@@ -210,7 +210,7 @@ static void runPlantumlContent(const QDict< QList <QCString> > &plantumlFiles,
}
while (s)
{
- pumlArgs += portable_pathListSeparator();
+ pumlArgs += Portable::pathListSeparator();
pumlArgs += s;
s = pumlIncludePathList.next();
}
@@ -227,7 +227,7 @@ static void runPlantumlContent(const QDict< QList <QCString> > &plantumlFiles,
pumlArgs += "-graphvizdot \"";
pumlArgs += dotPath;
pumlArgs += "dot";
- pumlArgs += portable_commandExtension();
+ pumlArgs += Portable::commandExtension();
pumlArgs += "\" ";
}
switch (format)
@@ -283,8 +283,8 @@ static void runPlantumlContent(const QDict< QList <QCString> > &plantumlFiles,
file.close();
Debug::print(Debug::Plantuml,0,"*** %s Running Plantuml arguments:%s\n","PlantumlManager::runPlantumlContent",qPrint(pumlArguments));
- portable_sysTimerStart();
- if ((exitCode=portable_system(pumlExe,pumlArguments,TRUE))!=0)
+ Portable::sysTimerStart();
+ if ((exitCode=Portable::system(pumlExe,pumlArguments,TRUE))!=0)
{
err("Problems running PlantUML. Verify that the command 'java -jar \"%splantuml.jar\" -h' works from the command line. Exit code: %d\n",
plantumlJarPath.data(),exitCode);
@@ -294,7 +294,7 @@ static void runPlantumlContent(const QDict< QList <QCString> > &plantumlFiles,
Debug::print(Debug::Plantuml,0,"*** %s Remove %s file\n","PlantumlManager::runPlantumlContent",qPrint(puFileName));
file.remove();
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
if ( (format==PlantumlManager::PUML_EPS) && (Config_getBool(USE_PDFLATEX)) )
{
@@ -309,12 +309,12 @@ static void runPlantumlContent(const QDict< QList <QCString> > &plantumlFiles,
const int maxCmdLine = 40960;
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s%s.eps\" --outfile=\"%s%s.pdf\"",qPrint(pumlOutDir),qPrint(*nb),qPrint(pumlOutDir),qPrint(*nb));
- portable_sysTimerStart();
- if ((exitCode=portable_system("epstopdf",epstopdfArgs))!=0)
+ Portable::sysTimerStart();
+ if ((exitCode=Portable::system("epstopdf",epstopdfArgs))!=0)
{
err("Problems running epstopdf. Check your TeX installation! Exit code: %d\n",exitCode);
}
- portable_sysTimerStop();
+ Portable::sysTimerStop();
}
}
}
diff --git a/src/portable.cpp b/src/portable.cpp
index c6e829d..1134351 100644
--- a/src/portable.cpp
+++ b/src/portable.cpp
@@ -1,36 +1,43 @@
+#include "portable.h"
+
#include <stdlib.h>
-#include <ctype.h>
+#include <stdio.h>
+
#if defined(_WIN32) && !defined(__CYGWIN__)
#undef UNICODE
#define _WIN32_DCOM
#include <windows.h>
#else
#include <unistd.h>
-#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
extern char **environ;
#endif
+#include <ctype.h>
#include <qglobal.h>
#include <qdatetime.h>
+#include <qglobal.h>
+#include <qdir.h>
+#include <map>
+#include <string>
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-#define popen _popen
-#define pclose _pclose
-#endif
-
-#include "portable.h"
#include "util.h"
#ifndef NODEBUG
#include "debug.h"
#endif
+#if !defined(_WIN32) || defined(__CYGWIN__)
+static bool environmentLoaded = false;
+static std::map<std::string,std::string> proc_env = std::map<std::string,std::string>();
+#endif
+
static double g_sysElapsedTime;
static QTime g_time;
-int portable_system(const char *command,const char *args,bool commandHasConsole)
+
+int Portable::system(const char *command,const char *args,bool commandHasConsole)
{
if (command==0) return 1;
@@ -127,7 +134,7 @@ int portable_system(const char *command,const char *args,bool commandHasConsole)
#else // Win32 specific
if (commandHasConsole)
{
- return system(fullCmd);
+ return ::system(fullCmd);
}
else
{
@@ -189,13 +196,13 @@ int portable_system(const char *command,const char *args,bool commandHasConsole)
}
-uint portable_pid()
+unsigned int Portable::pid(void)
{
- uint pid;
+ unsigned int pid;
#if !defined(_WIN32) || defined(__CYGWIN__)
- pid = (uint)getpid();
+ pid = (unsigned int)getpid();
#else
- pid = (uint)GetCurrentProcessId();
+ pid = (unsigned int)GetCurrentProcessId();
#endif
return pid;
}
@@ -205,88 +212,50 @@ uint portable_pid()
static char **last_environ;
#endif
-void portable_setenv(const char *name,const char *value)
+#if !defined(_WIN32) || defined(__CYGWIN__)
+void loadEnvironment()
{
- if (value==0) value="";
-#if defined(_WIN32) && !defined(__CYGWIN__)
- SetEnvironmentVariable(name,value);
-#else
- char **ep = 0;
- size_t size;
- const size_t namelen=qstrlen(name);
- const size_t vallen=qstrlen(value) + 1;
+ if(environ != NULL)
+ {
+ unsigned int i = 0;
+ char* current = environ[i];
- size = 0;
- if (environ!=0)
+ while(current != NULL) // parse all strings contained by environ til the last element (NULL)
{
- for (ep = environ; *ep; ++ep)
- {
- if (!qstrncmp (*ep, name, (uint)namelen) &&
- (*ep)[namelen] == '=')
- break;
- else
- ++size;
+ std::string env_var(current); // load current environment variable string
+ size_t pos = env_var.find("=");
+ if(pos != std::string::npos) // only parse the variable, if it is a valid environment variable...
+ { // ...which has to contain an equal sign as delimiter by definition
+ std::string name = env_var.substr(0,pos); // the string til the equal sign contains the name
+ std::string value = env_var.substr(pos + 1); // the string from the equal sign contains the value
+
+ proc_env[name] = value; // save the value by the name as its key in the classes map
}
+ i++;
+ current = environ[i];
}
+ }
- if (environ==0 || *ep==0) /* add new string */
- {
- char **new_environ;
- if (environ == last_environ && environ!=0)
- {
- // We allocated this space; we can extend it.
- new_environ = (char **) realloc (last_environ, (size + 2) * sizeof (char *));
- }
- else
- {
- new_environ = (char **) malloc ((size + 2) * sizeof (char *));
- }
-
- if (new_environ==0) // no more memory
- {
- return;
- }
-
- new_environ[size] = (char *)malloc (namelen + 1 + vallen);
- if (new_environ[size]==0)
- {
- free (new_environ);
- return;
- }
-
- if (environ != last_environ)
- {
- memcpy ((char *) new_environ, environ, size * sizeof (char *));
- }
+ environmentLoaded = true;
+}
+#endif
- memcpy(new_environ[size], name, namelen);
- new_environ[size][namelen] = '=';
- memcpy(&new_environ[size][namelen + 1], value, vallen);
- new_environ[size + 1] = 0;
- last_environ = environ = new_environ;
- }
- else /* replace existing string */
- {
- size_t len = qstrlen (*ep);
- if (len + 1 < namelen + 1 + vallen)
- {
- /* The existing string is too short; malloc a new one. */
- char *newString = (char *)malloc(namelen + 1 + vallen);
- if (newString==0)
- {
- return;
- }
- *ep = newString;
- }
- memcpy(*ep, name, namelen);
- (*ep)[namelen] = '=';
- memcpy(&(*ep)[namelen + 1], value, vallen);
+void Portable::setenv(const char *name,const char *value)
+{
+ if (value==0) value="";
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ SetEnvironmentVariable(name,value);
+#else
+ if(!environmentLoaded) // if the environment variables are not loaded already...
+ { // ...call loadEnvironment to store them in class
+ loadEnvironment();
}
+ proc_env[name] = std::string(value); // create or replace exisiting value
#endif
}
-void portable_unsetenv(const char *variable)
+void Portable::unsetenv(const char *variable)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
SetEnvironmentVariable(variable,0);
@@ -300,32 +269,35 @@ void portable_unsetenv(const char *variable)
return; // not properly formatted
}
- len = qstrlen(variable);
-
- ep = environ;
- while (*ep != NULL)
+ if(proc_env.find(variable) != proc_env.end())
{
- if (!qstrncmp(*ep, variable, (uint)len) && (*ep)[len]=='=')
- {
- /* Found it. Remove this pointer by moving later ones back. */
- char **dp = ep;
- do dp[0] = dp[1]; while (*dp++);
- /* Continue the loop in case NAME appears again. */
- }
- else
- {
- ++ep;
- }
+ proc_env[variable].erase();
}
#endif
}
-const char *portable_getenv(const char *variable)
-{
- return getenv(variable);
+const char *Portable::getenv(const char *variable)
+{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ return ::getenv(variable);
+#else
+ if(!environmentLoaded) // if the environment variables are not loaded already...
+ { // ...call loadEnvironment to store them in class
+ loadEnvironment();
+ }
+
+ if(proc_env.find(variable) != proc_env.end())
+ {
+ return proc_env[variable].c_str();
+ }
+ else
+ {
+ return NULL;
+ }
+#endif
}
-portable_off_t portable_fseek(FILE *f,portable_off_t offset, int whence)
+portable_off_t Portable::fseek(FILE *f,portable_off_t offset, int whence)
{
#if defined(__MINGW32__)
return fseeko64(f,offset,whence);
@@ -336,7 +308,7 @@ portable_off_t portable_fseek(FILE *f,portable_off_t offset, int whence)
#endif
}
-portable_off_t portable_ftell(FILE *f)
+portable_off_t Portable::ftell(FILE *f)
{
#if defined(__MINGW32__)
return ftello64(f);
@@ -347,18 +319,18 @@ portable_off_t portable_ftell(FILE *f)
#endif
}
-FILE *portable_fopen(const char *fileName,const char *mode)
+FILE *Portable::fopen(const char *fileName,const char *mode)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
QString fn(fileName);
QString m(mode);
return _wfopen((wchar_t*)fn.ucs2(),(wchar_t*)m.ucs2());
#else
- return fopen(fileName,mode);
+ return ::fopen(fileName,mode);
#endif
}
-char portable_pathSeparator()
+char Portable::pathSeparator(void)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
return '\\';
@@ -367,7 +339,7 @@ char portable_pathSeparator()
#endif
}
-char portable_pathListSeparator()
+char Portable::pathListSeparator(void)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
return ';';
@@ -376,7 +348,7 @@ char portable_pathListSeparator()
#endif
}
-const char *portable_ghostScriptCommand()
+const char *Portable::ghostScriptCommand(void)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
return "gswin32c.exe";
@@ -385,7 +357,7 @@ const char *portable_ghostScriptCommand()
#endif
}
-const char *portable_commandExtension()
+const char *Portable::commandExtension(void)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
return ".exe";
@@ -394,7 +366,7 @@ const char *portable_commandExtension()
#endif
}
-bool portable_fileSystemIsCaseSensitive()
+bool Portable::fileSystemIsCaseSensitive(void)
{
#if defined(_WIN32) || defined(macintosh) || defined(__MACOSX__) || defined(__APPLE__) || defined(__CYGWIN__)
return FALSE;
@@ -403,32 +375,40 @@ bool portable_fileSystemIsCaseSensitive()
#endif
}
-FILE * portable_popen(const char *name,const char *type)
+FILE * Portable::popen(const char *name,const char *type)
{
- return popen(name,type);
+ #if defined(_MSC_VER) || defined(__BORLANDC__)
+ return ::_popen(name,type);
+ #else
+ return ::popen(name,type);
+ #endif
}
-int portable_pclose(FILE *stream)
+int Portable::pclose(FILE *stream)
{
- return pclose(stream);
+ #if defined(_MSC_VER) || defined(__BORLANDC__)
+ return ::_pclose(stream);
+ #else
+ return ::pclose(stream);
+ #endif
}
-void portable_sysTimerStart()
+void Portable::sysTimerStart(void)
{
g_time.start();
}
-void portable_sysTimerStop()
+void Portable::sysTimerStop(void)
{
g_sysElapsedTime+=((double)g_time.elapsed())/1000.0;
}
-double portable_getSysElapsedTime()
+double Portable::getSysElapsedTime(void)
{
return g_sysElapsedTime;
}
-void portable_sleep(int ms)
+void Portable::sleep(int ms)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
Sleep(ms);
@@ -437,7 +417,7 @@ void portable_sleep(int ms)
#endif
}
-bool portable_isAbsolutePath(const char *fileName)
+bool Portable::isAbsolutePath(const char *fileName)
{
# ifdef _WIN32
if (isalpha (fileName [0]) && fileName[1] == ':')
@@ -459,22 +439,39 @@ bool portable_isAbsolutePath(const char *fileName)
*
* This routine was inspired by the cause for bug 766059 was that in the Windows path there were forward slashes.
*/
-void portable_correct_path(void)
+void Portable::correct_path(void)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
- const char *p = portable_getenv("PATH");
+ const char *p = Portable::getenv("PATH");
if (!p) return; // no path nothing to correct
QCString result = substitute(p,'/','\\');
- if (result!=p) portable_setenv("PATH",result.data());
+ if (result!=p) Portable::setenv("PATH",result.data());
#endif
}
-void portable_unlink(const char *fileName)
+void Portable::unlink(const char *fileName)
{
#if defined(_WIN32) && !defined(__CYGWIN__)
_unlink(fileName);
#else
- unlink(fileName);
+ ::unlink(fileName);
#endif
}
+void Portable::setShortDir(void)
+{
+#if defined(_WIN32) && !defined(__CYGWIN__)
+ long length = 0;
+ TCHAR* buffer = NULL;
+ // First obtain the size needed by passing NULL and 0.
+ length = GetShortPathName(QDir::currentDirPath().data(), NULL, 0);
+ // Dynamically allocate the correct size
+ // (terminating null char was included in length)
+ buffer = new TCHAR[length];
+ // Now simply call again using same (long) path.
+ length = GetShortPathName(QDir::currentDirPath().data(), buffer, length);
+ // Set the correct directory (short name)
+ QDir::setCurrent(buffer);
+ delete [] buffer;
+#endif
+}
diff --git a/src/portable.h b/src/portable.h
index 83f90ef..27b7052 100644
--- a/src/portable.h
+++ b/src/portable.h
@@ -1,9 +1,11 @@
#ifndef PORTABLE_H
#define PORTABLE_H
-#include <sys/types.h>
#include <stdio.h>
-#include <qglobal.h>
+#include <sys/types.h>
+
+
+
#if defined(_WIN32)
typedef __int64 portable_off_t;
@@ -15,28 +17,33 @@ typedef off_t portable_off_t;
* @brief Portable versions of functions that are platform dependent.
*/
-int portable_system(const char *command,const char *args,bool commandHasConsole=TRUE);
-uint portable_pid();
-const char * portable_getenv(const char *variable);
-void portable_setenv(const char *variable,const char *value);
-void portable_unsetenv(const char *variable);
-portable_off_t portable_fseek(FILE *f,portable_off_t offset, int whence);
-portable_off_t portable_ftell(FILE *f);
-FILE * portable_fopen(const char *fileName,const char *mode);
-void portable_unlink(const char *fileName);
-char portable_pathSeparator();
-char portable_pathListSeparator();
-const char * portable_ghostScriptCommand();
-const char * portable_commandExtension();
-bool portable_fileSystemIsCaseSensitive();
-FILE * portable_popen(const char *name,const char *type);
-int portable_pclose(FILE *stream);
-void portable_sysTimerStart();
-void portable_sysTimerStop();
-double portable_getSysElapsedTime();
-void portable_sleep(int ms);
-bool portable_isAbsolutePath(const char *fileName);
-void portable_correct_path(void);
+namespace Portable
+{
+ int system(const char *command,const char *args,bool commandHasConsole=true);
+ unsigned int pid(void);
+ const char * getenv(const char *variable);
+ void setenv(const char *variable,const char *value);
+ void unsetenv(const char *variable);
+ portable_off_t fseek(FILE *f,portable_off_t offset, int whence);
+ portable_off_t ftell(FILE *f);
+ FILE * fopen(const char *fileName,const char *mode);
+ void unlink(const char *fileName);
+ char pathSeparator(void);
+ char pathListSeparator(void);
+ const char * ghostScriptCommand(void);
+ const char * commandExtension(void);
+ bool fileSystemIsCaseSensitive();
+ FILE * popen(const char *name,const char *type);
+ int pclose(FILE *stream);
+ void sysTimerStart(void);
+ void sysTimerStop(void);
+ double getSysElapsedTime(void);
+ void sleep(int ms);
+ bool isAbsolutePath(const char *fileName);
+ void correct_path(void);
+ void setShortDir(void);
+}
+
extern "C" {
void * portable_iconv_open(const char* tocode, const char* fromcode);
diff --git a/src/pre.h b/src/pre.h
index 190673f..137b397 100644
--- a/src/pre.h
+++ b/src/pre.h
@@ -20,10 +20,16 @@
class BufStr;
-void initPreprocessor();
-void cleanUpPreprocessor();
-void addSearchDir(const char *dir);
-void preprocessFile(const char *fileName,BufStr &input,BufStr &output);
-void preFreeScanner();
+class Preprocessor
+{
+ public:
+ Preprocessor();
+ ~Preprocessor();
+ void processFile(const char *fileName,BufStr &input,BufStr &output);
+ void addSearchDir(const char *dir);
+ private:
+ struct Private;
+ Private *p;
+};
#endif
diff --git a/src/pre.l b/src/pre.l
index cebc98f..2a66146 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -16,6 +16,8 @@
*/
%option never-interactive
%option prefix="preYY"
+%option reentrant
+%option extra-type="struct preYY_state *"
%{
@@ -87,7 +89,7 @@ struct FileState
};
/** @brief Singleton that manages the defines available while
- * proprocessing files.
+ * preprocessing files.
*/
class DefineManager
{
@@ -96,7 +98,8 @@ class DefineManager
{
public:
/** Creates an empty container for defines */
- DefinesPerFile() : m_defines(257), m_includedFiles(17)
+ DefinesPerFile(DefineManager *parent)
+ : m_parent(parent), m_defines(257), m_includedFiles(17)
{
m_defines.setAutoDelete(TRUE);
}
@@ -126,24 +129,25 @@ class DefineManager
}
void collectDefines(DefineDict *dict,QDict<void> &includeStack);
private:
+ DefineManager *m_parent;
DefineDict m_defines;
QDict<void> m_includedFiles;
};
public:
friend class DefinesPerFile;
- /** Returns a reference to the singleton */
- static DefineManager &instance()
+
+ /** Creates a new DefineManager object */
+ DefineManager() : m_fileMap(1009), m_contextDefines(1009)
{
- if (theInstance==0) theInstance = new DefineManager;
- return *theInstance;
+ m_fileMap.setAutoDelete(TRUE);
}
- /** Deletes the singleton */
- static void deleteInstance()
+
+ /** Destroys the object */
+ virtual ~DefineManager()
{
- delete theInstance;
- theInstance = 0;
}
+
/** Starts a context in which defines are collected.
* Called at the start of a new file that is preprocessed.
* @param fileName the name of the file to process.
@@ -157,7 +161,7 @@ class DefineManager
if (dpf==0)
{
//printf("New file!\n");
- dpf = new DefinesPerFile;
+ dpf = new DefinesPerFile(this);
m_fileMap.insert(fileName,dpf);
}
}
@@ -182,7 +186,7 @@ class DefineManager
if (dpf==0)
{
//printf("New file!\n");
- dpf = new DefinesPerFile;
+ dpf = new DefinesPerFile(this);
m_fileMap.insert(fileName,dpf);
}
else
@@ -211,7 +215,7 @@ class DefineManager
DefinesPerFile *dpf = m_fileMap.find(fileName);
if (dpf==0)
{
- dpf = new DefinesPerFile;
+ dpf = new DefinesPerFile(this);
m_fileMap.insert(fileName,dpf);
}
dpf->addDefine(def);
@@ -228,7 +232,7 @@ class DefineManager
DefinesPerFile *dpf = m_fileMap.find(fromFileName);
if (dpf==0)
{
- dpf = new DefinesPerFile;
+ dpf = new DefinesPerFile(this);
m_fileMap.insert(fromFileName,dpf);
}
dpf->addInclude(toFileName);
@@ -248,9 +252,8 @@ class DefineManager
{
return m_contextDefines;
}
- private:
- static DefineManager *theInstance;
+ private:
/** Helper function to collect all define for a given file */
void collectDefinesForFile(const char *fileName,DefineDict *dict)
{
@@ -270,23 +273,10 @@ class DefineManager
return m_fileMap.find(fileName);
}
- /** Creates a new DefineManager object */
- DefineManager() : m_fileMap(1009), m_contextDefines(1009)
- {
- m_fileMap.setAutoDelete(TRUE);
- }
-
- /** Destroys the object */
- virtual ~DefineManager()
- {
- }
-
QDict<DefinesPerFile> m_fileMap;
DefineDict m_contextDefines;
};
-/** Singleton instance */
-DefineManager *DefineManager::theInstance = 0;
/** Collects all defines for a file and all files that the file includes.
* This function will recursively call itself for each file.
@@ -304,7 +294,7 @@ void DefineManager::DefinesPerFile::collectDefines(
for (di.toFirst();(di.current());++di)
{
QCString incFile = di.currentKey();
- DefinesPerFile *dpf = DefineManager::instance().find(incFile);
+ DefinesPerFile *dpf = m_parent->find(incFile);
if (dpf && includeStack.find(incFile)==0)
{
//printf(" processing include %s\n",incFile.data());
@@ -334,162 +324,1479 @@ void DefineManager::DefinesPerFile::collectDefines(
* scanner's state
*/
-static int g_yyLineNr = 1;
-static int g_yyMLines = 1;
-static int g_yyColNr = 1;
-static QCString g_yyFileName;
-static FileDef *g_yyFileDef;
-static FileDef *g_inputFileDef;
-static int g_ifcount = 0;
-static QStrList *g_pathList = 0;
-static QStack<FileState> g_includeStack;
-static QDict<int> *g_argDict;
-static int g_defArgs = -1;
-static QCString g_defName;
-static QCString g_defText;
-static QCString g_defLitText;
-static QCString g_defArgsStr;
-static QCString g_defExtraSpacing;
-static bool g_defVarArgs;
-static int g_level;
-static int g_lastCContext;
-static int g_lastCPPContext;
-static QArray<int> g_levelGuard;
-static BufStr *g_inputBuf;
-static int g_inputBufPos;
-static BufStr *g_outputBuf;
-static int g_roundCount;
-static bool g_quoteArg;
-static DefineDict *g_expandedDict;
-static int g_findDefArgContext;
-static bool g_expectGuard;
-static QCString g_guardName;
-static QCString g_lastGuardName;
-static QCString g_incName;
-static QCString g_guardExpr;
-static int g_curlyCount;
-static bool g_nospaces; // add extra spaces during macro expansion
-
-static bool g_macroExpansion; // from the configuration
-static bool g_expandOnlyPredef; // from the configuration
-static int g_commentCount;
-static bool g_insideComment;
-static bool g_isImported;
-static QCString g_blockName;
-static int g_condCtx;
-static bool g_skip;
-static QStack<CondCtx> g_condStack;
-static bool g_insideCS; // C# has simpler preprocessor
-static bool g_isSource;
-
-static bool g_lexInit = FALSE;
-static int g_fenceSize = 0;
-static bool g_ccomment;
-static QCString g_delimiter;
-
-//DefineDict* getGlobalDefineDict()
-//{
-// return g_globalDefineDict;
-//}
-
-static void setFileName(const char *name)
+struct preYY_state
{
+ preYY_state() : allIncludes(10009) {}
+ int yyLineNr = 1;
+ int yyMLines = 1;
+ int yyColNr = 1;
+ QCString yyFileName;
+ FileDef *yyFileDef;
+ FileDef *inputFileDef;
+ int ifcount = 0;
+ QStrList *pathList = 0;
+ QStack<FileState> includeStack;
+ QDict<int> *argDict = 0;
+ int defArgs = -1;
+ QCString defName;
+ QCString defText;
+ QCString defLitText;
+ QCString defArgsStr;
+ QCString defExtraSpacing;
+ bool defVarArgs;
+ int level;
+ int lastCContext;
+ int lastCPPContext;
+ QArray<int> levelGuard;
+ BufStr *inputBuf = 0;
+ int inputBufPos;
+ BufStr *outputBuf = 0;
+ int roundCount;
+ bool quoteArg;
+ DefineDict *expandedDict = 0;
+ int findDefArgContext;
+ bool expectGuard;
+ QCString guardName;
+ QCString lastGuardName;
+ QCString incName;
+ QCString guardExpr;
+ int curlyCount;
+ bool nospaces; // add extra spaces during macro expansion
+
+ bool macroExpansion; // from the configuration
+ bool expandOnlyPredef; // from the configuration
+ int commentCount;
+ bool insideComment;
+ bool isImported;
+ QCString blockName;
+ int condCtx;
+ bool skip;
+ QStack<CondCtx> condStack;
+ bool insideCS; // C# has simpler preprocessor
+ bool isSource;
+
+ int fenceSize = 0;
+ bool ccomment;
+ QCString delimiter;
+ QDict<void> allIncludes;
+ QDict<void> expansionDict;
+ DefineManager defineManager;
+ ConstExpressionParser constExpParser;
+};
+
+// stateless functions
+static QCString escapeAt(const char *text);
+static QCString extractTrailingComment(const char *s);
+static char resolveTrigraph(char c);
+
+// statefull functions
+static inline void outputArray(yyscan_t yyscanner,const char *a,int len);
+static inline void outputChar(yyscan_t yyscanner,char c);
+static QCString expandMacro(yyscan_t yyscanner,const QCString &name);
+static void readIncludeFile(yyscan_t yyscanner,const QCString &inc);
+static void incrLevel(yyscan_t yyscanner);
+static void decrLevel(yyscan_t yyscanner);
+static void setCaseDone(yyscan_t yyscanner,bool value);
+static bool otherCaseDone(yyscan_t yyscanner);
+static bool computeExpression(yyscan_t yyscanner,const QCString &expr);
+static void startCondSection(yyscan_t yyscanner,const char *sectId);
+static void endCondSection(yyscan_t yyscanner);
+static void addDefine(yyscan_t yyscanner);
+static Define * newDefine(yyscan_t yyscanner);
+static void setFileName(yyscan_t yyscanner,const char *name);
+static int yyread(yyscan_t yyscanner,char *buf,int max_size);
+
+/* ----------------------------------------------------------------- */
+
+#undef YY_INPUT
+#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
+
+/* ----------------------------------------------------------------- */
+
+%}
+
+ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
+B [ \t]
+BN [ \t\r\n]
+RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
+RAWEND ")"[^ \t\(\)\\]{0,16}\"
+CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
+
+%option noyywrap
+
+%x Start
+%x Command
+%x SkipCommand
+%x SkipLine
+%x SkipString
+%x CopyLine
+%x CopyString
+%x CopyStringCs
+%x CopyStringFtn
+%x CopyStringFtnDouble
+%x CopyRawString
+%x Include
+%x IncludeID
+%x EndImport
+%x DefName
+%x DefineArg
+%x DefineText
+%x SkipCPPBlock
+%x Ifdef
+%x Ifndef
+%x SkipCComment
+%x ArgCopyCComment
+%x CopyCComment
+%x SkipVerbatim
+%x SkipCPPComment
+%x RemoveCComment
+%x RemoveCPPComment
+%x Guard
+%x DefinedExpr1
+%x DefinedExpr2
+%x SkipDoubleQuote
+%x SkipSingleQuote
+%x UndefName
+%x IgnoreLine
+%x FindDefineArgs
+%x ReadString
+%x CondLineC
+%x CondLineCpp
+%x SkipCond
+
+%%
+
+<*>\x06
+<*>\x00
+<*>\r
+<*>"??"[=/'()!<>-] { // Trigraph
+ unput(resolveTrigraph(yytext[2]));
+ }
+<Start>^{B}*"#" { BEGIN(Command); yyextra->yyColNr+=yyleng; yyextra->yyMLines=0;}
+<Start>^{B}*/[^#] {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ BEGIN(CopyLine);
+ }
+<Start>^{B}*[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]+{B}*"("[^\)\n]*")"/{BN}{1,10}*[:{] { // constructors?
+ int i;
+ for (i=(int)yyleng-1;i>=0;i--)
+ {
+ unput(yytext[i]);
+ }
+ BEGIN(CopyLine);
+ }
+<Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\(\)\n]*"("[^\)\n]*")"[^\)\n]*")"{B}*\n | // function list macro with one (...) argument, e.g. for K_GLOBAL_STATIC_WITH_ARGS
+<Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\)\n]*")"{B}*\n { // function like macro
+ bool skipFuncMacros = Config_getBool(SKIP_FUNCTION_MACROS);
+ QCString name(yytext);
+ name=name.left(name.find('(')).stripWhiteSpace();
+
+ Define *def=0;
+ if (skipFuncMacros &&
+ name!="Q_PROPERTY" &&
+ !(
+ (yyextra->includeStack.isEmpty() || yyextra->curlyCount>0) &&
+ yyextra->macroExpansion &&
+ (def=yyextra->defineManager.isDefined(name)) &&
+ /*macroIsAccessible(def) &&*/
+ (!yyextra->expandOnlyPredef || def->isPredefined)
+ )
+ )
+ {
+ outputChar(yyscanner,'\n');
+ yyextra->yyLineNr++;
+ }
+ else // don't skip
+ {
+ int i;
+ for (i=(int)yyleng-1;i>=0;i--)
+ {
+ unput(yytext[i]);
+ }
+ BEGIN(CopyLine);
+ }
+ }
+<CopyLine>"extern"{BN}{0,80}"\"C\""*{BN}{0,80}"{" {
+ QCString text=yytext;
+ yyextra->yyLineNr+=text.contains('\n');
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyLine>{RAWBEGIN} {
+ yyextra->delimiter = yytext+2;
+ yyextra->delimiter=yyextra->delimiter.left(yyextra->delimiter.length()-1);
+ outputArray(yyscanner,yytext,(int)yyleng);
+ BEGIN(CopyRawString);
+ }
+<CopyLine>"{" { // count brackets inside the main file
+ if (yyextra->includeStack.isEmpty())
+ {
+ yyextra->curlyCount++;
+ }
+ outputChar(yyscanner,*yytext);
+ }
+<CopyLine>"}" { // count brackets inside the main file
+ if (yyextra->includeStack.isEmpty() && yyextra->curlyCount>0)
+ {
+ yyextra->curlyCount--;
+ }
+ outputChar(yyscanner,*yytext);
+ }
+<CopyLine>"'"\\[0-7]{1,3}"'" {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyLine>"'"\\."'" {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyLine>"'"."'" {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyLine>@\" {
+ if (getLanguageFromFileName(yyextra->yyFileName)!=SrcLangExt_CSharp) REJECT;
+ outputArray(yyscanner,yytext,(int)yyleng);
+ BEGIN( CopyStringCs );
+ }
+<CopyLine>\" {
+ outputChar(yyscanner,*yytext);
+ if (getLanguageFromFileName(yyextra->yyFileName)!=SrcLangExt_Fortran)
+ {
+ BEGIN( CopyString );
+ }
+ else
+ {
+ BEGIN( CopyStringFtnDouble );
+ }
+ }
+<CopyLine>\' {
+ if (getLanguageFromFileName(yyextra->yyFileName)!=SrcLangExt_Fortran) REJECT;
+ outputChar(yyscanner,*yytext);
+ BEGIN( CopyStringFtn );
+ }
+<CopyString>[^\"\\\r\n]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyStringCs>[^\"\r\n]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyString>\\. {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyString,CopyStringCs>\" {
+ outputChar(yyscanner,*yytext);
+ BEGIN( CopyLine );
+ }
+<CopyStringFtnDouble>[^\"\\\r\n]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyStringFtnDouble>\\. {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyStringFtnDouble>\" {
+ outputChar(yyscanner,*yytext);
+ BEGIN( CopyLine );
+ }
+<CopyStringFtn>[^\'\\\r\n]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyStringFtn>\\. {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyStringFtn>\' {
+ outputChar(yyscanner,*yytext);
+ BEGIN( CopyLine );
+ }
+<CopyRawString>{RAWEND} {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ QCString delimiter = yytext+1;
+ delimiter=delimiter.left(delimiter.length()-1);
+ if (delimiter==yyextra->delimiter)
+ {
+ BEGIN( CopyLine );
+ }
+ }
+<CopyRawString>[^)]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<CopyRawString>. {
+ outputChar(yyscanner,*yytext);
+ }
+<CopyLine>{ID}/{BN}{0,80}"(" {
+ yyextra->expectGuard = FALSE;
+ Define *def=0;
+ //def=yyextra->globalDefineDict->find(yytext);
+ //def=yyextra->defineManager.isDefined(yytext);
+ //printf("Search for define %s found=%d yyextra->includeStack.isEmpty()=%d "
+ // "yyextra->curlyCount=%d yyextra->macroExpansion=%d yyextra->expandOnlyPredef=%d "
+ // "isPreDefined=%d\n",yytext,def ? 1 : 0,
+ // yyextra->includeStack.isEmpty(),yyextra->curlyCount,yyextra->macroExpansion,yyextra->expandOnlyPredef,
+ // def ? def->isPredefined : -1
+ // );
+ if ((yyextra->includeStack.isEmpty() || yyextra->curlyCount>0) &&
+ yyextra->macroExpansion &&
+ (def=yyextra->defineManager.isDefined(yytext)) &&
+ /*(def->isPredefined || macroIsAccessible(def)) && */
+ (!yyextra->expandOnlyPredef || def->isPredefined)
+ )
+ {
+ //printf("Found it! #args=%d\n",def->nargs);
+ yyextra->roundCount=0;
+ yyextra->defArgsStr=yytext;
+ if (def->nargs==-1) // no function macro
+ {
+ QCString result = def->isPredefined ? def->definition : expandMacro(yyscanner,yyextra->defArgsStr);
+ outputArray(yyscanner,result,result.length());
+ }
+ else // zero or more arguments
+ {
+ yyextra->findDefArgContext = CopyLine;
+ BEGIN(FindDefineArgs);
+ }
+ }
+ else
+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+ }
+<CopyLine>{ID} {
+ Define *def=0;
+ if ((yyextra->includeStack.isEmpty() || yyextra->curlyCount>0) &&
+ yyextra->macroExpansion &&
+ (def=yyextra->defineManager.isDefined(yytext)) &&
+ def->nargs==-1 &&
+ /*(def->isPredefined || macroIsAccessible(def)) &&*/
+ (!yyextra->expandOnlyPredef || def->isPredefined)
+ )
+ {
+ QCString result=def->isPredefined ? def->definition : expandMacro(yyscanner,yytext);
+ outputArray(yyscanner,result,result.length());
+ }
+ else
+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+ }
+<CopyLine>"\\"\r?/\n { // strip line continuation characters
+ if (getLanguageFromFileName(yyextra->yyFileName)==SrcLangExt_Fortran) outputChar(yyscanner,*yytext);
+ }
+<CopyLine>. {
+ outputChar(yyscanner,*yytext);
+ }
+<CopyLine>\n {
+ outputChar(yyscanner,'\n');
+ BEGIN(Start);
+ yyextra->yyLineNr++;
+ yyextra->yyColNr=1;
+ }
+<FindDefineArgs>"(" {
+ yyextra->defArgsStr+='(';
+ yyextra->roundCount++;
+ }
+<FindDefineArgs>")" {
+ yyextra->defArgsStr+=')';
+ yyextra->roundCount--;
+ if (yyextra->roundCount==0)
+ {
+ QCString result=expandMacro(yyscanner,yyextra->defArgsStr);
+ //printf("yyextra->defArgsStr='%s'->'%s'\n",yyextra->defArgsStr.data(),result.data());
+ if (yyextra->findDefArgContext==CopyLine)
+ {
+ outputArray(yyscanner,result,result.length());
+ BEGIN(yyextra->findDefArgContext);
+ }
+ else // yyextra->findDefArgContext==IncludeID
+ {
+ readIncludeFile(yyscanner,result);
+ yyextra->nospaces=FALSE;
+ BEGIN(Start);
+ }
+ }
+ }
+ /*
+<FindDefineArgs>")"{B}*"(" {
+ yyextra->defArgsStr+=yytext;
+ }
+ */
+<FindDefineArgs>{CHARLIT} {
+ yyextra->defArgsStr+=yytext;
+ }
+<FindDefineArgs>"/*"[*]? {
+ yyextra->defArgsStr+=yytext;
+ BEGIN(ArgCopyCComment);
+ }
+<FindDefineArgs>\" {
+ yyextra->defArgsStr+=*yytext;
+ BEGIN(ReadString);
+ }
+<FindDefineArgs>' {
+ if (getLanguageFromFileName(yyextra->yyFileName)!=SrcLangExt_Fortran) REJECT;
+ yyextra->defArgsStr+=*yytext;
+ BEGIN(ReadString);
+ }
+<FindDefineArgs>\n {
+ yyextra->defArgsStr+=' ';
+ yyextra->yyLineNr++;
+ outputChar(yyscanner,'\n');
+ }
+<FindDefineArgs>"@" {
+ yyextra->defArgsStr+="@@";
+ }
+<FindDefineArgs>. {
+ yyextra->defArgsStr+=*yytext;
+ }
+<ArgCopyCComment>[^*\n]+ {
+ yyextra->defArgsStr+=yytext;
+ }
+<ArgCopyCComment>"*/" {
+ yyextra->defArgsStr+=yytext;
+ BEGIN(FindDefineArgs);
+ }
+<ArgCopyCComment>\n {
+ yyextra->defArgsStr+=' ';
+ yyextra->yyLineNr++;
+ outputChar(yyscanner,'\n');
+ }
+<ArgCopyCComment>. {
+ yyextra->defArgsStr+=yytext;
+ }
+<ReadString>"\"" {
+ yyextra->defArgsStr+=*yytext;
+ BEGIN(FindDefineArgs);
+ }
+<ReadString>"'" {
+ if (getLanguageFromFileName(yyextra->yyFileName)!=SrcLangExt_Fortran) REJECT;
+ yyextra->defArgsStr+=*yytext;
+ BEGIN(FindDefineArgs);
+ }
+
+<ReadString>"//"|"/*" {
+ yyextra->defArgsStr+=yytext;
+ }
+<ReadString>\\/\r?\n { // line continuation
+ }
+<ReadString>\\. {
+ yyextra->defArgsStr+=yytext;
+ }
+<ReadString>. {
+ yyextra->defArgsStr+=*yytext;
+ }
+<Command>("include"|"import"){B}+/{ID} {
+ yyextra->isImported = yytext[1]=='m';
+ if (yyextra->macroExpansion)
+ BEGIN(IncludeID);
+ }
+<Command>("include"|"import"){B}*[<"] {
+ yyextra->isImported = yytext[1]=='m';
+ char c[2];
+ c[0]=yytext[yyleng-1];c[1]='\0';
+ yyextra->incName=c;
+ BEGIN(Include);
+ }
+<Command>("cmake")?"define"{B}+ {
+ //printf("!!!DefName\n");
+ yyextra->yyColNr+=yyleng;
+ BEGIN(DefName);
+ }
+<Command>"ifdef"/{B}*"(" {
+ incrLevel(yyscanner);
+ yyextra->guardExpr.resize(0);
+ BEGIN(DefinedExpr2);
+ }
+<Command>"ifdef"/{B}+ {
+ //printf("Pre.l: ifdef\n");
+ incrLevel(yyscanner);
+ yyextra->guardExpr.resize(0);
+ BEGIN(DefinedExpr1);
+ }
+<Command>"ifndef"/{B}*"(" {
+ incrLevel(yyscanner);
+ yyextra->guardExpr="! ";
+ BEGIN(DefinedExpr2);
+ }
+<Command>"ifndef"/{B}+ {
+ incrLevel(yyscanner);
+ yyextra->guardExpr="! ";
+ BEGIN(DefinedExpr1);
+ }
+<Command>"if"/[ \t(!] {
+ incrLevel(yyscanner);
+ yyextra->guardExpr.resize(0);
+ BEGIN(Guard);
+ }
+<Command>("elif"|"else"{B}*"if")/[ \t(!] {
+ if (!otherCaseDone(yyscanner))
+ {
+ yyextra->guardExpr.resize(0);
+ BEGIN(Guard);
+ }
+ else
+ {
+ yyextra->ifcount=0;
+ BEGIN(SkipCPPBlock);
+ }
+ }
+<Command>"else"/[^a-z_A-Z0-9\x80-\xFF] {
+ //printf("else yyextra->levelGuard[%d]=%d\n",yyextra->level-1,yyextra->levelGuard[yyextra->level-1]);
+ if (otherCaseDone(yyscanner))
+ {
+ yyextra->ifcount=0;
+ BEGIN(SkipCPPBlock);
+ }
+ else
+ {
+ setCaseDone(yyscanner,TRUE);
+ //yyextra->levelGuard[yyextra->level-1]=TRUE;
+ }
+ }
+<Command>"undef"{B}+ {
+ BEGIN(UndefName);
+ }
+<Command>("elif"|"else"{B}*"if")/[ \t(!] {
+ if (!otherCaseDone(yyscanner))
+ {
+ yyextra->guardExpr.resize(0);
+ BEGIN(Guard);
+ }
+ }
+<Command>"endif"/[^a-z_A-Z0-9\x80-\xFF] {
+ //printf("Pre.l: #endif\n");
+ decrLevel(yyscanner);
+ }
+<Command,IgnoreLine>\n {
+ outputChar(yyscanner,'\n');
+ BEGIN(Start);
+ yyextra->yyLineNr++;
+ }
+<Command>"pragma"{B}+"once" {
+ yyextra->expectGuard = FALSE;
+ }
+<Command>{ID} { // unknown directive
+ BEGIN(IgnoreLine);
+ }
+<IgnoreLine>\\[\r]?\n {
+ outputChar(yyscanner,'\n');
+ yyextra->yyLineNr++;
+ }
+<IgnoreLine>.
+<Command>. {yyextra->yyColNr+=yyleng;}
+<UndefName>{ID} {
+ Define *def;
+ if ((def=yyextra->defineManager.isDefined(yytext))
+ /*&& !def->isPredefined*/
+ && !def->nonRecursive
+ )
+ {
+ //printf("undefining %s\n",yytext);
+ def->undef=TRUE;
+ }
+ BEGIN(Start);
+ }
+<Guard>\\[\r]?\n {
+ outputChar(yyscanner,'\n');
+ yyextra->guardExpr+=' ';
+ yyextra->yyLineNr++;
+ }
+<Guard>"defined"/{B}*"(" {
+ BEGIN(DefinedExpr2);
+ }
+<Guard>"defined"/{B}+ {
+ BEGIN(DefinedExpr1);
+ }
+<Guard>{ID} { yyextra->guardExpr+=yytext; }
+<Guard>"@" { yyextra->guardExpr+="@@"; }
+<Guard>. { yyextra->guardExpr+=*yytext; }
+<Guard>\n {
+ unput(*yytext);
+ //printf("Guard: '%s'\n",
+ // yyextra->guardExpr.data());
+ bool guard=computeExpression(yyscanner,yyextra->guardExpr);
+ setCaseDone(yyscanner,guard);
+ //printf("if yyextra->levelGuard[%d]=%d\n",yyextra->level-1,yyextra->levelGuard[yyextra->level-1]);
+ if (guard)
+ {
+ BEGIN(Start);
+ }
+ else
+ {
+ yyextra->ifcount=0;
+ BEGIN(SkipCPPBlock);
+ }
+ }
+<DefinedExpr1,DefinedExpr2>\\\n { yyextra->yyLineNr++; outputChar(yyscanner,'\n'); }
+<DefinedExpr1>{ID} {
+ if (yyextra->defineManager.isDefined(yytext) || yyextra->guardName==yytext)
+ yyextra->guardExpr+=" 1L ";
+ else
+ yyextra->guardExpr+=" 0L ";
+ yyextra->lastGuardName=yytext;
+ BEGIN(Guard);
+ }
+<DefinedExpr2>{ID} {
+ if (yyextra->defineManager.isDefined(yytext) || yyextra->guardName==yytext)
+ yyextra->guardExpr+=" 1L ";
+ else
+ yyextra->guardExpr+=" 0L ";
+ yyextra->lastGuardName=yytext;
+ }
+<DefinedExpr1,DefinedExpr2>\n { // should not happen, handle anyway
+ yyextra->yyLineNr++;
+ yyextra->ifcount=0;
+ BEGIN(SkipCPPBlock);
+ }
+<DefinedExpr2>")" {
+ BEGIN(Guard);
+ }
+<DefinedExpr1,DefinedExpr2>.
+<SkipCPPBlock>^{B}*"#" { BEGIN(SkipCommand); }
+<SkipCPPBlock>^{B}*/[^#] { BEGIN(SkipLine); }
+<SkipCPPBlock>\n { yyextra->yyLineNr++; outputChar(yyscanner,'\n'); }
+<SkipCPPBlock>.
+<SkipCommand>"if"(("n")?("def"))?/[ \t(!] {
+ incrLevel(yyscanner);
+ yyextra->ifcount++;
+ //printf("#if... depth=%d\n",yyextra->ifcount);
+ }
+<SkipCommand>"else" {
+ //printf("Else! yyextra->ifcount=%d otherCaseDone=%d\n",yyextra->ifcount,otherCaseDone());
+ if (yyextra->ifcount==0 && !otherCaseDone(yyscanner))
+ {
+ setCaseDone(yyscanner,TRUE);
+ //outputChar(yyscanner,'\n');
+ BEGIN(Start);
+ }
+ }
+<SkipCommand>("elif"|"else"{B}*"if")/[ \t(!] {
+ if (yyextra->ifcount==0)
+ {
+ if (!otherCaseDone(yyscanner))
+ {
+ yyextra->guardExpr.resize(0);
+ yyextra->lastGuardName.resize(0);
+ BEGIN(Guard);
+ }
+ else
+ {
+ BEGIN(SkipCPPBlock);
+ }
+ }
+ }
+<SkipCommand>"endif" {
+ yyextra->expectGuard = FALSE;
+ decrLevel(yyscanner);
+ if (--yyextra->ifcount<0)
+ {
+ //outputChar(yyscanner,'\n');
+ BEGIN(Start);
+ }
+ }
+<SkipCommand>\n {
+ outputChar(yyscanner,'\n');
+ yyextra->yyLineNr++;
+ BEGIN(SkipCPPBlock);
+ }
+<SkipCommand>{ID} { // unknown directive
+ BEGIN(SkipLine);
+ }
+<SkipCommand>.
+<SkipLine>[^'"/\n]+
+<SkipLine>{CHARLIT} { }
+<SkipLine>\" {
+ BEGIN(SkipString);
+ }
+<SkipLine>.
+<SkipString>"//"/[^\n]* {
+ }
+<SkipLine,SkipCommand,SkipCPPBlock>"//"[^\n]* {
+ yyextra->lastCPPContext=YY_START;
+ BEGIN(RemoveCPPComment);
+ }
+<SkipString>"/*"/[^\n]* {
+ }
+<SkipLine,SkipCommand,SkipCPPBlock>"/*"/[^\n]* {
+ yyextra->lastCContext=YY_START;
+ BEGIN(RemoveCComment);
+ }
+<SkipLine>\n {
+ outputChar(yyscanner,'\n');
+ yyextra->yyLineNr++;
+ BEGIN(SkipCPPBlock);
+ }
+<SkipString>[^"\\\n]+ { }
+<SkipString>\\. { }
+<SkipString>\" {
+ BEGIN(SkipLine);
+ }
+<SkipString>. { }
+<IncludeID>{ID}{B}*/"(" {
+ yyextra->nospaces=TRUE;
+ yyextra->roundCount=0;
+ yyextra->defArgsStr=yytext;
+ yyextra->findDefArgContext = IncludeID;
+ BEGIN(FindDefineArgs);
+ }
+<IncludeID>{ID} {
+ yyextra->nospaces=TRUE;
+ readIncludeFile(yyscanner,expandMacro(yyscanner,yytext));
+ BEGIN(Start);
+ }
+<Include>[^\">\n]+[\">] {
+ yyextra->incName+=yytext;
+ readIncludeFile(yyscanner,yyextra->incName);
+ if (yyextra->isImported)
+ {
+ BEGIN(EndImport);
+ }
+ else
+ {
+ BEGIN(Start);
+ }
+ }
+<EndImport>[^\\\n]*/\n {
+ BEGIN(Start);
+ }
+<EndImport>\\[\r]?"\n" {
+ outputChar(yyscanner,'\n');
+ yyextra->yyLineNr++;
+ }
+<EndImport>. {
+ }
+<DefName>{ID}/("\\\n")*"(" { // define with argument
+ //printf("Define() '%s'\n",yytext);
+ delete yyextra->argDict;
+ yyextra->argDict = new QDict<int>(31);
+ yyextra->argDict->setAutoDelete(TRUE);
+ yyextra->defArgs = 0;
+ yyextra->defArgsStr.resize(0);
+ yyextra->defText.resize(0);
+ yyextra->defLitText.resize(0);
+ yyextra->defName = yytext;
+ yyextra->defVarArgs = FALSE;
+ yyextra->defExtraSpacing.resize(0);
+ BEGIN(DefineArg);
+ }
+<DefName>{ID}{B}+"1"/[ \r\t\n] { // special case: define with 1 -> can be "guard"
+ //printf("Define '%s'\n",yytext);
+ delete yyextra->argDict; yyextra->argDict=0;
+ yyextra->defArgs = -1;
+ yyextra->defArgsStr.resize(0);
+ yyextra->defName = yytext;
+ yyextra->defName = yyextra->defName.left(yyextra->defName.length()-1).stripWhiteSpace();
+ yyextra->defVarArgs = FALSE;
+ //printf("Guard check: %s!=%s || %d\n",
+ // yyextra->defName.data(),yyextra->lastGuardName.data(),yyextra->expectGuard);
+ if (yyextra->curlyCount>0 || yyextra->defName!=yyextra->lastGuardName || !yyextra->expectGuard)
+ { // define may appear in the output
+ QCString tmp=(QCString)"#define "+yyextra->defName;
+ outputArray(yyscanner,tmp.data(),tmp.length());
+ yyextra->quoteArg=FALSE;
+ yyextra->insideComment=FALSE;
+ yyextra->lastGuardName.resize(0);
+ yyextra->defText="1";
+ yyextra->defLitText="1";
+ BEGIN(DefineText);
+ }
+ else // define is a guard => hide
+ {
+ //printf("Found a guard %s\n",yytext);
+ yyextra->defText.resize(0);
+ yyextra->defLitText.resize(0);
+ BEGIN(Start);
+ }
+ yyextra->expectGuard=FALSE;
+ }
+<DefName>{ID}/{B}*"\n" { // empty define
+ delete yyextra->argDict; yyextra->argDict=0;
+ yyextra->defArgs = -1;
+ yyextra->defName = yytext;
+ yyextra->defArgsStr.resize(0);
+ yyextra->defText.resize(0);
+ yyextra->defLitText.resize(0);
+ yyextra->defVarArgs = FALSE;
+ //printf("Guard check: %s!=%s || %d\n",
+ // yyextra->defName.data(),yyextra->lastGuardName.data(),yyextra->expectGuard);
+ if (yyextra->curlyCount>0 || yyextra->defName!=yyextra->lastGuardName || !yyextra->expectGuard)
+ { // define may appear in the output
+ QCString tmp=(QCString)"#define "+yyextra->defName;
+ outputArray(yyscanner,tmp.data(),tmp.length());
+ yyextra->quoteArg=FALSE;
+ yyextra->insideComment=FALSE;
+ if (yyextra->insideCS) yyextra->defText="1"; // for C#, use "1" as define text
+ BEGIN(DefineText);
+ }
+ else // define is a guard => hide
+ {
+ //printf("Found a guard %s\n",yytext);
+ yyextra->guardName = yytext;
+ yyextra->lastGuardName.resize(0);
+ BEGIN(Start);
+ }
+ yyextra->expectGuard=FALSE;
+ }
+<DefName>{ID}/{B}* { // define with content
+ //printf("Define '%s'\n",yytext);
+ delete yyextra->argDict; yyextra->argDict=0;
+ yyextra->defArgs = -1;
+ yyextra->defArgsStr.resize(0);
+ yyextra->defText.resize(0);
+ yyextra->defLitText.resize(0);
+ yyextra->defName = yytext;
+ yyextra->defVarArgs = FALSE;
+ QCString tmp=(QCString)"#define "+yyextra->defName+yyextra->defArgsStr;
+ outputArray(yyscanner,tmp.data(),tmp.length());
+ yyextra->quoteArg=FALSE;
+ yyextra->insideComment=FALSE;
+ BEGIN(DefineText);
+ }
+<DefineArg>"\\\n" {
+ yyextra->defExtraSpacing+="\n";
+ yyextra->yyLineNr++;
+ }
+<DefineArg>","{B}* { yyextra->defArgsStr+=yytext; }
+<DefineArg>"("{B}* { yyextra->defArgsStr+=yytext; }
+<DefineArg>{B}*")"{B}* {
+ yyextra->defArgsStr+=yytext;
+ QCString tmp=(QCString)"#define "+yyextra->defName+yyextra->defArgsStr+yyextra->defExtraSpacing;
+ outputArray(yyscanner,tmp.data(),tmp.length());
+ yyextra->quoteArg=FALSE;
+ yyextra->insideComment=FALSE;
+ BEGIN(DefineText);
+ }
+<DefineArg>"..." { // Variadic macro
+ yyextra->defVarArgs = TRUE;
+ yyextra->defArgsStr+=yytext;
+ yyextra->argDict->insert("__VA_ARGS__",new int(yyextra->defArgs));
+ yyextra->defArgs++;
+ }
+<DefineArg>{ID}{B}*("..."?) {
+ //printf("Define addArg(%s)\n",yytext);
+ QCString argName=yytext;
+ yyextra->defVarArgs = yytext[yyleng-1]=='.';
+ if (yyextra->defVarArgs) // strip ellipsis
+ {
+ argName=argName.left(argName.length()-3);
+ }
+ argName = argName.stripWhiteSpace();
+ yyextra->defArgsStr+=yytext;
+ yyextra->argDict->insert(argName,new int(yyextra->defArgs));
+ yyextra->defArgs++;
+ }
+ /*
+<DefineText>"/ **"|"/ *!" {
+ yyextra->defText+=yytext;
+ yyextra->defLitText+=yytext;
+ yyextra->insideComment=TRUE;
+ }
+<DefineText>"* /" {
+ yyextra->defText+=yytext;
+ yyextra->defLitText+=yytext;
+ yyextra->insideComment=FALSE;
+ }
+ */
+<DefineText>"/*"[!*]? {
+ yyextra->defText+=yytext;
+ yyextra->defLitText+=yytext;
+ yyextra->lastCContext=YY_START;
+ yyextra->commentCount=1;
+ BEGIN(CopyCComment);
+ }
+<DefineText>"//"[!/]? {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ yyextra->lastCPPContext=YY_START;
+ yyextra->defLitText+=' ';
+ BEGIN(SkipCPPComment);
+ }
+<SkipCComment>[/]?"*/" {
+ if (yytext[0]=='/') outputChar(yyscanner,'/');
+ outputChar(yyscanner,'*');outputChar(yyscanner,'/');
+ if (--yyextra->commentCount<=0)
+ {
+ if (yyextra->lastCContext==Start)
+ // small hack to make sure that ^... rule will
+ // match when going to Start... Example: "/*...*/ some stuff..."
+ {
+ YY_CURRENT_BUFFER->yy_at_bol=1;
+ }
+ BEGIN(yyextra->lastCContext);
+ }
+ }
+<SkipCComment>"//"("/")* {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<SkipCComment>"/*" {
+ outputChar(yyscanner,'/');outputChar(yyscanner,'*');
+ //yyextra->commentCount++;
+ }
+<SkipCComment>[\\@][\\@]("f{"|"f$"|"f[") {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<SkipCComment>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
+ bool markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
+ if (!markdownSupport)
+ {
+ REJECT;
+ }
+ else
+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ yyextra->fenceSize=yyleng;
+ BEGIN(SkipVerbatim);
+ }
+ }
+<SkipCComment>^({B}*"*"+)?{B}{0,3}"```"[`]* {
+ bool markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
+ if (!markdownSupport)
+ {
+ REJECT;
+ }
+ else
+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ yyextra->fenceSize=yyleng;
+ BEGIN(SkipVerbatim);
+ }
+ }
+<SkipCComment>[\\@][\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"docbookonly"|"rtfonly"|"manonly"|"dot"|"code"("{"[^}]*"}")?){BN}+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ yyextra->yyLineNr+=QCString(yytext).contains('\n');
+ }
+<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"docbookonly"|"rtfonly"|"manonly"|"dot"|"code"("{"[^}]*"}")?){BN}+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ yyextra->yyLineNr+=QCString(yytext).contains('\n');
+ yyextra->fenceSize=0;
+ if (yytext[1]=='f')
+ {
+ yyextra->blockName="f";
+ }
+ else
+ {
+ QCString bn=&yytext[1];
+ int i = bn.find('{'); // for \code{.c}
+ if (i!=-1) bn=bn.left(i);
+ yyextra->blockName=bn.stripWhiteSpace();
+ }
+ BEGIN(SkipVerbatim);
+ }
+<SkipCComment,SkipCPPComment>[\\@][\\@]"cond"[ \t]+ { // escaped @cond
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section
+ yyextra->ccomment=TRUE;
+ yyextra->condCtx=YY_START;
+ BEGIN(CondLineCpp);
+ }
+<SkipCComment>[\\@]"cond"[ \t]+ { // conditional section
+ yyextra->ccomment=FALSE;
+ yyextra->condCtx=YY_START;
+ BEGIN(CondLineC);
+ }
+<CondLineC,CondLineCpp>[!()&| \ta-z_A-Z0-9\x80-\xFF.\-]+ {
+ startCondSection(yyscanner,yytext);
+ if (yyextra->skip)
+ {
+ if (YY_START==CondLineC)
+ {
+ // end C comment
+ outputArray(yyscanner,"*/",2);
+ yyextra->ccomment=TRUE;
+ }
+ else
+ {
+ yyextra->ccomment=FALSE;
+ }
+ BEGIN(SkipCond);
+ }
+ else
+ {
+ BEGIN(yyextra->condCtx);
+ }
+ }
+<CondLineC,CondLineCpp>. { // non-guard character
+ unput(*yytext);
+ startCondSection(yyscanner," ");
+ if (yyextra->skip)
+ {
+ if (YY_START==CondLineC)
+ {
+ // end C comment
+ outputArray(yyscanner,"*/",2);
+ yyextra->ccomment=TRUE;
+ }
+ else
+ {
+ yyextra->ccomment=FALSE;
+ }
+ BEGIN(SkipCond);
+ }
+ else
+ {
+ BEGIN(yyextra->condCtx);
+ }
+ }
+<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*/\n { // no guard
+ if (YY_START==SkipCComment)
+ {
+ yyextra->ccomment=TRUE;
+ // end C comment
+ outputArray(yyscanner,"*/",2);
+ }
+ else
+ {
+ yyextra->ccomment=FALSE;
+ }
+ yyextra->condCtx=YY_START;
+ startCondSection(yyscanner," ");
+ BEGIN(SkipCond);
+ }
+<SkipCond>\n { yyextra->yyLineNr++; outputChar(yyscanner,'\n'); }
+<SkipCond>. { }
+<SkipCond>[^\/\!*\\@\n]+ { }
+<SkipCond>"//"[/!] { yyextra->ccomment=FALSE; }
+<SkipCond>"/*"[*!] { yyextra->ccomment=TRUE; }
+<SkipCond,SkipCComment,SkipCPPComment>[\\@][\\@]"endcond"/[^a-z_A-Z0-9\x80-\xFF] {
+ if (!yyextra->skip)
+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+ }
+<SkipCond>[\\@]"endcond"/[^a-z_A-Z0-9\x80-\xFF] {
+ bool oldSkip = yyextra->skip;
+ endCondSection(yyscanner);
+ if (oldSkip && !yyextra->skip)
+ {
+ if (yyextra->ccomment)
+ {
+ outputArray(yyscanner,"/** ",4);
+ }
+ BEGIN(yyextra->condCtx);
+ }
+ }
+<SkipCComment,SkipCPPComment>[\\@]"endcond"/[^a-z_A-Z0-9\x80-\xFF] {
+ bool oldSkip = yyextra->skip;
+ endCondSection(yyscanner);
+ if (oldSkip && !yyextra->skip)
+ {
+ BEGIN(yyextra->condCtx);
+ }
+ }
+<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode"|"f$"|"f]"|"f}") { /* end of verbatim block */
+ outputArray(yyscanner,yytext,(int)yyleng);
+ if (yytext[1]=='f' && yyextra->blockName=="f")
+ {
+ BEGIN(SkipCComment);
+ }
+ else if (&yytext[4]==yyextra->blockName)
+ {
+ BEGIN(SkipCComment);
+ }
+ }
+<SkipVerbatim>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ if (yyextra->fenceSize==yyleng)
+ {
+ BEGIN(SkipCComment);
+ }
+ }
+<SkipVerbatim>^({B}*"*"+)?{B}{0,3}"```"[`]* {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ if (yyextra->fenceSize==yyleng)
+ {
+ BEGIN(SkipCComment);
+ }
+ }
+<SkipVerbatim>"*/"|"/*" {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<SkipCComment,SkipVerbatim>[^*\\@\x06~`\n\/]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<SkipCComment,SkipVerbatim>\n {
+ yyextra->yyLineNr++;
+ outputChar(yyscanner,'\n');
+ }
+<SkipCComment,SkipVerbatim>. {
+ outputChar(yyscanner,*yytext);
+ }
+<CopyCComment>[^*a-z_A-Z\x80-\xFF\n]*[^*a-z_A-Z\x80-\xFF\\\n] {
+ yyextra->defLitText+=yytext;
+ yyextra->defText+=escapeAt(yytext);
+ }
+<CopyCComment>\\[\r]?\n {
+ yyextra->defLitText+=yytext;
+ outputChar(yyscanner,'\n');
+ yyextra->defText+=" ";
+ yyextra->yyLineNr++;
+ yyextra->yyMLines++;
+ }
+<CopyCComment>"*/" {
+ yyextra->defLitText+=yytext;
+ yyextra->defText+=yytext;
+ BEGIN(yyextra->lastCContext);
+ }
+<CopyCComment>\n {
+ yyextra->yyLineNr++;
+ outputChar(yyscanner,'\n');
+ yyextra->defLitText+=yytext;
+ yyextra->defText+=' ';
+ }
+<RemoveCComment>"*/"{B}*"#" { // see bug 594021 for a usecase for this rule
+ if (yyextra->lastCContext==SkipCPPBlock)
+ {
+ BEGIN(SkipCommand);
+ }
+ else
+ {
+ REJECT;
+ }
+ }
+<RemoveCComment>"*/" { BEGIN(yyextra->lastCContext); }
+<RemoveCComment>"//"
+<RemoveCComment>"/*"
+<RemoveCComment>[^*\x06\n]+
+<RemoveCComment>\n { yyextra->yyLineNr++; outputChar(yyscanner,'\n'); }
+<RemoveCComment>.
+<SkipCPPComment>[^\n\/\\@]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<SkipCPPComment,RemoveCPPComment>\n {
+ unput(*yytext);
+ BEGIN(yyextra->lastCPPContext);
+ }
+<SkipCPPComment>"/*" {
+ outputChar(yyscanner,'/');outputChar(yyscanner,'*');
+ }
+<SkipCPPComment>"//" {
+ outputChar(yyscanner,'/');outputChar(yyscanner,'/');
+ }
+<SkipCPPComment>[^\x06\@\\\n]+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ }
+<SkipCPPComment>. {
+ outputChar(yyscanner,*yytext);
+ }
+<RemoveCPPComment>"/*"
+<RemoveCPPComment>"//"
+<RemoveCPPComment>[^\x06\n]+
+<RemoveCPPComment>.
+<DefineText>"#" {
+ yyextra->quoteArg=TRUE;
+ yyextra->defLitText+=yytext;
+ }
+<DefineText,CopyCComment>{ID} {
+ yyextra->defLitText+=yytext;
+ if (yyextra->quoteArg)
+ {
+ yyextra->defText+="\"";
+ }
+ if (yyextra->defArgs>0)
+ {
+ int *n;
+ if ((n=(*yyextra->argDict)[yytext]))
+ {
+ //if (!yyextra->quoteArg) yyextra->defText+=' ';
+ yyextra->defText+='@';
+ QCString numStr;
+ numStr.sprintf("%d",*n);
+ yyextra->defText+=numStr;
+ //if (!yyextra->quoteArg) yyextra->defText+=' ';
+ }
+ else
+ {
+ yyextra->defText+=yytext;
+ }
+ }
+ else
+ {
+ yyextra->defText+=yytext;
+ }
+ if (yyextra->quoteArg)
+ {
+ yyextra->defText+="\"";
+ }
+ yyextra->quoteArg=FALSE;
+ }
+<CopyCComment>. {
+ yyextra->defLitText+=yytext;
+ yyextra->defText+=yytext;
+ }
+<DefineText>\\[\r]?\n {
+ yyextra->defLitText+=yytext;
+ outputChar(yyscanner,'\n');
+ yyextra->defText += ' ';
+ yyextra->yyLineNr++;
+ yyextra->yyMLines++;
+ }
+<DefineText>\n {
+ QCString comment=extractTrailingComment(yyextra->defLitText);
+ yyextra->defLitText+=yytext;
+ if (!comment.isEmpty())
+ {
+ outputArray(yyscanner,comment,comment.length());
+ yyextra->defLitText=yyextra->defLitText.left(yyextra->defLitText.length()-comment.length()-1);
+ }
+ outputChar(yyscanner,'\n');
+ Define *def=0;
+ //printf("Define name='%s' text='%s' litTexti='%s'\n",yyextra->defName.data(),yyextra->defText.data(),yyextra->defLitText.data());
+ if (yyextra->includeStack.isEmpty() || yyextra->curlyCount>0)
+ {
+ addDefine(yyscanner);
+ }
+ def=yyextra->defineManager.isDefined(yyextra->defName);
+ if (def==0) // new define
+ {
+ //printf("new define '%s'!\n",yyextra->defName.data());
+ Define *nd = newDefine(yyscanner);
+ yyextra->defineManager.addDefine(yyextra->yyFileName,nd);
+
+ // also add it to the local file list if it is a source file
+ //if (yyextra->isSource && yyextra->includeStack.isEmpty())
+ //{
+ // yyextra->fileDefineDict->insert(yyextra->defName,nd);
+ //}
+ }
+ else if (def /*&& macroIsAccessible(def)*/)
+ // name already exists
+ {
+ //printf("existing define!\n");
+ //printf("define found\n");
+ if (def->undef) // undefined name
+ {
+ def->undef = FALSE;
+ def->name = yyextra->defName;
+ def->definition = yyextra->defText.stripWhiteSpace();
+ def->nargs = yyextra->defArgs;
+ def->fileName = yyextra->yyFileName.copy();
+ def->lineNr = yyextra->yyLineNr-yyextra->yyMLines;
+ def->columnNr = yyextra->yyColNr;
+ }
+ else
+ {
+ //printf("error: define %s is defined more than once!\n",yyextra->defName.data());
+ }
+ }
+ delete yyextra->argDict; yyextra->argDict=0;
+ yyextra->yyLineNr++;
+ yyextra->yyColNr=1;
+ yyextra->lastGuardName.resize(0);
+ BEGIN(Start);
+ }
+<DefineText>{B}* { yyextra->defText += ' '; yyextra->defLitText+=yytext; }
+<DefineText>{B}*"##"{B}* { yyextra->defText += "##"; yyextra->defLitText+=yytext; }
+<DefineText>"@" { yyextra->defText += "@@"; yyextra->defLitText+=yytext; }
+<DefineText>\" {
+ yyextra->defText += *yytext;
+ yyextra->defLitText+=yytext;
+ if (!yyextra->insideComment)
+ {
+ BEGIN(SkipDoubleQuote);
+ }
+ }
+<DefineText>\' { yyextra->defText += *yytext;
+ yyextra->defLitText+=yytext;
+ if (!yyextra->insideComment)
+ {
+ BEGIN(SkipSingleQuote);
+ }
+ }
+<SkipDoubleQuote>"//"[/]? { yyextra->defText += yytext; yyextra->defLitText+=yytext; }
+<SkipDoubleQuote>"/*" { yyextra->defText += yytext; yyextra->defLitText+=yytext; }
+<SkipDoubleQuote>\" {
+ yyextra->defText += *yytext; yyextra->defLitText+=yytext;
+ BEGIN(DefineText);
+ }
+<SkipSingleQuote,SkipDoubleQuote>\\. {
+ yyextra->defText += yytext; yyextra->defLitText+=yytext;
+ }
+<SkipSingleQuote>\' {
+ yyextra->defText += *yytext; yyextra->defLitText+=yytext;
+ BEGIN(DefineText);
+ }
+<SkipDoubleQuote>. { yyextra->defText += *yytext; yyextra->defLitText+=yytext; }
+<SkipSingleQuote>. { yyextra->defText += *yytext; yyextra->defLitText+=yytext; }
+<DefineText>. { yyextra->defText += *yytext; yyextra->defLitText+=yytext; }
+<<EOF>> {
+ DBG_CTX((stderr,"End of include file\n"));
+ //printf("Include stack depth=%d\n",yyextra->includeStack.count());
+ if (yyextra->includeStack.isEmpty())
+ {
+ DBG_CTX((stderr,"Terminating scanner!\n"));
+ yyterminate();
+ }
+ else
+ {
+ FileState *fs=yyextra->includeStack.pop();
+ //fileDefineCache->merge(yyextra->yyFileName,fs->fileName);
+ YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
+ yy_switch_to_buffer( fs->bufState, yyscanner );
+ yy_delete_buffer( oldBuf, yyscanner );
+ yyextra->yyLineNr = fs->lineNr;
+ //preYYin = fs->oldYYin;
+ yyextra->inputBuf = fs->oldFileBuf;
+ yyextra->inputBufPos = fs->oldFileBufPos;
+ yyextra->curlyCount = fs->curlyCount;
+ setFileName(yyscanner,fs->fileName);
+ DBG_CTX((stderr,"######## FileName %s\n",yyextra->yyFileName.data()));
+
+ // Deal with file changes due to
+ // #include's within { .. } blocks
+ QCString lineStr(15+yyextra->yyFileName.length());
+ lineStr.sprintf("# %d \"%s\" 2",yyextra->yyLineNr,yyextra->yyFileName.data());
+ outputArray(yyscanner,lineStr.data(),lineStr.length());
+
+ delete fs; fs=0;
+ }
+ }
+<*>"/*"/"*/" |
+<*>"/*"[*]? {
+ if (YY_START==SkipVerbatim || YY_START==SkipCond)
+ {
+ REJECT;
+ }
+ else
+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ yyextra->lastCContext=YY_START;
+ yyextra->commentCount=1;
+ if (yyleng==3) yyextra->lastGuardName.resize(0); // reset guard in case the #define is documented!
+ BEGIN(SkipCComment);
+ }
+ }
+<*>"//"[/]? {
+ if (YY_START==SkipVerbatim || YY_START==SkipCond || getLanguageFromFileName(yyextra->yyFileName)==SrcLangExt_Fortran)
+ {
+ REJECT;
+ }
+ else
+ {
+ outputArray(yyscanner,yytext,(int)yyleng);
+ yyextra->lastCPPContext=YY_START;
+ if (yyleng==3) yyextra->lastGuardName.resize(0); // reset guard in case the #define is documented!
+ BEGIN(SkipCPPComment);
+ }
+ }
+<*>\n {
+ outputChar(yyscanner,'\n');
+ yyextra->yyLineNr++;
+ }
+<*>. {
+ yyextra->expectGuard = FALSE;
+ outputChar(yyscanner,*yytext);
+ }
+
+%%
+
+/////////////////////////////////////////////////////////////////////////////////////
+
+static int yyread(yyscan_t yyscanner,char *buf,int max_size)
+{
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ int bytesInBuf = state->inputBuf->curPos()-state->inputBufPos;
+ int bytesToCopy = QMIN(max_size,bytesInBuf);
+ memcpy(buf,state->inputBuf->data()+state->inputBufPos,bytesToCopy);
+ state->inputBufPos+=bytesToCopy;
+ return bytesToCopy;
+}
+
+static void setFileName(yyscan_t yyscanner,const char *name)
+{
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
bool ambig;
QFileInfo fi(name);
- g_yyFileName=fi.absFilePath().utf8();
- g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig);
- if (g_yyFileDef==0) // if this is not an input file check if it is an
+ state->yyFileName=fi.absFilePath().utf8();
+ state->yyFileDef=findFileDef(Doxygen::inputNameDict,state->yyFileName,ambig);
+ if (state->yyFileDef==0) // if this is not an input file check if it is an
// include file
{
- g_yyFileDef=findFileDef(Doxygen::includeNameDict,g_yyFileName,ambig);
+ state->yyFileDef=findFileDef(Doxygen::includeNameDict,state->yyFileName,ambig);
}
- //printf("setFileName(%s) g_yyFileName=%s g_yyFileDef=%p\n",
- // name,g_yyFileName.data(),g_yyFileDef);
- if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0;
- g_insideCS = getLanguageFromFileName(g_yyFileName)==SrcLangExt_CSharp;
- g_isSource = guessSection(g_yyFileName);
+ //printf("setFileName(%s) state->yyFileName=%s state->yyFileDef=%p\n",
+ // name,state->yyFileName.data(),state->yyFileDef);
+ if (state->yyFileDef && state->yyFileDef->isReference()) state->yyFileDef=0;
+ state->insideCS = getLanguageFromFileName(state->yyFileName)==SrcLangExt_CSharp;
+ state->isSource = guessSection(state->yyFileName);
}
-static void incrLevel()
+static void incrLevel(yyscan_t yyscanner)
{
- g_level++;
- g_levelGuard.resize(g_level);
- g_levelGuard[g_level-1]=FALSE;
- //printf("%s line %d: incrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ state->level++;
+ state->levelGuard.resize(state->level);
+ state->levelGuard[state->level-1]=FALSE;
+ //printf("%s line %d: incrLevel %d\n",yyextra->yyFileName.data(),yyextra->yyLineNr,yyextra->level);
}
-static void decrLevel()
+static void decrLevel(yyscan_t yyscanner)
{
- //printf("%s line %d: decrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
- if (g_level > 0)
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ //printf("%s line %d: decrLevel %d\n",state->yyFileName.data(),state->yyLineNr,state->level);
+ if (state->level > 0)
{
- g_level--;
- g_levelGuard.resize(g_level);
+ state->level--;
+ state->levelGuard.resize(state->level);
}
else
{
- warn(g_yyFileName,g_yyLineNr,"More #endif's than #if's found.\n");
+ warn(state->yyFileName,state->yyLineNr,"More #endif's than #if's found.\n");
}
}
-static bool otherCaseDone()
+static bool otherCaseDone(yyscan_t yyscanner)
{
- if (g_level==0)
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ if (state->level==0)
{
- warn(g_yyFileName,g_yyLineNr,"Found an #else without a preceding #if.\n");
+ warn(state->yyFileName,state->yyLineNr,"Found an #else without a preceding #if.\n");
return TRUE;
}
else
{
- return g_levelGuard[g_level-1];
+ return state->levelGuard[state->level-1];
}
}
-static void setCaseDone(bool value)
+static void setCaseDone(yyscan_t yyscanner,bool value)
{
- g_levelGuard[g_level-1]=value;
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ state->levelGuard[state->level-1]=value;
}
-static QDict<void> g_allIncludes(10009);
-static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyIncluded)
+static FileState *checkAndOpenFile(yyscan_t yyscanner,const QCString &fileName,bool &alreadyIncluded)
{
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
alreadyIncluded = FALSE;
FileState *fs = 0;
//printf("checkAndOpenFile(%s)\n",fileName.data());
QFileInfo fi(fileName);
if (fi.exists() && fi.isFile())
{
- static QStrList &exclPatterns = Config_getList(EXCLUDE_PATTERNS);
+ const QStrList &exclPatterns = Config_getList(EXCLUDE_PATTERNS);
if (patternMatch(fi,&exclPatterns)) return 0;
QCString absName = fi.absFilePath().utf8();
// global guard
- if (g_curlyCount==0) // not #include inside { ... }
+ if (state->curlyCount==0) // not #include inside { ... }
{
- if (g_allIncludes.find(absName)!=0)
+ if (state->allIncludes.find(absName)!=0)
{
alreadyIncluded = TRUE;
//printf(" already included 1\n");
return 0; // already done
}
- g_allIncludes.insert(absName,(void *)0x8);
+ state->allIncludes.insert(absName,(void *)0x8);
}
// check include stack for absName
QStack<FileState> tmpStack;
- g_includeStack.setAutoDelete(FALSE);
- while ((fs=g_includeStack.pop()))
+ state->includeStack.setAutoDelete(FALSE);
+ while ((fs=state->includeStack.pop()))
{
if (fs->fileName==absName) alreadyIncluded=TRUE;
tmpStack.push(fs);
}
while ((fs=tmpStack.pop()))
{
- g_includeStack.push(fs);
+ state->includeStack.push(fs);
}
- g_includeStack.setAutoDelete(TRUE);
+ state->includeStack.setAutoDelete(TRUE);
if (alreadyIncluded)
{
@@ -508,23 +1815,24 @@ static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyInclude
}
else
{
- fs->oldFileBuf = g_inputBuf;
- fs->oldFileBufPos = g_inputBufPos;
+ fs->oldFileBuf = state->inputBuf;
+ fs->oldFileBufPos = state->inputBufPos;
}
}
return fs;
}
-static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyIncluded)
+static FileState *findFile(yyscan_t yyscanner, const char *fileName,bool localInclude,bool &alreadyIncluded)
{
- //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data());
- if (portable_isAbsolutePath(fileName))
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ //printf("** findFile(%s,%d) state->yyFileName=%s\n",fileName,localInclude,state->yyFileName.data());
+ if (Portable::isAbsolutePath(fileName))
{
- FileState *fs = checkAndOpenFile(fileName,alreadyIncluded);
+ FileState *fs = checkAndOpenFile(yyscanner,fileName,alreadyIncluded);
if (fs)
{
- setFileName(fileName);
- g_yyLineNr=1;
+ setFileName(yyscanner,fileName);
+ state->yyLineNr=1;
return fs;
}
else if (alreadyIncluded)
@@ -532,17 +1840,17 @@ static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyI
return 0;
}
}
- if (localInclude && !g_yyFileName.isEmpty())
+ if (localInclude && !state->yyFileName.isEmpty())
{
- QFileInfo fi(g_yyFileName);
+ QFileInfo fi(state->yyFileName);
if (fi.exists())
{
QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+fileName;
- FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
+ FileState *fs = checkAndOpenFile(yyscanner,absName,alreadyIncluded);
if (fs)
{
- setFileName(absName);
- g_yyLineNr=1;
+ setFileName(yyscanner,absName);
+ state->yyLineNr=1;
return fs;
}
else if (alreadyIncluded)
@@ -551,20 +1859,20 @@ static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyI
}
}
}
- if (g_pathList==0)
+ if (state->pathList==0)
{
return 0;
}
- char *s=g_pathList->first();
+ char *s=state->pathList->first();
while (s)
{
QCString absName = (QCString)s+"/"+fileName;
//printf(" Looking for %s in %s\n",fileName,s);
- FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
+ FileState *fs = checkAndOpenFile(yyscanner,absName,alreadyIncluded);
if (fs)
{
- setFileName(absName);
- g_yyLineNr=1;
+ setFileName(yyscanner,absName);
+ state->yyLineNr=1;
//printf(" -> found it\n");
return fs;
}
@@ -573,7 +1881,7 @@ static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyI
return 0;
}
- s=g_pathList->next();
+ s=state->pathList->next();
}
return 0;
}
@@ -623,10 +1931,10 @@ static QCString extractTrailingComment(const char *s)
return "";
}
-static int getNextChar(const QCString &expr,QCString *rest,uint &pos);
-static int getCurrentChar(const QCString &expr,QCString *rest,uint pos);
-static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c);
-static void expandExpression(QCString &expr,QCString *rest,int pos);
+static int getNextChar(yyscan_t yyscanner,const QCString &expr,QCString *rest,uint &pos);
+static int getCurrentChar(yyscan_t yyscanner,const QCString &expr,QCString *rest,uint pos);
+static void unputChar(yyscan_t yyscanner,const QCString &expr,QCString *rest,uint &pos,char c);
+static bool expandExpression(yyscan_t yyscanner,QCString &expr,QCString *rest,int pos,int level);
static QCString stringize(const QCString &s)
{
@@ -736,19 +2044,19 @@ static void processConcatOperators(QCString &expr)
//printf("processConcatOperators: out='%s'\n",expr.data());
}
-static void yyunput (int c,char *buf_ptr );
-static void returnCharToStream(char c)
+static void returnCharToStream(yyscan_t yyscanner,char c)
{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
unput(c);
}
-static inline void addTillEndOfString(const QCString &expr,QCString *rest,
+static inline void addTillEndOfString(yyscan_t yyscanner,const QCString &expr,QCString *rest,
uint &pos,char term,QCString &arg)
{
int cc;
- while ((cc=getNextChar(expr,rest,pos))!=EOF && cc!=0)
+ while ((cc=getNextChar(yyscanner,expr,rest,pos))!=EOF && cc!=0)
{
- if (cc=='\\') arg+=(char)cc,cc=getNextChar(expr,rest,pos);
+ if (cc=='\\') arg+=(char)cc,cc=getNextChar(yyscanner,expr,rest,pos);
else if (cc==term) return;
arg+=(char)cc;
}
@@ -761,24 +2069,25 @@ static inline void addTillEndOfString(const QCString &expr,QCString *rest,
* The replacement string will be returned in \a result and the
* length of the (unexpanded) argument list is stored in \a len.
*/
-static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result)
+static bool replaceFunctionMacro(yyscan_t yyscanner,const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result,int level)
{
- //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),g_level);
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ //printf(">replaceFunctionMacro(expr='%s',rest='%s',pos=%d,def='%s') level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),state->level);
uint j=pos;
len=0;
result.resize(0);
int cc;
- while ((cc=getCurrentChar(expr,rest,j))!=EOF && isspace(cc))
+ while ((cc=getCurrentChar(yyscanner,expr,rest,j))!=EOF && isspace(cc))
{
len++;
- getNextChar(expr,rest,j);
+ getNextChar(yyscanner,expr,rest,j);
}
if (cc!='(')
{
- unputChar(expr,rest,j,' ');
+ unputChar(yyscanner,expr,rest,j,cc);
return FALSE;
}
- getNextChar(expr,rest,j); // eat the '(' character
+ getNextChar(yyscanner,expr,rest,j); // eat the '(' character
QDict<QCString> argTable; // list of arguments
argTable.setAutoDelete(TRUE);
@@ -789,7 +2098,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
// PHASE 1: read the macro arguments
if (def->nargs==0)
{
- while ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
+ while ((cc=getNextChar(yyscanner,expr,rest,j))!=EOF && cc!=0)
{
char c = (char)cc;
if (c==')') break;
@@ -798,7 +2107,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
else
{
while (!done && (argCount<def->nargs || def->varArgs) &&
- ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
+ ((cc=getNextChar(yyscanner,expr,rest,j))!=EOF && cc!=0)
)
{
char c=(char)cc;
@@ -807,14 +2116,14 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
int level=1;
arg+=c;
//char term='\0';
- while ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
+ while ((cc=getNextChar(yyscanner,expr,rest,j))!=EOF && cc!=0)
{
char c=(char)cc;
//printf("processing %c: term=%c (%d)\n",c,term,term);
if (c=='\'' || c=='\"') // skip ('s and )'s inside strings
{
arg+=c;
- addTillEndOfString(expr,rest,j,c,arg);
+ addTillEndOfString(yyscanner,expr,rest,j,c,arg);
}
if (c==')')
{
@@ -856,14 +2165,14 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
{
arg+=c;
bool found=FALSE;
- while (!found && (cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
+ while (!found && (cc=getNextChar(yyscanner,expr,rest,j))!=EOF && cc!=0)
{
found = cc=='"';
if (cc=='\\')
{
c=(char)cc;
arg+=c;
- if ((cc=getNextChar(expr,rest,j))==EOF || cc==0) break;
+ if ((cc=getNextChar(yyscanner,expr,rest,j))==EOF || cc==0) break;
}
c=(char)cc;
arg+=c;
@@ -873,14 +2182,14 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
{
arg+=c;
bool found=FALSE;
- while (!found && (cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
+ while (!found && (cc=getNextChar(yyscanner,expr,rest,j))!=EOF && cc!=0)
{
found = cc=='\'';
if (cc=='\\')
{
c=(char)cc;
arg+=c;
- if ((cc=getNextChar(expr,rest,j))==EOF || cc==0) break;
+ if ((cc=getNextChar(yyscanner,expr,rest,j))==EOF || cc==0) break;
}
c=(char)cc;
arg+=c;
@@ -890,9 +2199,9 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
{
char prevChar = '\0';
arg+=c;
- if ((cc=getCurrentChar(expr,rest,j)) == '*') // we have a comment
+ if ((cc=getCurrentChar(yyscanner,expr,rest,j)) == '*') // we have a comment
{
- while ((cc=getNextChar(expr,rest,j))!=EOF && cc!=0)
+ while ((cc=getNextChar(yyscanner,expr,rest,j))!=EOF && cc!=0)
{
c=(char)cc;
arg+=c;
@@ -917,7 +2226,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
// substitution of all formal arguments
QCString resExpr;
const QCString d=def->definition.stripWhiteSpace();
- //printf("Macro definition: %s\n",d.data());
+ //printf("Macro definition: '%s'\n",d.data());
bool inString=FALSE;
while (k<d.length())
{
@@ -961,7 +2270,10 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
//printf("substArg='%s'\n",substArg.data());
// only if no ## operator is before or after the argument
// marker we do macro expansion.
- if (!hash) expandExpression(substArg,0,0);
+ if (!hash)
+ {
+ expandExpression(yyscanner,substArg,0,0,level+1);
+ }
if (inString)
{
//printf("'%s'=stringize('%s')\n",stringize(*subst).data(),subst->data());
@@ -976,7 +2288,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
{
resExpr+="@E"; // empty argument will be remove later on
}
- else if (g_nospaces)
+ else if (state->nospaces)
{
resExpr+=substArg;
}
@@ -1003,10 +2315,10 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
}
len=j-pos;
result=resExpr;
- //printf("result after substitution '%s' expr='%s'\n",
- // result.data(),expr.mid(pos,len).data());
+ //printf("<replaceFunctionMacro(expr='%s',rest='%s',pos=%d,def='%s',result='%s') level=%d return=TRUE\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),result.data(),state->level);
return TRUE;
}
+ //printf("<replaceFunctionMacro(expr='%s',rest='%s',pos=%d,def='%s',result='%s') level=%d return=FALSE\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),result.data(),state->level);
return FALSE;
}
@@ -1072,12 +2384,25 @@ static int getNextId(const QCString &expr,int p,int *l)
/*! performs recursive macro expansion on the string \a expr
* starting at position \a pos.
* May read additional characters from the input while re-scanning!
- * If \a expandAll is \c TRUE then all macros in the expression are
- * expanded, otherwise only the first is expanded.
*/
-static void expandExpression(QCString &expr,QCString *rest,int pos)
+static bool expandExpression(yyscan_t yyscanner,QCString &expr,QCString *rest,int pos,int level)
{
- //printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0);
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ //printf(">expandExpression(expr='%s',rest='%s',pos=%d,level=%d)\n",expr.data(),rest ? rest->data() : "", pos, level);
+ if (expr.isEmpty())
+ {
+ //printf("<expandExpression: empty\n");
+ return TRUE;
+ }
+ if (state->expansionDict.find(expr)!=0) // check for recursive expansions
+ {
+ //printf("<expandExpression: already expanded expr='%s'\n",expr.data());
+ return FALSE;
+ }
+ else
+ {
+ state->expansionDict.insert(expr,(void*)0x8);
+ }
QCString macroName;
QCString expMacro;
bool definedTest=FALSE;
@@ -1086,12 +2411,12 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
{
bool replaced=FALSE;
macroName=expr.mid(p,l);
- //printf("macroName=%s\n",macroName.data());
+ //printf(" p=%d macroName=%s\n",p,macroName.data());
if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker?
{
- if (g_expandedDict->find(macroName)==0) // expand macro
+ if (state->expandedDict->find(macroName)==0) // expand macro
{
- Define *def=DefineManager::instance().isDefined(macroName);
+ Define *def=state->defineManager.isDefined(macroName);
if (macroName=="defined")
{
//printf("found defined inside macro definition '%s'\n",expr.right(expr.length()-p).data());
@@ -1108,7 +2433,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
{
// substitute the definition of the macro
//printf("macro '%s'->'%s'\n",macroName.data(),def->definition.data());
- if (g_nospaces)
+ if (state->nospaces)
{
expMacro=def->definition.stripWhiteSpace();
}
@@ -1123,29 +2448,42 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
}
else if (def && def->nargs>=0) // function macro
{
- replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro);
+ //printf(" >>>> call replaceFunctionMacro\n");
+ replaced=replaceFunctionMacro(yyscanner,expr,rest,p+l,len,def,expMacro,level);
+ //printf(" <<<< call replaceFunctionMacro: replaced=%d\n",replaced);
len+=l;
}
+ //printf(" macroName='%s' expMacro='%s' replaced=%d\n",macroName.data(),expMacro.data(),replaced);
if (replaced) // expand the macro and rescan the expression
{
- //printf("replacing '%s'->'%s'\n",expr.mid(p,len).data(),expMacro.data());
+ //printf(" replacing '%s'->'%s'\n",expr.mid(p,len).data(),expMacro.data());
QCString resultExpr=expMacro;
QCString restExpr=expr.right(expr.length()-len-p);
processConcatOperators(resultExpr);
+ //printf(" macroName=%s restExpr='%s' def->nonRecursive=%d\n",macroName.data(),restExpr.data(),def->nonRecursive);
+ bool expanded=false;
if (def && !def->nonRecursive)
{
- g_expandedDict->insert(macroName,def);
- expandExpression(resultExpr,&restExpr,0);
- g_expandedDict->remove(macroName);
+ state->expandedDict->insert(macroName,def);
+ expanded = expandExpression(yyscanner,resultExpr,&restExpr,0,level+1);
+ state->expandedDict->remove(macroName);
}
- expr=expr.left(p)+resultExpr+restExpr;
- i=p;
- //printf("new expression: %s\n",expr.data());
+ if (expanded)
+ {
+ expr=expr.left(p)+resultExpr+restExpr;
+ //printf(" new expression: '%s' old i=%d new i=%d\n",expr.data(),i,p);
+ i=p;
+ }
+ else
+ {
+ expr=expr.left(p)+"@-"+expr.right(expr.length()-p);
+ i=p+l+2;
+ }
}
else // move to the next macro name
{
- //printf("moving to the next macro old=%d new=%d\n",i,p+l);
+ //printf(" moving to the next macro old i=%d new i=%d\n",i,p+l);
i=p+l;
}
}
@@ -1163,6 +2501,8 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
i=p+l;
}
}
+ //printf("<expandExpression(expr='%s',rest='%s',pos=%d,level=%d)\n",expr.data(),rest ? rest->data() : 0, pos,level);
+ return TRUE;
}
/*! @brief Process string or character literal.
@@ -1171,7 +2511,7 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
* the routine will return a pointer to just after the end of the literal
* the character making up the literal will be added to \a result.
*/
-const char *processUntilMatchingTerminator(const char *inputStr,QCString &result)
+static const char *processUntilMatchingTerminator(const char *inputStr,QCString &result)
{
if (inputStr==0) return inputStr;
char term = *inputStr; // capture start character of the literal
@@ -1207,7 +2547,7 @@ const char *processUntilMatchingTerminator(const char *inputStr,QCString &result
* and removes all occurrences of @@E.
* All identifiers found are replaced by 0L
*/
-QCString removeIdsAndMarkers(const char *s)
+static QCString removeIdsAndMarkers(const char *s)
{
//printf("removeIdsAndMarkers(%s)\n",s);
const char *p=s;
@@ -1326,7 +2666,7 @@ nextChar:
* \par assumption:
* \a s only contains pairs of @@'s
*/
-QCString removeMarkers(const char *s)
+static QCString removeMarkers(const char *s)
{
const char *p=s;
char c;
@@ -1387,41 +2727,46 @@ QCString removeMarkers(const char *s)
* If needed the function may read additional characters from the input.
*/
-bool computeExpression(const QCString &expr)
+static bool computeExpression(yyscan_t yyscanner,const QCString &expr)
{
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
QCString e=expr;
- expandExpression(e,0,0);
+ state->expansionDict.clear();
+ expandExpression(yyscanner,e,0,0,0);
//printf("after expansion '%s'\n",e.data());
e = removeIdsAndMarkers(e);
if (e.isEmpty()) return FALSE;
//printf("parsing '%s'\n",e.data());
- return parseconstexp(g_yyFileName,g_yyLineNr,e);
+ return state->constExpParser.parse(state->yyFileName,state->yyLineNr,e);
}
/*! expands the macro definition in \a name
* If needed the function may read additional characters from the input
*/
-QCString expandMacro(const QCString &name)
+static QCString expandMacro(yyscan_t yyscanner,const QCString &name)
{
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
QCString n=name;
- expandExpression(n,0,0);
+ state->expansionDict.clear();
+ expandExpression(yyscanner,n,0,0,0);
n=removeMarkers(n);
//printf("expandMacro '%s'->'%s'\n",name.data(),n.data());
return n;
}
-Define *newDefine()
+static Define *newDefine(yyscan_t yyscanner)
{
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
Define *def=new Define;
- def->name = g_defName;
- def->definition = g_defText.stripWhiteSpace();
- def->nargs = g_defArgs;
- def->fileName = g_yyFileName;
- def->fileDef = g_yyFileDef;
- def->lineNr = g_yyLineNr-g_yyMLines;
- def->columnNr = g_yyColNr;
- def->varArgs = g_defVarArgs;
+ def->name = state->defName;
+ def->definition = state->defText.stripWhiteSpace();
+ def->nargs = state->defArgs;
+ def->fileName = state->yyFileName;
+ def->fileDef = state->yyFileDef;
+ def->lineNr = state->yyLineNr-state->yyMLines;
+ def->columnNr = state->yyColNr;
+ def->varArgs = state->defVarArgs;
//printf("newDefine: %s %s file: %s\n",def->name.data(),def->definition.data(),
// def->fileDef ? def->fileDef->name().data() : def->fileName.data());
//printf("newDefine: '%s'->'%s'\n",def->name.data(),def->definition.data());
@@ -1432,76 +2777,80 @@ Define *newDefine()
return def;
}
-void addDefine()
+static void addDefine(yyscan_t yyscanner)
{
- if (g_skip) return; // do not add this define as it is inside a
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ if (state->skip) return; // do not add this define as it is inside a
// conditional section (cond command) that is disabled.
if (!Doxygen::gatherDefines) return;
- //printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
+ //printf("addDefine '%s' '%s'\n",state->defName.data(),state->defArgsStr.data());
//ArgumentList *al = new ArgumentList;
- //stringToArgumentList(g_defArgsStr,al);
+ //stringToArgumentList(state->defArgsStr,al);
MemberDef *md=createMemberDef(
- g_yyFileName,g_yyLineNr-g_yyMLines,g_yyColNr,
- "#define",g_defName,g_defArgsStr,0,
- Public,Normal,FALSE,Member,MemberType_Define,0,0,"");
- if (!g_defArgsStr.isEmpty())
+ state->yyFileName,state->yyLineNr-state->yyMLines,state->yyColNr,
+ "#define",state->defName,state->defArgsStr,0,
+ Public,Normal,FALSE,Member,MemberType_Define,ArgumentList(),ArgumentList(),"");
+ if (!state->defArgsStr.isEmpty())
{
- ArgumentList *argList = new ArgumentList;
- //printf("addDefine() g_defName='%s' g_defArgsStr='%s'\n",g_defName.data(),g_defArgsStr.data());
- stringToArgumentList(g_defArgsStr,argList);
+ ArgumentList argList;
+ //printf("addDefine() state->defName='%s' state->defArgsStr='%s'\n",state->defName.data(),state->defArgsStr.data());
+ stringToArgumentList(state->defArgsStr,argList);
md->setArgumentList(argList);
}
- //printf("Setting initializer for '%s' to '%s'\n",g_defName.data(),g_defText.data());
- int l=g_defLitText.find('\n');
- if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\")
+ //printf("Setting initializer for '%s' to '%s'\n",state->defName.data(),state->defText.data());
+ int l=state->defLitText.find('\n');
+ if (l>0 && state->defLitText.left(l).stripWhiteSpace()=="\\")
{
// strip first line if it only contains a slash
- g_defLitText = g_defLitText.right(g_defLitText.length()-l-1);
+ state->defLitText = state->defLitText.right(state->defLitText.length()-l-1);
}
else if (l>0)
{
// align the items on the first line with the items on the second line
int k=l+1;
- const char *p=g_defLitText.data()+k;
+ const char *p=state->defLitText.data()+k;
char c;
while ((c=*p++) && (c==' ' || c=='\t')) k++;
- g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace();
+ state->defLitText=state->defLitText.mid(l+1,k-l-1)+state->defLitText.stripWhiteSpace();
}
- md->setInitializer(g_defLitText.stripWhiteSpace());
+ md->setInitializer(state->defLitText.stripWhiteSpace());
- //printf("pre.l: md->setFileDef(%p)\n",g_inputFileDef);
- md->setFileDef(g_inputFileDef);
- md->setDefinition("#define "+g_defName);
+ //printf("pre.l: md->setFileDef(%p)\n",state->inputFileDef);
+ md->setFileDef(state->inputFileDef);
+ md->setDefinition("#define "+state->defName);
- MemberName *mn=Doxygen::functionNameSDict->find(g_defName);
+ MemberName *mn=Doxygen::functionNameSDict->find(state->defName);
if (mn==0)
{
- mn = new MemberName(g_defName);
- Doxygen::functionNameSDict->append(g_defName,mn);
+ mn = new MemberName(state->defName);
+ Doxygen::functionNameSDict->append(state->defName,mn);
}
mn->append(md);
- if (g_yyFileDef)
+ if (state->yyFileDef)
{
- g_yyFileDef->insertMember(md);
+ state->yyFileDef->insertMember(md);
}
//Define *d;
- //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine());
+ //if ((d=defineDict[state->defName])==0) defineDict.insert(state->defName,newDefine());
}
-static inline void outputChar(char c)
+static inline void outputChar(yyscan_t yyscanner,char c)
{
- if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c);
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ if (state->includeStack.isEmpty() || state->curlyCount>0) state->outputBuf->addChar(c);
}
-static inline void outputArray(const char *a,int len)
+static inline void outputArray(yyscan_t yyscanner,const char *a,int len)
{
- if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len);
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ if (state->includeStack.isEmpty() || state->curlyCount>0) state->outputBuf->addArray(a,len);
}
-static void readIncludeFile(const QCString &inc)
+static void readIncludeFile(yyscan_t yyscanner,const QCString &inc)
{
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
static bool searchIncludes = Config_getBool(SEARCH_INCLUDES);
uint i=0;
@@ -1529,15 +2878,15 @@ static void readIncludeFile(const QCString &inc)
return;
}
- QCString oldFileName = g_yyFileName;
- FileDef *oldFileDef = g_yyFileDef;
- int oldLineNr = g_yyLineNr;
+ QCString oldFileName = state->yyFileName;
+ FileDef *oldFileDef = state->yyFileDef;
+ int oldLineNr = state->yyLineNr;
//printf("Searching for '%s'\n",incFileName.data());
// absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336)
QCString absIncFileName = incFileName;
{
- QFileInfo fi(g_yyFileName);
+ QFileInfo fi(state->yyFileName);
if (fi.exists())
{
QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+incFileName;
@@ -1571,19 +2920,19 @@ static void readIncludeFile(const QCString &inc)
//printf( "absIncFileName = %s\n", absIncFileName.data() );
}
}
- DefineManager::instance().addInclude(g_yyFileName,absIncFileName);
- DefineManager::instance().addFileToContext(absIncFileName);
+ state->defineManager.addInclude(state->yyFileName,absIncFileName);
+ state->defineManager.addFileToContext(absIncFileName);
- // findFile will overwrite g_yyFileDef if found
+ // findFile will overwrite state->yyFileDef if found
FileState *fs;
bool alreadyIncluded = FALSE;
//printf("calling findFile(%s)\n",incFileName.data());
- if ((fs=findFile(incFileName,localInclude,alreadyIncluded))) // see if the include file can be found
+ if ((fs=findFile(yyscanner,incFileName,localInclude,alreadyIncluded))) // see if the include file can be found
{
//printf("Found include file!\n");
if (Debug::isFlagSet(Debug::Preprocessor))
{
- for (i=0;i<g_includeStack.count();i++)
+ for (i=0;i<state->includeStack.count();i++)
{
Debug::print(Debug::Preprocessor,0," ");
}
@@ -1595,38 +2944,39 @@ static void readIncludeFile(const QCString &inc)
bool ambig;
// change to absolute name for bug 641336
FileDef *incFd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
- oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported,FALSE);
+ oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,state->isImported,FALSE);
// add included by dependency
- if (g_yyFileDef)
+ if (state->yyFileDef)
{
//printf("Adding include dependency %s->%s\n",oldFileDef->name().data(),incFileName.data());
- g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
+ state->yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,state->isImported);
}
}
- else if (g_inputFileDef)
+ else if (state->inputFileDef)
{
- g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
+ state->inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,state->isImported,TRUE);
}
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
fs->bufState = YY_CURRENT_BUFFER;
fs->lineNr = oldLineNr;
fs->fileName = oldFileName;
- fs->curlyCount = g_curlyCount;
- g_curlyCount = 0;
+ fs->curlyCount = state->curlyCount;
+ state->curlyCount = 0;
// push the state on the stack
- g_includeStack.push(fs);
+ state->includeStack.push(fs);
// set the scanner to the include file
// Deal with file changes due to
// #include's within { .. } blocks
- QCString lineStr(g_yyFileName.length()+20);
- lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
- outputArray(lineStr.data(),lineStr.length());
+ QCString lineStr(state->yyFileName.length()+20);
+ lineStr.sprintf("# 1 \"%s\" 1\n",state->yyFileName.data());
+ outputArray(yyscanner,lineStr.data(),lineStr.length());
DBG_CTX((stderr,"Switching to include file %s\n",incFileName.data()));
- g_expectGuard=TRUE;
- g_inputBuf = &fs->fileBuf;
- g_inputBufPos=0;
- yy_switch_to_buffer(yy_create_buffer(0, YY_BUF_SIZE));
+ state->expectGuard=TRUE;
+ state->inputBuf = &fs->fileBuf;
+ state->inputBufPos=0;
+ yy_switch_to_buffer(yy_create_buffer(0, YY_BUF_SIZE, yyscanner),yyscanner);
}
else
{
@@ -1645,17 +2995,17 @@ static void readIncludeFile(const QCString &inc)
FileDef *fd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
//printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd);
// add include dependency to the file in which the #include was found
- oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported,FALSE);
+ oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,state->isImported,FALSE);
// add included by dependency
if (fd)
{
//printf("Adding include dependency (2) %s->%s ambig=%d\n",oldFileDef->name().data(),fd->name().data(),ambig);
- fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
+ fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,state->isImported);
}
}
- else if (g_inputFileDef)
+ else if (state->inputFileDef)
{
- g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
+ state->inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,state->isImported,TRUE);
}
if (Debug::isFlagSet(Debug::Preprocessor))
{
@@ -1669,9 +3019,9 @@ static void readIncludeFile(const QCString &inc)
}
//printf("error: include file %s not found\n",yytext);
}
- if (g_curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... }
+ if (state->curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... }
{
- warn(g_yyFileName,g_yyLineNr,"include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
+ warn(state->yyFileName,state->yyLineNr,"include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
}
}
}
@@ -1679,41 +3029,44 @@ static void readIncludeFile(const QCString &inc)
/* ----------------------------------------------------------------- */
-static void startCondSection(const char *sectId)
+static void startCondSection(yyscan_t yyscanner,const char *sectId)
{
- //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ //printf("startCondSection: skip=%d stack=%d\n",state->skip,state->condStack.count());
CondParser prs;
- bool expResult = prs.parse(g_yyFileName,g_yyLineNr,sectId);
- g_condStack.push(new CondCtx(g_yyLineNr,sectId,g_skip));
+ bool expResult = prs.parse(state->yyFileName,state->yyLineNr,sectId);
+ state->condStack.push(new CondCtx(state->yyLineNr,sectId,state->skip));
if (!expResult)
{
- g_skip=TRUE;
+ state->skip=TRUE;
}
- //printf(" expResult=%d skip=%d\n",expResult,g_skip);
+ //printf(" expResult=%d skip=%d\n",expResult,state->skip);
}
-static void endCondSection()
+static void endCondSection(yyscan_t yyscanner)
{
- if (g_condStack.isEmpty())
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ if (state->condStack.isEmpty())
{
- g_skip=FALSE;
+ state->skip=FALSE;
}
else
{
- CondCtx *ctx = g_condStack.pop();
- g_skip=ctx->skip;
+ CondCtx *ctx = state->condStack.pop();
+ state->skip=ctx->skip;
delete ctx;
}
- //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count());
+ //printf("endCondSection: skip=%d stack=%d\n",state->skip,state->condStack.count());
}
-static void forceEndCondSection()
+static void forceEndCondSection(yyscan_t yyscanner)
{
- while (!g_condStack.isEmpty())
+ YY_EXTRA_TYPE state = preYYget_extra(yyscanner);
+ while (!state->condStack.isEmpty())
{
- delete g_condStack.pop();
+ delete state->condStack.pop();
}
- g_skip=FALSE;
+ state->skip=FALSE;
}
static QCString escapeAt(const char *text)
@@ -1748,1295 +3101,10 @@ static char resolveTrigraph(char c)
return '?';
}
-/* ----------------------------------------------------------------- */
-
-#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int bytesInBuf = g_inputBuf->curPos()-g_inputBufPos;
- int bytesToCopy = QMIN(max_size,bytesInBuf);
- memcpy(buf,g_inputBuf->data()+g_inputBufPos,bytesToCopy);
- g_inputBufPos+=bytesToCopy;
- return bytesToCopy;
-}
-
-/* ----------------------------------------------------------------- */
-
-%}
-
-ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
-B [ \t]
-BN [ \t\r\n]
-RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
-RAWEND ")"[^ \t\(\)\\]{0,16}\"
-CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
-
-%option noyywrap
-
-%x Start
-%x Command
-%x SkipCommand
-%x SkipLine
-%x SkipString
-%x CopyLine
-%x CopyString
-%x CopyStringCs
-%x CopyStringFtn
-%x CopyStringFtnDouble
-%x CopyRawString
-%x Include
-%x IncludeID
-%x EndImport
-%x DefName
-%x DefineArg
-%x DefineText
-%x SkipCPPBlock
-%x Ifdef
-%x Ifndef
-%x SkipCComment
-%x ArgCopyCComment
-%x CopyCComment
-%x SkipVerbatim
-%x SkipCPPComment
-%x RemoveCComment
-%x RemoveCPPComment
-%x Guard
-%x DefinedExpr1
-%x DefinedExpr2
-%x SkipDoubleQuote
-%x SkipSingleQuote
-%x UndefName
-%x IgnoreLine
-%x FindDefineArgs
-%x ReadString
-%x CondLineC
-%x CondLineCpp
-%x SkipCond
-
-%%
-
-<*>\x06
-<*>\x00
-<*>\r
-<*>"??"[=/'()!<>-] { // Trigraph
- unput(resolveTrigraph(yytext[2]));
- }
-<Start>^{B}*"#" { BEGIN(Command); g_yyColNr+=yyleng; g_yyMLines=0;}
-<Start>^{B}*/[^#] {
- outputArray(yytext,(int)yyleng);
- BEGIN(CopyLine);
- }
-<Start>^{B}*[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]+{B}*"("[^\)\n]*")"/{BN}{1,10}*[:{] { // constructors?
- int i;
- for (i=(int)yyleng-1;i>=0;i--)
- {
- unput(yytext[i]);
- }
- BEGIN(CopyLine);
- }
-<Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\(\)\n]*"("[^\)\n]*")"[^\)\n]*")"{B}*\n | // function list macro with one (...) argument, e.g. for K_GLOBAL_STATIC_WITH_ARGS
-<Start>^{B}*[_A-Z][_A-Z0-9]+{B}*"("[^\)\n]*")"{B}*\n { // function like macro
- static bool skipFuncMacros = Config_getBool(SKIP_FUNCTION_MACROS);
- QCString name(yytext);
- name=name.left(name.find('(')).stripWhiteSpace();
-
- Define *def=0;
- if (skipFuncMacros &&
- name!="Q_PROPERTY" &&
- !(
- (g_includeStack.isEmpty() || g_curlyCount>0) &&
- g_macroExpansion &&
- (def=DefineManager::instance().isDefined(name)) &&
- /*macroIsAccessible(def) &&*/
- (!g_expandOnlyPredef || def->isPredefined)
- )
- )
- {
- outputChar('\n');
- g_yyLineNr++;
- }
- else // don't skip
- {
- int i;
- for (i=(int)yyleng-1;i>=0;i--)
- {
- unput(yytext[i]);
- }
- BEGIN(CopyLine);
- }
- }
-<CopyLine>"extern"{BN}{0,80}"\"C\""*{BN}{0,80}"{" {
- QCString text=yytext;
- g_yyLineNr+=text.contains('\n');
- outputArray(yytext,(int)yyleng);
- }
-<CopyLine>{RAWBEGIN} {
- g_delimiter = yytext+2;
- g_delimiter=g_delimiter.left(g_delimiter.length()-1);
- outputArray(yytext,(int)yyleng);
- BEGIN(CopyRawString);
- }
-<CopyLine>"{" { // count brackets inside the main file
- if (g_includeStack.isEmpty())
- {
- g_curlyCount++;
- }
- outputChar(*yytext);
- }
-<CopyLine>"}" { // count brackets inside the main file
- if (g_includeStack.isEmpty() && g_curlyCount>0)
- {
- g_curlyCount--;
- }
- outputChar(*yytext);
- }
-<CopyLine>"'"\\[0-7]{1,3}"'" {
- outputArray(yytext,(int)yyleng);
- }
-<CopyLine>"'"\\."'" {
- outputArray(yytext,(int)yyleng);
- }
-<CopyLine>"'"."'" {
- outputArray(yytext,(int)yyleng);
- }
-<CopyLine>@\" {
- if (getLanguageFromFileName(g_yyFileName)!=SrcLangExt_CSharp) REJECT;
- outputArray(yytext,(int)yyleng);
- BEGIN( CopyStringCs );
- }
-<CopyLine>\" {
- outputChar(*yytext);
- if (getLanguageFromFileName(g_yyFileName)!=SrcLangExt_Fortran)
- {
- BEGIN( CopyString );
- }
- else
- {
- BEGIN( CopyStringFtnDouble );
- }
- }
-<CopyLine>\' {
- if (getLanguageFromFileName(g_yyFileName)!=SrcLangExt_Fortran) REJECT;
- outputChar(*yytext);
- BEGIN( CopyStringFtn );
- }
-<CopyString>[^\"\\\r\n]+ {
- outputArray(yytext,(int)yyleng);
- }
-<CopyStringCs>[^\"\r\n]+ {
- outputArray(yytext,(int)yyleng);
- }
-<CopyString>\\. {
- outputArray(yytext,(int)yyleng);
- }
-<CopyString,CopyStringCs>\" {
- outputChar(*yytext);
- BEGIN( CopyLine );
- }
-<CopyStringFtnDouble>[^\"\\\r\n]+ {
- outputArray(yytext,(int)yyleng);
- }
-<CopyStringFtnDouble>\\. {
- outputArray(yytext,(int)yyleng);
- }
-<CopyStringFtnDouble>\" {
- outputChar(*yytext);
- BEGIN( CopyLine );
- }
-<CopyStringFtn>[^\'\\\r\n]+ {
- outputArray(yytext,(int)yyleng);
- }
-<CopyStringFtn>\\. {
- outputArray(yytext,(int)yyleng);
- }
-<CopyStringFtn>\' {
- outputChar(*yytext);
- BEGIN( CopyLine );
- }
-<CopyRawString>{RAWEND} {
- outputArray(yytext,(int)yyleng);
- QCString delimiter = yytext+1;
- delimiter=delimiter.left(delimiter.length()-1);
- if (delimiter==g_delimiter)
- {
- BEGIN( CopyLine );
- }
- }
-<CopyRawString>[^)]+ {
- outputArray(yytext,(int)yyleng);
- }
-<CopyRawString>. {
- outputChar(*yytext);
- }
-<CopyLine>{ID}/{BN}{0,80}"(" {
- g_expectGuard = FALSE;
- Define *def=0;
- //def=g_globalDefineDict->find(yytext);
- //def=DefineManager::instance().isDefined(yytext);
- //printf("Search for define %s found=%d g_includeStack.isEmpty()=%d "
- // "g_curlyCount=%d g_macroExpansion=%d g_expandOnlyPredef=%d "
- // "isPreDefined=%d\n",yytext,def ? 1 : 0,
- // g_includeStack.isEmpty(),g_curlyCount,g_macroExpansion,g_expandOnlyPredef,
- // def ? def->isPredefined : -1
- // );
- if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
- g_macroExpansion &&
- (def=DefineManager::instance().isDefined(yytext)) &&
- /*(def->isPredefined || macroIsAccessible(def)) && */
- (!g_expandOnlyPredef || def->isPredefined)
- )
- {
- //printf("Found it! #args=%d\n",def->nargs);
- g_roundCount=0;
- g_defArgsStr=yytext;
- if (def->nargs==-1) // no function macro
- {
- QCString result = def->isPredefined ? def->definition : expandMacro(g_defArgsStr);
- outputArray(result,result.length());
- }
- else // zero or more arguments
- {
- g_findDefArgContext = CopyLine;
- BEGIN(FindDefineArgs);
- }
- }
- else
- {
- outputArray(yytext,(int)yyleng);
- }
- }
-<CopyLine>{ID} {
- Define *def=0;
- if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
- g_macroExpansion &&
- (def=DefineManager::instance().isDefined(yytext)) &&
- def->nargs==-1 &&
- /*(def->isPredefined || macroIsAccessible(def)) &&*/
- (!g_expandOnlyPredef || def->isPredefined)
- )
- {
- QCString result=def->isPredefined ? def->definition : expandMacro(yytext);
- outputArray(result,result.length());
- }
- else
- {
- outputArray(yytext,(int)yyleng);
- }
- }
-<CopyLine>"\\"\r?/\n { // strip line continuation characters
- if (getLanguageFromFileName(g_yyFileName)==SrcLangExt_Fortran) outputChar(*yytext);
- }
-<CopyLine>. {
- outputChar(*yytext);
- }
-<CopyLine>\n {
- outputChar('\n');
- BEGIN(Start);
- g_yyLineNr++;
- g_yyColNr=1;
- }
-<FindDefineArgs>"(" {
- g_defArgsStr+='(';
- g_roundCount++;
- }
-<FindDefineArgs>")" {
- g_defArgsStr+=')';
- g_roundCount--;
- if (g_roundCount==0)
- {
- QCString result=expandMacro(g_defArgsStr);
- //printf("g_defArgsStr='%s'->'%s'\n",g_defArgsStr.data(),result.data());
- if (g_findDefArgContext==CopyLine)
- {
- outputArray(result,result.length());
- BEGIN(g_findDefArgContext);
- }
- else // g_findDefArgContext==IncludeID
- {
- readIncludeFile(result);
- g_nospaces=FALSE;
- BEGIN(Start);
- }
- }
- }
- /*
-<FindDefineArgs>")"{B}*"(" {
- g_defArgsStr+=yytext;
- }
- */
-<FindDefineArgs>{CHARLIT} {
- g_defArgsStr+=yytext;
- }
-<FindDefineArgs>"/*"[*]? {
- g_defArgsStr+=yytext;
- BEGIN(ArgCopyCComment);
- }
-<FindDefineArgs>\" {
- g_defArgsStr+=*yytext;
- BEGIN(ReadString);
- }
-<FindDefineArgs>' {
- if (getLanguageFromFileName(g_yyFileName)!=SrcLangExt_Fortran) REJECT;
- g_defArgsStr+=*yytext;
- BEGIN(ReadString);
- }
-<FindDefineArgs>\n {
- g_defArgsStr+=' ';
- g_yyLineNr++;
- outputChar('\n');
- }
-<FindDefineArgs>"@" {
- g_defArgsStr+="@@";
- }
-<FindDefineArgs>. {
- g_defArgsStr+=*yytext;
- }
-<ArgCopyCComment>[^*\n]+ {
- g_defArgsStr+=yytext;
- }
-<ArgCopyCComment>"*/" {
- g_defArgsStr+=yytext;
- BEGIN(FindDefineArgs);
- }
-<ArgCopyCComment>\n {
- g_defArgsStr+=' ';
- g_yyLineNr++;
- outputChar('\n');
- }
-<ArgCopyCComment>. {
- g_defArgsStr+=yytext;
- }
-<ReadString>"\"" {
- g_defArgsStr+=*yytext;
- BEGIN(FindDefineArgs);
- }
-<ReadString>"'" {
- if (getLanguageFromFileName(g_yyFileName)!=SrcLangExt_Fortran) REJECT;
- g_defArgsStr+=*yytext;
- BEGIN(FindDefineArgs);
- }
-
-<ReadString>"//"|"/*" {
- g_defArgsStr+=yytext;
- }
-<ReadString>\\/\r?\n { // line continuation
- }
-<ReadString>\\. {
- g_defArgsStr+=yytext;
- }
-<ReadString>. {
- g_defArgsStr+=*yytext;
- }
-<Command>("include"|"import"){B}+/{ID} {
- g_isImported = yytext[1]=='m';
- if (g_macroExpansion)
- BEGIN(IncludeID);
- }
-<Command>("include"|"import"){B}*[<"] {
- g_isImported = yytext[1]=='m';
- char c[2];
- c[0]=yytext[yyleng-1];c[1]='\0';
- g_incName=c;
- BEGIN(Include);
- }
-<Command>("cmake")?"define"{B}+ {
- //printf("!!!DefName\n");
- g_yyColNr+=yyleng;
- BEGIN(DefName);
- }
-<Command>"ifdef"/{B}*"(" {
- incrLevel();
- g_guardExpr.resize(0);
- BEGIN(DefinedExpr2);
- }
-<Command>"ifdef"/{B}+ {
- //printf("Pre.l: ifdef\n");
- incrLevel();
- g_guardExpr.resize(0);
- BEGIN(DefinedExpr1);
- }
-<Command>"ifndef"/{B}*"(" {
- incrLevel();
- g_guardExpr="! ";
- BEGIN(DefinedExpr2);
- }
-<Command>"ifndef"/{B}+ {
- incrLevel();
- g_guardExpr="! ";
- BEGIN(DefinedExpr1);
- }
-<Command>"if"/[ \t(!] {
- incrLevel();
- g_guardExpr.resize(0);
- BEGIN(Guard);
- }
-<Command>("elif"|"else"{B}*"if")/[ \t(!] {
- if (!otherCaseDone())
- {
- g_guardExpr.resize(0);
- BEGIN(Guard);
- }
- else
- {
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
- }
-<Command>"else"/[^a-z_A-Z0-9\x80-\xFF] {
- //printf("else g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
- if (otherCaseDone())
- {
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
- else
- {
- setCaseDone(TRUE);
- //g_levelGuard[g_level-1]=TRUE;
- }
- }
-<Command>"undef"{B}+ {
- BEGIN(UndefName);
- }
-<Command>("elif"|"else"{B}*"if")/[ \t(!] {
- if (!otherCaseDone())
- {
- g_guardExpr.resize(0);
- BEGIN(Guard);
- }
- }
-<Command>"endif"/[^a-z_A-Z0-9\x80-\xFF] {
- //printf("Pre.l: #endif\n");
- decrLevel();
- }
-<Command,IgnoreLine>\n {
- outputChar('\n');
- BEGIN(Start);
- g_yyLineNr++;
- }
-<Command>"pragma"{B}+"once" {
- g_expectGuard = FALSE;
- }
-<Command>{ID} { // unknown directive
- BEGIN(IgnoreLine);
- }
-<IgnoreLine>\\[\r]?\n {
- outputChar('\n');
- g_yyLineNr++;
- }
-<IgnoreLine>.
-<Command>. {g_yyColNr+=yyleng;}
-<UndefName>{ID} {
- Define *def;
- if ((def=DefineManager::instance().isDefined(yytext))
- /*&& !def->isPredefined*/
- && !def->nonRecursive
- )
- {
- //printf("undefining %s\n",yytext);
- def->undef=TRUE;
- }
- BEGIN(Start);
- }
-<Guard>\\[\r]?\n {
- outputChar('\n');
- g_guardExpr+=' ';
- g_yyLineNr++;
- }
-<Guard>"defined"/{B}*"(" {
- BEGIN(DefinedExpr2);
- }
-<Guard>"defined"/{B}+ {
- BEGIN(DefinedExpr1);
- }
-<Guard>{ID} { g_guardExpr+=yytext; }
-<Guard>"@" { g_guardExpr+="@@"; }
-<Guard>. { g_guardExpr+=*yytext; }
-<Guard>\n {
- unput(*yytext);
- //printf("Guard: '%s'\n",
- // g_guardExpr.data());
- bool guard=computeExpression(g_guardExpr);
- setCaseDone(guard);
- //printf("if g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
- if (guard)
- {
- BEGIN(Start);
- }
- else
- {
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
- }
-<DefinedExpr1,DefinedExpr2>\\\n { g_yyLineNr++; outputChar('\n'); }
-<DefinedExpr1>{ID} {
- if (DefineManager::instance().isDefined(yytext) || g_guardName==yytext)
- g_guardExpr+=" 1L ";
- else
- g_guardExpr+=" 0L ";
- g_lastGuardName=yytext;
- BEGIN(Guard);
- }
-<DefinedExpr2>{ID} {
- if (DefineManager::instance().isDefined(yytext) || g_guardName==yytext)
- g_guardExpr+=" 1L ";
- else
- g_guardExpr+=" 0L ";
- g_lastGuardName=yytext;
- }
-<DefinedExpr1,DefinedExpr2>\n { // should not happen, handle anyway
- g_yyLineNr++;
- g_ifcount=0;
- BEGIN(SkipCPPBlock);
- }
-<DefinedExpr2>")" {
- BEGIN(Guard);
- }
-<DefinedExpr1,DefinedExpr2>.
-<SkipCPPBlock>^{B}*"#" { BEGIN(SkipCommand); }
-<SkipCPPBlock>^{B}*/[^#] { BEGIN(SkipLine); }
-<SkipCPPBlock>\n { g_yyLineNr++; outputChar('\n'); }
-<SkipCPPBlock>.
-<SkipCommand>"if"(("n")?("def"))?/[ \t(!] {
- incrLevel();
- g_ifcount++;
- //printf("#if... depth=%d\n",g_ifcount);
- }
-<SkipCommand>"else" {
- //printf("Else! g_ifcount=%d otherCaseDone=%d\n",g_ifcount,otherCaseDone());
- if (g_ifcount==0 && !otherCaseDone())
- {
- setCaseDone(TRUE);
- //outputChar('\n');
- BEGIN(Start);
- }
- }
-<SkipCommand>("elif"|"else"{B}*"if")/[ \t(!] {
- if (g_ifcount==0)
- {
- if (!otherCaseDone())
- {
- g_guardExpr.resize(0);
- g_lastGuardName.resize(0);
- BEGIN(Guard);
- }
- else
- {
- BEGIN(SkipCPPBlock);
- }
- }
- }
-<SkipCommand>"endif" {
- g_expectGuard = FALSE;
- decrLevel();
- if (--g_ifcount<0)
- {
- //outputChar('\n');
- BEGIN(Start);
- }
- }
-<SkipCommand>\n {
- outputChar('\n');
- g_yyLineNr++;
- BEGIN(SkipCPPBlock);
- }
-<SkipCommand>{ID} { // unknown directive
- BEGIN(SkipLine);
- }
-<SkipCommand>.
-<SkipLine>[^'"/\n]+
-<SkipLine>{CHARLIT} { }
-<SkipLine>\" {
- BEGIN(SkipString);
- }
-<SkipLine>.
-<SkipString>"//"/[^\n]* {
- }
-<SkipLine,SkipCommand,SkipCPPBlock>"//"[^\n]* {
- g_lastCPPContext=YY_START;
- BEGIN(RemoveCPPComment);
- }
-<SkipString>"/*"/[^\n]* {
- }
-<SkipLine,SkipCommand,SkipCPPBlock>"/*"/[^\n]* {
- g_lastCContext=YY_START;
- BEGIN(RemoveCComment);
- }
-<SkipLine>\n {
- outputChar('\n');
- g_yyLineNr++;
- BEGIN(SkipCPPBlock);
- }
-<SkipString>[^"\\\n]+ { }
-<SkipString>\\. { }
-<SkipString>\" {
- BEGIN(SkipLine);
- }
-<SkipString>. { }
-<IncludeID>{ID}{B}*/"(" {
- g_nospaces=TRUE;
- g_roundCount=0;
- g_defArgsStr=yytext;
- g_findDefArgContext = IncludeID;
- BEGIN(FindDefineArgs);
- }
-<IncludeID>{ID} {
- g_nospaces=TRUE;
- readIncludeFile(expandMacro(yytext));
- BEGIN(Start);
- }
-<Include>[^\">\n]+[\">] {
- g_incName+=yytext;
- readIncludeFile(g_incName);
- if (g_isImported)
- {
- BEGIN(EndImport);
- }
- else
- {
- BEGIN(Start);
- }
- }
-<EndImport>[^\\\n]*/\n {
- BEGIN(Start);
- }
-<EndImport>\\[\r]?"\n" {
- outputChar('\n');
- g_yyLineNr++;
- }
-<EndImport>. {
- }
-<DefName>{ID}/("\\\n")*"(" { // define with argument
- //printf("Define() '%s'\n",yytext);
- delete g_argDict;
- g_argDict = new QDict<int>(31);
- g_argDict->setAutoDelete(TRUE);
- g_defArgs = 0;
- g_defArgsStr.resize(0);
- g_defText.resize(0);
- g_defLitText.resize(0);
- g_defName = yytext;
- g_defVarArgs = FALSE;
- g_defExtraSpacing.resize(0);
- BEGIN(DefineArg);
- }
-<DefName>{ID}{B}+"1"/[ \r\t\n] { // special case: define with 1 -> can be "guard"
- //printf("Define '%s'\n",yytext);
- delete g_argDict; g_argDict=0;
- g_defArgs = -1;
- g_defArgsStr.resize(0);
- g_defName = yytext;
- g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace();
- g_defVarArgs = FALSE;
- //printf("Guard check: %s!=%s || %d\n",
- // g_defName.data(),g_lastGuardName.data(),g_expectGuard);
- if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
- { // define may appear in the output
- QCString tmp=(QCString)"#define "+g_defName;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- g_lastGuardName.resize(0);
- g_defText="1";
- g_defLitText="1";
- BEGIN(DefineText);
- }
- else // define is a guard => hide
- {
- //printf("Found a guard %s\n",yytext);
- g_defText.resize(0);
- g_defLitText.resize(0);
- BEGIN(Start);
- }
- g_expectGuard=FALSE;
- }
-<DefName>{ID}/{B}*"\n" { // empty define
- delete g_argDict; g_argDict=0;
- g_defArgs = -1;
- g_defName = yytext;
- g_defArgsStr.resize(0);
- g_defText.resize(0);
- g_defLitText.resize(0);
- g_defVarArgs = FALSE;
- //printf("Guard check: %s!=%s || %d\n",
- // g_defName.data(),g_lastGuardName.data(),g_expectGuard);
- if (g_curlyCount>0 || g_defName!=g_lastGuardName || !g_expectGuard)
- { // define may appear in the output
- QCString tmp=(QCString)"#define "+g_defName;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- if (g_insideCS) g_defText="1"; // for C#, use "1" as define text
- BEGIN(DefineText);
- }
- else // define is a guard => hide
- {
- //printf("Found a guard %s\n",yytext);
- g_guardName = yytext;
- g_lastGuardName.resize(0);
- BEGIN(Start);
- }
- g_expectGuard=FALSE;
- }
-<DefName>{ID}/{B}* { // define with content
- //printf("Define '%s'\n",yytext);
- delete g_argDict; g_argDict=0;
- g_defArgs = -1;
- g_defArgsStr.resize(0);
- g_defText.resize(0);
- g_defLitText.resize(0);
- g_defName = yytext;
- g_defVarArgs = FALSE;
- QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- BEGIN(DefineText);
- }
-<DefineArg>"\\\n" {
- g_defExtraSpacing+="\n";
- g_yyLineNr++;
- }
-<DefineArg>","{B}* { g_defArgsStr+=yytext; }
-<DefineArg>"("{B}* { g_defArgsStr+=yytext; }
-<DefineArg>{B}*")"{B}* {
- g_defArgsStr+=yytext;
- QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr+g_defExtraSpacing;
- outputArray(tmp.data(),tmp.length());
- g_quoteArg=FALSE;
- g_insideComment=FALSE;
- BEGIN(DefineText);
- }
-<DefineArg>"..." { // Variadic macro
- g_defVarArgs = TRUE;
- g_defArgsStr+=yytext;
- g_argDict->insert("__VA_ARGS__",new int(g_defArgs));
- g_defArgs++;
- }
-<DefineArg>{ID}{B}*("..."?) {
- //printf("Define addArg(%s)\n",yytext);
- QCString argName=yytext;
- g_defVarArgs = yytext[yyleng-1]=='.';
- if (g_defVarArgs) // strip ellipsis
- {
- argName=argName.left(argName.length()-3);
- }
- argName = argName.stripWhiteSpace();
- g_defArgsStr+=yytext;
- g_argDict->insert(argName,new int(g_defArgs));
- g_defArgs++;
- }
- /*
-<DefineText>"/ **"|"/ *!" {
- g_defText+=yytext;
- g_defLitText+=yytext;
- g_insideComment=TRUE;
- }
-<DefineText>"* /" {
- g_defText+=yytext;
- g_defLitText+=yytext;
- g_insideComment=FALSE;
- }
- */
-<DefineText>"/*"[!*]? {
- g_defText+=yytext;
- g_defLitText+=yytext;
- g_lastCContext=YY_START;
- g_commentCount=1;
- BEGIN(CopyCComment);
- }
-<DefineText>"//"[!/]? {
- outputArray(yytext,(int)yyleng);
- g_lastCPPContext=YY_START;
- g_defLitText+=' ';
- BEGIN(SkipCPPComment);
- }
-<SkipCComment>[/]?"*/" {
- if (yytext[0]=='/') outputChar('/');
- outputChar('*');outputChar('/');
- if (--g_commentCount<=0)
- {
- if (g_lastCContext==Start)
- // small hack to make sure that ^... rule will
- // match when going to Start... Example: "/*...*/ some stuff..."
- {
- YY_CURRENT_BUFFER->yy_at_bol=1;
- }
- BEGIN(g_lastCContext);
- }
- }
-<SkipCComment>"//"("/")* {
- outputArray(yytext,(int)yyleng);
- }
-<SkipCComment>"/*" {
- outputChar('/');outputChar('*');
- //g_commentCount++;
- }
-<SkipCComment>[\\@][\\@]("f{"|"f$"|"f[") {
- outputArray(yytext,(int)yyleng);
- }
-<SkipCComment>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
- static bool markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
- if (!markdownSupport)
- {
- REJECT;
- }
- else
- {
- outputArray(yytext,(int)yyleng);
- g_fenceSize=yyleng;
- BEGIN(SkipVerbatim);
- }
- }
-<SkipCComment>^({B}*"*"+)?{B}{0,3}"```"[`]* {
- static bool markdownSupport = Config_getBool(MARKDOWN_SUPPORT);
- if (!markdownSupport)
- {
- REJECT;
- }
- else
- {
- outputArray(yytext,(int)yyleng);
- g_fenceSize=yyleng;
- BEGIN(SkipVerbatim);
- }
- }
-<SkipCComment>[\\@][\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"docbookonly"|"rtfonly"|"manonly"|"dot"|"code"("{"[^}]*"}")?){BN}+ {
- outputArray(yytext,(int)yyleng);
- g_yyLineNr+=QCString(yytext).contains('\n');
- }
-<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"docbookonly"|"rtfonly"|"manonly"|"dot"|"code"("{"[^}]*"}")?){BN}+ {
- outputArray(yytext,(int)yyleng);
- g_yyLineNr+=QCString(yytext).contains('\n');
- g_fenceSize=0;
- if (yytext[1]=='f')
- {
- g_blockName="f";
- }
- else
- {
- QCString bn=&yytext[1];
- int i = bn.find('{'); // for \code{.c}
- if (i!=-1) bn=bn.left(i);
- g_blockName=bn.stripWhiteSpace();
- }
- BEGIN(SkipVerbatim);
- }
-<SkipCComment,SkipCPPComment>[\\@][\\@]"cond"[ \t]+ { // escaped @cond
- outputArray(yytext,(int)yyleng);
- }
-<SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section
- g_ccomment=TRUE;
- g_condCtx=YY_START;
- BEGIN(CondLineCpp);
- }
-<SkipCComment>[\\@]"cond"[ \t]+ { // conditional section
- g_ccomment=FALSE;
- g_condCtx=YY_START;
- BEGIN(CondLineC);
- }
-<CondLineC,CondLineCpp>[!()&| \ta-z_A-Z0-9\x80-\xFF.\-]+ {
- startCondSection(yytext);
- if (g_skip)
- {
- if (YY_START==CondLineC)
- {
- // end C comment
- outputArray("*/",2);
- g_ccomment=TRUE;
- }
- else
- {
- g_ccomment=FALSE;
- }
- BEGIN(SkipCond);
- }
- else
- {
- BEGIN(g_condCtx);
- }
- }
-<CondLineC,CondLineCpp>. { // non-guard character
- unput(*yytext);
- startCondSection(" ");
- if (g_skip)
- {
- if (YY_START==CondLineC)
- {
- // end C comment
- outputArray("*/",2);
- g_ccomment=TRUE;
- }
- else
- {
- g_ccomment=FALSE;
- }
- BEGIN(SkipCond);
- }
- else
- {
- BEGIN(g_condCtx);
- }
- }
-<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*/\n { // no guard
- if (YY_START==SkipCComment)
- {
- g_ccomment=TRUE;
- // end C comment
- outputArray("*/",2);
- }
- else
- {
- g_ccomment=FALSE;
- }
- g_condCtx=YY_START;
- startCondSection(" ");
- BEGIN(SkipCond);
- }
-<SkipCond>\n { g_yyLineNr++; outputChar('\n'); }
-<SkipCond>. { }
-<SkipCond>[^\/\!*\\@\n]+ { }
-<SkipCond>"//"[/!] { g_ccomment=FALSE; }
-<SkipCond>"/*"[*!] { g_ccomment=TRUE; }
-<SkipCond,SkipCComment,SkipCPPComment>[\\@][\\@]"endcond"/[^a-z_A-Z0-9\x80-\xFF] {
- if (!g_skip)
- {
- outputArray(yytext,(int)yyleng);
- }
- }
-<SkipCond>[\\@]"endcond"/[^a-z_A-Z0-9\x80-\xFF] {
- bool oldSkip = g_skip;
- endCondSection();
- if (oldSkip && !g_skip)
- {
- if (g_ccomment)
- {
- outputArray("/** ",4);
- }
- BEGIN(g_condCtx);
- }
- }
-<SkipCComment,SkipCPPComment>[\\@]"endcond"/[^a-z_A-Z0-9\x80-\xFF] {
- bool oldSkip = g_skip;
- endCondSection();
- if (oldSkip && !g_skip)
- {
- BEGIN(g_condCtx);
- }
- }
-<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode"|"f$"|"f]"|"f}") { /* end of verbatim block */
- outputArray(yytext,(int)yyleng);
- if (yytext[1]=='f' && g_blockName=="f")
- {
- BEGIN(SkipCComment);
- }
- else if (&yytext[4]==g_blockName)
- {
- BEGIN(SkipCComment);
- }
- }
-<SkipVerbatim>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
- outputArray(yytext,(int)yyleng);
- if (g_fenceSize==yyleng)
- {
- BEGIN(SkipCComment);
- }
- }
-<SkipVerbatim>^({B}*"*"+)?{B}{0,3}"```"[`]* {
- outputArray(yytext,(int)yyleng);
- if (g_fenceSize==yyleng)
- {
- BEGIN(SkipCComment);
- }
- }
-<SkipVerbatim>"*/"|"/*" {
- outputArray(yytext,(int)yyleng);
- }
-<SkipCComment,SkipVerbatim>[^*\\@\x06~`\n\/]+ {
- outputArray(yytext,(int)yyleng);
- }
-<SkipCComment,SkipVerbatim>\n {
- g_yyLineNr++;
- outputChar('\n');
- }
-<SkipCComment,SkipVerbatim>. {
- outputChar(*yytext);
- }
-<CopyCComment>[^*a-z_A-Z\x80-\xFF\n]*[^*a-z_A-Z\x80-\xFF\\\n] {
- g_defLitText+=yytext;
- g_defText+=escapeAt(yytext);
- }
-<CopyCComment>\\[\r]?\n {
- g_defLitText+=yytext;
- outputChar('\n');
- g_defText+=" ";
- g_yyLineNr++;
- g_yyMLines++;
- }
-<CopyCComment>"*/" {
- g_defLitText+=yytext;
- g_defText+=yytext;
- BEGIN(g_lastCContext);
- }
-<CopyCComment>\n {
- g_yyLineNr++;
- outputChar('\n');
- g_defLitText+=yytext;
- g_defText+=' ';
- }
-<RemoveCComment>"*/"{B}*"#" { // see bug 594021 for a usecase for this rule
- if (g_lastCContext==SkipCPPBlock)
- {
- BEGIN(SkipCommand);
- }
- else
- {
- REJECT;
- }
- }
-<RemoveCComment>"*/" { BEGIN(g_lastCContext); }
-<RemoveCComment>"//"
-<RemoveCComment>"/*"
-<RemoveCComment>[^*\x06\n]+
-<RemoveCComment>\n { g_yyLineNr++; outputChar('\n'); }
-<RemoveCComment>.
-<SkipCPPComment>[^\n\/\\@]+ {
- outputArray(yytext,(int)yyleng);
- }
-<SkipCPPComment,RemoveCPPComment>\n {
- unput(*yytext);
- BEGIN(g_lastCPPContext);
- }
-<SkipCPPComment>"/*" {
- outputChar('/');outputChar('*');
- }
-<SkipCPPComment>"//" {
- outputChar('/');outputChar('/');
- }
-<SkipCPPComment>[^\x06\@\\\n]+ {
- outputArray(yytext,(int)yyleng);
- }
-<SkipCPPComment>. {
- outputChar(*yytext);
- }
-<RemoveCPPComment>"/*"
-<RemoveCPPComment>"//"
-<RemoveCPPComment>[^\x06\n]+
-<RemoveCPPComment>.
-<DefineText>"#" {
- g_quoteArg=TRUE;
- g_defLitText+=yytext;
- }
-<DefineText,CopyCComment>{ID} {
- g_defLitText+=yytext;
- if (g_quoteArg)
- {
- g_defText+="\"";
- }
- if (g_defArgs>0)
- {
- int *n;
- if ((n=(*g_argDict)[yytext]))
- {
- //if (!g_quoteArg) g_defText+=' ';
- g_defText+='@';
- QCString numStr;
- numStr.sprintf("%d",*n);
- g_defText+=numStr;
- //if (!g_quoteArg) g_defText+=' ';
- }
- else
- {
- g_defText+=yytext;
- }
- }
- else
- {
- g_defText+=yytext;
- }
- if (g_quoteArg)
- {
- g_defText+="\"";
- }
- g_quoteArg=FALSE;
- }
-<CopyCComment>. {
- g_defLitText+=yytext;
- g_defText+=yytext;
- }
-<DefineText>\\[\r]?\n {
- g_defLitText+=yytext;
- outputChar('\n');
- g_defText += ' ';
- g_yyLineNr++;
- g_yyMLines++;
- }
-<DefineText>\n {
- QCString comment=extractTrailingComment(g_defLitText);
- g_defLitText+=yytext;
- if (!comment.isEmpty())
- {
- outputArray(comment,comment.length());
- g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1);
- }
- outputChar('\n');
- Define *def=0;
- //printf("Define name='%s' text='%s' litTexti='%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data());
- if (g_includeStack.isEmpty() || g_curlyCount>0)
- {
- addDefine();
- }
- def=DefineManager::instance().isDefined(g_defName);
- if (def==0) // new define
- {
- //printf("new define '%s'!\n",g_defName.data());
- Define *nd = newDefine();
- DefineManager::instance().addDefine(g_yyFileName,nd);
-
- // also add it to the local file list if it is a source file
- //if (g_isSource && g_includeStack.isEmpty())
- //{
- // g_fileDefineDict->insert(g_defName,nd);
- //}
- }
- else if (def /*&& macroIsAccessible(def)*/)
- // name already exists
- {
- //printf("existing define!\n");
- //printf("define found\n");
- if (def->undef) // undefined name
- {
- def->undef = FALSE;
- def->name = g_defName;
- def->definition = g_defText.stripWhiteSpace();
- def->nargs = g_defArgs;
- def->fileName = g_yyFileName.copy();
- def->lineNr = g_yyLineNr-g_yyMLines;
- def->columnNr = g_yyColNr;
- }
- else
- {
- //printf("error: define %s is defined more than once!\n",g_defName.data());
- }
- }
- delete g_argDict; g_argDict=0;
- g_yyLineNr++;
- g_yyColNr=1;
- g_lastGuardName.resize(0);
- BEGIN(Start);
- }
-<DefineText>{B}* { g_defText += ' '; g_defLitText+=yytext; }
-<DefineText>{B}*"##"{B}* { g_defText += "##"; g_defLitText+=yytext; }
-<DefineText>"@" { g_defText += "@@"; g_defLitText+=yytext; }
-<DefineText>\" {
- g_defText += *yytext;
- g_defLitText+=yytext;
- if (!g_insideComment)
- {
- BEGIN(SkipDoubleQuote);
- }
- }
-<DefineText>\' { g_defText += *yytext;
- g_defLitText+=yytext;
- if (!g_insideComment)
- {
- BEGIN(SkipSingleQuote);
- }
- }
-<SkipDoubleQuote>"//"[/]? { g_defText += yytext; g_defLitText+=yytext; }
-<SkipDoubleQuote>"/*" { g_defText += yytext; g_defLitText+=yytext; }
-<SkipDoubleQuote>\" {
- g_defText += *yytext; g_defLitText+=yytext;
- BEGIN(DefineText);
- }
-<SkipSingleQuote,SkipDoubleQuote>\\. {
- g_defText += yytext; g_defLitText+=yytext;
- }
-<SkipSingleQuote>\' {
- g_defText += *yytext; g_defLitText+=yytext;
- BEGIN(DefineText);
- }
-<SkipDoubleQuote>. { g_defText += *yytext; g_defLitText+=yytext; }
-<SkipSingleQuote>. { g_defText += *yytext; g_defLitText+=yytext; }
-<DefineText>. { g_defText += *yytext; g_defLitText+=yytext; }
-<<EOF>> {
- DBG_CTX((stderr,"End of include file\n"));
- //printf("Include stack depth=%d\n",g_includeStack.count());
- if (g_includeStack.isEmpty())
- {
- DBG_CTX((stderr,"Terminating scanner!\n"));
- yyterminate();
- }
- else
- {
- FileState *fs=g_includeStack.pop();
- //fileDefineCache->merge(g_yyFileName,fs->fileName);
- YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
- yy_switch_to_buffer( fs->bufState );
- yy_delete_buffer( oldBuf );
- g_yyLineNr = fs->lineNr;
- //preYYin = fs->oldYYin;
- g_inputBuf = fs->oldFileBuf;
- g_inputBufPos = fs->oldFileBufPos;
- g_curlyCount = fs->curlyCount;
- setFileName(fs->fileName);
- DBG_CTX((stderr,"######## FileName %s\n",g_yyFileName.data()));
-
- // Deal with file changes due to
- // #include's within { .. } blocks
- QCString lineStr(15+g_yyFileName.length());
- lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
- outputArray(lineStr.data(),lineStr.length());
-
- delete fs; fs=0;
- }
- }
-<*>"/*"/"*/" |
-<*>"/*"[*]? {
- if (YY_START==SkipVerbatim || YY_START==SkipCond)
- {
- REJECT;
- }
- else
- {
- outputArray(yytext,(int)yyleng);
- g_lastCContext=YY_START;
- g_commentCount=1;
- if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
- BEGIN(SkipCComment);
- }
- }
-<*>"//"[/]? {
- if (YY_START==SkipVerbatim || YY_START==SkipCond || getLanguageFromFileName(g_yyFileName)==SrcLangExt_Fortran)
- {
- REJECT;
- }
- else
- {
- outputArray(yytext,(int)yyleng);
- g_lastCPPContext=YY_START;
- if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
- BEGIN(SkipCPPComment);
- }
- }
-<*>\n {
- outputChar('\n');
- g_yyLineNr++;
- }
-<*>. {
- g_expectGuard = FALSE;
- outputChar(*yytext);
- }
-
-%%
-
/*@ ----------------------------------------------------------------------------
*/
-static int getNextChar(const QCString &expr,QCString *rest,uint &pos)
+static int getNextChar(yyscan_t yyscanner,const QCString &expr,QCString *rest,uint &pos)
{
//printf("getNextChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
if (pos<expr.length())
@@ -3053,13 +3121,13 @@ static int getNextChar(const QCString &expr,QCString *rest,uint &pos)
}
else
{
- int cc=yyinput();
+ int cc=yyinput(yyscanner);
//printf("%d=yyinput() %d\n",cc,EOF);
return cc;
}
}
-static int getCurrentChar(const QCString &expr,QCString *rest,uint pos)
+static int getCurrentChar(yyscan_t yyscanner,const QCString &expr,QCString *rest,uint pos)
{
//printf("getCurrentChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
if (pos<expr.length())
@@ -3075,15 +3143,15 @@ static int getCurrentChar(const QCString &expr,QCString *rest,uint pos)
}
else
{
- int cc=yyinput();
- returnCharToStream(cc);
+ int cc=yyinput(yyscanner);
+ returnCharToStream(yyscanner,cc);
//unput((char)cc);
//printf("%c=yyinput()\n",cc);
return cc;
}
}
-static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c)
+static void unputChar(yyscan_t yyscanner,const QCString &expr,QCString *rest,uint &pos,char c)
{
//printf("unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
if (pos<expr.length())
@@ -3099,61 +3167,85 @@ static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c)
else
{
//unput(c);
- returnCharToStream(c);
+ returnCharToStream(yyscanner,c);
}
//printf("result: unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
}
-void addSearchDir(const char *dir)
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+struct Preprocessor::Private
+{
+ yyscan_t yyscanner;
+ preYY_state state;
+ bool firstTime = FALSE;
+};
+
+void Preprocessor::addSearchDir(const char *dir)
{
+ YY_EXTRA_TYPE state = preYYget_extra(p->yyscanner);
QFileInfo fi(dir);
- if (fi.isDir()) g_pathList->append(fi.absFilePath().utf8());
+ if (fi.isDir()) state->pathList->append(fi.absFilePath().utf8());
}
-void initPreprocessor()
+Preprocessor::Preprocessor()
{
- g_pathList = new QStrList;
+ p = new Private;
+ preYYlex_init_extra(&p->state,&p->yyscanner);
+ YY_EXTRA_TYPE state = preYYget_extra(p->yyscanner);
+ state->pathList = new QStrList;
addSearchDir(".");
- g_expandedDict = new DefineDict(17);
+ state->expandedDict = new DefineDict(17);
}
-void cleanUpPreprocessor()
+Preprocessor::~Preprocessor()
{
- delete g_expandedDict; g_expandedDict=0;
- delete g_pathList; g_pathList=0;
- DefineManager::deleteInstance();
+ YY_EXTRA_TYPE state = preYYget_extra(p->yyscanner);
+ delete state->expandedDict;
+ state->expandedDict=0;
+ delete state->pathList;
+ state->pathList=0;
+ preYYlex_destroy(p->yyscanner);
+ delete p;
}
-
-void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
+void Preprocessor::processFile(const char *fileName,BufStr &input,BufStr &output)
{
+ yyscan_t yyscanner = p->yyscanner;
+ YY_EXTRA_TYPE state = preYYget_extra(p->yyscanner);
+ struct yyguts_t *yyg = (struct yyguts_t*)p->yyscanner;
+
+#ifdef FLEX_DEBUG
+ preYYset_debug(1,yyscanner);
+#endif
+
printlex(yy_flex_debug, TRUE, __FILE__, fileName);
uint orgOffset=output.curPos();
//printf("##########################\n%s\n####################\n",
// input.data());
- g_macroExpansion = Config_getBool(MACRO_EXPANSION);
- g_expandOnlyPredef = Config_getBool(EXPAND_ONLY_PREDEF);
- g_skip=FALSE;
- g_curlyCount=0;
- g_nospaces=FALSE;
- g_inputBuf=&input;
- g_inputBufPos=0;
- g_outputBuf=&output;
- g_includeStack.setAutoDelete(TRUE);
- g_includeStack.clear();
- g_expandedDict->setAutoDelete(FALSE);
- g_expandedDict->clear();
- g_condStack.setAutoDelete(TRUE);
- g_condStack.clear();
- //g_fileDefineDict->clear();
-
- setFileName(fileName);
- g_inputFileDef = g_yyFileDef;
- DefineManager::instance().startContext(g_yyFileName);
+ state->macroExpansion = Config_getBool(MACRO_EXPANSION);
+ state->expandOnlyPredef = Config_getBool(EXPAND_ONLY_PREDEF);
+ state->skip=FALSE;
+ state->curlyCount=0;
+ state->nospaces=FALSE;
+ state->inputBuf=&input;
+ state->inputBufPos=0;
+ state->outputBuf=&output;
+ state->includeStack.setAutoDelete(TRUE);
+ state->includeStack.clear();
+ state->expandedDict->setAutoDelete(FALSE);
+ state->expandedDict->clear();
+ state->condStack.setAutoDelete(TRUE);
+ state->condStack.clear();
+ //state->fileDefineDict->clear();
+
+ setFileName(yyscanner,fileName);
+ state->inputFileDef = state->yyFileDef;
+ state->defineManager.startContext(state->yyFileName);
- static bool firstTime=TRUE;
- if (firstTime)
+ p->firstTime=TRUE;
+ if (p->firstTime)
{
// add predefined macros
char *defStr;
@@ -3226,13 +3318,14 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
def->nargs = count;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
- def->fileDef = g_yyFileDef;
+ def->fileDef = state->yyFileDef;
def->fileName = fileName;
- DefineManager::instance().addDefine(g_yyFileName,def);
+ state->defineManager.addDefine(state->yyFileName,def);
+
+ //printf("#define '%s' '%s' #nargs=%d\n",
+ // def->name.data(),def->definition.data(),def->nargs);
}
- //printf("#define '%s' '%s' #nargs=%d\n",
- // def->name.data(),def->definition.data(),def->nargs);
}
else if ((i_obrace==-1 || i_obrace>i_equals) &&
(i_cbrace==-1 || i_cbrace>i_equals) &&
@@ -3257,9 +3350,9 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
def->nargs = -1;
def->isPredefined = TRUE;
def->nonRecursive = nonRecursive;
- def->fileDef = g_yyFileDef;
+ def->fileDef = state->yyFileDef;
def->fileName = fileName;
- DefineManager::instance().addDefine(g_yyFileName,def);
+ state->defineManager.addDefine(state->yyFileName,def);
}
else
{
@@ -3273,24 +3366,23 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
//firstTime=FALSE;
}
- g_yyLineNr = 1;
- g_yyColNr = 1;
- g_level = 0;
- g_ifcount = 0;
+ state->yyLineNr = 1;
+ state->yyColNr = 1;
+ state->level = 0;
+ state->ifcount = 0;
BEGIN( Start );
- g_expectGuard = guessSection(fileName)==Entry::HEADER_SEC;
- g_guardName.resize(0);
- g_lastGuardName.resize(0);
- g_guardExpr.resize(0);
+ state->expectGuard = guessSection(fileName)==Entry::HEADER_SEC;
+ state->guardName.resize(0);
+ state->lastGuardName.resize(0);
+ state->guardExpr.resize(0);
- preYYlex();
- g_lexInit=TRUE;
+ preYYlex(yyscanner);
- while (!g_condStack.isEmpty())
+ while (!state->condStack.isEmpty())
{
- CondCtx *ctx = g_condStack.pop();
+ CondCtx *ctx = state->condStack.pop();
QCString sectionInfo = " ";
if (ctx->sectionId!=" ") sectionInfo.sprintf(" with label '%s' ",ctx->sectionId.stripWhiteSpace().data());
warn(fileName,ctx->lineNr,"Conditional section%sdoes not have "
@@ -3298,18 +3390,18 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
delete ctx;
}
// make sure we don't extend a \cond with missing \endcond over multiple files (see bug 624829)
- forceEndCondSection();
+ forceEndCondSection(yyscanner);
// remove locally defined macros so they can be redefined in another source file
- //if (g_fileDefineDict->count()>0)
+ //if (state->fileDefineDict->count()>0)
//{
- // QDictIterator<Define> di(*g_fileDefineDict);
+ // QDictIterator<Define> di(*state->fileDefineDict);
// Define *d;
// for (di.toFirst();(d=di.current());++di)
// {
- // g_globalDefineDict->remove(di.currentKey());
+ // state->globalDefineDict->remove(di.currentKey());
// }
- // g_fileDefineDict->clear();
+ // state->fileDefineDict->clear();
//}
if (Debug::isFlagSet(Debug::Preprocessor))
@@ -3326,11 +3418,11 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
orgPos++;
}
Debug::print(Debug::Preprocessor,0,"\n---------\n");
- if (DefineManager::instance().defineContext().count()>0)
+ if (state->defineManager.defineContext().count()>0)
{
Debug::print(Debug::Preprocessor,0,"Macros accessible in this file:\n");
Debug::print(Debug::Preprocessor,0,"---------\n");
- QDictIterator<Define> di(DefineManager::instance().defineContext());
+ QDictIterator<Define> di(state->defineManager.defineContext());
Define *def;
for (di.toFirst();(def=di.current());++di)
{
@@ -3343,25 +3435,9 @@ void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
Debug::print(Debug::Preprocessor,0,"No macros accessible in this file.\n");
}
}
- DefineManager::instance().endContext();
+ state->defineManager.endContext();
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
}
-void preFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- preYYlex_destroy();
- }
-#endif
-}
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
-// int preYYwrap() { return 1 ; }
- void preYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
#include "pre.l.h"
diff --git a/src/pycode.h b/src/pycode.h
index de0a8a9..e3a01b4 100644
--- a/src/pycode.h
+++ b/src/pycode.h
@@ -25,7 +25,7 @@
#ifndef PYCODE_H
#define PYCODE_H
-#include "types.h"
+#include "parserintf.h"
class CodeOutputInterface;
class FileDef;
@@ -33,11 +33,26 @@ class MemberDef;
class QCString;
class Definition;
-extern void parsePythonCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
- bool collectXRefs);
-extern void resetPythonCodeParserState();
+class PythonCodeParser : public CodeParserInterface
+{
+ public:
+ void parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt lang,
+ bool isExampleBlock,
+ const char *exampleName=0,
+ FileDef *fileDef=0,
+ int startLine=-1,
+ int endLine=-1,
+ bool inlineFragment=FALSE,
+ const MemberDef *memberDef=0,
+ bool showLineNumbers=TRUE,
+ const Definition *searchCtx=0,
+ bool collectXrefs=TRUE
+ );
+ void resetCodeParserState();
+};
+
#endif
diff --git a/src/pycode.l b/src/pycode.l
index 8cae0e2..f7e255f 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -1276,7 +1276,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT
{BB}/({NONEMPTY}|{EXPCHAR}) {
// This implements poor
- // indendation-tracking;
+ // indentation-tracking;
// should be improved.
// (translate tabs to space, etc)
codifyLines(yytext);
@@ -1638,13 +1638,33 @@ void parsePythonCode(CodeOutputInterface &od,const char * /*className*/,
return;
}
+//----------------------------------------------------------------------------
+
+void PythonCodeParser::parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt /*lang*/,
+ bool isExampleBlock,
+ const char *exampleName,
+ FileDef *fileDef,
+ int startLine,
+ int endLine,
+ bool inlineFragment,
+ const MemberDef *memberDef,
+ bool showLineNumbers,
+ const Definition *searchCtx,
+ bool collectXRefs
+ )
+{
+ ::parsePythonCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
+ fileDef,startLine,endLine,inlineFragment,memberDef,
+ showLineNumbers,searchCtx,collectXRefs);
+}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void pycodeYYdummy() { yy_flex_realloc(0,0); }
+void PythonCodeParser::resetCodeParserState()
+{
+ ::resetPythonCodeParserState();
}
-#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
-#endif
+
#include "pycode.l.h"
diff --git a/src/pyscanner.h b/src/pyscanner.h
index 13b10b9..6cfadf6 100644
--- a/src/pyscanner.h
+++ b/src/pyscanner.h
@@ -31,34 +31,17 @@
*
* This is the Python language parser for doxygen.
*/
-class PythonLanguageScanner : public ParserInterface
+class PythonOutlineParser : public OutlineParserInterface
{
public:
- virtual ~PythonLanguageScanner() {}
void startTranslationUnit(const char *) {}
void finishTranslationUnit() {}
void parseInput(const char * fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList &filesInSameTranslationUnit);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt lang,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- const MemberDef *memberDef=0,
- bool showLineNumbers=TRUE,
- const Definition *searchCtx=0,
- bool collectXrefs=TRUE
- );
- void resetCodeParserState();
+ bool needsPreprocessing(const QCString &extension) const;
void parsePrototype(const char *text);
};
diff --git a/src/pyscanner.l b/src/pyscanner.l
index ee72c7c..efdc943 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -65,17 +65,17 @@
*/
-static ParserInterface *g_thisParser;
+static OutlineParserInterface *g_thisParser;
static const char * inputString;
static int inputPosition;
static QFile inputFile;
static Protection protection;
-static Entry* current_root = 0 ;
-static std::unique_ptr<Entry> current;
-static Entry* previous = 0 ;
-static Entry* bodyEntry = 0 ;
+static std::shared_ptr<Entry> current_root;
+static std::shared_ptr<Entry> current;
+static std::shared_ptr<Entry> previous;
+static std::shared_ptr<Entry> bodyEntry;
static int yyLineNr = 1 ;
static QCString yyFileName;
static MethodTypes mtype;
@@ -151,7 +151,7 @@ static void initEntry()
static void newEntry()
{
- previous = current.get();
+ previous = current;
current_root->moveToSubEntryAndRefresh(current);
initEntry();
}
@@ -292,7 +292,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
QCString processedDoc = preprocessCommentBlock(doc,yyFileName,lineNr);
while (parseCommentBlock(
g_thisParser,
- (docBlockInBody && previous) ? previous : current.get(),
+ (docBlockInBody && previous) ? previous.get() : current.get(),
processedDoc, // text
yyFileName, // file
lineNr,
@@ -378,7 +378,7 @@ static void searchFoundDef()
current->type.resize(0);
current->name.resize(0);
current->args.resize(0);
- current->argList->clear();
+ current->argList.clear();
g_packageCommentAllowed = FALSE;
gstat=FALSE;
//printf("searchFoundDef at=%d\n",yyLineNr);
@@ -387,7 +387,7 @@ static void searchFoundDef()
static void searchFoundClass()
{
current->section = Entry::CLASS_SEC;
- current->argList->clear();
+ current->argList.clear();
current->type += "class" ;
current->fileName = yyFileName;
current->startLine = yyLineNr;
@@ -913,7 +913,7 @@ STARTDOCSYMS "##"
}
{B}":"{B} { // function without arguments
g_specialBlock = TRUE; // expecting a docstring
- bodyEntry = current.get();
+ bodyEntry = current;
BEGIN(FunctionBody);
}
@@ -928,6 +928,10 @@ STARTDOCSYMS "##"
BEGIN(FunctionParams);
}
")" { // end of parameter list
+ if (current->argList.empty())
+ {
+ current->argList.noParameters=TRUE;
+ }
current->args = argListToString(current->argList);
g_funcParamsEnd = TRUE;
}
@@ -942,10 +946,10 @@ STARTDOCSYMS "##"
}
{IDENTIFIER} { // Name of parameter
lineCount();
- Argument *a = new Argument;
- current->argList->append(a);
- current->argList->getLast()->name = QCString(yytext).stripWhiteSpace();
- current->argList->getLast()->type = g_argType;
+ Argument a;
+ a.name = QCString(yytext).stripWhiteSpace();
+ a.type = g_argType;
+ current->argList.push_back(a);
g_argType = "";
}
"=" { // default value
@@ -1032,8 +1036,8 @@ STARTDOCSYMS "##"
"," {
if (g_braceCount == 0)
{
- if (current->argList->getLast())
- current->argList->getLast()->type += g_defVal.data();
+ if (!current->argList.empty())
+ current->argList.back().type += g_defVal;
if (*yytext != ',')
unput(*yytext);
BEGIN(FunctionParams);
@@ -1082,8 +1086,8 @@ STARTDOCSYMS "##"
"," {
if (g_braceCount == 0)
{
- if (current->argList->getLast())
- current->argList->getLast()->defval=QCString(g_defVal.data()).stripWhiteSpace();
+ if (!current->argList.empty())
+ current->argList.back().defval=QCString(g_defVal).stripWhiteSpace();
if (*yytext == ')')
unput(*yytext);
BEGIN(FunctionParams);
@@ -1241,8 +1245,8 @@ STARTDOCSYMS "##"
}
{SCOPE} {
- current->extends->append(
- new BaseInfo(substitute(yytext,".","::"),Public,Normal)
+ current->extends.push_back(
+ BaseInfo(substitute(yytext,".","::"),Public,Normal)
);
//Has base class-do stuff
}
@@ -1296,7 +1300,7 @@ STARTDOCSYMS "##"
current->program+=yytext;
//current->startLine = yyLineNr;
g_curIndent=computeIndent(yytext);
- bodyEntry = current.get();
+ bodyEntry = current;
DBG_CTX((stderr,"setting indent %d\n",g_curIndent));
//printf("current->program=[%s]\n",current->program.data());
//g_hideClassDocs = TRUE;
@@ -1702,12 +1706,12 @@ STARTDOCSYMS "##"
//----------------------------------------------------------------------------
-static void parseCompounds(Entry *rt)
+static void parseCompounds(std::shared_ptr<Entry> rt)
{
//printf("parseCompounds(%s)\n",rt->name.data());
for (int i=0; i<rt->children().size(); ++i)
{
- Entry *ce = rt->children()[i].get();
+ std::shared_ptr<Entry> ce = rt->children()[i];
if (!ce->program.isEmpty())
{
//printf("-- %s ---------\n%s\n---------------\n",
@@ -1723,14 +1727,14 @@ static void parseCompounds(Entry *rt)
}
else if (ce->parent())
{
- current_root = ce->parent();
+ current_root = rt;
//printf("Searching for member variables in %s parent=%s\n",
// ce->name.data(),ce->parent->name.data());
BEGIN( SearchMemVars );
}
yyFileName = ce->fileName;
yyLineNr = ce->bodyLine ;
- current = std::make_unique<Entry>();
+ current = std::make_shared<Entry>();
initEntry();
QCString name = ce->name;
@@ -1750,7 +1754,7 @@ static void parseCompounds(Entry *rt)
//----------------------------------------------------------------------------
-static void parseMain(const char *fileName,const char *fileBuf,const std::unique_ptr<Entry> &rt)
+static void parseMain(const char *fileName,const char *fileBuf,const std::shared_ptr<Entry> &rt)
{
initParser();
@@ -1761,7 +1765,7 @@ static void parseMain(const char *fileName,const char *fileBuf,const std::unique
mtype = Method;
gstat = FALSE;
virt = Normal;
- current_root = rt.get();
+ current_root = rt;
g_specialBlock = FALSE;
@@ -1785,7 +1789,7 @@ static void parseMain(const char *fileName,const char *fileBuf,const std::unique
g_moduleScope+=baseName;
}
- current = std::make_unique<Entry>();
+ current = std::make_shared<Entry>();
initEntry();
current->name = g_moduleScope;
current->section = Entry::NAMESPACE_SEC;
@@ -1794,7 +1798,7 @@ static void parseMain(const char *fileName,const char *fileBuf,const std::unique
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
- current_root = current.get();
+ current_root = current;
rt->moveToSubEntryAndRefresh(current);
@@ -1882,9 +1886,9 @@ void pyscanFreeScanner()
//----------------------------------------------------------------------------
-void PythonLanguageScanner::parseInput(const char *fileName,
+void PythonOutlineParser::parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool /*sameTranslationUnit*/,
QStrList & /*filesInSameTranslationUnit*/)
{
@@ -1897,50 +1901,17 @@ void PythonLanguageScanner::parseInput(const char *fileName,
// printAST(global_root);
}
-bool PythonLanguageScanner::needsPreprocessing(const QCString &)
+bool PythonOutlineParser::needsPreprocessing(const QCString &) const
{
return FALSE;
}
-void PythonLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt /*lang*/,
- bool isExampleBlock,
- const char *exampleName,
- FileDef *fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- const MemberDef *memberDef,
- bool showLineNumbers,
- const Definition *searchCtx,
- bool collectXRefs
- )
-{
- ::parsePythonCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers,searchCtx,collectXRefs);
-}
-
-void PythonLanguageScanner::parsePrototype(const char *text)
+void PythonOutlineParser::parsePrototype(const char *text)
{
::parsePrototype(text);
}
-void PythonLanguageScanner::resetCodeParserState()
-{
- ::resetPythonCodeParserState();
-}
-
-//----------------------------------------------------------------------------
-
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void pyscannerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
#include "pyscanner.l.h"
diff --git a/src/reflist.cpp b/src/reflist.cpp
index e874653..016ef49 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -206,6 +206,6 @@ void RefList::generatePage()
}
doc += "</dl>\n";
//printf("generatePage('%s')\n",doc.data());
- addRelatedPage(m_listName,m_pageTitle,doc,0,m_fileName,1,0,0,0,TRUE);
+ addRelatedPage(m_listName,m_pageTitle,doc,m_fileName,1,std::vector<ListItemInfo>(),0,0,TRUE);
}
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 43ac362..5a8e49d 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -305,8 +305,8 @@ void RTFDocVisitor::visit(DocVerbatim *s)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,s->context(),s->text(),langExt,
+ Doxygen::parserManager->getCodeParser(lang)
+ .parseCode(m_ci,s->context(),s->text(),langExt,
s->isExample(),s->exampleFile());
//m_t << "\\par" << endl;
m_t << "}" << endl;
@@ -432,8 +432,8 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << rtf_Style_Reset << getStyle("CodeExample");
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -454,8 +454,8 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "{" << endl;
m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),langExt,inc->isExample(),
inc->exampleFile(),
0, // fileDef
@@ -485,8 +485,8 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "{" << endl;
if (!m_lastIsPara) m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -502,8 +502,8 @@ void RTFDocVisitor::visit(DocInclude *inc)
m_t << "{" << endl;
if (!m_lastIsPara) m_t << "\\par" << endl;
m_t << rtf_Style_Reset << getStyle("CodeExample");
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -560,8 +560,8 @@ void RTFDocVisitor::visit(DocIncOperator *op)
fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
}
- Doxygen::parserManager->getParser(locLangExt)
- ->parseCode(m_ci,op->context(),op->text(),langExt,
+ Doxygen::parserManager->getCodeParser(locLangExt)
+ .parseCode(m_ci,op->context(),op->text(),langExt,
op->isExample(),op->exampleFile(),
fd, // fileDef
op->line(), // startLine
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index f32936e..92740f4 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -1952,7 +1952,7 @@ void RTFGenerator::endCodeFragment()
{
//newParagraph();
//styleStack.pop();
- //printf("RTFGenerator::endCodeFrament() top=%s\n",styleStack.top());
+ //printf("RTFGenerator::endCodeFragment() top=%s\n",styleStack.top());
//t << rtf_Style_Reset << styleStack.top() << endl;
//endCodeLine checks is there is still an open code line, if so closes it.
endCodeLine();
@@ -3052,6 +3052,7 @@ void RTFGenerator::writeLineNumber(const char *,const char *,const char *,int l)
QCString lineNumber;
lineNumber.sprintf("%05d",l);
t << lineNumber << " ";
+ col=0;
}
void RTFGenerator::startCodeLine(bool)
{
diff --git a/src/rtfgen.h b/src/rtfgen.h
index b5f06f0..575b9a3 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -283,7 +283,7 @@ class RTFGenerator : public OutputGenerator
bool m_prettyCode;
bool m_bstartedBody; // has startbody been called yet?
- int m_listLevel; // // RTF does not really have a addative indent...manually set list level.
+ int m_listLevel; // // RTF does not really have a additive indent...manually set list level.
bool m_omitParagraph; // should a the next paragraph command be ignored?
int m_numCols; // number of columns in a table
QCString relPath;
diff --git a/src/scanner.h b/src/scanner.h
index 7103cb0..70df660 100644
--- a/src/scanner.h
+++ b/src/scanner.h
@@ -26,37 +26,24 @@
* supports C++ and various languages that are closely related to C++,
* such as C, C#, Objective-C, Java, PHP, and IDL.
*/
-class CLanguageScanner : public ParserInterface
+class COutlineParser : public OutlineParserInterface
{
public:
- virtual ~CLanguageScanner() {}
+ COutlineParser();
+ virtual ~COutlineParser();
void startTranslationUnit(const char *fileName);
void finishTranslationUnit();
void parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList &filesInSameTranslationUnit);
- bool needsPreprocessing(const QCString &extension);
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt lang,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- const MemberDef *memberDef=0,
- bool showLineNumbers=TRUE,
- const Definition *searchCtx=0,
- bool collectXRefs=TRUE
- );
- void resetCodeParserState();
+ bool needsPreprocessing(const QCString &extension) const;
void parsePrototype(const char *text);
+ private:
+ struct Private;
+ std::unique_ptr<Private> p;
};
-void scanFreeScanner();
#endif
diff --git a/src/scanner.l b/src/scanner.l
index 50ebe5e..0e3aeb0 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -16,6 +16,8 @@
*/
%option never-interactive
%option prefix="scannerYY"
+%option reentrant
+%option extra-type="struct scannerYY_state *"
%{
@@ -54,559 +56,170 @@
#define YY_NO_INPUT 1
#define YY_NO_UNISTD_H 1
-/* -----------------------------------------------------------------
- *
- * statics
- */
-static ParserInterface *g_thisParser;
-static const char * inputString;
-static int inputPosition;
-static QFile inputFile;
-static int lastContext;
-static int lastCContext;
-static int lastDocContext;
-static int lastCPPContext;
-static int lastSkipSharpContext;
-static int lastSkipRoundContext;
-static int lastStringContext;
-static int lastCurlyContext;
-static int lastRoundContext;
-static int lastSquareContext;
-static int lastInitializerContext;
-static int lastClassTemplSpecContext;
-static int lastPreLineCtrlContext;
-static int lastSkipVerbStringContext;
-static int lastCommentInArgContext;
-static int lastRawStringContext;
-static int lastCSConstraint;
-static int lastHereDocContext;
-static int lastDefineContext;
-static int lastAlignAsContext;
-static int lastC11AttributeContext;
-static int lastModifierContext;
-static Protection protection;
-static Protection baseProt;
-static int sharpCount = 0 ;
-static int roundCount = 0 ;
-static int curlyCount = 0 ;
-static int squareCount = 0 ;
-static int padCount = 0 ;
-static std::unique_ptr<Entry> current;
-static Entry* current_root = 0 ;
-static Entry* global_root = 0 ;
-static Entry* previous = 0 ;
-static std::unique_ptr<Entry> tempEntry;
-static Entry* firstTypedefEntry = 0 ;
-static Entry* memspecEntry = 0 ;
-static int yyLineNr = 1 ;
-static int yyBegLineNr = yyLineNr ;
-static int yyColNr = 1 ;
-static int yyBegColNr = yyColNr ;
-static int anonCount = 0 ;
-static int anonNSCount = 0 ;
-static QCString yyFileName;
-static MethodTypes mtype;
-static bool gstat;
-static bool removeSlashes;
-static Specifier virt;
-static Specifier baseVirt;
-static QCString msType,msName,msArgs;
-static bool isTypedef;
-static int tmpDocType;
-static QCString sectionLabel;
-static QCString sectionTitle;
-static QCString funcPtrType;
-static QCString templateStr;
-static QCString aliasName;
-static QCString baseName;
-static QCString* specName;
-static QCString formulaText;
-static bool useOverrideCommands = FALSE;
-
-static SrcLangExt language;
-static bool insideIDL = FALSE; //!< processing IDL code?
-static bool insideJava = FALSE; //!< processing Java code?
-static bool insideCS = FALSE; //!< processing C# code?
-static bool insideD = FALSE; //!< processing D code?
-static bool insidePHP = FALSE; //!< processing PHP code?
-static bool insideObjC = FALSE; //!< processing Objective C code?
-static bool insideCli = FALSE; //!< processing C++/CLI code?
-static bool insideJS = FALSE; //!< processing JavaScript code?
-static bool insideSlice = FALSE; //!< processing Slice code?
-static bool insideCpp = TRUE; //!< processing C/C++ code
-
-static bool sliceOpt = FALSE;
-
-static bool insideCppQuote = FALSE;
-static bool insideProtocolList = FALSE;
-
-static int argRoundCount;
-static int argSharpCount;
-static int currentArgumentContext;
-static int lastCopyArgStringContext;
-static int lastCopyArgContext;
-static QCString *copyArgString;
-static QCString fullArgString;
-static QCString dummyRawString;
-
-static ArgumentList *currentArgumentList;
-static char lastCopyArgChar;
-
-static QCString *pCopyQuotedString;
-static QCString *pCopyRoundString;
-static QCString *pCopyCurlyString;
-static QCString *pCopyRawString;
-
-static QGString *pCopyCurlyGString;
-static QGString *pCopyRoundGString;
-static QGString *pCopySquareGString;
-static QGString *pCopyQuotedGString;
-static QGString *pCopyHereDocGString;
-static QGString *pCopyRawGString;
-static QGString *pSkipVerbString;
-static QStack<Grouping> autoGroupStack;
-
-static bool insideFormula;
-static bool insideTryBlock=FALSE;
-static bool insideCode;
-static bool needsSemi;
-
-//static int depthIf;
-static int initBracketCount;
-
-static QCString oldStyleArgType;
-static QCString docBackup;
-static QCString briefBackup;
-
-static int docBlockContext;
-static QGString docBlock;
-static QCString docBlockName;
-static bool docBlockInBody;
-static bool docBlockAutoBrief;
-static char docBlockTerm;
-
-static QCString idlAttr;
-static QCString idlProp;
-static bool odlProp;
-
-static bool g_lexInit = FALSE;
-static bool externC;
-
-static QCString g_delimiter;
-
-static int g_column;
-
-static int g_fencedSize=0;
-static bool g_nestedComment=0;
-
-static std::vector< std::pair<Entry*,std::unique_ptr<Entry> > > g_outerScopeEntries;
-
-static const char *stateToString(int state);
-//-----------------------------------------------------------------------------
-
-// forward declarations
-//static void handleGroupStartCommand(const char *header);
-//static void handleGroupEndCommand();
-
-//-----------------------------------------------------------------------------
-
-static void initParser()
-{
- g_outerScopeEntries.clear();
- sectionLabel.resize(0);
- sectionTitle.resize(0);
- baseName.resize(0);
- formulaText.resize(0);
- protection = Public;
- baseProt = Public;
- sharpCount = 0;
- roundCount = 0;
- curlyCount = 0;
- mtype = Method;
- gstat = FALSE;
- virt = Normal;
- baseVirt = Normal;
- isTypedef = FALSE;
- autoGroupStack.clear();
- insideTryBlock = FALSE;
- autoGroupStack.setAutoDelete(TRUE);
- insideFormula = FALSE;
- insideCode=FALSE;
- insideCli=Config_getBool(CPP_CLI_SUPPORT);
- sliceOpt=Config_getBool(OPTIMIZE_OUTPUT_SLICE);
- previous = 0;
- firstTypedefEntry = 0;
- memspecEntry =0;
-}
-
-static void initEntry()
-{
- if (insideJava)
- {
- protection = (current_root->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
- }
- current->protection = protection ;
- current->mtype = mtype;
- current->virt = virt;
- current->stat = gstat;
- current->lang = language;
- //printf("*** initEntry() language=%d\n",language);
- //if (!autoGroupStack.isEmpty())
- //{
- // //printf("Appending group %s\n",autoGroupStack.top()->groupname.data());
- // current->groups->append(new Grouping(*autoGroupStack.top()));
- //}
- Doxygen::docGroup.initGroupInfo(current.get());
- isTypedef=FALSE;
-}
-
-
-//-----------------------------------------------------------------------------
-
-///// remove any automatic grouping and add new one (if given)
-//static void setCurrentGroup( QCString *newgroup, Grouping::GroupPri_t pri )
-//{
-// /* remove auto group name from current entry and discard it */
-// Grouping *g = current->groups->first();
-// int i=0;
-// while (g)
-// {
-// if (g->pri <= Grouping::GROUPING_AUTO_DEF)
-// {
-// current->groups->remove(i);
-// i--;
-// }
-// g=current->groups->next();
-// i++;
-// }
-//
-// /* use new group name instead? */
-// if ( newgroup )
-// {
-// current->groups->append(new Grouping(*newgroup, pri));
-// }
-//}
-//
-//static int newMemberGroupId()
-//{
-// static int curGroupId=0;
-// return curGroupId++;
-//}
-//
-// forward declarations
-//static void startGroupInDoc();
-//static void endGroup();
-
-//-----------------------------------------------------------------------------
-
-static void lineCount()
-{
- static int tabSize = Config_getInt(TAB_SIZE);
- const char *p;
- for (p = yytext ; *p ; ++p )
- {
- if (*p=='\n')
- {
- yyLineNr++,g_column=0,yyColNr=1;
- }
- else if (*p=='\t')
- {
- g_column+=tabSize - (g_column%tabSize);
- }
- else
- {
- g_column++,yyColNr++;
- }
- }
- //printf("lineCount()=%d\n",g_column);
-}
-
-static inline int computeIndent(const char *s,int startIndent)
-{
- int col=startIndent;
- static int tabSize=Config_getInt(TAB_SIZE);
- const char *p=s;
- char c;
- while ((c=*p++))
- {
- if (c=='\t') col+=tabSize-(col%tabSize);
- else if (c=='\n') col=0;
- else col++;
- }
- return col;
-}
-
-static void addType()
-{
- uint tl=current->type.length();
- if( tl>0 && !current->name.isEmpty() && current->type.at(tl-1)!='.')
- {
- current->type += ' ' ;
- }
- current->type += current->name ;
- current->name.resize(0) ;
- tl=current->type.length();
- if( tl>0 && !current->args.isEmpty() && current->type.at(tl-1)!='.')
- {
- current->type += ' ' ;
- }
- current->type += current->args ;
- current->args.resize(0) ;
- current->argList->clear();
-}
-
-
-static QCString stripQuotes(const char *s)
-{
- QCString name;
- if (s==0 || *s==0) return name;
- name=s;
- if (name.at(0)=='"' && name.at(name.length()-1)=='"')
- {
- name=name.mid(1,name.length()-2);
- }
- return name;
-}
-
-//-----------------------------------------------------------------
-
-static void startCommentBlock(bool);
-static void handleCommentBlock(const QCString &doc,bool brief);
-static void handleParametersCommentBlocks(ArgumentList *al);
-
-//-----------------------------------------------------------------
-
-static bool nameIsOperator(QCString &name)
-{
- int i=name.find("operator");
- if (i==-1) return FALSE;
- if (i==0 && !isId(name.at(8))) return TRUE; // case operator ::X
- if (i>0 && !isId(name.at(i-1)) && !isId(name.at(i+8))) return TRUE; // case X::operator
- return FALSE; // case TEXToperatorTEXT
-}
-
-//-----------------------------------------------------------------------------
-
-static void setContext()
-{
- QCString fileName = yyFileName;
- language = getLanguageFromFileName(fileName);
- insideIDL = language==SrcLangExt_IDL;
- insideJava = language==SrcLangExt_Java;
- insideCS = language==SrcLangExt_CSharp;
- insideD = language==SrcLangExt_D;
- insidePHP = language==SrcLangExt_PHP;
- insideObjC = language==SrcLangExt_ObjC;
- insideJS = language==SrcLangExt_JS;
- insideSlice = language==SrcLangExt_Slice;
- insideCpp = language==SrcLangExt_Cpp;
- if ( insidePHP )
- {
- useOverrideCommands = TRUE;
- }
- //printf("setContext(%s) insideIDL=%d insideJava=%d insideCS=%d "
- // "insideD=%d insidePHP=%d insideObjC=%d\n",
- // yyFileName.data(),insideIDL,insideJava,insideCS,insideD,insidePHP,insideObjC
- // );
-}
-
-//-----------------------------------------------------------------------------
-
-static void prependScope()
-{
- if (current_root->section & Entry::SCOPE_MASK)
- {
- //printf("--- prependScope %s to %s\n",current_root->name.data(),current->name.data());
- current->name.prepend(current_root->name+"::");
- if (current_root->tArgLists)
- {
- if (current->tArgLists==0)
- {
- current->tArgLists = new QList<ArgumentList>;
- current->tArgLists->setAutoDelete(TRUE);
- }
- //printf("prependScope #=%d #current=%d\n",current_root->tArgLists->count(),current->tArgLists->count());
- QListIterator<ArgumentList> talsi(*current_root->tArgLists);
- ArgumentList *srcAl=0;
- for (talsi.toLast();(srcAl=talsi.current());--talsi)
- {
- ArgumentList *dstAl = new ArgumentList;
- QListIterator<Argument> tali(*srcAl);
- Argument *a;
- for (;(a=tali.current());++tali)
- {
- dstAl->append(new Argument(*a));
- //printf("appending argument %s %s\n",a->type.data(),a->name.data());
- }
- current->tArgLists->insert(0,dstAl);
- }
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-
-/*! Returns TRUE iff the current entry could be a K&R style C function */
-static bool checkForKnRstyleC()
-{
- if (((QCString)yyFileName).right(2).lower()!=".c") return FALSE; // must be a C file
- if (!current->argList) return FALSE; // must have arguments
- ArgumentListIterator ali(*current->argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- // in K&R style argument do not have a type, but doxygen expects a type
- // so it will think the argument has no name
- if (a->type.isEmpty() || !a->name.isEmpty()) return FALSE;
- }
- return TRUE;
-}
-
-//-----------------------------------------------------------------------------
-
-static void splitKnRArg(QCString &oldStyleArgPtr,QCString &oldStyleArgName)
-{
- int si = current->args.length();
- if (oldStyleArgType.isEmpty()) // new argument
- {
- static QRegExp re("([^)]*)");
- int bi1 = current->args.findRev(re);
- int bi2 = bi1!=-1 ? current->args.findRev(re,bi1-1) : -1;
- char c;
- if (bi1!=-1 && bi2!=-1) // found something like "int (*func)(int arg)"
- {
- int s=bi2+1;
- oldStyleArgType = current->args.left(s);
- int i=s;
- while (i<si && ((c=current->args.at(i))=='*' || isspace((uchar)c))) i++;
- oldStyleArgType += current->args.mid(s,i-s);
- s=i;
- while (i<si && isId(current->args.at(i))) i++;
- oldStyleArgName = current->args.mid(s,i-s);
- oldStyleArgType+=current->args.mid(i);
- }
- else if (bi1!=-1) // redundant braces like in "int (*var)"
- {
- int s=bi1;
- oldStyleArgType = current->args.left(s);
- s++;
- int i=s+1;
- while (i<si && ((c=current->args.at(i))=='*' || isspace((uchar)c))) i++;
- oldStyleArgType += current->args.mid(s,i-s);
- s=i;
- while (i<si && isId(current->args.at(i))) i++;
- oldStyleArgName = current->args.mid(s,i-s);
- }
- else // normal "int *var"
- {
- int l=si,i=l-1,j;
- char c;
- // look for start of name in "type *name"
- while (i>=0 && isId(current->args.at(i))) i--;
- j=i+1;
- // look for start of *'s
- while (i>=0 && ((c=current->args.at(i))=='*' || isspace((uchar)c))) i--;
- i++;
- if (i!=l)
- {
- oldStyleArgType=current->args.left(i);
- oldStyleArgPtr=current->args.mid(i,j-i);
- oldStyleArgName=current->args.mid(j).stripWhiteSpace();
- }
- else
- {
- oldStyleArgName=current->args.copy().stripWhiteSpace();
- }
- }
- }
- else // continuation like *arg2 in "int *args,*arg2"
- {
- int l=si,j=0;
- char c;
- while (j<l && ((c=current->args.at(j))=='*' || isspace((uchar)c))) j++;
- if (j>0)
- {
- oldStyleArgPtr=current->args.left(j);
- oldStyleArgName=current->args.mid(j).stripWhiteSpace();
- }
- else
- {
- oldStyleArgName=current->args.copy().stripWhiteSpace();
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-
-/*! Update the argument \a name with additional \a type info. For K&R style
- * function the type is found \e after the argument list, so this routine
- * in needed to fix up.
- */
-static void addKnRArgInfo(const QCString &type,const QCString &name,
- const QCString &brief,const QCString &docs)
+struct scannerYY_state
{
- if (current->argList==0) return;
- ArgumentListIterator ali(*current->argList);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- if (a->type==name)
- {
- a->type=type.stripWhiteSpace();
- if (a->type.left(9)=="register ") // strip keyword
- {
- a->type=a->type.mid(9);
- }
- a->name=name.stripWhiteSpace();
- if (!brief.isEmpty() && !docs.isEmpty())
- {
- a->docs=brief+"\n\n"+docs;
- }
- else if (!brief.isEmpty())
- {
- a->docs=brief;
- }
- else
- {
- a->docs=docs;
- }
- }
- }
-}
+ OutlineParserInterface *thisParser;
+ const char * inputString = 0;
+ int inputPosition = 0;
+ int lastContext = 0;
+ int lastCContext = 0;
+ int lastDocContext = 0;
+ int lastCPPContext = 0;
+ int lastSkipSharpContext = 0;
+ int lastSkipRoundContext = 0;
+ int lastStringContext = 0;
+ int lastCurlyContext = 0;
+ int lastRoundContext = 0;
+ int lastSquareContext = 0;
+ int lastInitializerContext = 0;
+ int lastClassTemplSpecContext = 0;
+ int lastPreLineCtrlContext = 0;
+ int lastSkipVerbStringContext = 0;
+ int lastCommentInArgContext = 0;
+ int lastRawStringContext = 0;
+ int lastCSConstraint = 0;
+ int lastHereDocContext = 0;
+ int lastDefineContext = 0;
+ int lastAlignAsContext = 0;
+ int lastC11AttributeContext = 0;
+ int lastModifierContext = 0;
+ Protection protection = Public;
+ Protection baseProt = Public;
+ int sharpCount = 0 ;
+ int roundCount = 0 ;
+ int curlyCount = 0 ;
+ int squareCount = 0 ;
+ int padCount = 0 ;
+ std::shared_ptr<Entry> current;
+ std::shared_ptr<Entry> current_root;
+ std::shared_ptr<Entry> previous;
+ std::shared_ptr<Entry> tempEntry;
+ std::shared_ptr<Entry> firstTypedefEntry;
+ std::shared_ptr<Entry> memspecEntry;
+ int yyLineNr = 1 ;
+ int yyBegLineNr = 1 ;
+ int yyColNr = 1 ;
+ int yyBegColNr = 1 ;
+ int anonCount = 0 ;
+ int anonNSCount = 0 ;
+ QCString yyFileName;
+ MethodTypes mtype = Method;
+ bool stat = false;
+ Specifier virt = Normal;
+ Specifier baseVirt = Normal;
+ QCString msType;
+ QCString msName;
+ QCString msArgs;
+ bool isTypedef = false;
+ QCString funcPtrType;
+ QCString templateStr;
+ QCString aliasName;
+ QCString baseName;
+ QCString* specName = 0;
+
+ SrcLangExt language = SrcLangExt_Unknown;
+ bool insideIDL = false; //!< processing IDL code?
+ bool insideJava = false; //!< processing Java code?
+ bool insideCS = false; //!< processing C# code?
+ bool insideD = false; //!< processing D code?
+ bool insidePHP = false; //!< processing PHP code?
+ bool insideObjC = false; //!< processing Objective C code?
+ bool insideCli = false; //!< processing C++/CLI code?
+ bool insideJS = false; //!< processing JavaScript code?
+ bool insideSlice = false; //!< processing Slice code?
+ bool insideCpp = true; //!< processing C/C++ code
+
+ bool insideCppQuote = false;
+ bool insideProtocolList = false;
+
+ int argRoundCount = 0;
+ int argSharpCount = 0;
+ int currentArgumentContext = 0;
+ int lastCopyArgStringContext = 0;
+ int lastCopyArgContext = 0;
+ QCString *copyArgString = 0;
+ QCString fullArgString;
+ QCString dummyRawString;
+
+ ArgumentList *currentArgumentList = 0;
+ char lastCopyArgChar = '\0';
+
+ QCString *pCopyQuotedString = 0;
+ QCString *pCopyRoundString = 0;
+ QCString *pCopyCurlyString = 0;
+ QCString *pCopyRawString = 0;
+ QGString *pCopyCurlyGString = 0;
+ QGString *pCopyRoundGString = 0;
+ QGString *pCopySquareGString = 0;
+ QGString *pCopyQuotedGString = 0;
+ QGString *pCopyHereDocGString = 0;
+ QGString *pCopyRawGString = 0;
+ QGString *pSkipVerbString = 0;
+ QStack<Grouping> autoGroupStack;
+
+ bool insideFormula = false;
+ bool insideTryBlock = false;
+ bool insideCode = false;
+ bool needsSemi = false;
+
+ int initBracketCount = 0;
+
+ QCString oldStyleArgType;
+ QCString docBackup;
+ QCString briefBackup;
+
+ int docBlockContext = 0;
+ QGString docBlock;
+ QCString docBlockName;
+ bool docBlockInBody = false;
+ bool docBlockAutoBrief = false;
+ char docBlockTerm = '\0';
+
+ QCString idlAttr;
+ QCString idlProp;
+ bool odlProp = false;
+
+ bool lexInit = false;
+ bool externC = false;
+
+ QCString delimiter;
+
+ int column = 0;
+
+ int fencedSize = 0;
+ bool nestedComment = false;
+ std::vector< std::pair<Entry*,std::shared_ptr<Entry> > > outerScopeEntries;
+};
+static const char *stateToString(int state);
//-----------------------------------------------------------------------------
+// forward declarations for stateless functions
+static inline int computeIndent(const char *s,int startIndent);
+static QCString stripQuotes(const char *s);
+static bool nameIsOperator(QCString &name);
+void fixArgumentListForJavaScript(ArgumentList &al);
+
+// forward declarations for statefull functions
+static void initParser(yyscan_t yyscanner);
+static void initEntry(yyscan_t yyscanner);
+static void lineCount(yyscan_t yyscanner);
+static void addType(yyscan_t yyscanner);
+static void setContext(yyscan_t yyscanner);
+static void prependScope(yyscan_t yyscanner);
+static void startCommentBlock(yyscan_t yyscanner,bool);
+static void handleCommentBlock(yyscan_t yyscanner,const QCString &doc,bool brief);
+static void handleParametersCommentBlocks(yyscan_t yyscanner,ArgumentList &al);
+static bool checkForKnRstyleC(yyscan_t yyscanner);
+static void splitKnRArg(yyscan_t yyscanner,QCString &oldStyleArgPtr,QCString &oldStyleArgName);
+static void addKnRArgInfo(yyscan_t yyscanner,const QCString &type,const QCString &name,
+ const QCString &brief,const QCString &docs);
+static int yyread(yyscan_t yyscanner,char *buf,int max_size);
-void fixArgumentListForJavaScript(ArgumentList *al)
-{
- if (al==0) return;
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
- {
- if (!a->type.isEmpty() && a->name.isEmpty())
- { // a->type is actually the (typeless) parameter name, so move it
- a->name=a->type;
- a->type.resize(0);
- }
- }
-}
/* ----------------------------------------------------------------- */
#undef YY_INPUT
-#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
- while( c < max_size && inputString[inputPosition] )
- {
- *buf = inputString[inputPosition++] ;
- //printf("%d (%c)\n",*buf,*buf);
- c++; buf++;
- }
- return c;
-}
+#define YY_INPUT(buf,result,max_size) result=yyread(yyscanner,buf,max_size);
%}
@@ -803,32 +416,32 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
%%
<NextSemi>"{" {
- curlyCount=0;
- needsSemi = TRUE;
+ yyextra->curlyCount=0;
+ yyextra->needsSemi = TRUE;
BEGIN(SkipCurlyBlock);
}
<NextSemi>"(" {
- roundCount=0;
+ yyextra->roundCount=0;
BEGIN(SkipRoundBlock);
}
<SkipRoundBlock>"(" {
- ++roundCount;
+ ++yyextra->roundCount;
}
<SkipRoundBlock>")" {
- if (roundCount )
- --roundCount ;
+ if (yyextra->roundCount )
+ --yyextra->roundCount ;
else
BEGIN( NextSemi ) ;
}
<SkipCurlyBlock>"{" {
- ++curlyCount ;
+ ++yyextra->curlyCount ;
}
<SkipCurlyBlock>"}" {
- if( curlyCount )
+ if( yyextra->curlyCount )
{
- --curlyCount ;
+ --yyextra->curlyCount ;
}
- else if (needsSemi)
+ else if (yyextra->needsSemi)
{
BEGIN( NextSemi );
}
@@ -838,15 +451,15 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<NextSemi>\' {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- lastStringContext=NextSemi;
+ yyextra->lastStringContext=NextSemi;
BEGIN(SkipPHPString);
}
}
-<NextSemi>{CHARLIT} { if (insidePHP) REJECT; }
+<NextSemi>{CHARLIT} { if (yyextra->insidePHP) REJECT; }
<NextSemi>\" {
- lastStringContext=NextSemi;
+ yyextra->lastStringContext=NextSemi;
BEGIN(SkipString);
}
<NextSemi>[;,] {
@@ -858,22 +471,22 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN( FindMembers );
}
<EnumBaseType>[{;,] {
- current->args = current->args.simplifyWhiteSpace();
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
unput(*yytext);
BEGIN( ClassVar );
}
<FindMembers>"<?php" { // PHP code with unsupported extension?
- insidePHP = TRUE;
+ yyextra->insidePHP = TRUE;
}
<FindMembersPHP>"<?"("php"?) { // PHP code start
BEGIN( FindMembers );
}
<FindMembersPHP>"<script"{BN}+"language"{BN}*"="{BN}*['"]?"php"['"]?{BN}*">" { // PHP code start
- lineCount() ;
+ lineCount(yyscanner) ;
BEGIN( FindMembers );
}
<FindMembers>"?>"|"</script>" { // PHP code end
- if (insidePHP)
+ if (yyextra->insidePHP)
BEGIN( FindMembersPHP );
else
REJECT;
@@ -881,100 +494,100 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
<FindMembersPHP>[^\n<]+ { // Non-PHP code text, ignore
}
<FindMembersPHP>\n { // Non-PHP code text, ignore
- lineCount();
+ lineCount(yyscanner);
}
<FindMembersPHP>. { // Non-PHP code text, ignore
}
-<FindMembers>{PHPKW} { if (insidePHP)
+<FindMembers>{PHPKW} { if (yyextra->insidePHP)
BEGIN( NextSemi );
else
REJECT;
}
<FindMembers>"%{"[^\n]* { // Mozilla XPIDL lang-specific block
- if (!insideIDL)
+ if (!yyextra->insideIDL)
REJECT;
}
<FindMembers>"%}" { // Mozilla XPIDL lang-specific block end
- if (!insideIDL)
+ if (!yyextra->insideIDL)
REJECT;
}
<FindMembers>{B}*("properties"){BN}*":"{BN}* { // IDL or Borland C++ builder property
- current->mtype = mtype = Property;
- current->protection = protection = Public ;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->mtype = yyextra->mtype = Property;
+ yyextra->current->protection = yyextra->protection = Public ;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
-<FindMembers>{B}*"k_dcop"{BN}*":"{BN}* { current->mtype = mtype = DCOP;
- current->protection = protection = Public ;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+<FindMembers>{B}*"k_dcop"{BN}*":"{BN}* { yyextra->current->mtype = yyextra->mtype = DCOP;
+ yyextra->current->protection = yyextra->protection = Public ;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
-<FindMembers>{B}*("signals"|"Q_SIGNALS"){BN}*":"{BN}* { current->mtype = mtype = Signal;
+<FindMembers>{B}*("signals"|"Q_SIGNALS"){BN}*":"{BN}* { yyextra->current->mtype = yyextra->mtype = Signal;
- current->protection = protection = Public ;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Public ;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
<FindMembers>{B}*"public"{BN}*("slots"|"Q_SLOTS"){BN}*":"{BN}* {
- current->protection = protection = Public ;
- current->mtype = mtype = Slot;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount();
+ yyextra->current->protection = yyextra->protection = Public ;
+ yyextra->current->mtype = yyextra->mtype = Slot;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner);
}
<FindMembers>{B}*"protected"{BN}*("slots"|"Q_SLOTS"){BN}*":"{BN}* {
- current->protection = protection = Protected ;
- current->mtype = mtype = Slot;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount();
+ yyextra->current->protection = yyextra->protection = Protected ;
+ yyextra->current->mtype = yyextra->mtype = Slot;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner);
}
<FindMembers>{B}*"private"{BN}*("slots"|"Q_SLOTS"){BN}*":"{BN}* {
- current->protection = protection = Private ;
- current->mtype = mtype = Slot;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount();
+ yyextra->current->protection = yyextra->protection = Private ;
+ yyextra->current->mtype = yyextra->mtype = Slot;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner);
}
<FindMembers>{B}*("public"|"methods"|"__published"){BN}*":"{BN}* {
- current->protection = protection = Public ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Public ;
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
<FindMembers>{B}*"internal"{BN}*":"{BN}* { // for now treat C++/CLI's internal as package...
- if (insideCli)
+ if (yyextra->insideCli)
{
- current->protection = protection = Package ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Package ;
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
else
{
@@ -982,38 +595,38 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FindMembers>{B}*"protected"{BN}*":"{BN}* {
- current->protection = protection = Protected ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Protected ;
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
<FindMembers>{B}*"private"{BN}*":"{BN}* {
- current->protection = protection = Private ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Private ;
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
<FindMembers>{B}*"event"{BN}+ {
- if (insideCli)
+ if (yyextra->insideCli)
{
// C++/CLI event
- lineCount() ;
- current->mtype = mtype = Event;
- current->bodyLine = yyLineNr;
- curlyCount=0;
+ lineCount(yyscanner) ;
+ yyextra->current->mtype = yyextra->mtype = Event;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->curlyCount=0;
BEGIN( CliPropertyType );
}
- else if (insideCS)
+ else if (yyextra->insideCS)
{
- lineCount() ;
- current->mtype = Event;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner) ;
+ yyextra->current->mtype = Event;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
}
else
{
@@ -1021,13 +634,13 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FindMembers>{B}*"property"{BN}+ {
- if (insideCli)
+ if (yyextra->insideCli)
{
// C++/CLI property
- lineCount() ;
- current->mtype = mtype = Property;
- current->bodyLine = yyLineNr;
- curlyCount=0;
+ lineCount(yyscanner) ;
+ yyextra->current->mtype = yyextra->mtype = Property;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->curlyCount=0;
BEGIN( CliPropertyType );
}
else
@@ -1036,16 +649,16 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<CliPropertyType>{ID} {
- addType();
- current->name = yytext;
+ addType(yyscanner);
+ yyextra->current->name = yytext;
}
<CliPropertyType>"[" { // C++/CLI indexed property
- current->args = "[";
+ yyextra->current->args = "[";
BEGIN( CliPropertyIndex );
}
<CliPropertyType>"{" {
- curlyCount=0;
- //printf("event: '%s' '%s'\n",current->type.data(),current->name.data());
+ yyextra->curlyCount=0;
+ //printf("event: '%s' '%s'\n",yyextra->current->type.data(),yyextra->current->name.data());
BEGIN( CSAccessorDecl );
}
<CliPropertyType>";" {
@@ -1053,84 +666,84 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN( FindMembers );
}
<CliPropertyType>\n {
- lineCount();
+ lineCount(yyscanner);
}
<CliPropertyType>{B}* {
}
<CliPropertyType>. {
- addType();
- current->type += yytext;
+ addType(yyscanner);
+ yyextra->current->type += yytext;
}
<CliPropertyIndex>"]" {
BEGIN( CliPropertyType );
- current->args+=yytext;
+ yyextra->current->args+=yytext;
}
<CliPropertyIndex>. {
- current->args+=yytext;
+ yyextra->current->args+=yytext;
}
/*
<FindMembers>{B}*"property"{BN}+ {
- if (!current->type.isEmpty())
+ if (!yyextra->current->type.isEmpty())
{
REJECT;
}
else
{
- current->mtype = mtype = Property;
- lineCount();
+ yyextra->current->mtype = yyextra->mtype = Property;
+ lineCount(yyscanner);
}
}
*/
<FindMembers>{B}*"@private"{BN}+ {
- current->protection = protection = Private ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Private ;
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
<FindMembers>{B}*"@protected"{BN}+ {
- current->protection = protection = Protected ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Protected ;
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
<FindMembers>{B}*"@public"{BN}+ {
- current->protection = protection = Public ;
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
- lineCount() ;
+ yyextra->current->protection = yyextra->protection = Public ;
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
+ lineCount(yyscanner) ;
}
<FindMembers>[\-+]{BN}* {
- if (!insideObjC)
+ if (!yyextra->insideObjC)
{
REJECT;
}
else
{
- lineCount();
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- current->section = Entry::FUNCTION_SEC;
- current->protection = protection = Public ;
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- current->virt = Virtual;
- current->stat=yytext[0]=='+';
- current->mtype = mtype = Method;
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
- current->argList->clear();
+ lineCount(yyscanner);
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->section = Entry::FUNCTION_SEC;
+ yyextra->current->protection = yyextra->protection = Public ;
+ yyextra->language = yyextra->current->lang = SrcLangExt_ObjC;
+ yyextra->insideObjC = TRUE;
+ yyextra->current->virt = Virtual;
+ yyextra->current->stat=yytext[0]=='+';
+ yyextra->current->mtype = yyextra->mtype = Method;
+ yyextra->current->type.resize(0);
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->argList.clear();
BEGIN( ObjCMethod );
}
}
@@ -1138,24 +751,24 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN( ObjCReturnType );
}
<ObjCMethod>{ID} { // found method name
- if (current->type.isEmpty())
+ if (yyextra->current->type.isEmpty())
{
- current->type = "id";
+ yyextra->current->type = "id";
}
- current->name = yytext;
- if (insideCpp || insideObjC)
+ yyextra->current->name = yytext;
+ if (yyextra->insideCpp || yyextra->insideObjC)
{
- current->id = ClangParser::instance()->lookup(yyLineNr,yytext);
+ yyextra->current->id = ClangParser::instance()->lookup(yyextra->yyLineNr,yytext);
}
}
<ObjCMethod>":"{B}* { // start of parameter list
- current->name += ':';
- Argument *a = new Argument;
- current->argList->append(a);
+ yyextra->current->name += ':';
+ Argument a;
+ yyextra->current->argList.push_back(a);
BEGIN( ObjCParams );
}
<ObjCReturnType>[^)]* { // TODO: check if nested braches are possible.
- current->type = yytext;
+ yyextra->current->type = yytext;
}
<ObjCReturnType>")" {
BEGIN( ObjCMethod );
@@ -1165,132 +778,140 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
keyw=keyw.left(keyw.length()-1).stripWhiteSpace(); // strip :
if (keyw.isEmpty())
{
- current->name += " :";
+ yyextra->current->name += " :";
}
else
{
- current->name += keyw+":";
+ yyextra->current->name += keyw+":";
}
- if (current->argList->getLast()->type.isEmpty())
+ if (yyextra->current->argList.back().type.isEmpty())
{
- current->argList->getLast()->type="id";
+ yyextra->current->argList.back().type="id";
}
- Argument *a = new Argument;
- a->attrib=(QCString)"["+keyw+"]";
- current->argList->append(a);
+ Argument a;
+ a.attrib=(QCString)"["+keyw+"]";
+ yyextra->current->argList.push_back(a);
}
<ObjCParams>{ID}{BN}* { // name of parameter
- lineCount();
- current->argList->getLast()->name=QCString(yytext).stripWhiteSpace();
+ lineCount(yyscanner);
+ yyextra->current->argList.back().name=QCString(yytext).stripWhiteSpace();
}
<ObjCParams>","{BN}*"..." { // name of parameter
- lineCount();
+ lineCount(yyscanner);
// do we want the comma as part of the name?
- //current->name += ",";
- Argument *a = new Argument;
- a->attrib="[,]";
- a->type="...";
- current->argList->append(a);
+ //yyextra->current->name += ",";
+ Argument a;
+ a.attrib="[,]";
+ a.type="...";
+ yyextra->current->argList.push_back(a);
}
/*
<ObjCParams>":" {
- current->name += ':';
+ yyextra->current->name += ':';
}
*/
<ObjCParams>"(" {
- roundCount=0;
- current->argList->getLast()->type.resize(0);
+ yyextra->roundCount=0;
+ yyextra->current->argList.back().type.resize(0);
BEGIN( ObjCParamType );
}
<ObjCParamType>"(" {
- roundCount++;
- current->argList->getLast()->type+=yytext;
+ yyextra->roundCount++;
+ yyextra->current->argList.back().type+=yytext;
}
<ObjCParamType>")"/{B}* {
- if (roundCount<=0)
+ if (yyextra->roundCount<=0)
{
BEGIN( ObjCParams );
}
else
{
- current->argList->getLast()->type+=yytext;
- roundCount--;
+ yyextra->current->argList.back().type+=yytext;
+ yyextra->roundCount--;
}
}
<ObjCParamType>[^()]* {
- current->argList->getLast()->type+=QCString(yytext).stripWhiteSpace();
+ yyextra->current->argList.back().type+=QCString(yytext).stripWhiteSpace();
}
<ObjCMethod,ObjCParams>";" { // end of method declaration
- if (current->argList->getLast() && current->argList->getLast()->type.isEmpty())
+ if (!yyextra->current->argList.empty() && yyextra->current->argList.back().type.isEmpty())
{
- current->argList->getLast()->type="id";
+ yyextra->current->argList.back().type="id";
}
- current->args = argListToString(current->argList);
- //printf("argList=%s\n",current->args.data());
+ if (yyextra->current->argList.empty()) // method without parameters
+ {
+ yyextra->current->argList.noParameters = TRUE;
+ }
+ yyextra->current->args = argListToString(yyextra->current->argList);
+ //printf("argList=%s\n",yyextra->current->args.data());
unput(';');
BEGIN( Function );
}
<ObjCMethod,ObjCParams>(";"{BN}+)?"{" { // start of a method body
- lineCount();
+ lineCount(yyscanner);
//printf("Type=%s Name=%s args=%s\n",
- // current->type.data(),current->name.data(),argListToString(current->argList).data()
+ // yyextra->current->type.data(),yyextra->current->name.data(),argListToString(yyextra->current->argList).data()
// );
- if (current->argList->getLast() && current->argList->getLast()->type.isEmpty())
+ if (!yyextra->current->argList.empty() && yyextra->current->argList.back().type.isEmpty())
{
- current->argList->getLast()->type="id";
+ yyextra->current->argList.back().type="id";
}
- current->args = argListToString(current->argList);
+ if (yyextra->current->argList.empty()) // method without parameters
+ {
+ yyextra->current->argList.noParameters = TRUE;
+ }
+ yyextra->current->args = argListToString(yyextra->current->argList);
unput('{');
BEGIN( Function );
}
<FindMembers>{B}*"sequence"{BN}*"<"{BN}* {
- if (insideSlice)
- {
- lineCount();
- current->bodyLine = yyLineNr;
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->startColumn = yyColNr;
- current->args.resize(0);
- current->section = Entry::TYPEDEF_SEC ;
- isTypedef = TRUE;
+ if (yyextra->insideSlice)
+ {
+ lineCount(yyscanner);
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->fileName = yyextra->yyFileName ;
+ yyextra->current->startLine = yyextra->yyLineNr ;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->args.resize(0);
+ yyextra->current->section = Entry::TYPEDEF_SEC ;
+ yyextra->isTypedef = TRUE;
BEGIN( SliceSequence );
}
else
REJECT;
}
<FindMembers>{B}*"dictionary"{BN}*"<"{BN}* {
- if (insideSlice)
- {
- lineCount();
- current->bodyLine = yyLineNr;
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->startColumn = yyColNr;
- current->args.resize(0);
- current->section = Entry::TYPEDEF_SEC ;
- isTypedef = TRUE;
+ if (yyextra->insideSlice)
+ {
+ lineCount(yyscanner);
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->fileName = yyextra->yyFileName ;
+ yyextra->current->startLine = yyextra->yyLineNr ;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->args.resize(0);
+ yyextra->current->section = Entry::TYPEDEF_SEC ;
+ yyextra->isTypedef = TRUE;
BEGIN( SliceDictionary );
}
else
REJECT;
}
<FindMembers>{BN}{1,80} {
- lineCount();
+ lineCount(yyscanner);
}
<FindMembers>"@"({ID}".")*{ID}{BN}*"(" {
- if (insideJava) // Java annotation
+ if (yyextra->insideJava) // Java annotation
{
- lineCount();
- lastSkipRoundContext = YY_START;
- roundCount=0;
+ lineCount(yyscanner);
+ yyextra->lastSkipRoundContext = YY_START;
+ yyextra->roundCount=0;
BEGIN( SkipRound );
}
else if (qstrncmp(yytext,"@property",9)==0) // ObjC 2.0 property
{
- current->mtype = mtype = Property;
- current->spec|=Entry::Readable | Entry::Writable | Entry::Assign;
- current->protection = Public ;
+ yyextra->current->mtype = yyextra->mtype = Property;
+ yyextra->current->spec|=Entry::Readable | Entry::Writable | Entry::Assign;
+ yyextra->current->protection = Public ;
unput('(');
BEGIN( ObjCPropAttr );
}
@@ -1300,54 +921,54 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<ObjCPropAttr>"getter="{ID} {
- current->read = yytext+7;
+ yyextra->current->read = yytext+7;
}
<ObjCPropAttr>"setter="{ID} {
- current->write = yytext+7;
+ yyextra->current->write = yytext+7;
}
<ObjCPropAttr>"readonly" {
- current->spec&=~Entry::Writable;
+ yyextra->current->spec&=~Entry::Writable;
}
<ObjCPropAttr>"readwrite" { // default
}
<ObjCPropAttr>"assign" { // default
}
<ObjCPropAttr>"unsafe_unretained" {
- current->spec&=~Entry::Assign;
- current->spec|=Entry::Unretained;
+ yyextra->current->spec&=~Entry::Assign;
+ yyextra->current->spec|=Entry::Unretained;
}
<ObjCPropAttr>"retain" {
- current->spec&=~Entry::Assign;
- current->spec|=Entry::Retain;
+ yyextra->current->spec&=~Entry::Assign;
+ yyextra->current->spec|=Entry::Retain;
}
<ObjCPropAttr>"copy" {
- current->spec&=~Entry::Assign;
- current->spec|=Entry::Copy;
+ yyextra->current->spec&=~Entry::Assign;
+ yyextra->current->spec|=Entry::Copy;
}
<ObjCPropAttr>"weak" {
- current->spec&=~Entry::Assign;
- current->spec|=Entry::Weak;
+ yyextra->current->spec&=~Entry::Assign;
+ yyextra->current->spec|=Entry::Weak;
}
<ObjCPropAttr>"strong" {
- current->spec&=~Entry::Assign;
- current->spec|=Entry::Strong;
+ yyextra->current->spec&=~Entry::Assign;
+ yyextra->current->spec|=Entry::Strong;
}
<ObjCPropAttr>"nonatomic" {
- current->spec|=Entry::NonAtomic;
+ yyextra->current->spec|=Entry::NonAtomic;
}
<ObjCPropAttr>")" {
BEGIN(FindMembers);
}
<FindMembers>"@"{ID} {
- if (insideJava) // Java annotation
+ if (yyextra->insideJava) // Java annotation
{
// skip annotation
}
else if (qstrcmp(yytext,"@property")==0) // ObjC 2.0 property
{
- current->mtype = mtype = Property;
- current->spec|=Entry::Writable | Entry::Readable;
- current->protection = Public ;
+ yyextra->current->mtype = yyextra->mtype = Property;
+ yyextra->current->spec|=Entry::Writable | Entry::Readable;
+ yyextra->current->protection = Public ;
}
else if (qstrcmp(yytext,"@synthesize")==0)
{
@@ -1366,58 +987,58 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FindMembers);
}
<PackageName>{ID}(("."|"\\"){ID})* {
- isTypedef=FALSE;
- //printf("Found namespace %s lang=%d\n",yytext,current->lang);
- current->name = yytext;
- current->name = substitute(current->name,".","::");
- current->name = substitute(current->name,"\\","::");
- current->section = Entry::NAMESPACE_SEC;
- current->type = "namespace" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount();
+ yyextra->isTypedef=FALSE;
+ //printf("Found namespace %s lang=%d\n",yytext,yyextra->current->lang);
+ yyextra->current->name = yytext;
+ yyextra->current->name = substitute(yyextra->current->name,".","::");
+ yyextra->current->name = substitute(yyextra->current->name,"\\","::");
+ yyextra->current->section = Entry::NAMESPACE_SEC;
+ yyextra->current->type = "namespace" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner);
}
<PackageName>";" {
- Entry *tmp = current.get();
- current_root->moveToSubEntryAndRefresh(current);
- current_root = tmp;
- initEntry();
+ std::shared_ptr<Entry> tmp = yyextra->current;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ yyextra->current_root = tmp;
+ initEntry(yyscanner);
BEGIN(FindMembers);
}
<PackageName>"{" {
- curlyCount=0;
+ yyextra->curlyCount=0;
BEGIN( ReadNSBody );
}
<FindMembers>{B}*"initonly"{BN}+ {
- current->type += " initonly ";
- if (insideCli) current->spec |= Entry::Initonly;
- lineCount();
+ yyextra->current->type += " initonly ";
+ if (yyextra->insideCli) yyextra->current->spec |= Entry::Initonly;
+ lineCount(yyscanner);
}
-<FindMembers>{B}*"static"{BN}+ { current->type += " static ";
- current->stat = TRUE;
- lineCount();
+<FindMembers>{B}*"static"{BN}+ { yyextra->current->type += " static ";
+ yyextra->current->stat = TRUE;
+ lineCount(yyscanner);
}
<FindMembers>{B}*"extern"{BN}+ {
- current->stat = FALSE;
- current->explicitExternal = TRUE;
- lineCount();
+ yyextra->current->stat = FALSE;
+ yyextra->current->explicitExternal = TRUE;
+ lineCount(yyscanner);
}
-<FindMembers>{B}*"const"{BN}+ { current->type += " const ";
- if (insideCS) current->stat = TRUE;
- lineCount();
+<FindMembers>{B}*"const"{BN}+ { yyextra->current->type += " const ";
+ if (yyextra->insideCS) yyextra->current->stat = TRUE;
+ lineCount(yyscanner);
}
-<FindMembers>{B}*"virtual"{BN}+ { current->type += " virtual ";
- current->virt = Virtual;
- lineCount();
+<FindMembers>{B}*"virtual"{BN}+ { yyextra->current->type += " virtual ";
+ yyextra->current->virt = Virtual;
+ lineCount(yyscanner);
}
<FindMembers>{B}*"constexpr"{BN}+ {
- if (insideCpp)
+ if (yyextra->insideCpp)
{
- current->type += " constexpr ";
- current->spec |= Entry::ConstExpr;
- lineCount();
+ yyextra->current->type += " constexpr ";
+ yyextra->current->spec |= Entry::ConstExpr;
+ lineCount(yyscanner);
}
else
{
@@ -1425,10 +1046,10 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FindMembers>{B}*"published"{BN}+ { // UNO IDL published keyword
- if (insideIDL)
+ if (yyextra->insideIDL)
{
- lineCount();
- current->spec |= Entry::Published;
+ lineCount(yyscanner);
+ yyextra->current->spec |= Entry::Published;
}
else
{
@@ -1436,60 +1057,60 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FindMembers>{B}*"abstract"{BN}+ {
- if (!insidePHP)
+ if (!yyextra->insidePHP)
{
- current->type += " abstract ";
- if (!insideJava)
+ yyextra->current->type += " abstract ";
+ if (!yyextra->insideJava)
{
- current->virt = Pure;
+ yyextra->current->virt = Pure;
}
else
{
- current->spec|=Entry::Abstract;
+ yyextra->current->spec|=Entry::Abstract;
}
}
else
{
- current->spec|=Entry::Abstract;
+ yyextra->current->spec|=Entry::Abstract;
}
- lineCount();
+ lineCount(yyscanner);
}
-<FindMembers>{B}*"inline"{BN}+ { current->spec|=Entry::Inline;
- lineCount();
+<FindMembers>{B}*"inline"{BN}+ { yyextra->current->spec|=Entry::Inline;
+ lineCount(yyscanner);
}
-<FindMembers>{B}*"mutable"{BN}+ { current->spec|=Entry::Mutable;
- lineCount();
+<FindMembers>{B}*"mutable"{BN}+ { yyextra->current->spec|=Entry::Mutable;
+ lineCount(yyscanner);
}
-<FindMembers>{B}*"explicit"{BN}+ { current->spec|=Entry::Explicit;
- lineCount();
+<FindMembers>{B}*"explicit"{BN}+ { yyextra->current->spec|=Entry::Explicit;
+ lineCount(yyscanner);
}
-<FindMembers>{B}*"local"{BN}+ { current->spec|=Entry::Local;
- lineCount();
+<FindMembers>{B}*"local"{BN}+ { yyextra->current->spec|=Entry::Local;
+ lineCount(yyscanner);
}
<FindMembers>{B}*"@required"{BN}+ { // Objective C 2.0 protocol required section
- current->spec=(current->spec & ~Entry::Optional) | Entry::Required;
- lineCount();
+ yyextra->current->spec=(yyextra->current->spec & ~Entry::Optional) | Entry::Required;
+ lineCount(yyscanner);
}
<FindMembers>{B}*"@optional"{BN}+ { // Objective C 2.0 protocol optional section
- current->spec=(current->spec & ~Entry::Required) | Entry::Optional;
- lineCount();
+ yyextra->current->spec=(yyextra->current->spec & ~Entry::Required) | Entry::Optional;
+ lineCount(yyscanner);
}
/*
<FindMembers>{B}*"import"{BN}+ { // IDL import keyword
BEGIN( NextSemi );
}
*/
-<FindMembers>{B}*"typename"{BN}+ { lineCount(); }
+<FindMembers>{B}*"typename"{BN}+ { lineCount(yyscanner); }
<FindMembers>{B}*"namespace"{BN}*/[^a-z_A-Z0-9] {
- isTypedef=FALSE;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "namespace" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount();
- if (insidePHP)
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::NAMESPACE_SEC;
+ yyextra->current->type = "namespace" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner);
+ if (yyextra->insidePHP)
{
BEGIN( PackageName );
}
@@ -1499,449 +1120,449 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FindMembers>{B}*"module"{BN}+ {
- lineCount();
- if (insideIDL || insideSlice)
- {
- isTypedef=FALSE;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "module" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner);
+ if (yyextra->insideIDL || yyextra->insideSlice)
+ {
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::NAMESPACE_SEC;
+ yyextra->current->type = "module" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
- else if (insideD)
+ else if (yyextra->insideD)
{
- lineCount();
+ lineCount(yyscanner);
BEGIN(PackageName);
}
else
{
- addType();
- current->name = QCString(yytext).stripWhiteSpace();
+ addType(yyscanner);
+ yyextra->current->name = QCString(yytext).stripWhiteSpace();
}
}
<FindMembers>{B}*"library"{BN}+ {
- lineCount();
- if (insideIDL)
- {
- isTypedef=FALSE;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "library" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner);
+ if (yyextra->insideIDL)
+ {
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::NAMESPACE_SEC;
+ yyextra->current->type = "library" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
else
{
- addType();
- current->name = QCString(yytext).stripWhiteSpace();
+ addType(yyscanner);
+ yyextra->current->name = QCString(yytext).stripWhiteSpace();
}
}
<FindMembers>{B}*"constants"{BN}+ { // UNO IDL constant group
- lineCount();
- if (insideIDL)
- {
- isTypedef=FALSE;
- current->section = Entry::NAMESPACE_SEC;
- current->type = "constants";
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner);
+ if (yyextra->insideIDL)
+ {
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::NAMESPACE_SEC;
+ yyextra->current->type = "constants";
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
else
{
- addType();
- current->name = QCString(yytext).stripWhiteSpace();
+ addType(yyscanner);
+ yyextra->current->name = QCString(yytext).stripWhiteSpace();
}
}
<FindMembers>{BN}*("service"){BN}+ { // UNO IDL service
- lineCount();
- if (insideIDL)
+ lineCount(yyscanner);
+ if (yyextra->insideIDL)
{
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Service |
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Service |
// preserve UNO IDL [optional] or published
- (current->spec & (Entry::Optional|Entry::Published));
- addType();
- current->type += " service " ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
+ (yyextra->current->spec & (Entry::Optional|Entry::Published));
+ addType(yyscanner);
+ yyextra->current->type += " service " ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
else // TODO is addType right? just copy/pasted
{
- addType();
- current->name = QCString(yytext).stripWhiteSpace();
+ addType(yyscanner);
+ yyextra->current->name = QCString(yytext).stripWhiteSpace();
}
}
<FindMembers>{BN}*("singleton"){BN}+ { // UNO IDL singleton
- lineCount();
- if (insideIDL)
- {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Singleton |
- (current->spec & Entry::Published); // preserve
- addType();
- current->type += " singleton " ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner);
+ if (yyextra->insideIDL)
+ {
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Singleton |
+ (yyextra->current->spec & Entry::Published); // preserve
+ addType(yyscanner);
+ yyextra->current->type += " singleton " ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
else // TODO is addType right? just copy/pasted
{
- addType();
- current->name = QCString(yytext).stripWhiteSpace();
+ addType(yyscanner);
+ yyextra->current->name = QCString(yytext).stripWhiteSpace();
}
}
<FindMembers>{BN}*((("disp")?"interface")|"valuetype"){BN}+ { // M$/Corba/UNO IDL/Java/Slice interface
- lineCount();
- if (insideIDL || insideJava || insideCS || insideD || insidePHP || insideSlice)
+ lineCount(yyscanner);
+ if (yyextra->insideIDL || yyextra->insideJava || yyextra->insideCS || yyextra->insideD || yyextra->insidePHP || yyextra->insideSlice)
{
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Interface |
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Interface |
// preserve UNO IDL [optional], published, Slice local
- (current->spec & (Entry::Optional|Entry::Published|Entry::Local));
- addType();
- current->type += " interface" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
+ (yyextra->current->spec & (Entry::Optional|Entry::Published|Entry::Local));
+ addType(yyscanner);
+ yyextra->current->type += " interface" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
else
{
- addType();
- current->name = QCString(yytext).stripWhiteSpace();
+ addType(yyscanner);
+ yyextra->current->name = QCString(yytext).stripWhiteSpace();
}
}
<FindMembers>{B}*"@implementation"{BN}+ { // Objective-C class implementation
- lineCount();
- isTypedef=FALSE;
- current->section = Entry::OBJCIMPL_SEC;
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- current->protection = protection = Public ;
- addType();
- current->type += " implementation" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner);
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::OBJCIMPL_SEC;
+ yyextra->language = yyextra->current->lang = SrcLangExt_ObjC;
+ yyextra->insideObjC = TRUE;
+ yyextra->current->protection = yyextra->protection = Public ;
+ addType(yyscanner);
+ yyextra->current->type += " implementation" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
<FindMembers>{B}*"@interface"{BN}+ { // Objective-C class interface, or Java attribute
- lineCount();
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Interface;
- if (!insideJava)
- {
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- }
- current->protection = protection = Public ;
- addType();
- current->type += " interface" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner);
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Interface;
+ if (!yyextra->insideJava)
+ {
+ yyextra->language = yyextra->current->lang = SrcLangExt_ObjC;
+ yyextra->insideObjC = TRUE;
+ }
+ yyextra->current->protection = yyextra->protection = Public ;
+ addType(yyscanner);
+ yyextra->current->type += " interface" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
<FindMembers>{B}*"@protocol"{BN}+ { // Objective-C protocol definition
- lineCount();
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Protocol;
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
- current->protection = protection = Public ;
- addType();
- current->type += " protocol" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
+ lineCount(yyscanner);
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Protocol;
+ yyextra->language = yyextra->current->lang = SrcLangExt_ObjC;
+ yyextra->insideObjC = TRUE;
+ yyextra->current->protection = yyextra->protection = Public ;
+ addType(yyscanner);
+ yyextra->current->type += " protocol" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( CompoundName );
}
<FindMembers>{B}*"exception"{BN}+ { // Corba IDL/Slice exception
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
// preserve UNO IDL, Slice local
- current->spec = Entry::Exception |
- (current->spec & Entry::Published) |
- (current->spec & Entry::Local);
- addType();
- current->type += " exception" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount();
+ yyextra->current->spec = Entry::Exception |
+ (yyextra->current->spec & Entry::Published) |
+ (yyextra->current->spec & Entry::Local);
+ addType(yyscanner);
+ yyextra->current->type += " exception" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner);
BEGIN( CompoundName );
}
<FindMembers>"@class" | // for Objective C class declarations
<FindMembers>{B}*{TYPEDEFPREFIX}"class{" |
<FindMembers>{B}*{TYPEDEFPREFIX}"class"{BN}+ {
QCString decl = yytext;
- isTypedef=decl.find("typedef")!=-1;
+ yyextra->isTypedef=decl.find("typedef")!=-1;
bool isConst=decl.find("const")!=-1;
bool isVolatile=decl.find("volatile")!=-1;
- current->section = Entry::CLASS_SEC;
- addType();
- uint64 spec = current->spec;
- if (insidePHP && current->spec&Entry::Abstract)
+ yyextra->current->section = Entry::CLASS_SEC;
+ addType(yyscanner);
+ uint64 spec = yyextra->current->spec;
+ if (yyextra->insidePHP && yyextra->current->spec&Entry::Abstract)
{
// convert Abstract to AbstractClass
- current->spec=(current->spec&~Entry::Abstract)|Entry::AbstractClass;
+ yyextra->current->spec=(yyextra->current->spec&~Entry::Abstract)|Entry::AbstractClass;
}
- if (insideSlice && spec&Entry::Local)
+ if (yyextra->insideSlice && spec&Entry::Local)
{
- current->spec|=Entry::Local;
+ yyextra->current->spec|=Entry::Local;
}
if (isConst)
{
- current->type += " const";
+ yyextra->current->type += " const";
}
else if (isVolatile)
{
- current->type += " volatile";
+ yyextra->current->type += " volatile";
}
- current->type += " class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
+ yyextra->current->type += " class" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
if (yytext[0]=='@')
{
- language = current->lang = SrcLangExt_ObjC;
- insideObjC = TRUE;
+ yyextra->language = yyextra->current->lang = SrcLangExt_ObjC;
+ yyextra->insideObjC = TRUE;
}
- lineCount() ;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*"value class{" | // C++/CLI extension
<FindMembers>{B}*"value class"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Value;
- addType();
- current->type += " value class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Value;
+ addType(yyscanner);
+ yyextra->current->type += " value class" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*"ref class{" | // C++/CLI extension
<FindMembers>{B}*"ref class"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Ref;
- addType();
- current->type += " ref class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Ref;
+ addType(yyscanner);
+ yyextra->current->type += " ref class" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*"interface class{" | // C++/CLI extension
<FindMembers>{B}*"interface class"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Interface;
- addType();
- current->type += " interface class" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Interface;
+ addType(yyscanner);
+ yyextra->current->type += " interface class" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*"coclass"{BN}+ {
- if (insideIDL)
- {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- addType();
- current->type += " coclass" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ if (yyextra->insideIDL)
+ {
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ addType(yyscanner);
+ yyextra->current->type += " coclass" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
BEGIN( CompoundName ) ;
}
else
{
- addType();
- current->name = yytext;
- current->name = current->name.stripWhiteSpace();
- lineCount();
+ addType(yyscanner);
+ yyextra->current->name = yytext;
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ lineCount(yyscanner);
}
}
<FindMembers>{B}*{TYPEDEFPREFIX}"struct{" |
<FindMembers>{B}*{TYPEDEFPREFIX}"struct"/{BN}+ {
QCString decl = yytext;
- isTypedef=decl.find("typedef")!=-1;
+ yyextra->isTypedef=decl.find("typedef")!=-1;
bool isConst=decl.find("const")!=-1;
bool isVolatile=decl.find("volatile")!=-1;
- uint64 spec = current->spec;
- current->section = Entry::CLASS_SEC ;
+ uint64 spec = yyextra->current->spec;
+ yyextra->current->section = Entry::CLASS_SEC ;
// preserve UNO IDL & Inline attributes, Slice local
- current->spec = Entry::Struct |
- (current->spec & Entry::Published) |
- (current->spec & Entry::Inline) |
- (current->spec & Entry::Local);
- // bug 582676: can be a struct nested in an interface so keep insideObjC state
- //current->objc = insideObjC = FALSE;
- addType();
+ yyextra->current->spec = Entry::Struct |
+ (yyextra->current->spec & Entry::Published) |
+ (yyextra->current->spec & Entry::Inline) |
+ (yyextra->current->spec & Entry::Local);
+ // bug 582676: can be a struct nested in an interface so keep yyextra->insideObjC state
+ //yyextra->current->objc = yyextra->insideObjC = FALSE;
+ addType(yyscanner);
if (isConst)
{
- current->type += " const";
+ yyextra->current->type += " const";
}
else if (isVolatile)
{
- current->type += " volatile";
+ yyextra->current->type += " volatile";
}
- current->type += " struct" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->current->type += " struct" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*"value struct{" | // C++/CLI extension
<FindMembers>{B}*"value struct"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Struct | Entry::Value;
- addType();
- current->type += " value struct" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Struct | Entry::Value;
+ addType(yyscanner);
+ yyextra->current->type += " value struct" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*"ref struct{" | // C++/CLI extension
<FindMembers>{B}*"ref struct"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Struct | Entry::Ref;
- addType();
- current->type += " ref struct" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Struct | Entry::Ref;
+ addType(yyscanner);
+ yyextra->current->type += " ref struct" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*"interface struct{" | // C++/CLI extension
<FindMembers>{B}*"interface struct"{BN}+ {
- isTypedef=FALSE;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Struct | Entry::Interface;
- addType();
- current->type += " interface struct";
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->isTypedef=FALSE;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Struct | Entry::Interface;
+ addType(yyscanner);
+ yyextra->current->type += " interface struct";
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*{TYPEDEFPREFIX}"union{" |
<FindMembers>{B}*{TYPEDEFPREFIX}"union"{BN}+ {
QCString decl=yytext;
- isTypedef=decl.find("typedef")!=-1;
+ yyextra->isTypedef=decl.find("typedef")!=-1;
bool isConst=decl.find("const")!=-1;
bool isVolatile=decl.find("volatile")!=-1;
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Union;
- // bug 582676: can be a struct nested in an interface so keep insideObjC state
- //current->objc = insideObjC = FALSE;
- addType();
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Union;
+ // bug 582676: can be a struct nested in an interface so keep yyextra->insideObjC state
+ //yyextra->current->objc = yyextra->insideObjC = FALSE;
+ addType(yyscanner);
if (isConst)
{
- current->type += " const";
+ yyextra->current->type += " const";
}
else if (isVolatile)
{
- current->type += " volatile";
+ yyextra->current->type += " volatile";
}
- current->type += " union" ;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->current->type += " union" ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?"{" |
<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?{BN}+ { // for IDL: typedef [something] enum
QCString text=yytext;
- isTypedef = text.find("typedef")!=-1;
- bool isStrongEnum = text.find("struct")!=-1 || text.find("class")!=-1 || insideCS;
- if (insideJava)
+ yyextra->isTypedef = text.find("typedef")!=-1;
+ bool isStrongEnum = text.find("struct")!=-1 || text.find("class")!=-1 || yyextra->insideCS;
+ if (yyextra->insideJava)
{
- current->section = Entry::CLASS_SEC;
- current->spec = Entry::Enum;
+ yyextra->current->section = Entry::CLASS_SEC;
+ yyextra->current->spec = Entry::Enum;
}
else
{
- current->section = Entry::ENUM_SEC ;
+ yyextra->current->section = Entry::ENUM_SEC ;
}
- addType();
- current->type += " enum";
+ addType(yyscanner);
+ yyextra->current->type += " enum";
if (isStrongEnum)
{
- current->spec |= Entry::Strong;
+ yyextra->current->spec |= Entry::Strong;
}
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->bodyLine = yyLineNr;
- lineCount() ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner) ;
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
<Operator>"("{BN}*")"({BN}*"<"[^>]*">"){BN}*/"(" { // A::operator()<int>(int arg)
- lineCount();
- current->name += "()";
+ lineCount(yyscanner);
+ yyextra->current->name += "()";
BEGIN( FindMembers );
}
<Operator>"("{BN}*")"{BN}*/"(" {
- lineCount();
- current->name += yytext ;
- current->name = current->name.simplifyWhiteSpace();
+ lineCount(yyscanner);
+ yyextra->current->name += yytext ;
+ yyextra->current->name = yyextra->current->name.simplifyWhiteSpace();
BEGIN( FindMembers ) ;
}
<Operator>";" { // can occur when importing members
@@ -1949,90 +1570,85 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN( FindMembers ) ;
}
<Operator>[^(] {
- lineCount();
- current->name += *yytext ;
+ lineCount(yyscanner);
+ yyextra->current->name += *yytext ;
}
<Operator>"<>" { /* skip guided templ specifiers */ }
<Operator>"(" {
- current->name = current->name.simplifyWhiteSpace();
+ yyextra->current->name = yyextra->current->name.simplifyWhiteSpace();
unput(*yytext);
BEGIN( FindMembers ) ;
}
<FindMembers>("template"|"generic")({BN}*)"<"/[>]? { // generic is a C++/CLI extension
- lineCount();
- if (current->tArgLists==0)
- {
- current->tArgLists = new QList<ArgumentList>;
- current->tArgLists->setAutoDelete(TRUE);
- }
- ArgumentList *al = new ArgumentList;
- //current->spec |= (yytext[0]=='g') ? Entry::Generic : Entry::Template;
- current->tArgLists->append(al);
- currentArgumentList = al;
- templateStr="<";
- fullArgString = templateStr;
- copyArgString = &templateStr;
- currentArgumentContext = FindMembers;
+ lineCount(yyscanner);
+ ArgumentList al;
+ //yyextra->current->spec |= (yytext[0]=='g') ? Entry::Generic : Entry::Template;
+ yyextra->current->tArgLists.push_back(al);
+ yyextra->currentArgumentList = &yyextra->current->tArgLists.back();
+ yyextra->templateStr="<";
+ yyextra->fullArgString = yyextra->templateStr;
+ yyextra->copyArgString = &yyextra->templateStr;
+ yyextra->currentArgumentContext = FindMembers;
BEGIN( ReadTempArgs );
}
<FindMembers>"namespace"{BN}+/{ID}{BN}*"=" { // namespace alias
- lineCount();
+ lineCount(yyscanner);
BEGIN( NSAliasName );
}
<NSAliasName>{ID} {
- aliasName = yytext;
+ yyextra->aliasName = yytext;
BEGIN( NSAliasArg );
}
<NSAliasArg>({ID}"::")*{ID} {
- //printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext);
- //if (current_root->name.isEmpty())
+ //printf("Inserting namespace alias %s::%s->%s\n",yyextra->current_root->name.data(),yyextra->aliasName.data(),yytext);
+ //if (yyextra->current_root->name.isEmpty())
//{
// TODO: namespace aliases are now treated as global entities
// while they should be aware of the scope they are in
- Doxygen::namespaceAliasDict.insert(aliasName,new QCString(yytext));
+ Doxygen::namespaceAliasDict.insert(yyextra->aliasName,new QCString(yytext));
//}
//else
//{
- // Doxygen::namespaceAliasDict.insert(current_root->name+"::"+aliasName,
- // new QCString(current_root->name+"::"+yytext));
+ // Doxygen::namespaceAliasDict.insert(yyextra->current_root->name+"::"+yyextra->aliasName,
+ // new QCString(yyextra->current_root->name+"::"+yytext));
//}
}
<NSAliasArg>";" {
BEGIN( FindMembers );
}
<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID}/{BN}+"as" {
- lineCount();
- aliasName=yytext;
+ lineCount(yyscanner);
+ yyextra->aliasName=yytext;
BEGIN(PHPUseAs);
}
<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID} {
- lineCount();
- current->name=removeRedundantWhiteSpace(substitute(yytext,"\\","::"));
- //printf("PHP: adding use relation: %s\n",current->name.data());
- current->fileName = yyFileName;
+ lineCount(yyscanner);
+ yyextra->current->name=removeRedundantWhiteSpace(substitute(yytext,"\\","::"));
+ //printf("PHP: adding use relation: %s\n",yyextra->current->name.data());
+ yyextra->current->fileName = yyextra->yyFileName;
// add a using declaration
- current->section=Entry::USINGDECL_SEC;
- current_root->copyToSubEntry(current);
+ yyextra->current->section=Entry::USINGDECL_SEC;
+ yyextra->current_root->copyToSubEntry(yyextra->current);
// also add it as a using directive
- current->section=Entry::USINGDIR_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
- aliasName.resize(0);
+ yyextra->current->section=Entry::USINGDIR_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
+ yyextra->aliasName.resize(0);
}
<PHPUseAs>{BN}+"as"{BN}+ {
- lineCount();
+ lineCount(yyscanner);
}
<PHPUseAs>{PHPUSEKW} {
}
<PHPUseAs>{ID} {
- //printf("PHP: adding use as relation: %s->%s\n",yytext,aliasName.data());
- if (!aliasName.isEmpty())
+ //printf("PHP: adding use as relation: %s->%s\n",yytext,yyextra->aliasName.data());
+ if (!yyextra->aliasName.isEmpty())
{
Doxygen::namespaceAliasDict.insert(yytext,
new QCString(removeRedundantWhiteSpace(
- substitute(aliasName,"\\","::"))));
+ substitute(yyextra->aliasName,"\\","::"))));
}
- aliasName.resize(0);
+ yyextra->aliasName.resize(0);
}
<PHPUse,PHPUseAs>[,;] {
if (*yytext==',')
@@ -2045,62 +1661,62 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<JavaImport>({ID}{BN}*"."{BN}*)+"*" { // package import => add as a using directive
- lineCount();
+ lineCount(yyscanner);
QCString scope=yytext;
- current->name=removeRedundantWhiteSpace(substitute(scope.left(scope.length()-1),".","::"));
- current->fileName = yyFileName;
- current->section=Entry::USINGDIR_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current->name=removeRedundantWhiteSpace(substitute(scope.left(scope.length()-1),".","::"));
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->section=Entry::USINGDIR_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN(Using);
}
<JavaImport>({ID}{BN}*"."{BN}*)+{ID} { // class import => add as a using declaration
- lineCount();
+ lineCount(yyscanner);
QCString scope=yytext;
- current->name=removeRedundantWhiteSpace(substitute(scope,".","::"));
- current->fileName = yyFileName;
- if (insideD)
+ yyextra->current->name=removeRedundantWhiteSpace(substitute(scope,".","::"));
+ yyextra->current->fileName = yyextra->yyFileName;
+ if (yyextra->insideD)
{
- current->section=Entry::USINGDIR_SEC;
+ yyextra->current->section=Entry::USINGDIR_SEC;
}
else
{
- //printf("import name = %s -> %s\n",yytext,current->name.data());
- current->section=Entry::USINGDECL_SEC;
+ //printf("import name = %s -> %s\n",yytext,yyextra->current->name.data());
+ yyextra->current->section=Entry::USINGDECL_SEC;
}
- previous = current.get();
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->previous = yyextra->current;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN(Using);
}
<FindMembers>"using"{BN}+ {
- current->startLine=yyLineNr;
- current->startColumn = yyColNr;
- lineCount();
+ yyextra->current->startLine=yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ lineCount(yyscanner);
BEGIN(Using);
}
-<Using>"namespace"{BN}+ { lineCount(); BEGIN(UsingDirective); }
+<Using>"namespace"{BN}+ { lineCount(yyscanner); BEGIN(UsingDirective); }
<Using>({ID}{BN}*("::"|"."){BN}*)*({ID}|{OPERATOR}) {
- lineCount();
- current->name=yytext;
- current->fileName = yyFileName;
- current->section=Entry::USINGDECL_SEC;
- current->startLine = yyLineNr;
- previous = current.get();
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
- if (insideCS) /* Hack: in C# a using declaration and
+ lineCount(yyscanner);
+ yyextra->current->name=yytext;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->section=Entry::USINGDECL_SEC;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->previous = yyextra->current;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
+ if (yyextra->insideCS) /* Hack: in C# a using declaration and
directive have the same syntax, so we
also add it as a using directive here
*/
{
- current->name=yytext;
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->section=Entry::USINGDIR_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current->name=yytext;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->section=Entry::USINGDIR_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
}
BEGIN(Using);
}
@@ -2108,119 +1724,119 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(UsingAlias);
}
<UsingAlias>";" {
- previous->section=Entry::VARIABLE_SEC;
- previous->type = "typedef "+previous->args;
- previous->type=previous->type.simplifyWhiteSpace();
- previous->args.resize(0);
- previous->name=previous->name.stripWhiteSpace();
- previous->bodyLine = yyLineNr;
- previous->spec |= Entry::Alias;
+ yyextra->previous->section=Entry::VARIABLE_SEC;
+ yyextra->previous->type = "typedef "+yyextra->previous->args;
+ yyextra->previous->type=yyextra->previous->type.simplifyWhiteSpace();
+ yyextra->previous->args.resize(0);
+ yyextra->previous->name=yyextra->previous->name.stripWhiteSpace();
+ yyextra->previous->bodyLine = yyextra->yyLineNr;
+ yyextra->previous->spec |= Entry::Alias;
BEGIN(FindMembers);
}
<UsingAlias>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- docBlockContext = UsingAliasEnd;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
+ yyextra->docBlockContext = UsingAliasEnd;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) );
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
- lineCount();
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
+ lineCount(yyscanner);
- docBlockTerm = ';';
+ yyextra->docBlockTerm = ';';
if (yytext[yyleng-3]=='/')
{
- startCommentBlock(TRUE);
+ startCommentBlock(yyscanner,TRUE);
BEGIN( DocLine );
}
else
{
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
}
<UsingAlias>">>" {
- previous->args+="> >"; // see bug769552
+ yyextra->previous->args+="> >"; // see bug769552
}
<UsingAlias>. {
- previous->args+=yytext;
+ yyextra->previous->args+=yytext;
}
<UsingAlias>\n {
- previous->args+=yytext;
- lineCount();
+ yyextra->previous->args+=yytext;
+ lineCount(yyscanner);
}
<UsingAliasEnd>";" {
- previous->doc = current->doc;
- previous->brief = current->brief;
- current->doc.resize(0);
- current->brief.resize(0);
+ yyextra->previous->doc = yyextra->current->doc;
+ yyextra->previous->brief = yyextra->current->brief;
+ yyextra->current->doc.resize(0);
+ yyextra->current->brief.resize(0);
unput(';');
BEGIN(UsingAlias);
}
-<UsingDirective>{SCOPENAME} { current->name=removeRedundantWhiteSpace(yytext);
- current->fileName = yyFileName;
- current->section=Entry::USINGDIR_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+<UsingDirective>{SCOPENAME} { yyextra->current->name=removeRedundantWhiteSpace(yytext);
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->section=Entry::USINGDIR_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN(Using);
}
<Using>";" { BEGIN(FindMembers); }
<FindMembers>{SCOPENAME}{BN}*"<>" { // guided template decl
QCString n=yytext;
- addType();
- current->name=n.left(n.length()-2);
+ addType(yyscanner);
+ yyextra->current->name=n.left(n.length()-2);
}
<FindMembers>{SCOPENAME}{BN}*/"<" { // Note: this could be a return type!
- roundCount=0;
- sharpCount=0;
- lineCount();
- addType();
- current->name=yytext;
- current->name=current->name.stripWhiteSpace();
- //current->scopeSpec.resize(0);
- // currentTemplateSpec = &current->scopeSpec;
- if (nameIsOperator(current->name))
+ yyextra->roundCount=0;
+ yyextra->sharpCount=0;
+ lineCount(yyscanner);
+ addType(yyscanner);
+ yyextra->current->name=yytext;
+ yyextra->current->name=yyextra->current->name.stripWhiteSpace();
+ //yyextra->current->scopeSpec.resize(0);
+ // yyextra->currentTemplateSpec = &yyextra->current->scopeSpec;
+ if (nameIsOperator(yyextra->current->name))
BEGIN( Operator );
else
BEGIN( EndTemplate );
}
<FindMemberName>{SCOPENAME}{BN}*/"<" {
- sharpCount=0;
- roundCount=0;
- lineCount();
- current->name+=((QCString)yytext).stripWhiteSpace();
- //current->memberSpec.resize(0);
- // currentTemplateSpec = &current->memberSpec;
- if (nameIsOperator(current->name))
+ yyextra->sharpCount=0;
+ yyextra->roundCount=0;
+ lineCount(yyscanner);
+ yyextra->current->name+=((QCString)yytext).stripWhiteSpace();
+ //yyextra->current->memberSpec.resize(0);
+ // yyextra->currentTemplateSpec = &yyextra->current->memberSpec;
+ if (nameIsOperator(yyextra->current->name))
BEGIN( Operator );
else
BEGIN( EndTemplate );
}
<EndTemplate>"<<<" {
- if (!insidePHP)
+ if (!yyextra->insidePHP)
{
REJECT;
}
else
{
- lastHereDocContext = YY_START;
+ yyextra->lastHereDocContext = YY_START;
BEGIN(HereDoc);
}
}
<ClassTemplSpec,EndTemplate>"<<" {
- current->name+=yytext;
- // *currentTemplateSpec+=yytext;
+ yyextra->current->name+=yytext;
+ // *yyextra->currentTemplateSpec+=yytext;
}
<EndTemplate>"<" {
- if (roundCount==0)
+ if (yyextra->roundCount==0)
{
- // *currentTemplateSpec+='<';
- sharpCount++;
+ // *yyextra->currentTemplateSpec+='<';
+ yyextra->sharpCount++;
}
- current->name+=yytext;
+ yyextra->current->name+=yytext;
}
<ClassTemplSpec,EndTemplate>">>" {
- if (insideJava || insideCS || insideCli || roundCount==0)
+ if (yyextra->insideJava || yyextra->insideCS || yyextra->insideCli || yyextra->roundCount==0)
{
unput('>');
unput(' ');
@@ -2228,117 +1844,117 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
else
{
- current->name+=yytext;
+ yyextra->current->name+=yytext;
}
- // *currentTemplateSpec+=yytext;
+ // *yyextra->currentTemplateSpec+=yytext;
}
<EndTemplate>">" {
- current->name+='>';
- // *currentTemplateSpec+='>';
- if (roundCount==0 && --sharpCount<=0)
+ yyextra->current->name+='>';
+ // *yyextra->currentTemplateSpec+='>';
+ if (yyextra->roundCount==0 && --yyextra->sharpCount<=0)
{
- //printf("Found %s\n",current->name.data());
+ //printf("Found %s\n",yyextra->current->name.data());
BEGIN(FindMembers);
}
}
<EndTemplate>">"{BN}*"(" {
- lineCount();
- current->name+='>';
- // *currentTemplateSpec+='>';
- if (roundCount==0 && --sharpCount<=0)
- {
- current->bodyLine = yyLineNr;
- current->args = "(";
- currentArgumentContext = FuncQual;
- fullArgString = current->args.copy();
- copyArgString = &current->args;
- //printf("Found %s\n",current->name.data());
+ lineCount(yyscanner);
+ yyextra->current->name+='>';
+ // *yyextra->currentTemplateSpec+='>';
+ if (yyextra->roundCount==0 && --yyextra->sharpCount<=0)
+ {
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->args = "(";
+ yyextra->currentArgumentContext = FuncQual;
+ yyextra->fullArgString = yyextra->current->args.copy();
+ yyextra->copyArgString = &yyextra->current->args;
+ //printf("Found %s\n",yyextra->current->name.data());
BEGIN( ReadFuncArgType ) ;
}
}
<EndTemplate>">"{BN}*/"("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+ { // function pointer returning a template instance
- lineCount();
- current->name+='>';
- if (roundCount==0)
+ lineCount(yyscanner);
+ yyextra->current->name+='>';
+ if (yyextra->roundCount==0)
{
BEGIN(FindMembers);
}
}
<EndTemplate>">"{BN}*/"::" {
- lineCount();
- current->name+='>';
- // *currentTemplateSpec+='>';
- if (roundCount==0 && --sharpCount<=0)
+ lineCount(yyscanner);
+ yyextra->current->name+='>';
+ // *yyextra->currentTemplateSpec+='>';
+ if (yyextra->roundCount==0 && --yyextra->sharpCount<=0)
{
BEGIN(FindMemberName);
}
}
-<ClassTemplSpec,EndTemplate>"(" { current->name+=*yytext;
- roundCount++;
+<ClassTemplSpec,EndTemplate>"(" { yyextra->current->name+=*yytext;
+ yyextra->roundCount++;
}
-<ClassTemplSpec,EndTemplate>")" { current->name+=*yytext;
- if (roundCount>0) roundCount--;
+<ClassTemplSpec,EndTemplate>")" { yyextra->current->name+=*yytext;
+ if (yyextra->roundCount>0) yyextra->roundCount--;
}
<EndTemplate>. {
- current->name+=*yytext;
- // *currentTemplateSpec+=*yytext;
+ yyextra->current->name+=*yytext;
+ // *yyextra->currentTemplateSpec+=*yytext;
}
<FindMembers>"define"{BN}*"("{BN}*["'] {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- current->bodyLine = yyLineNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( DefinePHP );
}
else
REJECT;
}
<CopyHereDoc>{ID} { // PHP heredoc
- g_delimiter = yytext;
- *pCopyHereDocGString += yytext;
+ yyextra->delimiter = yytext;
+ *yyextra->pCopyHereDocGString += yytext;
BEGIN(CopyHereDocEnd);
}
<CopyHereDoc>"'"{ID}/"'" { // PHP nowdoc
- g_delimiter = &yytext[1];
- *pCopyHereDocGString += yytext;
+ yyextra->delimiter = &yytext[1];
+ *yyextra->pCopyHereDocGString += yytext;
BEGIN(CopyHereDocEnd);
}
<HereDoc>{ID} { // PHP heredoc
- g_delimiter = yytext;
+ yyextra->delimiter = yytext;
BEGIN(HereDocEnd);
}
<HereDoc>"'"{ID}/"'" { // PHP nowdoc
- g_delimiter = &yytext[1];
+ yyextra->delimiter = &yytext[1];
BEGIN(HereDocEnd);
}
<HereDocEnd>^{ID} { // id at start of the line could mark the end of the block
- if (g_delimiter==yytext) // it is the end marker
+ if (yyextra->delimiter==yytext) // it is the end marker
{
- BEGIN(lastHereDocContext);
+ BEGIN(yyextra->lastHereDocContext);
}
}
<HereDocEnd>. { }
<CopyHereDocEnd>^{ID} { // id at start of the line could mark the end of the block
- *pCopyHereDocGString += yytext;
- if (g_delimiter==yytext) // it is the end marker
+ *yyextra->pCopyHereDocGString += yytext;
+ if (yyextra->delimiter==yytext) // it is the end marker
{
- BEGIN(lastHereDocContext);
+ BEGIN(yyextra->lastHereDocContext);
}
}
<CopyHereDocEnd>\n {
- *pCopyHereDocGString += yytext;
+ *yyextra->pCopyHereDocGString += yytext;
}
<CopyHereDocEnd>{ID} {
- *pCopyHereDocGString += yytext;
+ *yyextra->pCopyHereDocGString += yytext;
}
<CopyHereDocEnd>. {
- *pCopyHereDocGString += yytext;
+ *yyextra->pCopyHereDocGString += yytext;
}
<FindMembers>"Q_OBJECT" { // Qt object macro
}
<FindMembers>"Q_PROPERTY" { // Qt property declaration
- current->protection = Public ; // see bug734245 & bug735462
- current->mtype = mtype = Property;
- current->type.resize(0);
+ yyextra->current->protection = Public ; // see bug734245 & bug735462
+ yyextra->current->mtype = yyextra->mtype = Property;
+ yyextra->current->type.resize(0);
BEGIN(QtPropType);
}
<QtPropType>"(" { // start of property arguments
@@ -2348,25 +1964,25 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FindMembers);
}
<QtPropType>"const"|"volatile"|"unsigned"|"signed"|"long"|"short" {
- current->type+=yytext;
+ yyextra->current->type+=yytext;
}
<QtPropType>{B}+ {
- current->type+=yytext;
+ yyextra->current->type+=yytext;
}
<QtPropType>({TSCOPE}"::")*{TSCOPE} {
- current->type+=yytext;
+ yyextra->current->type+=yytext;
BEGIN(QtPropName);
}
<QtPropName>{ID} {
- current->name=yytext;
+ yyextra->current->name=yytext;
BEGIN(QtPropAttr);
}
<QtPropAttr>"READ" {
- current->spec |= Entry::Readable;
+ yyextra->current->spec |= Entry::Readable;
BEGIN(QtPropRead);
}
<QtPropAttr>"WRITE" {
- current->spec |= Entry::Writable;
+ yyextra->current->spec |= Entry::Writable;
BEGIN(QtPropWrite);
}
<QtPropAttr>"RESET"{B}+{ID} { // reset method => not supported yet
@@ -2376,163 +1992,163 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
<QtPropAttr>"DESIGNABLE"{B}+{ID} { // designable property => not supported yet
}
<QtPropRead>{ID} {
- current->read = yytext;
+ yyextra->current->read = yytext;
BEGIN(QtPropAttr);
}
<QtPropWrite>{ID} {
- current->write = yytext;
+ yyextra->current->write = yytext;
BEGIN(QtPropAttr);
}
<FindMembers>"friend"{BN}+("class"|"union"|"struct"){BN}+ {
- current->name=yytext;
+ yyextra->current->name=yytext;
BEGIN(FindMembers);
}
<FindMembers,FindMemberName>{SCOPENAME} {
- if (insideCpp || insideObjC)
+ if (yyextra->insideCpp || yyextra->insideObjC)
{
- current->id = ClangParser::instance()->lookup(yyLineNr,yytext);
+ yyextra->current->id = ClangParser::instance()->lookup(yyextra->yyLineNr,yytext);
}
- yyBegColNr=yyColNr;
- yyBegLineNr=yyLineNr;
- lineCount();
- if (insideIDL && yyleng==9 && qstrcmp(yytext,"cpp_quote")==0)
+ yyextra->yyBegColNr=yyextra->yyColNr;
+ yyextra->yyBegLineNr=yyextra->yyLineNr;
+ lineCount(yyscanner);
+ if (yyextra->insideIDL && yyleng==9 && qstrcmp(yytext,"cpp_quote")==0)
{
BEGIN(CppQuote);
}
- else if ((insideIDL || insideJava || insideD) && yyleng==6 && qstrcmp(yytext,"import")==0)
+ else if ((yyextra->insideIDL || yyextra->insideJava || yyextra->insideD) && yyleng==6 && qstrcmp(yytext,"import")==0)
{
- if (insideIDL)
+ if (yyextra->insideIDL)
BEGIN(NextSemi);
- else // insideJava or insideD
+ else // yyextra->insideJava or yyextra->insideD
BEGIN(JavaImport);
}
- else if (insidePHP && qstrcmp(yytext,"use")==0)
+ else if (yyextra->insidePHP && qstrcmp(yytext,"use")==0)
{
BEGIN(PHPUse);
}
- else if (insideJava && qstrcmp(yytext,"package")==0)
+ else if (yyextra->insideJava && qstrcmp(yytext,"package")==0)
{
- lineCount();
+ lineCount(yyscanner);
BEGIN(PackageName);
}
- else if (insideIDL && qstrcmp(yytext,"case")==0)
+ else if (yyextra->insideIDL && qstrcmp(yytext,"case")==0)
{
BEGIN(IDLUnionCase);
}
- else if (insideTryBlock && qstrcmp(yytext,"catch")==0)
+ else if (yyextra->insideTryBlock && qstrcmp(yytext,"catch")==0)
{
- insideTryBlock=FALSE;
+ yyextra->insideTryBlock=FALSE;
BEGIN(TryFunctionBlock);
}
- else if (insideCpp && qstrcmp(yytext,"alignas")==0)
+ else if (yyextra->insideCpp && qstrcmp(yytext,"alignas")==0)
{
- lastAlignAsContext = YY_START;
+ yyextra->lastAlignAsContext = YY_START;
BEGIN(AlignAs);
}
- else if (insideJS && qstrcmp(yytext,"var")==0)
+ else if (yyextra->insideJS && qstrcmp(yytext,"var")==0)
{ // javascript variable
- current->type="var";
+ yyextra->current->type="var";
}
- else if (insideJS && qstrcmp(yytext,"function")==0)
+ else if (yyextra->insideJS && qstrcmp(yytext,"function")==0)
{ // javascript function
- current->type="function";
+ yyextra->current->type="function";
}
- else if (insideCS && qstrcmp(yytext,"this")==0)
+ else if (yyextra->insideCS && qstrcmp(yytext,"this")==0)
{
// C# indexer
- addType();
- current->name="this";
+ addType(yyscanner);
+ yyextra->current->name="this";
BEGIN(CSIndexer);
}
- else if (insideCpp && qstrcmp(yytext,"static_assert")==0)
+ else if (yyextra->insideCpp && qstrcmp(yytext,"static_assert")==0)
{
// C++11 static_assert
BEGIN(StaticAssert);
}
- else if (insideCpp && qstrcmp(yytext,"decltype")==0)
+ else if (yyextra->insideCpp && qstrcmp(yytext,"decltype")==0)
{
// C++11 decltype(x)
- current->type+=yytext;
+ yyextra->current->type+=yytext;
BEGIN(DeclType);
}
- else if (insideSlice && qstrcmp(yytext,"optional")==0)
+ else if (yyextra->insideSlice && qstrcmp(yytext,"optional")==0)
{
- if (current->type.isEmpty())
+ if (yyextra->current->type.isEmpty())
{
- current->type = "optional";
+ yyextra->current->type = "optional";
}
else
{
- current->type += " optional";
+ yyextra->current->type += " optional";
}
- lastModifierContext = YY_START;
+ yyextra->lastModifierContext = YY_START;
BEGIN(SliceOptional);
}
else
{
if (YY_START==FindMembers)
{
- addType();
+ addType(yyscanner);
}
- bool javaLike = insideJava || insideCS || insideD || insidePHP || insideJS;
+ bool javaLike = yyextra->insideJava || yyextra->insideCS || yyextra->insideD || yyextra->insidePHP || yyextra->insideJS;
if (javaLike && qstrcmp(yytext,"public")==0)
{
- current->protection = Public;
+ yyextra->current->protection = Public;
}
else if (javaLike && qstrcmp(yytext,"protected")==0)
{
- current->protection = Protected;
+ yyextra->current->protection = Protected;
}
- else if ((insideCS || insideD || insidePHP || insideJS) && qstrcmp(yytext,"internal")==0)
+ else if ((yyextra->insideCS || yyextra->insideD || yyextra->insidePHP || yyextra->insideJS) && qstrcmp(yytext,"internal")==0)
{
- current->protection = Package;
+ yyextra->current->protection = Package;
}
else if (javaLike && qstrcmp(yytext,"private")==0)
{
- current->protection = Private;
+ yyextra->current->protection = Private;
}
else if (javaLike && qstrcmp(yytext,"static")==0)
{
if (YY_START==FindMembers)
- current->name = yytext;
+ yyextra->current->name = yytext;
else
- current->name += yytext;
- current->stat = TRUE;
+ yyextra->current->name += yytext;
+ yyextra->current->stat = TRUE;
}
else
{
if (YY_START==FindMembers)
- current->name = yytext;
+ yyextra->current->name = yytext;
else
- current->name += yytext;
- if (current->name.left(7)=="static ")
+ yyextra->current->name += yytext;
+ if (yyextra->current->name.left(7)=="static ")
{
- current->stat = TRUE;
- current->name= current->name.mid(7);
+ yyextra->current->stat = TRUE;
+ yyextra->current->name= yyextra->current->name.mid(7);
}
- else if (current->name.left(7)=="inline ")
+ else if (yyextra->current->name.left(7)=="inline ")
{
- if (current->type.isEmpty())
+ if (yyextra->current->type.isEmpty())
{
- current->type="inline";
+ yyextra->current->type="inline";
}
else
{
- current->type+="inline ";
+ yyextra->current->type+="inline ";
}
- current->name= current->name.mid(7);
+ yyextra->current->name= yyextra->current->name.mid(7);
}
- else if (current->name.left(6)=="const ")
+ else if (yyextra->current->name.left(6)=="const ")
{
- if (current->type.isEmpty())
+ if (yyextra->current->type.isEmpty())
{
- current->type="const";
+ yyextra->current->type="const";
}
else
{
- current->type+="const ";
+ yyextra->current->type+="const ";
}
- current->name=current->name.mid(6);
+ yyextra->current->name=yyextra->current->name.mid(6);
}
}
QCString tmp=yytext;
@@ -2542,64 +2158,64 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
else
{
- externC=FALSE; // see bug759247
+ yyextra->externC=FALSE; // see bug759247
BEGIN(FindMembers);
}
}
}
<StaticAssert>"(" {
- lastSkipRoundContext = FindMembers;
- roundCount=0;
+ yyextra->lastSkipRoundContext = FindMembers;
+ yyextra->roundCount=0;
BEGIN(SkipRound);
}
-<StaticAssert>{BN}+ { lineCount(); }
+<StaticAssert>{BN}+ { lineCount(yyscanner); }
<StaticAssert>. { // variable with static_assert as name?
unput(*yytext);
BEGIN(FindMembers);
}
<DeclType>"(" {
- current->type+=yytext;
- lastRoundContext=FindMembers;
- pCopyRoundString=&current->type;
- roundCount=0;
+ yyextra->current->type+=yytext;
+ yyextra->lastRoundContext=FindMembers;
+ yyextra->pCopyRoundString=&yyextra->current->type;
+ yyextra->roundCount=0;
BEGIN(CopyRound);
}
-<DeclType>{BN}+ { lineCount(); }
+<DeclType>{BN}+ { lineCount(yyscanner); }
<DeclType>. {
unput(*yytext);
BEGIN(FindMembers);
}
<CSIndexer>"["[^\n\]]*"]" {
- current->name+=removeRedundantWhiteSpace(yytext);
+ yyextra->current->name+=removeRedundantWhiteSpace(yytext);
BEGIN(FindMembers);
}
<FindMembers>[0-9]{ID} { // some number where we did not expect one
}
<FindMembers>"." {
- if (insideJava || insideCS || insideD)
+ if (yyextra->insideJava || yyextra->insideCS || yyextra->insideD)
{
- current->name+=".";
+ yyextra->current->name+=".";
}
}
<FindMembers>"::" {
- current->name+=yytext;
+ yyextra->current->name+=yytext;
}
<CppQuote>"("{B}*"\"" {
- insideCppQuote=TRUE;
+ yyextra->insideCppQuote=TRUE;
BEGIN(FindMembers);
}
<IDLUnionCase>"::"
<IDLUnionCase>":" { BEGIN(FindMembers); }
-<IDLUnionCase>\n { lineCount(); }
+<IDLUnionCase>\n { lineCount(yyscanner); }
<IDLUnionCase>.
-<TryFunctionBlock>\n { lineCount(); }
+<TryFunctionBlock>\n { lineCount(yyscanner); }
<TryFunctionBlock>"{" {
- curlyCount=0;
- lastCurlyContext = TryFunctionBlockEnd ;
+ yyextra->curlyCount=0;
+ yyextra->lastCurlyContext = TryFunctionBlockEnd ;
BEGIN( SkipCurly );
}
<TryFunctionBlock>.
-<TryFunctionBlockEnd>{BN}*"catch" { lineCount(); BEGIN(TryFunctionBlock); // {BN}* added to fix bug 611193
+<TryFunctionBlockEnd>{BN}*"catch" { lineCount(yyscanner); BEGIN(TryFunctionBlock); // {BN}* added to fix bug 611193
}
<TryFunctionBlockEnd>\n { unput(*yytext); // rule added to fix bug id 601138
BEGIN( FindMembers );
@@ -2608,159 +2224,159 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN( FindMembers );
}
<EndCppQuote>")" {
- insideCppQuote=FALSE;
+ yyextra->insideCppQuote=FALSE;
BEGIN(FindMembers);
}
-<FindMembers,FindFields>{B}*"#" { if (insidePHP)
+<FindMembers,FindFields>{B}*"#" { if (yyextra->insidePHP)
REJECT;
- lastCPPContext = YY_START;
+ yyextra->lastCPPContext = YY_START;
BEGIN( SkipCPP ) ;
}
<FindMembers,FindFields>{B}*"#"{B}*("cmake")?"define" {
- if (insidePHP)
+ if (yyextra->insidePHP)
REJECT;
- current->bodyLine = yyLineNr;
- lastDefineContext = YY_START;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->lastDefineContext = YY_START;
BEGIN( Define );
}
<FindMembers,ReadBody,ReadNSBody,ReadBodyIntf,SkipCurly,SkipCurlyCpp>{B}*"#"{B}+[0-9]+{B}+/"\"" { /* line control directive */
- yyLineNr = atoi(&yytext[1]);
- //printf("setting line number to %d\n",yyLineNr);
- lastPreLineCtrlContext = YY_START;
+ yyextra->yyLineNr = atoi(&yytext[1]);
+ //printf("setting line number to %d\n",yyextra->yyLineNr);
+ yyextra->lastPreLineCtrlContext = YY_START;
if (YY_START==ReadBody ||
YY_START==ReadNSBody ||
YY_START==ReadBodyIntf)
{
- current->program+=yytext;
+ yyextra->current->program+=yytext;
}
BEGIN( PreLineCtrl );
}
<PreLineCtrl>"\""[^\n\"]*"\"" {
- yyFileName = stripQuotes(yytext);
- if (lastPreLineCtrlContext==ReadBody ||
- lastPreLineCtrlContext==ReadNSBody ||
- lastPreLineCtrlContext==ReadBodyIntf)
+ yyextra->yyFileName = stripQuotes(yytext);
+ if (yyextra->lastPreLineCtrlContext==ReadBody ||
+ yyextra->lastPreLineCtrlContext==ReadNSBody ||
+ yyextra->lastPreLineCtrlContext==ReadBodyIntf)
{
- current->program+=yytext;
+ yyextra->current->program+=yytext;
}
}
<PreLineCtrl>. {
- if (lastPreLineCtrlContext==ReadBody ||
- lastPreLineCtrlContext==ReadNSBody ||
- lastPreLineCtrlContext==ReadBodyIntf)
+ if (yyextra->lastPreLineCtrlContext==ReadBody ||
+ yyextra->lastPreLineCtrlContext==ReadNSBody ||
+ yyextra->lastPreLineCtrlContext==ReadBodyIntf)
{
- current->program+=yytext;
+ yyextra->current->program+=yytext;
}
}
<PreLineCtrl>\n {
- if (lastPreLineCtrlContext==ReadBody ||
- lastPreLineCtrlContext==ReadNSBody ||
- lastPreLineCtrlContext==ReadBodyIntf)
+ if (yyextra->lastPreLineCtrlContext==ReadBody ||
+ yyextra->lastPreLineCtrlContext==ReadNSBody ||
+ yyextra->lastPreLineCtrlContext==ReadBodyIntf)
{
- current->program+=yytext;
+ yyextra->current->program+=yytext;
}
- lineCount();
- BEGIN( lastPreLineCtrlContext );
+ lineCount(yyscanner);
+ BEGIN( yyextra->lastPreLineCtrlContext );
}
<SkipCPP>.
-<SkipCPP>\\[\r]*"\n"[\r]* { lineCount(); }
-<SkipCPP>[\r]*\n[\r]* { lineCount();
- BEGIN( lastCPPContext) ;
+<SkipCPP>\\[\r]*"\n"[\r]* { lineCount(yyscanner); }
+<SkipCPP>[\r]*\n[\r]* { lineCount(yyscanner);
+ BEGIN( yyextra->lastCPPContext) ;
}
<Define>{ID}{B}*"(" {
- current->name = yytext;
- current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
- current->args = "(";
- current->bodyLine = yyLineNr;
- currentArgumentContext = DefineEnd;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
+ yyextra->current->name = yytext;
+ yyextra->current->name = yyextra->current->name.left(yyextra->current->name.length()-1).stripWhiteSpace();
+ yyextra->current->args = "(";
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->currentArgumentContext = DefineEnd;
+ yyextra->fullArgString=yyextra->current->args.copy();
+ yyextra->copyArgString=&yyextra->current->args;
BEGIN( ReadFuncArgType ) ;
}
/*
<DefineArg>")" {
//printf("Define with args\n");
- current->args += ')';
+ yyextra->current->args += ')';
BEGIN( DefineEnd );
}
<DefineArg>. {
- current->args += *yytext;
+ yyextra->current->args += *yytext;
}
*/
<Define>{ID} {
//printf("Define '%s' without args\n",yytext);
- if (insideCpp || insideObjC)
+ if (yyextra->insideCpp || yyextra->insideObjC)
{
- current->id = ClangParser::instance()->lookup(yyLineNr,yytext);
+ yyextra->current->id = ClangParser::instance()->lookup(yyextra->yyLineNr,yytext);
}
- current->bodyLine = yyLineNr;
- current->name = yytext;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->name = yytext;
BEGIN(DefineEnd);
}
<DefineEnd>\n {
- //printf("End define: doc=%s docFile=%s docLine=%d\n",current->doc.data(),current->docFile.data(),current->docLine);
- lineCount();
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->type.resize(0);
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::DEFINE_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
- BEGIN(lastDefineContext);
+ //printf("End define: doc=%s docFile=%s docLine=%d\n",yyextra->current->doc.data(),yyextra->current->docFile.data(),yyextra->current->docLine);
+ lineCount(yyscanner);
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->type.resize(0);
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ yyextra->current->section = Entry::DEFINE_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
+ BEGIN(yyextra->lastDefineContext);
}
<DefinePHPEnd>";" {
//printf("End define\n");
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->type.resize(0);
- current->type = "const";
- QCString init = current->initializer.data();
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->type.resize(0);
+ yyextra->current->type = "const";
+ QCString init = yyextra->current->initializer.data();
init = init.simplifyWhiteSpace();
init = init.left(init.length()-1);
- current->initializer = init;
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current->initializer = init;
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ yyextra->current->section = Entry::VARIABLE_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN(FindMembers);
}
<DefinePHPEnd>.
<DefineEnd>\\[\r]?\n {
- lineCount();
+ lineCount(yyscanner);
}
<DefineEnd>\" {
- if (insideIDL && insideCppQuote)
+ if (yyextra->insideIDL && yyextra->insideCppQuote)
{
BEGIN(EndCppQuote);
}
else
{
- lastStringContext=DefineEnd;
+ yyextra->lastStringContext=DefineEnd;
BEGIN(SkipString);
}
}
<DefineEnd>.
<DefinePHP>{ID}["']{BN}*","{BN}* {
- current->name = yytext;
- current->name = current->name.stripWhiteSpace();
- current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
- current->name = current->name.left(current->name.length()-1);
- current->bodyLine = yyLineNr;
- lastRoundContext = DefinePHPEnd;
- pCopyRoundGString = &current->initializer;
- roundCount = 0;
+ yyextra->current->name = yytext;
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ yyextra->current->name = yyextra->current->name.left(yyextra->current->name.length()-1).stripWhiteSpace();
+ yyextra->current->name = yyextra->current->name.left(yyextra->current->name.length()-1);
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->lastRoundContext = DefinePHPEnd;
+ yyextra->pCopyRoundGString = &yyextra->current->initializer;
+ yyextra->roundCount = 0;
BEGIN( GCopyRound );
}
<FindMembers>[\^%] { // ^ and % are C++/CLI extensions
- if (insideCli)
+ if (yyextra->insideCli)
{
- addType();
- current->name = yytext ;
+ addType(yyscanner);
+ yyextra->current->name = yytext ;
}
else
{
@@ -2768,128 +2384,128 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FindMembers>[*&]+ {
- current->name += yytext ;
- addType();
+ yyextra->current->name += yytext ;
+ addType(yyscanner);
}
<FindMembers,MemberSpec,Function,NextSemi,EnumBaseType,BitFields,ReadInitializer,OldStyleArgs,DefinePHPEnd>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- if (current->bodyLine==-1)
+ if (yyextra->current->bodyLine==-1)
{
- current->bodyLine=yyLineNr;
+ yyextra->current->bodyLine=yyextra->yyLineNr;
}
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) );
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
- //printf("indent=%d\n",computeIndent(yytext+1,g_column));
- lineCount();
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
+ //printf("indent=%d\n",computeIndent(yytext+1,yyextra->column));
+ lineCount(yyscanner);
- docBlockTerm = ';';
- if (YY_START==EnumBaseType && current->section==Entry::ENUM_SEC)
+ yyextra->docBlockTerm = ';';
+ if (YY_START==EnumBaseType && yyextra->current->section==Entry::ENUM_SEC)
{
- current->bitfields = ":"+current->args;
- current->args.resize(0);
- current->section=Entry::VARIABLE_SEC;
+ yyextra->current->bitfields = ":"+yyextra->current->args;
+ yyextra->current->args.resize(0);
+ yyextra->current->section=Entry::VARIABLE_SEC;
}
if (yytext[yyleng-3]=='/')
{
- startCommentBlock(TRUE);
+ startCommentBlock(yyscanner,TRUE);
BEGIN( DocLine );
}
else
{
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
}
<MemberSpec,FindFields,FindMembers,NextSemi,EnumBaseType,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) );
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
- lineCount();
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
+ lineCount(yyscanner);
- docBlockTerm = ',';
- if (YY_START==EnumBaseType && current->section==Entry::ENUM_SEC)
+ yyextra->docBlockTerm = ',';
+ if (YY_START==EnumBaseType && yyextra->current->section==Entry::ENUM_SEC)
{
- current->bitfields = ":"+current->args;
- current->args.resize(0);
- current->section=Entry::VARIABLE_SEC;
+ yyextra->current->bitfields = ":"+yyextra->current->args;
+ yyextra->current->args.resize(0);
+ yyextra->current->section=Entry::VARIABLE_SEC;
}
if (yytext[yyleng-3]=='/')
{
- startCommentBlock(TRUE);
+ startCommentBlock(yyscanner,TRUE);
BEGIN( DocLine );
}
else
{
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
}
<DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" {
- if (current->bodyLine==-1)
+ if (yyextra->current->bodyLine==-1)
{
- current->bodyLine=yyLineNr;
+ yyextra->current->bodyLine=yyextra->yyLineNr;
}
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) );
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
- lineCount();
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
+ lineCount(yyscanner);
- docBlockTerm = 0;
+ yyextra->docBlockTerm = 0;
if (yytext[yyleng-3]=='/')
{
- startCommentBlock(TRUE);
+ startCommentBlock(yyscanner,TRUE);
BEGIN( DocLine );
}
else
{
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
}
<FindMembers,FindFields>("//"([!/]){B}*{CMD}"{")|("/*"([!*]){B}*{CMD}"{") {
- //handleGroupStartCommand(current->name);
- if (previous && previous->section==Entry::GROUPDOC_SEC)
+ //handleGroupStartCommand(yyextra->current->name);
+ if (yyextra->previous && yyextra->previous->section==Entry::GROUPDOC_SEC)
{
- // link open command to the group defined in the previous entry
- Doxygen::docGroup.open(previous,yyFileName,yyLineNr);
+ // link open command to the group defined in the yyextra->previous entry
+ Doxygen::docGroup.open(yyextra->previous.get(),yyextra->yyFileName,yyextra->yyLineNr);
}
else
{
- // link open command to the current entry
- Doxygen::docGroup.open(current.get(),yyFileName,yyLineNr);
+ // link open command to the yyextra->current entry
+ Doxygen::docGroup.open(yyextra->current.get(),yyextra->yyFileName,yyextra->yyLineNr);
}
- //current = tmp;
- initEntry();
+ //yyextra->current = tmp;
+ initEntry(yyscanner);
if (yytext[1]=='/')
{
if (yytext[2]=='!' || yytext[2]=='/')
{
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlockAutoBrief = FALSE;
- docBlock.resize(0);
- docBlockTerm = 0;
- startCommentBlock(TRUE);
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlockAutoBrief = FALSE;
+ yyextra->docBlock.resize(0);
+ yyextra->docBlockTerm = 0;
+ startCommentBlock(yyscanner,TRUE);
BEGIN(DocLine);
}
else
{
- lastCContext=YY_START;
+ yyextra->lastCContext=YY_START;
BEGIN(SkipCxxComment);
}
}
@@ -2897,497 +2513,498 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{
if (yytext[2]=='!' || yytext[2]=='*')
{
- docBlockContext = YY_START;
- docBlockInBody = FALSE;
- docBlock.resize(0);
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlock.resize(0);
+ yyextra->docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) );
- docBlockTerm = 0;
- startCommentBlock(FALSE);
+ yyextra->docBlockTerm = 0;
+ startCommentBlock(yyscanner,FALSE);
BEGIN(DocBlock);
}
else
{
- lastCContext=YY_START;
+ yyextra->lastCContext=YY_START;
BEGIN(SkipComment);
}
}
}
<FindMembers,FindFields,ReadInitializer>"//"([!/]){B}*{CMD}"}".*|"/*"([!*]){B}*{CMD}"}"[^*]*"*/" {
- bool insideEnum = YY_START==FindFields || (YY_START==ReadInitializer && lastInitializerContext==FindFields); // see bug746226
- Doxygen::docGroup.close(current.get(),yyFileName,yyLineNr,insideEnum);
+ bool insideEnum = YY_START==FindFields || (YY_START==ReadInitializer && yyextra->lastInitializerContext==FindFields); // see bug746226
+ Doxygen::docGroup.close(yyextra->current.get(),yyextra->yyFileName,yyextra->yyLineNr,insideEnum);
+ lineCount(yyscanner);
}
<FindMembers>"=" { // in PHP code this could also be due to "<?="
- current->bodyLine = yyLineNr;
- current->initializer = yytext;
- lastInitializerContext = YY_START;
- initBracketCount=0;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->initializer = yytext;
+ yyextra->lastInitializerContext = YY_START;
+ yyextra->initBracketCount=0;
BEGIN(ReadInitializer);
}
<UNOIDLAttributeBlock>{BN}*[gs]"et"{BN}+"raises"{BN}*"("{BN}*{SCOPENAME}{BN}*(","{BN}*{SCOPENAME}{BN}*)*")"{BN}*";" {
- lineCount();
- current->exception += " ";
- current->exception += removeRedundantWhiteSpace(yytext);
+ lineCount(yyscanner);
+ yyextra->current->exception += " ";
+ yyextra->current->exception += removeRedundantWhiteSpace(yytext);
}
<UNOIDLAttributeBlock>"}" {
- current->exception += " }";
+ yyextra->current->exception += " }";
BEGIN(FindMembers);
}
/* Read initializer rules */
<ReadInitializer>"(" {
- lastRoundContext=YY_START;
- pCopyRoundGString=&current->initializer;
- roundCount=0;
- current->initializer+=*yytext;
+ yyextra->lastRoundContext=YY_START;
+ yyextra->pCopyRoundGString=&yyextra->current->initializer;
+ yyextra->roundCount=0;
+ yyextra->current->initializer+=*yytext;
BEGIN(GCopyRound);
}
<ReadInitializer>"[" {
- if (!insidePHP) REJECT;
- lastSquareContext=YY_START;
- pCopySquareGString=&current->initializer;
- squareCount=0;
- current->initializer+=*yytext;
+ if (!yyextra->insidePHP) REJECT;
+ yyextra->lastSquareContext=YY_START;
+ yyextra->pCopySquareGString=&yyextra->current->initializer;
+ yyextra->squareCount=0;
+ yyextra->current->initializer+=*yytext;
BEGIN(GCopySquare);
}
<ReadInitializer>"{" {
- lastCurlyContext=YY_START;
- pCopyCurlyGString=&current->initializer;
- curlyCount=0;
- current->initializer+=*yytext;
+ yyextra->lastCurlyContext=YY_START;
+ yyextra->pCopyCurlyGString=&yyextra->current->initializer;
+ yyextra->curlyCount=0;
+ yyextra->current->initializer+=*yytext;
BEGIN(GCopyCurly);
}
<ReadInitializer>[;,] {
- //printf(">> initializer '%s' <<\n",current->initializer.data());
- if (*yytext==';' && (current_root->spec&Entry::Enum))
- {
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ //printf(">> initializer '%s' <<\n",yyextra->current->initializer.data());
+ if (*yytext==';' && (yyextra->current_root->spec&Entry::Enum))
+ {
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ yyextra->current->section = Entry::VARIABLE_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN(FindMembers);
}
- else if (*yytext==';' || (lastInitializerContext==FindFields && initBracketCount==0)) // initBracketCount==0 was added for bug 665778
+ else if (*yytext==';' || (yyextra->lastInitializerContext==FindFields && yyextra->initBracketCount==0)) // yyextra->initBracketCount==0 was added for bug 665778
{
unput(*yytext);
- BEGIN(lastInitializerContext);
+ BEGIN(yyextra->lastInitializerContext);
}
- else if (*yytext==',' && initBracketCount==0) // for "int a=0,b=0"
+ else if (*yytext==',' && yyextra->initBracketCount==0) // for "int a=0,b=0"
{
unput(*yytext);
- BEGIN(lastInitializerContext);
+ BEGIN(yyextra->lastInitializerContext);
}
else
{
- current->initializer+=*yytext;
+ yyextra->current->initializer+=*yytext;
}
}
<ReadInitializer>{RAWBEGIN} { // C++11 raw string
- if (!insideCpp)
+ if (!yyextra->insideCpp)
{
REJECT;
}
else
{
QCString text=yytext;
- current->initializer+=text;
+ yyextra->current->initializer+=text;
int i=text.find('"');
- g_delimiter = yytext+i+1;
- g_delimiter=g_delimiter.left(g_delimiter.length()-1);
- lastRawStringContext = YY_START;
- pCopyRawGString = &current->initializer;
+ yyextra->delimiter = yytext+i+1;
+ yyextra->delimiter=yyextra->delimiter.left(yyextra->delimiter.length()-1);
+ yyextra->lastRawStringContext = YY_START;
+ yyextra->pCopyRawGString = &yyextra->current->initializer;
BEGIN(RawGString);
//printf("RawGString delimiter='%s'\n",delimiter.data());
}
}
<RawGString>{RAWEND} {
- *pCopyRawGString+=yytext;
+ *yyextra->pCopyRawGString+=yytext;
QCString delimiter = yytext+1;
delimiter=delimiter.left(delimiter.length()-1);
- if (delimiter==g_delimiter)
+ if (delimiter==yyextra->delimiter)
{
- BEGIN(lastRawStringContext);
+ BEGIN(yyextra->lastRawStringContext);
}
}
<RawGString>[^)\n]+ {
- *pCopyRawGString+=yytext;
+ *yyextra->pCopyRawGString+=yytext;
}
<RawGString>. {
- *pCopyRawGString+=yytext;
+ *yyextra->pCopyRawGString+=yytext;
}
<RawGString>\n {
- *pCopyRawGString+=yytext;
- lineCount();
+ *yyextra->pCopyRawGString+=yytext;
+ lineCount(yyscanner);
}
<RawString>{RAWEND} {
- *pCopyRawString+=yytext;
- fullArgString+=yytext;
+ *yyextra->pCopyRawString+=yytext;
+ yyextra->fullArgString+=yytext;
QCString delimiter = yytext+1;
delimiter=delimiter.left(delimiter.length()-1);
- if (delimiter==g_delimiter)
+ if (delimiter==yyextra->delimiter)
{
- BEGIN(lastRawStringContext);
+ BEGIN(yyextra->lastRawStringContext);
}
}
<RawString>[^)]+ {
- *pCopyRawString+=yytext;
- fullArgString+=yytext;
+ *yyextra->pCopyRawString+=yytext;
+ yyextra->fullArgString+=yytext;
}
<RawString>. {
- *pCopyRawString+=yytext;
- fullArgString+=yytext;
+ *yyextra->pCopyRawString+=yytext;
+ yyextra->fullArgString+=yytext;
}
<RawString>\n {
- *pCopyRawString+=yytext;
- fullArgString+=yytext;
- lineCount();
+ *yyextra->pCopyRawString+=yytext;
+ yyextra->fullArgString+=yytext;
+ lineCount(yyscanner);
}
<ReadInitializer>\" {
- if (insideIDL && insideCppQuote)
+ if (yyextra->insideIDL && yyextra->insideCppQuote)
{
BEGIN(EndCppQuote);
}
else
{
- lastStringContext=YY_START;
- current->initializer+=yytext;
- pCopyQuotedGString=&current->initializer;
+ yyextra->lastStringContext=YY_START;
+ yyextra->current->initializer+=yytext;
+ yyextra->pCopyQuotedGString=&yyextra->current->initializer;
BEGIN(CopyGString);
}
}
<ReadInitializer>"->" {
- current->initializer+=yytext;
+ yyextra->current->initializer+=yytext;
}
<ReadInitializer>"<<" {
- current->initializer+=yytext;
+ yyextra->current->initializer+=yytext;
}
<ReadInitializer>">>" {
- current->initializer+=yytext;
+ yyextra->current->initializer+=yytext;
}
<ReadInitializer>[<\[{(] {
- initBracketCount++;
- current->initializer+=*yytext;
+ yyextra->initBracketCount++;
+ yyextra->current->initializer+=*yytext;
}
<ReadInitializer>[>\]})] {
- initBracketCount--;
- current->initializer+=*yytext;
+ yyextra->initBracketCount--;
+ yyextra->current->initializer+=*yytext;
}
<ReadInitializer>\' {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- current->initializer+=yytext;
- pCopyQuotedGString = &current->initializer;
- lastStringContext=YY_START;
+ yyextra->current->initializer+=yytext;
+ yyextra->pCopyQuotedGString = &yyextra->current->initializer;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyPHPGString);
}
else
{
- current->initializer+=yytext;
+ yyextra->current->initializer+=yytext;
}
}
<ReadInitializer>{CHARLIT} {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
REJECT;
}
else
{
- current->initializer+=yytext;
+ yyextra->current->initializer+=yytext;
}
}
<ReadInitializer>\n {
- current->initializer+=*yytext;
- lineCount();
+ yyextra->current->initializer+=*yytext;
+ lineCount(yyscanner);
}
<ReadInitializer>"@\"" {
- //printf("insideCS=%d\n",insideCS);
- current->initializer+=yytext;
- if (!insideCS && !insideObjC)
+ //printf("yyextra->insideCS=%d\n",yyextra->insideCS);
+ yyextra->current->initializer+=yytext;
+ if (!yyextra->insideCS && !yyextra->insideObjC)
{
REJECT;
}
else
{
// C#/ObjC verbatim string
- lastSkipVerbStringContext=YY_START;
- pSkipVerbString=&current->initializer;
+ yyextra->lastSkipVerbStringContext=YY_START;
+ yyextra->pSkipVerbString=&yyextra->current->initializer;
BEGIN(SkipVerbString);
}
}
<SkipVerbString>[^\n"]+ {
- *pSkipVerbString+=yytext;
+ *yyextra->pSkipVerbString+=yytext;
}
<SkipVerbString>"\"\"" { // quote escape
- *pSkipVerbString+=yytext;
+ *yyextra->pSkipVerbString+=yytext;
}
<SkipVerbString>"\"" {
- *pSkipVerbString+=*yytext;
- BEGIN(lastSkipVerbStringContext);
+ *yyextra->pSkipVerbString+=*yytext;
+ BEGIN(yyextra->lastSkipVerbStringContext);
}
<SkipVerbString>\n {
- *pSkipVerbString+=*yytext;
- lineCount();
+ *yyextra->pSkipVerbString+=*yytext;
+ lineCount(yyscanner);
}
<SkipVerbString>. {
- *pSkipVerbString+=*yytext;
+ *yyextra->pSkipVerbString+=*yytext;
}
<ReadInitializer>"?>" {
- if (insidePHP)
+ if (yyextra->insidePHP)
BEGIN( FindMembersPHP );
else
- current->initializer+=yytext;
+ yyextra->current->initializer+=yytext;
}
<ReadInitializer>. {
- current->initializer+=*yytext;
+ yyextra->current->initializer+=*yytext;
}
/* generic quoted string copy rules */
<CopyString,CopyPHPString>\\. {
- *pCopyQuotedString+=yytext;
+ *yyextra->pCopyQuotedString+=yytext;
}
<CopyString>\" {
- *pCopyQuotedString+=*yytext;
- BEGIN( lastStringContext );
+ *yyextra->pCopyQuotedString+=*yytext;
+ BEGIN( yyextra->lastStringContext );
}
<CopyPHPString>\' {
- *pCopyQuotedString+=*yytext;
- BEGIN( lastStringContext );
+ *yyextra->pCopyQuotedString+=*yytext;
+ BEGIN( yyextra->lastStringContext );
}
<CopyString,CopyPHPString>"/*"|"*/"|"//" {
- *pCopyQuotedString+=yytext;
+ *yyextra->pCopyQuotedString+=yytext;
}
<CopyString,CopyPHPString>\n {
- *pCopyQuotedString+=*yytext;
- lineCount();
+ *yyextra->pCopyQuotedString+=*yytext;
+ lineCount(yyscanner);
}
<CopyString,CopyPHPString>. {
- *pCopyQuotedString+=*yytext;
+ *yyextra->pCopyQuotedString+=*yytext;
}
/* generic quoted growable string copy rules */
<CopyGString,CopyPHPGString>\\. {
- *pCopyQuotedGString+=yytext;
+ *yyextra->pCopyQuotedGString+=yytext;
}
<CopyGString>\" {
- *pCopyQuotedGString+=*yytext;
- BEGIN( lastStringContext );
+ *yyextra->pCopyQuotedGString+=*yytext;
+ BEGIN( yyextra->lastStringContext );
}
<CopyPHPGString>\' {
- *pCopyQuotedGString+=*yytext;
- BEGIN( lastStringContext );
+ *yyextra->pCopyQuotedGString+=*yytext;
+ BEGIN( yyextra->lastStringContext );
}
<CopyGString,CopyPHPGString>"<?php" { // we had an odd number of quotes.
- *pCopyQuotedGString += yytext;
- BEGIN( lastStringContext );
+ *yyextra->pCopyQuotedGString += yytext;
+ BEGIN( yyextra->lastStringContext );
}
<CopyGString,CopyPHPGString>"/*"|"*/"|"//" {
- *pCopyQuotedGString+=yytext;
+ *yyextra->pCopyQuotedGString+=yytext;
}
<CopyGString,CopyPHPGString>\n {
- *pCopyQuotedGString+=*yytext;
- lineCount();
+ *yyextra->pCopyQuotedGString+=*yytext;
+ lineCount(yyscanner);
}
<CopyGString,CopyPHPGString>. {
- *pCopyQuotedGString+=*yytext;
+ *yyextra->pCopyQuotedGString+=*yytext;
}
/* generic round bracket list copy rules */
<CopyRound>\" {
- *pCopyRoundString+=*yytext;
- pCopyQuotedString=pCopyRoundString;
- lastStringContext=YY_START;
+ *yyextra->pCopyRoundString+=*yytext;
+ yyextra->pCopyQuotedString=yyextra->pCopyRoundString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyString);
}
<CopyRound>"(" {
- *pCopyRoundString+=*yytext;
- roundCount++;
+ *yyextra->pCopyRoundString+=*yytext;
+ yyextra->roundCount++;
}
<CopyRound>")" {
- *pCopyRoundString+=*yytext;
- if (--roundCount<0)
- BEGIN(lastRoundContext);
+ *yyextra->pCopyRoundString+=*yytext;
+ if (--yyextra->roundCount<0)
+ BEGIN(yyextra->lastRoundContext);
}
<CopyRound>\n {
- lineCount();
- *pCopyRoundString+=*yytext;
+ lineCount(yyscanner);
+ *yyextra->pCopyRoundString+=*yytext;
}
<CopyRound>\' {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- current->initializer+=yytext;
- pCopyQuotedString = pCopyRoundString;
- lastStringContext=YY_START;
+ yyextra->current->initializer+=yytext;
+ yyextra->pCopyQuotedString = yyextra->pCopyRoundString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyPHPString);
}
else
{
- *pCopyRoundString+=yytext;
+ *yyextra->pCopyRoundString+=yytext;
}
}
<CopyRound>{CHARLIT} {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
REJECT;
}
else
{
- *pCopyRoundString+=yytext;
+ *yyextra->pCopyRoundString+=yytext;
}
}
<CopyRound>[^"'()\n]+ {
- *pCopyRoundString+=yytext;
+ *yyextra->pCopyRoundString+=yytext;
}
<CopyRound>. {
- *pCopyRoundString+=*yytext;
+ *yyextra->pCopyRoundString+=*yytext;
}
/* generic round bracket list copy rules for growable strings */
<GCopyRound>\" {
- *pCopyRoundGString+=*yytext;
- pCopyQuotedGString=pCopyRoundGString;
- lastStringContext=YY_START;
+ *yyextra->pCopyRoundGString+=*yytext;
+ yyextra->pCopyQuotedGString=yyextra->pCopyRoundGString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyGString);
}
<GCopyRound>"(" {
- *pCopyRoundGString+=*yytext;
- roundCount++;
+ *yyextra->pCopyRoundGString+=*yytext;
+ yyextra->roundCount++;
}
<GCopyRound>")" {
- *pCopyRoundGString+=*yytext;
- if (--roundCount<0)
- BEGIN(lastRoundContext);
+ *yyextra->pCopyRoundGString+=*yytext;
+ if (--yyextra->roundCount<0)
+ BEGIN(yyextra->lastRoundContext);
}
<GCopyRound>\n {
- lineCount();
- *pCopyRoundGString+=*yytext;
+ lineCount(yyscanner);
+ *yyextra->pCopyRoundGString+=*yytext;
}
<GCopyRound>\' {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- current->initializer+=yytext;
- pCopyQuotedGString = pCopyRoundGString;
- lastStringContext=YY_START;
+ yyextra->current->initializer+=yytext;
+ yyextra->pCopyQuotedGString = yyextra->pCopyRoundGString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyPHPGString);
}
else
{
- *pCopyRoundGString+=yytext;
+ *yyextra->pCopyRoundGString+=yytext;
}
}
<GCopyRound>{CHARLIT} {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
REJECT;
}
else
{
- *pCopyRoundGString+=yytext;
+ *yyextra->pCopyRoundGString+=yytext;
}
}
<GCopyRound>[^"'()\n/]+ {
- *pCopyRoundGString+=yytext;
+ *yyextra->pCopyRoundGString+=yytext;
}
<GCopyRound>. {
- *pCopyRoundGString+=*yytext;
+ *yyextra->pCopyRoundGString+=*yytext;
}
- /* generic square bracket list copy rules for growable strings, we should only enter here in case of php, left the test part as in GCopyRound to keep it compatible with te round bracket version */
+ /* generic square bracket list copy rules for growable strings, we should only enter here in case of php, left the test part as in GCopyRound to keep it compatible with the round bracket version */
<GCopySquare>\" {
- *pCopySquareGString+=*yytext;
- pCopyQuotedGString=pCopySquareGString;
- lastStringContext=YY_START;
+ *yyextra->pCopySquareGString+=*yytext;
+ yyextra->pCopyQuotedGString=yyextra->pCopySquareGString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyGString);
}
<GCopySquare>"[" {
- *pCopySquareGString+=*yytext;
- squareCount++;
+ *yyextra->pCopySquareGString+=*yytext;
+ yyextra->squareCount++;
}
<GCopySquare>"]" {
- *pCopySquareGString+=*yytext;
- if (--squareCount<0)
- BEGIN(lastSquareContext);
+ *yyextra->pCopySquareGString+=*yytext;
+ if (--yyextra->squareCount<0)
+ BEGIN(yyextra->lastSquareContext);
}
<GCopySquare>\n {
- lineCount();
- *pCopySquareGString+=*yytext;
+ lineCount(yyscanner);
+ *yyextra->pCopySquareGString+=*yytext;
}
<GCopySquare>\' {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- current->initializer+=yytext;
- pCopyQuotedGString = pCopySquareGString;
- lastStringContext=YY_START;
+ yyextra->current->initializer+=yytext;
+ yyextra->pCopyQuotedGString = yyextra->pCopySquareGString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyPHPGString);
}
else
{
- *pCopySquareGString+=yytext;
+ *yyextra->pCopySquareGString+=yytext;
}
}
<GCopySquare>{CHARLIT} {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
REJECT;
}
else
{
- *pCopySquareGString+=yytext;
+ *yyextra->pCopySquareGString+=yytext;
}
}
<GCopySquare>[^"\[\]\n/]+ {
- *pCopySquareGString+=yytext;
+ *yyextra->pCopySquareGString+=yytext;
}
<GCopySquare>. {
- *pCopySquareGString+=*yytext;
+ *yyextra->pCopySquareGString+=*yytext;
}
/* generic curly bracket list copy rules */
<CopyCurly>\" {
- *pCopyCurlyString+=*yytext;
- pCopyQuotedString=pCopyCurlyString;
- lastStringContext=YY_START;
+ *yyextra->pCopyCurlyString+=*yytext;
+ yyextra->pCopyQuotedString=yyextra->pCopyCurlyString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyString);
}
<CopyCurly>\' {
- *pCopyCurlyString+=*yytext;
- if (insidePHP)
+ *yyextra->pCopyCurlyString+=*yytext;
+ if (yyextra->insidePHP)
{
- pCopyQuotedString=pCopyCurlyString;
- lastStringContext=YY_START;
+ yyextra->pCopyQuotedString=yyextra->pCopyCurlyString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyPHPString);
}
}
<CopyCurly>"{" {
- *pCopyCurlyString+=*yytext;
- curlyCount++;
+ *yyextra->pCopyCurlyString+=*yytext;
+ yyextra->curlyCount++;
}
<CopyCurly>"}" {
- *pCopyCurlyString+=*yytext;
- if (--curlyCount<0)
- BEGIN(lastCurlyContext);
+ *yyextra->pCopyCurlyString+=*yytext;
+ if (--yyextra->curlyCount<0)
+ BEGIN(yyextra->lastCurlyContext);
}
-<CopyCurly>{CHARLIT} { if (insidePHP)
+<CopyCurly>{CHARLIT} { if (yyextra->insidePHP)
{
REJECT;
}
else
{
- *pCopyCurlyString+=yytext;
+ *yyextra->pCopyCurlyString+=yytext;
}
}
<CopyCurly>[^"'{}\/\n]+ {
- *pCopyCurlyString+=yytext;
+ *yyextra->pCopyCurlyString+=yytext;
}
-<CopyCurly>"/" { *pCopyCurlyString+=yytext; }
+<CopyCurly>"/" { *yyextra->pCopyCurlyString+=yytext; }
<CopyCurly>\n {
- lineCount();
- *pCopyCurlyString+=*yytext;
+ lineCount(yyscanner);
+ *yyextra->pCopyCurlyString+=*yytext;
}
<CopyCurly>. {
- *pCopyCurlyString+=*yytext;
+ *yyextra->pCopyCurlyString+=*yytext;
}
/* generic curly bracket list copy rules for growable strings */
@@ -3397,447 +3014,444 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
QCString line = QCString(yytext);
int s = line.find(' ');
int e = line.find('"',s);
- yyLineNr = line.mid(s,e-s).toInt();
+ yyextra->yyLineNr = line.mid(s,e-s).toInt();
if (yytext[yyleng-1]=='\n')
{
- lineCount();
- g_column=0;
+ lineCount(yyscanner);
+ yyextra->column=0;
}
}
<GCopyCurly>\" {
- *pCopyCurlyGString+=*yytext;
- pCopyQuotedGString=pCopyCurlyGString;
- lastStringContext=YY_START;
+ *yyextra->pCopyCurlyGString+=*yytext;
+ yyextra->pCopyQuotedGString=yyextra->pCopyCurlyGString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyGString);
}
<GCopyCurly>\' {
- *pCopyCurlyGString+=*yytext;
- if (insidePHP)
+ *yyextra->pCopyCurlyGString+=*yytext;
+ if (yyextra->insidePHP)
{
- pCopyQuotedGString=pCopyCurlyGString;
- lastStringContext=YY_START;
+ yyextra->pCopyQuotedGString=yyextra->pCopyCurlyGString;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyPHPGString);
}
}
<GCopyCurly>"{" {
- *pCopyCurlyGString+=*yytext;
- curlyCount++;
+ *yyextra->pCopyCurlyGString+=*yytext;
+ yyextra->curlyCount++;
}
<GCopyCurly>"}" {
- *pCopyCurlyGString+=*yytext;
- if (--curlyCount<0)
- BEGIN(lastCurlyContext);
+ *yyextra->pCopyCurlyGString+=*yytext;
+ if (--yyextra->curlyCount<0)
+ BEGIN(yyextra->lastCurlyContext);
}
-<GCopyCurly>{CHARLIT} { if (insidePHP)
+<GCopyCurly>{CHARLIT} { if (yyextra->insidePHP)
{
REJECT;
}
else
{
- *pCopyCurlyGString+=yytext;
+ *yyextra->pCopyCurlyGString+=yytext;
}
}
<GCopyCurly>[^"'{}\/\n,]+ {
- *pCopyCurlyGString+=yytext;
+ *yyextra->pCopyCurlyGString+=yytext;
}
<GCopyCurly>[,]+ {
- *pCopyCurlyGString+=yytext;
+ *yyextra->pCopyCurlyGString+=yytext;
}
-<GCopyCurly>"/" { *pCopyCurlyGString+=yytext; }
+<GCopyCurly>"/" { *yyextra->pCopyCurlyGString+=yytext; }
<GCopyCurly>\n {
- lineCount();
- *pCopyCurlyGString+=*yytext;
+ lineCount(yyscanner);
+ *yyextra->pCopyCurlyGString+=*yytext;
}
<GCopyCurly>. {
- *pCopyCurlyGString+=*yytext;
+ *yyextra->pCopyCurlyGString+=*yytext;
}
/* ---------------------- */
<FindMembers>":" {
- if (current->type.isEmpty() &&
- current->name=="enum") // see bug 69041, C++11 style anon enum: 'enum : unsigned int {...}'
+ if (yyextra->current->type.isEmpty() &&
+ yyextra->current->name=="enum") // see bug 69041, C++11 style anon enum: 'enum : unsigned int {...}'
{
- current->section=Entry::ENUM_SEC;
- current->name.resize(0);
- current->args.resize(0);
+ yyextra->current->section=Entry::ENUM_SEC;
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
BEGIN(EnumBaseType);
}
else
{
- if (current->type.isEmpty()) // anonymous padding field, e.g. "int :7;"
+ if (yyextra->current->type.isEmpty()) // anonymous padding field, e.g. "int :7;"
{
- addType();
- current->name.sprintf("__pad%d__",padCount++);
+ addType(yyscanner);
+ yyextra->current->name.sprintf("__pad%d__",yyextra->padCount++);
}
BEGIN(BitFields);
- current->bitfields+=":";
+ yyextra->current->bitfields+=":";
}
}
<BitFields>. {
- current->bitfields+=*yytext;
+ yyextra->current->bitfields+=*yytext;
}
<EnumBaseType>. {
- current->args+=*yytext;
+ yyextra->current->args+=*yytext;
}
<EnumBaseType>\n {
- lineCount();
- current->args+=' ';
+ lineCount(yyscanner);
+ yyextra->current->args+=' ';
}
<FindMembers>[;,] {
- QCString oldType = current->type;
- if (current->bodyLine==-1)
+ QCString oldType = yyextra->current->type;
+ if (yyextra->current->bodyLine==-1)
{
- current->bodyLine = yyLineNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
}
- if ( insidePHP && current->type.left(3) == "var" )
+ if ( yyextra->insidePHP && yyextra->current->type.left(3) == "var" )
{
- current->type = current->type.mid(3);
+ yyextra->current->type = yyextra->current->type.mid(3);
}
- if (isTypedef && current->type.left(8)!="typedef ")
+ if (yyextra->isTypedef && yyextra->current->type.left(8)!="typedef ")
{
- current->type.prepend("typedef ");
+ yyextra->current->type.prepend("typedef ");
}
- bool stat = current->stat;
- if (!current->name.isEmpty() && current->section!=Entry::ENUM_SEC)
+ bool stat = yyextra->current->stat;
+ if (!yyextra->current->name.isEmpty() && yyextra->current->section!=Entry::ENUM_SEC)
{
- current->type=current->type.simplifyWhiteSpace();
- current->args=removeRedundantWhiteSpace(current->args);
- current->name=current->name.stripWhiteSpace();
- if (current->section==Entry::CLASS_SEC) // remove spec for "struct Bla bla;"
+ yyextra->current->type=yyextra->current->type.simplifyWhiteSpace();
+ yyextra->current->args=removeRedundantWhiteSpace(yyextra->current->args);
+ yyextra->current->name=yyextra->current->name.stripWhiteSpace();
+ if (yyextra->current->section==Entry::CLASS_SEC) // remove spec for "struct Bla bla;"
{
- current->spec = 0;
+ yyextra->current->spec = 0;
}
- current->section = Entry::VARIABLE_SEC ;
- current->fileName = yyFileName;
- current->startLine = yyBegLineNr;
- current->startColumn = yyBegColNr;
- current_root->moveToSubEntryAndRefresh( current ) ;
- initEntry();
+ yyextra->current->section = Entry::VARIABLE_SEC ;
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyBegLineNr;
+ yyextra->current->startColumn = yyextra->yyBegColNr;
+ yyextra->current_root->moveToSubEntryAndRefresh( yyextra->current ) ;
+ initEntry(yyscanner);
}
if ( *yytext == ',')
{
- current->stat = stat; // the static attribute holds for all variables
- current->name.resize(0);
- current->args.resize(0);
- current->brief.resize(0);
- current->doc.resize(0);
- current->initializer.resize(0);
- current->bitfields.resize(0);
+ yyextra->current->stat = stat; // the static attribute holds for all variables
+ yyextra->current->name.resize(0);
+ yyextra->current->args.resize(0);
+ yyextra->current->brief.resize(0);
+ yyextra->current->doc.resize(0);
+ yyextra->current->initializer.resize(0);
+ yyextra->current->bitfields.resize(0);
int i=oldType.length();
while (i>0 && (oldType[i-1]=='*' || oldType[i-1]=='&' || oldType[i-1]==' ')) i--;
- current->type = oldType.left(i);
+ yyextra->current->type = oldType.left(i);
}
else
{
- mtype = Method;
- virt = Normal;
- if (current->groups)
- {
- current->groups->clear();
- }
- initEntry();
+ yyextra->mtype = Method;
+ yyextra->virt = Normal;
+ yyextra->current->groups.clear();
+ initEntry(yyscanner);
}
}
<FindMembers>"[" {
- if (insideSlice)
+ if (yyextra->insideSlice)
{
- squareCount=1;
- lastSquareContext = YY_START;
- current->metaData += "[";
+ yyextra->squareCount=1;
+ yyextra->lastSquareContext = YY_START;
+ yyextra->current->metaData += "[";
BEGIN( SliceMetadata );
}
- else if (!insideCS &&
- (current->name.isEmpty() ||
- current->name=="typedef"
+ else if (!yyextra->insideCS &&
+ (yyextra->current->name.isEmpty() ||
+ yyextra->current->name=="typedef"
)
) // IDL function property
{
- squareCount=1;
- lastSquareContext = YY_START;
- idlAttr.resize(0);
- idlProp.resize(0);
- current->mtype = mtype;
+ yyextra->squareCount=1;
+ yyextra->lastSquareContext = YY_START;
+ yyextra->idlAttr.resize(0);
+ yyextra->idlProp.resize(0);
+ yyextra->current->mtype = yyextra->mtype;
if (Config_getBool(IDL_PROPERTY_SUPPORT) &&
- current->mtype == Property)
- { // we are inside the properties section of a dispinterface
- odlProp = true;
- current->spec |= Entry::Gettable;
- current->spec |= Entry::Settable;
+ yyextra->current->mtype == Property)
+ { // we are yyextra->inside the properties section of a dispinterface
+ yyextra->odlProp = true;
+ yyextra->current->spec |= Entry::Gettable;
+ yyextra->current->spec |= Entry::Settable;
}
BEGIN( IDLAttribute );
}
- else if (insideCS &&
- current->name.isEmpty())
+ else if (yyextra->insideCS &&
+ yyextra->current->name.isEmpty())
{
- squareCount=1;
- lastSquareContext = YY_START;
+ yyextra->squareCount=1;
+ yyextra->lastSquareContext = YY_START;
// Skip the C# attribute
// for this member
- current->args.resize(0);
+ yyextra->current->args.resize(0);
BEGIN( SkipSquare );
}
else
{
- current->args += yytext ;
- squareCount=1;
- externC=FALSE; // see bug759247
+ yyextra->current->args += yytext ;
+ yyextra->squareCount=1;
+ yyextra->externC=FALSE; // see bug759247
BEGIN( Array ) ;
}
}
<SliceMetadata>"[" { // Global metadata.
- squareCount++;
- current->metaData += "[";
+ yyextra->squareCount++;
+ yyextra->current->metaData += "[";
}
<SliceMetadata>{BN}* {
- lineCount();
+ lineCount(yyscanner);
}
<SliceMetadata>\"[^\"]*\" {
- current->metaData += yytext;
+ yyextra->current->metaData += yytext;
}
<SliceMetadata>"," {
- current->metaData += yytext;
+ yyextra->current->metaData += yytext;
}
<SliceMetadata>"]" {
- current->metaData += yytext;
- if (--squareCount<=0)
+ yyextra->current->metaData += yytext;
+ if (--yyextra->squareCount<=0)
{
- BEGIN (lastSquareContext);
+ BEGIN (yyextra->lastSquareContext);
}
}
<SliceOptional>"(" {
- current->type += "(";
- roundCount++;
+ yyextra->current->type += "(";
+ yyextra->roundCount++;
}
<SliceOptional>[0-9]+ {
- current->type += yytext;
+ yyextra->current->type += yytext;
}
<SliceOptional>")" {
- current->type += ")";
- if(--roundCount<=0)
+ yyextra->current->type += ")";
+ if(--yyextra->roundCount<=0)
{
- BEGIN (lastModifierContext);
+ BEGIN (yyextra->lastModifierContext);
}
}
<IDLAttribute>"]" {
// end of IDL function attribute
- if (--squareCount<=0)
+ if (--yyextra->squareCount<=0)
{
- lineCount();
- if (current->mtype == Property)
+ lineCount(yyscanner);
+ if (yyextra->current->mtype == Property)
BEGIN( IDLPropName );
else
- BEGIN( lastSquareContext );
+ BEGIN( yyextra->lastSquareContext );
}
}
<IDLAttribute>"propput" {
if (Config_getBool(IDL_PROPERTY_SUPPORT))
{
- current->mtype = Property;
+ yyextra->current->mtype = Property;
}
- current->spec |= Entry::Settable;
+ yyextra->current->spec |= Entry::Settable;
}
<IDLAttribute>"propget" {
if (Config_getBool(IDL_PROPERTY_SUPPORT))
{
- current->mtype = Property;
+ yyextra->current->mtype = Property;
}
- current->spec |= Entry::Gettable;
+ yyextra->current->spec |= Entry::Gettable;
}
<IDLAttribute>"property" { // UNO IDL property
- current->spec |= Entry::Property;
+ yyextra->current->spec |= Entry::Property;
}
<IDLAttribute>"attribute" { // UNO IDL attribute
- current->spec |= Entry::Attribute;
+ yyextra->current->spec |= Entry::Attribute;
}
<IDLAttribute>"optional" { // on UNO IDL interface/service/attribute/property
- current->spec |= Entry::Optional;
+ yyextra->current->spec |= Entry::Optional;
}
<IDLAttribute>"readonly" { // on UNO IDL attribute or property
- if (Config_getBool(IDL_PROPERTY_SUPPORT) && odlProp)
+ if (Config_getBool(IDL_PROPERTY_SUPPORT) && yyextra->odlProp)
{
- current->spec ^= Entry::Settable;
+ yyextra->current->spec ^= Entry::Settable;
}
else
{
- current->spec |= Entry::Readonly;
+ yyextra->current->spec |= Entry::Readonly;
}
}
<IDLAttribute>"bound" { // on UNO IDL attribute or property
- current->spec |= Entry::Bound;
+ yyextra->current->spec |= Entry::Bound;
}
<IDLAttribute>"removable" { // on UNO IDL property
- current->spec |= Entry::Removable;
+ yyextra->current->spec |= Entry::Removable;
}
<IDLAttribute>"constrained" { // on UNO IDL property
- current->spec |= Entry::Constrained;
+ yyextra->current->spec |= Entry::Constrained;
}
<IDLAttribute>"transient" { // on UNO IDL property
- current->spec |= Entry::Transient;
+ yyextra->current->spec |= Entry::Transient;
}
<IDLAttribute>"maybevoid" { // on UNO IDL property
- current->spec |= Entry::MaybeVoid;
+ yyextra->current->spec |= Entry::MaybeVoid;
}
<IDLAttribute>"maybedefault" { // on UNO IDL property
- current->spec |= Entry::MaybeDefault;
+ yyextra->current->spec |= Entry::MaybeDefault;
}
<IDLAttribute>"maybeambiguous" { // on UNO IDL property
- current->spec |= Entry::MaybeAmbiguous;
+ yyextra->current->spec |= Entry::MaybeAmbiguous;
}
<IDLAttribute>. {
}
<IDLPropName>{BN}*{ID}{BN}* {
// return type (probably HRESULT) - skip it
- if (odlProp)
+ if (yyextra->odlProp)
{ // property type
- idlProp = yytext;
+ yyextra->idlProp = yytext;
}
}
<IDLPropName>{ID}{BN}*"(" {
- current->name = yytext;
- current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
+ yyextra->current->name = yytext;
+ yyextra->current->name = yyextra->current->name.left(yyextra->current->name.length()-1).stripWhiteSpace();
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
BEGIN( IDLProp );
}
<IDLPropName>{BN}*"("{BN}*{ID}{BN}*")"{BN}* {
- if (odlProp)
+ if (yyextra->odlProp)
{
- idlProp += yytext;
+ yyextra->idlProp += yytext;
}
}
<IDLPropName>{ID}{BN}*/";" {
- if (odlProp)
+ if (yyextra->odlProp)
{
- current->name = yytext;
- idlProp = idlProp.stripWhiteSpace();
- odlProp = false;
+ yyextra->current->name = yytext;
+ yyextra->idlProp = yyextra->idlProp.stripWhiteSpace();
+ yyextra->odlProp = false;
BEGIN( IDLProp );
}
}
<IDLProp>{BN}*"["[^\]]*"]"{BN}* { // attribute of a parameter
- idlAttr = yytext;
- idlAttr=idlAttr.stripWhiteSpace();
+ yyextra->idlAttr = yytext;
+ yyextra->idlAttr=yyextra->idlAttr.stripWhiteSpace();
}
<IDLProp>{ID} { // property type
- idlProp = yytext;
+ yyextra->idlProp = yytext;
}
<IDLProp>{BN}*{ID}{BN}*"," { // Rare: Another parameter ([propput] HRESULT Item(int index, [in] Type theRealProperty);)
- if (!current->args)
- current->args = "(";
+ if (!yyextra->current->args)
+ yyextra->current->args = "(";
else
- current->args += ", ";
- current->args += idlAttr;
- current->args += " ";
- current->args += idlProp; // prop was actually type of extra parameter
- current->args += " ";
- current->args += yytext;
- current->args = current->args.left(current->args.length() - 1); // strip comma
- idlProp.resize(0);
- idlAttr.resize(0);
+ yyextra->current->args += ", ";
+ yyextra->current->args += yyextra->idlAttr;
+ yyextra->current->args += " ";
+ yyextra->current->args += yyextra->idlProp; // prop was actually type of extra parameter
+ yyextra->current->args += " ";
+ yyextra->current->args += yytext;
+ yyextra->current->args = yyextra->current->args.left(yyextra->current->args.length() - 1); // strip comma
+ yyextra->idlProp.resize(0);
+ yyextra->idlAttr.resize(0);
BEGIN( IDLProp );
}
<IDLProp>{BN}*{ID}{BN}*")"{BN}* {
// the parameter name for the property - just skip.
}
<IDLProp>";" {
- current->fileName = yyFileName;
- current->type = idlProp;
- current->args = current->args.simplifyWhiteSpace();
- if (current->args)
- current->args += ")";
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->type = yyextra->idlProp;
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
+ if (yyextra->current->args)
+ yyextra->current->args += ")";
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ yyextra->current->section = Entry::VARIABLE_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN( FindMembers );
}
<IDLProp>. { // spaces, *, or other stuff
- //idlProp+=yytext;
+ //yyextra->idlProp+=yytext;
}
-<Array>"]" { current->args += *yytext ;
- if (--squareCount<=0)
+<Array>"]" { yyextra->current->args += *yytext ;
+ if (--yyextra->squareCount<=0)
BEGIN( FindMembers ) ;
}
-<FuncFuncArray>"]" { current->args += *yytext ;
- if (--squareCount<=0)
+<FuncFuncArray>"]" { yyextra->current->args += *yytext ;
+ if (--yyextra->squareCount<=0)
BEGIN( Function ) ;
}
-<Array,FuncFuncArray>"[" { current->args += *yytext ;
- squareCount++;
+<Array,FuncFuncArray>"[" { yyextra->current->args += *yytext ;
+ yyextra->squareCount++;
}
-<Array,FuncFuncArray>. { current->args += *yytext ; }
-<SkipSquare>"[" { squareCount++; }
+<Array,FuncFuncArray>. { yyextra->current->args += *yytext ; }
+<SkipSquare>"[" { yyextra->squareCount++; }
<SkipSquare>"]" {
- if (--squareCount<=0)
- BEGIN( lastSquareContext );
+ if (--yyextra->squareCount<=0)
+ BEGIN( yyextra->lastSquareContext );
}
<SkipSquare>\" {
- lastStringContext=YY_START;
+ yyextra->lastStringContext=YY_START;
BEGIN( SkipString );
}
<SkipSquare>[^\n\[\]\"]+
-<FindMembers>"<" { addType();
- current->type += yytext ;
+<FindMembers>"<" { addType(yyscanner);
+ yyextra->current->type += yytext ;
BEGIN( Sharp ) ;
}
-<Sharp>">" { current->type += *yytext ;
- if (--sharpCount<=0)
+<Sharp>">" { yyextra->current->type += *yytext ;
+ if (--yyextra->sharpCount<=0)
BEGIN( FindMembers ) ;
}
-<Sharp>"<" { current->type += *yytext ;
- sharpCount++;
+<Sharp>"<" { yyextra->current->type += *yytext ;
+ yyextra->sharpCount++;
}
<Sharp>{BN}+ {
- current->type += ' ';
- lineCount();
+ yyextra->current->type += ' ';
+ lineCount(yyscanner);
}
-<Sharp>. { current->type += *yytext ; }
+<Sharp>. { yyextra->current->type += *yytext ; }
<FindFields>{ID} {
- if (insideCpp || insideObjC)
+ if (yyextra->insideCpp || yyextra->insideObjC)
{
- current->id = ClangParser::instance()->lookup(yyLineNr,yytext);
+ yyextra->current->id = ClangParser::instance()->lookup(yyextra->yyLineNr,yytext);
}
- current->bodyLine = yyLineNr;
- current->name = yytext;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->name = yytext;
}
<FindFields>"(" {
// Java enum initializer
unput('(');
- lastInitializerContext = YY_START;
- initBracketCount=0;
- current->initializer = "=";
+ yyextra->lastInitializerContext = YY_START;
+ yyextra->initBracketCount=0;
+ yyextra->current->initializer = "=";
BEGIN(ReadInitializer);
}
<FindFields>"=" {
- lastInitializerContext = YY_START;
- initBracketCount=0;
- current->initializer = yytext;
+ yyextra->lastInitializerContext = YY_START;
+ yyextra->initBracketCount=0;
+ yyextra->current->initializer = yytext;
BEGIN(ReadInitializer);
}
<FindFields>";" {
- if (insideJava) // last enum field in Java class
+ if (yyextra->insideJava) // yyextra->last enum field in Java class
{
- if (!current->name.isEmpty())
+ if (!yyextra->current->name.isEmpty())
{
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- if (!(current_root->spec&Entry::Enum))
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ if (!(yyextra->current_root->spec&Entry::Enum))
{
- current->type = "@"; // enum marker
+ yyextra->current->type = "@"; // enum marker
}
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ yyextra->current->section = Entry::VARIABLE_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
}
BEGIN( FindMembers );
@@ -3848,70 +3462,70 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<SkipRemainder>\n {
- lineCount();
+ lineCount(yyscanner);
}
<SkipRemainder>[^\n]*
<FindFields>"," {
//printf("adding '%s' '%s' '%s' to enum '%s' (mGrpId=%d)\n",
- // current->type.data(), current->name.data(),
- // current->args.data(), current_root->name.data(),current->mGrpId);
- if (!current->name.isEmpty())
- {
- current->fileName = yyFileName;
- current->startLine = yyLineNr;
- current->startColumn = yyColNr;
- if (!(current_root->spec&Entry::Enum))
+ // yyextra->current->type.data(), yyextra->current->name.data(),
+ // yyextra->current->args.data(), yyextra->current_root->name.data(),yyextra->current->mGrpId);
+ if (!yyextra->current->name.isEmpty())
+ {
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyLineNr;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ if (!(yyextra->current_root->spec&Entry::Enum))
{
- current->type = "@"; // enum marker
+ yyextra->current->type = "@"; // enum marker
}
- current->args = current->args.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- current->section = Entry::VARIABLE_SEC;
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ yyextra->current->section = Entry::VARIABLE_SEC;
// add to the scope of the enum
- if (!insideCS && !insideJava &&
- !(current_root->spec&Entry::Strong))
+ if (!yyextra->insideCS && !yyextra->insideJava &&
+ !(yyextra->current_root->spec&Entry::Strong))
// for C# and Java 1.5+ enum values always have to be explicitly qualified,
// same for C++11 style enums (enum class Name {})
{
// add to the scope surrounding the enum (copy!)
// we cannot during it directly as that would invalidate the iterator in parseCompounds.
- //printf("*** adding outer scope entry for %s\n",current->name.data());
- g_outerScopeEntries.emplace_back(current_root->parent(), std::make_unique<Entry>(*current));
+ //printf("*** adding outer scope entry for %s\n",yyextra->current->name.data());
+ yyextra->outerScopeEntries.emplace_back(yyextra->current_root->parent(), std::make_shared<Entry>(*yyextra->current));
}
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
}
else // probably a redundant ,
{
- current->reset();
- initEntry();
+ yyextra->current->reset();
+ initEntry(yyscanner);
}
}
<FindFields>"[" { // attribute list in IDL
- squareCount=1;
- lastSquareContext = YY_START;
+ yyextra->squareCount=1;
+ yyextra->lastSquareContext = YY_START;
BEGIN(SkipSquare);
}
/*
<FindFieldArg>"," { unput(*yytext); BEGIN(FindFields); }
*/
-<ReadBody,ReadNSBody,ReadBodyIntf>[^\r\n\#{}"@'/<]* { current->program += yytext ; }
-<ReadBody,ReadNSBody,ReadBodyIntf>"//".* { current->program += yytext ; }
-<ReadBody,ReadNSBody,ReadBodyIntf>"#".* { if (!insidePHP)
+<ReadBody,ReadNSBody,ReadBodyIntf>[^\r\n\#{}"@'/<]* { yyextra->current->program += yytext ; }
+<ReadBody,ReadNSBody,ReadBodyIntf>"//".* { yyextra->current->program += yytext ; }
+<ReadBody,ReadNSBody,ReadBodyIntf>"#".* { if (!yyextra->insidePHP)
REJECT;
// append PHP comment.
- current->program += yytext ;
+ yyextra->current->program += yytext ;
}
-<ReadBody,ReadNSBody,ReadBodyIntf>@\" { current->program += yytext ;
- pSkipVerbString = &current->program;
- lastSkipVerbStringContext=YY_START;
+<ReadBody,ReadNSBody,ReadBodyIntf>@\" { yyextra->current->program += yytext ;
+ yyextra->pSkipVerbString = &yyextra->current->program;
+ yyextra->lastSkipVerbStringContext=YY_START;
BEGIN( SkipVerbString );
}
-<ReadBody,ReadNSBody,ReadBodyIntf>"<<<" { if (insidePHP)
+<ReadBody,ReadNSBody,ReadBodyIntf>"<<<" { if (yyextra->insidePHP)
{
- current->program += yytext ;
- pCopyHereDocGString = &current->program;
- lastHereDocContext=YY_START;
+ yyextra->current->program += yytext ;
+ yyextra->pCopyHereDocGString = &yyextra->current->program;
+ yyextra->lastHereDocContext=YY_START;
BEGIN( CopyHereDoc );
}
else
@@ -3919,139 +3533,155 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
REJECT;
}
}
-<ReadBody,ReadNSBody,ReadBodyIntf>\" { current->program += yytext ;
- pCopyQuotedGString = &current->program;
- lastStringContext=YY_START;
+<ReadBody,ReadNSBody,ReadBodyIntf>\" { yyextra->current->program += yytext ;
+ yyextra->pCopyQuotedGString = &yyextra->current->program;
+ yyextra->lastStringContext=YY_START;
BEGIN( CopyGString );
}
-<ReadBody,ReadNSBody,ReadBodyIntf>"/*"{B}* { current->program += yytext ;
- lastContext = YY_START ;
+<ReadBody,ReadNSBody,ReadBodyIntf>"/*"{B}* { yyextra->current->program += yytext ;
+ yyextra->lastContext = YY_START ;
BEGIN( Comment ) ;
}
-<ReadBody,ReadNSBody,ReadBodyIntf>"/*"{BL} { current->program += yytext ;
- ++yyLineNr ;
- lastContext = YY_START ;
+<ReadBody,ReadNSBody,ReadBodyIntf>"/*"{BL} { yyextra->current->program += yytext ;
+ ++yyextra->yyLineNr ;
+ yyextra->lastContext = YY_START ;
BEGIN( Comment ) ;
}
<ReadBody,ReadNSBody,ReadBodyIntf>"'" {
- if (!insidePHP)
+ if (!yyextra->insidePHP)
{
- current->program += yytext;
+ yyextra->current->program += yytext;
}
else
{ // begin of single quoted string
- current->program += yytext;
- pCopyQuotedGString = &current->program;
- lastStringContext=YY_START;
+ yyextra->current->program += yytext;
+ yyextra->pCopyQuotedGString = &yyextra->current->program;
+ yyextra->lastStringContext=YY_START;
BEGIN(CopyPHPGString);
}
}
<ReadBody,ReadNSBody,ReadBodyIntf>{CHARLIT} {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
REJECT; // for PHP code single quotes
// are used for strings of arbitrary length
}
else
{
- current->program += yytext;
+ yyextra->current->program += yytext;
}
}
-<ReadBody,ReadNSBody,ReadBodyIntf>"{" { current->program += yytext ;
- ++curlyCount ;
+<ReadBody,ReadNSBody,ReadBodyIntf>"{" { yyextra->current->program += yytext ;
+ ++yyextra->curlyCount ;
}
<ReadBodyIntf>"}" {
- current->program += yytext ;
- --curlyCount ;
+ yyextra->current->program += yytext ;
+ --yyextra->curlyCount ;
}
-<ReadBody,ReadNSBody>"}" { //err("ReadBody count=%d\n",curlyCount);
- if ( curlyCount>0 )
+<ReadBody,ReadNSBody>"}" { //err("ReadBody count=%d\n",yyextra->curlyCount);
+ if ( yyextra->curlyCount>0 )
{
- current->program += yytext ;
- --curlyCount ;
+ yyextra->current->program += yytext ;
+ --yyextra->curlyCount ;
}
else
{
- current->endBodyLine = yyLineNr;
- Entry * original_root = current_root; // save root this namespace is in
- if (current->section == Entry::NAMESPACE_SEC && current->type == "namespace")
+ yyextra->current->endBodyLine = yyextra->yyLineNr;
+ std::shared_ptr<Entry> original_root = yyextra->current_root; // save root this namespace is in
+ if (yyextra->current->section == Entry::NAMESPACE_SEC && yyextra->current->type == "namespace")
{
int split_point;
- while ((split_point = current->name.find("::")) != -1)
+ // save documentation values
+ QCString doc = yyextra->current->doc;
+ int docLine = yyextra->current->docLine;
+ QCString docFile = yyextra->current->docFile;
+ QCString brief = yyextra->current->brief;
+ int briefLine = yyextra->current->briefLine;
+ QCString briefFile = yyextra->current->briefFile;
+ // reset documentation values
+ yyextra->current->doc = "";
+ yyextra->current->docLine = 0;
+ yyextra->current->docFile = "";
+ yyextra->current->brief = "";
+ yyextra->current->briefLine = 0;
+ yyextra->current->briefFile = "";
+ while ((split_point = yyextra->current->name.find("::")) != -1)
{
- std::unique_ptr<Entry> new_current = std::make_unique<Entry>(*current);
- current->program = "";
- new_current->doc = "";
- new_current->docLine = 0;
- new_current->docFile = "";
- new_current->brief = "";
- new_current->briefLine = 0;
- new_current->briefFile = "";
- new_current->name = current->name.mid(split_point + 2);
- current->name = current->name.left(split_point);
- if (!current_root->name.isEmpty()) current->name.prepend(current_root->name+"::");
-
- Entry *tmp = current.get();
- current_root->moveToSubEntryAndKeep(current);
- current_root = tmp;
- current.swap(new_current);
+ std::shared_ptr<Entry> new_current = std::make_shared<Entry>(*yyextra->current);
+ yyextra->current->program = "";
+ new_current->name = yyextra->current->name.mid(split_point + 2);
+ yyextra->current->name = yyextra->current->name.left(split_point);
+ if (!yyextra->current_root->name.isEmpty()) yyextra->current->name.prepend(yyextra->current_root->name+"::");
+
+ std::shared_ptr<Entry> tmp = yyextra->current;
+ yyextra->current_root->moveToSubEntryAndKeep(yyextra->current);
+ yyextra->current_root = tmp;
+
+ yyextra->current = new_current;
}
+ // restore documentation values
+ yyextra->current->doc = doc;
+ yyextra->current->docLine = docLine;
+ yyextra->current->docFile = docFile;
+ yyextra->current->brief = brief;
+ yyextra->current->briefLine = briefLine;
+ yyextra->current->briefFile = briefFile;
}
- QCString &cn = current->name;
- QCString rn = current_root->name.copy();
- //printf("cn='%s' rn='%s' isTypedef=%d\n",cn.data(),rn.data(),isTypedef);
+ QCString &cn = yyextra->current->name;
+ QCString rn = yyextra->current_root->name.copy();
+ //printf("cn='%s' rn='%s' yyextra->isTypedef=%d\n",cn.data(),rn.data(),yyextra->isTypedef);
if (!cn.isEmpty() && !rn.isEmpty())
{
- prependScope();
+ prependScope(yyscanner);
}
- if (isTypedef && cn.isEmpty())
+ if (yyextra->isTypedef && cn.isEmpty())
{
//printf("Typedef Name\n");
BEGIN( TypedefName );
}
else
{
- if ((current->section == Entry::ENUM_SEC) || (current->spec&Entry::Enum))
+ if ((yyextra->current->section == Entry::ENUM_SEC) || (yyextra->current->spec&Entry::Enum))
{
- current->program+=','; // add field terminator
+ yyextra->current->program+=','; // add field terminator
}
// add compound definition to the tree
- current->args=removeRedundantWhiteSpace(current->args);
- // was: current->args.simplifyWhiteSpace();
- current->type = current->type.simplifyWhiteSpace();
- current->name = current->name.stripWhiteSpace();
- //printf("adding '%s' '%s' '%s' brief=%s insideObjC=%d %x\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data(),insideObjC,current->section);
- if (insideObjC &&
- ((current->spec&Entry::Interface) || (current->spec==Entry::Category))
+ yyextra->current->args=removeRedundantWhiteSpace(yyextra->current->args);
+ // was: yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->type = yyextra->current->type.simplifyWhiteSpace();
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ //printf("adding '%s' '%s' '%s' brief=%s yyextra->insideObjC=%d %x\n",yyextra->current->type.data(),yyextra->current->name.data(),yyextra->current->args.data(),yyextra->current->brief.data(),yyextra->insideObjC,yyextra->current->section);
+ if (yyextra->insideObjC &&
+ ((yyextra->current->spec&Entry::Interface) || (yyextra->current->spec==Entry::Category))
) // method definition follows
{
BEGIN( ReadBodyIntf ) ;
}
else
{
- memspecEntry = current.get();
- current_root->copyToSubEntry( current ) ;
- if (current->section==Entry::NAMESPACE_SEC ||
- (current->spec==Entry::Interface) ||
- insideJava || insidePHP || insideCS || insideD || insideJS ||
- insideSlice
+ yyextra->memspecEntry = yyextra->current;
+ yyextra->current_root->copyToSubEntry( yyextra->current ) ;
+ if (yyextra->current->section==Entry::NAMESPACE_SEC ||
+ (yyextra->current->spec==Entry::Interface) ||
+ yyextra->insideJava || yyextra->insidePHP || yyextra->insideCS || yyextra->insideD || yyextra->insideJS ||
+ yyextra->insideSlice
)
{ // namespaces and interfaces and java classes ends with a closing bracket without semicolon
- current->reset();
- current_root = original_root; // restore scope from before namespace descent
- initEntry();
- memspecEntry = 0;
+ yyextra->current->reset();
+ yyextra->current_root = original_root; // restore scope from before namespace descent
+ initEntry(yyscanner);
+ yyextra->memspecEntry.reset();
BEGIN( FindMembers ) ;
}
else
{
static QRegExp re("@[0-9]+$");
- if (!isTypedef && memspecEntry &&
- memspecEntry->name.find(re)==-1) // not typedef or anonymous type (see bug691071)
+ if (!yyextra->isTypedef && yyextra->memspecEntry &&
+ yyextra->memspecEntry->name.find(re)==-1) // not typedef or anonymous type (see bug691071)
{
// enabled the next two lines for bug 623424
- current->doc.resize(0);
- current->brief.resize(0);
+ yyextra->current->doc.resize(0);
+ yyextra->current->brief.resize(0);
}
BEGIN( MemberSpec ) ;
}
@@ -4059,113 +3689,113 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
}
-<ReadBody>"}"{BN}+"typedef"{BN}+ { //err("ReadBody count=%d\n",curlyCount);
- lineCount();
- if ( curlyCount>0 )
+<ReadBody>"}"{BN}+"typedef"{BN}+ { //err("ReadBody count=%d\n",yyextra->curlyCount);
+ lineCount(yyscanner);
+ if ( yyextra->curlyCount>0 )
{
- current->program += yytext ;
- --curlyCount ;
+ yyextra->current->program += yytext ;
+ --yyextra->curlyCount ;
}
else
{
- isTypedef = TRUE;
- current->endBodyLine = yyLineNr;
- QCString &cn = current->name;
- QCString rn = current_root->name.copy();
+ yyextra->isTypedef = TRUE;
+ yyextra->current->endBodyLine = yyextra->yyLineNr;
+ QCString &cn = yyextra->current->name;
+ QCString rn = yyextra->current_root->name.copy();
if (!cn.isEmpty() && !rn.isEmpty())
{
- prependScope();
+ prependScope(yyscanner);
}
BEGIN( TypedefName );
}
}
<TypedefName>("const"|"volatile"){BN} { // late "const" or "volatile" keyword
- lineCount();
- current->type.prepend(yytext);
+ lineCount(yyscanner);
+ yyextra->current->type.prepend(yytext);
}
<TypedefName>{ID} {
- if ((current->section == Entry::ENUM_SEC) || (current->spec&Entry::Enum))
+ if ((yyextra->current->section == Entry::ENUM_SEC) || (yyextra->current->spec&Entry::Enum))
{
- current->program+=","; // add field terminator
+ yyextra->current->program+=","; // add field terminator
}
- current->name=yytext;
- prependScope();
- current->args = current->args.simplifyWhiteSpace();
- current->type = current->type.simplifyWhiteSpace();
- //printf("Adding compound %s %s %s\n",current->type.data(),current->name.data(),current->args.data());
- if (!firstTypedefEntry)
+ yyextra->current->name=yytext;
+ prependScope(yyscanner);
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->type = yyextra->current->type.simplifyWhiteSpace();
+ //printf("Adding compound %s %s %s\n",yyextra->current->type.data(),yyextra->current->name.data(),yyextra->current->args.data());
+ if (!yyextra->firstTypedefEntry)
{
- firstTypedefEntry = current.get();
+ yyextra->firstTypedefEntry = yyextra->current;
}
- current_root->moveToSubEntryAndRefresh( current ) ;
- initEntry();
- isTypedef=TRUE; // to undo reset by initEntry()
+ yyextra->current_root->moveToSubEntryAndRefresh( yyextra->current ) ;
+ initEntry(yyscanner);
+ yyextra->isTypedef=TRUE; // to undo reset by initEntry(yyscanner)
BEGIN(MemberSpecSkip);
}
<TypedefName>";" { /* typedef of anonymous type */
- current->name.sprintf("@%d",anonCount++);
- if ((current->section == Entry::ENUM_SEC) || (current->spec&Entry::Enum))
+ yyextra->current->name.sprintf("@%d",yyextra->anonCount++);
+ if ((yyextra->current->section == Entry::ENUM_SEC) || (yyextra->current->spec&Entry::Enum))
{
- current->program+=','; // add field terminator
+ yyextra->current->program+=','; // add field terminator
}
// add compound definition to the tree
- current->args = current->args.simplifyWhiteSpace();
- current->type = current->type.simplifyWhiteSpace();
- memspecEntry = current.get();
- current_root->moveToSubEntryAndRefresh( current ) ;
- initEntry();
+ yyextra->current->args = yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->type = yyextra->current->type.simplifyWhiteSpace();
+ yyextra->memspecEntry = yyextra->current;
+ yyextra->current_root->moveToSubEntryAndRefresh( yyextra->current ) ;
+ initEntry(yyscanner);
unput(';');
BEGIN( MemberSpec ) ;
}
<MemberSpec>([*&]*{BN}*)*{ID}{BN}*("["[^\]\n]*"]")* { // the [] part could be improved.
- lineCount();
+ lineCount(yyscanner);
int i=0,l=(int)yyleng,j;
while (i<l && (!isId(yytext[i]))) i++;
- msName = QCString(yytext).right(l-i).stripWhiteSpace();
- j=msName.find("[");
+ yyextra->msName = QCString(yytext).right(l-i).stripWhiteSpace();
+ j=yyextra->msName.find("[");
if (j!=-1)
{
- msArgs=msName.right(msName.length()-j);
- msName=msName.left(j);
+ yyextra->msArgs=yyextra->msName.right(yyextra->msName.length()-j);
+ yyextra->msName=yyextra->msName.left(j);
}
- msType=QCString(yytext).left(i);
+ yyextra->msType=QCString(yytext).left(i);
// handle *pName in: typedef { ... } name, *pName;
- if (firstTypedefEntry)
+ if (yyextra->firstTypedefEntry)
{
- if (firstTypedefEntry->spec&Entry::Struct)
+ if (yyextra->firstTypedefEntry->spec&Entry::Struct)
{
- msType.prepend("struct "+firstTypedefEntry->name);
+ yyextra->msType.prepend("struct "+yyextra->firstTypedefEntry->name);
}
- else if (firstTypedefEntry->spec&Entry::Union)
+ else if (yyextra->firstTypedefEntry->spec&Entry::Union)
{
- msType.prepend("union "+firstTypedefEntry->name);
+ yyextra->msType.prepend("union "+yyextra->firstTypedefEntry->name);
}
- else if (firstTypedefEntry->section==Entry::ENUM_SEC)
+ else if (yyextra->firstTypedefEntry->section==Entry::ENUM_SEC)
{
- msType.prepend("enum "+firstTypedefEntry->name);
+ yyextra->msType.prepend("enum "+yyextra->firstTypedefEntry->name);
}
else
{
- msType.prepend(firstTypedefEntry->name);
+ yyextra->msType.prepend(yyextra->firstTypedefEntry->name);
}
}
}
<MemberSpec>"(" { // function with struct return type
- addType();
- current->name = msName;
- current->spec = 0;
+ addType(yyscanner);
+ yyextra->current->name = yyextra->msName;
+ yyextra->current->spec = 0;
unput('(');
BEGIN(FindMembers);
}
<MemberSpec>[,;] {
- if (msName.isEmpty() && !current->name.isEmpty())
+ if (yyextra->msName.isEmpty() && !yyextra->current->name.isEmpty())
{
- // see if the compound does not have a name or is inside another
+ // see if the compound does not have a name or is yyextra->inside another
// anonymous compound. If so we insert a
// special 'anonymous' variable.
- //Entry *p=current_root;
- const Entry *p=current.get();
+ //Entry *p=yyextra->current_root;
+ const Entry *p=yyextra->current.get();
while (p)
{
// only look for class scopes, not namespace scopes
@@ -4176,179 +3806,164 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
int pi = (i==-1) ? 0 : i+2;
if (p->name.at(pi)=='@')
{
- // anonymous compound inside -> insert dummy variable name
+ // anonymous compound yyextra->inside -> insert dummy variable name
//printf("Adding anonymous variable for scope %s\n",p->name.data());
- msName.sprintf("@%d",anonCount++);
+ yyextra->msName.sprintf("@%d",yyextra->anonCount++);
break;
}
}
//p=p->parent;
- if (p==current.get()) p=current_root; else p=p->parent();
+ if (p==yyextra->current.get()) p=yyextra->current_root.get(); else p=p->parent();
}
}
- //printf("msName=%s current->name=%s\n",msName.data(),current->name.data());
- if (!msName.isEmpty()
- /*&& msName!=current->name*/) // skip typedef T {} T;, removed due to bug608493
+ //printf("yyextra->msName=%s yyextra->current->name=%s\n",yyextra->msName.data(),yyextra->current->name.data());
+ if (!yyextra->msName.isEmpty()
+ /*&& yyextra->msName!=yyextra->current->name*/) // skip typedef T {} T;, removed due to bug608493
{
- static bool typedefHidesStruct = Config_getBool(TYPEDEF_HIDES_STRUCT);
+ bool typedefHidesStruct = Config_getBool(TYPEDEF_HIDES_STRUCT);
// case 1: typedef struct _S { ... } S_t;
// -> omit typedef and use S_t as the struct name
if (typedefHidesStruct &&
- isTypedef &&
- ((current->spec&(Entry::Struct|Entry::Union)) ||
- current->section==Entry::ENUM_SEC )&&
- msType.stripWhiteSpace().isEmpty() &&
- memspecEntry)
+ yyextra->isTypedef &&
+ ((yyextra->current->spec&(Entry::Struct|Entry::Union)) ||
+ yyextra->current->section==Entry::ENUM_SEC )&&
+ yyextra->msType.stripWhiteSpace().isEmpty() &&
+ yyextra->memspecEntry)
{
- memspecEntry->name=msName;
+ yyextra->memspecEntry->name=yyextra->msName;
}
else // case 2: create a typedef field
{
- std::unique_ptr<Entry> varEntry=std::make_unique<Entry>();
- varEntry->lang = language;
- varEntry->protection = current->protection ;
- varEntry->mtype = current->mtype;
- varEntry->virt = current->virt;
- varEntry->stat = current->stat;
+ std::shared_ptr<Entry> varEntry=std::make_shared<Entry>();
+ varEntry->lang = yyextra->language;
+ varEntry->protection = yyextra->current->protection ;
+ varEntry->mtype = yyextra->current->mtype;
+ varEntry->virt = yyextra->current->virt;
+ varEntry->stat = yyextra->current->stat;
varEntry->section = Entry::VARIABLE_SEC;
- varEntry->name = msName.stripWhiteSpace();
- varEntry->type = current->type.simplifyWhiteSpace()+" ";
- varEntry->args = msArgs;
- if (isTypedef)
+ varEntry->name = yyextra->msName.stripWhiteSpace();
+ varEntry->type = yyextra->current->type.simplifyWhiteSpace()+" ";
+ varEntry->args = yyextra->msArgs;
+ if (yyextra->isTypedef)
{
varEntry->type.prepend("typedef ");
- // //printf("current->name = %s %s\n",current->name.data(),msName.data());
+ // //printf("yyextra->current->name = %s %s\n",yyextra->current->name.data(),yyextra->msName.data());
}
if (typedefHidesStruct &&
- isTypedef &&
- (current->spec&(Entry::Struct|Entry::Union)) &&
- memspecEntry
+ yyextra->isTypedef &&
+ (yyextra->current->spec&(Entry::Struct|Entry::Union)) &&
+ yyextra->memspecEntry
) // case 1: use S_t as type for pS_t in "typedef struct _S {} S_t, *pS_t;"
{
- varEntry->type+=memspecEntry->name+msType;
+ varEntry->type+=yyextra->memspecEntry->name+yyextra->msType;
}
else // case 2: use _S as type for for pS_t
{
- varEntry->type+=current->name+msType;
- }
- varEntry->fileName = yyFileName;
- varEntry->startLine = yyLineNr;
- varEntry->startColumn = yyColNr;
- varEntry->doc = current->doc.copy();
- varEntry->brief = current->brief.copy();
- varEntry->mGrpId = current->mGrpId;
- varEntry->initializer = current->initializer;
-
- // deep copy group list
- QListIterator<Grouping> gli(*current->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- varEntry->groups->append(new Grouping(*g));
- }
- if (current->sli) // copy special list items
- {
- QListIterator<ListItemInfo> li(*current->sli);
- ListItemInfo *lii;
- for (li.toFirst();(lii=li.current());++li)
- {
- varEntry->addSpecialListItem(lii->type,lii->itemId);
- }
+ varEntry->type+=yyextra->current->name+yyextra->msType;
}
+ varEntry->fileName = yyextra->yyFileName;
+ varEntry->startLine = yyextra->yyLineNr;
+ varEntry->startColumn = yyextra->yyColNr;
+ varEntry->doc = yyextra->current->doc.copy();
+ varEntry->brief = yyextra->current->brief.copy();
+ varEntry->mGrpId = yyextra->current->mGrpId;
+ varEntry->initializer = yyextra->current->initializer;
+ varEntry->groups = yyextra->current->groups;
+ varEntry->sli = yyextra->current->sli;
//printf("Add: type='%s',name='%s',args='%s' brief=%s doc=%s\n",
// varEntry->type.data(),varEntry->name.data(),
// varEntry->args.data(),varEntry->brief.data(),varEntry->doc.data());
- current_root->moveToSubEntryAndKeep(varEntry);
+ yyextra->current_root->moveToSubEntryAndKeep(varEntry);
}
}
if (*yytext==';') // end of a struct/class ...
{
- if (!isTypedef && msName.isEmpty() && memspecEntry && (current->section&Entry::COMPOUND_MASK))
+ if (!yyextra->isTypedef && yyextra->msName.isEmpty() && yyextra->memspecEntry && (yyextra->current->section&Entry::COMPOUND_MASK))
{ // case where a class/struct has a doc block after it
- if (!current->doc.isEmpty())
+ if (!yyextra->current->doc.isEmpty())
{
- memspecEntry->doc += current->doc;
+ yyextra->memspecEntry->doc += yyextra->current->doc;
}
- if (!current->brief.isEmpty())
+ if (!yyextra->current->brief.isEmpty())
{
- memspecEntry->brief += current->brief;
+ yyextra->memspecEntry->brief += yyextra->current->brief;
}
}
- msType.resize(0);
- msName.resize(0);
- msArgs.resize(0);
- isTypedef=FALSE;
- firstTypedefEntry=0;
- memspecEntry=0;
- current->reset();
- initEntry();
+ yyextra->msType.resize(0);
+ yyextra->msName.resize(0);
+ yyextra->msArgs.resize(0);
+ yyextra->isTypedef=FALSE;
+ yyextra->firstTypedefEntry.reset();
+ yyextra->memspecEntry.reset();
+ yyextra->current->reset();
+ initEntry(yyscanner);
BEGIN( FindMembers );
}
else
{
- current->doc.resize(0);
- current->brief.resize(0);
+ yyextra->current->doc.resize(0);
+ yyextra->current->brief.resize(0);
}
}
<MemberSpec>"=" {
- lastInitializerContext=YY_START;
- initBracketCount=0;
- current->initializer = yytext;
+ yyextra->lastInitializerContext=YY_START;
+ yyextra->initBracketCount=0;
+ yyextra->current->initializer = yytext;
BEGIN(ReadInitializer);
/* BEGIN(MemberSpecSkip); */
}
/*
<MemberSpecSkip>"{" {
- curlyCount=0;
- lastCurlyContext = MemberSpecSkip;
- previous = current;
+ yyextra->curlyCount=0;
+ yyextra->lastCurlyContext = MemberSpecSkip;
+ yyextra->previous = yyextra->current;
BEGIN(SkipCurly);
}
*/
<MemberSpecSkip>"," { BEGIN(MemberSpec); }
<MemberSpecSkip>";" { unput(';'); BEGIN(MemberSpec); }
-<ReadBody,ReadNSBody,ReadBodyIntf>{BN}{1,80} { current->program += yytext ;
- lineCount() ;
+<ReadBody,ReadNSBody,ReadBodyIntf>{BN}{1,80} { yyextra->current->program += yytext ;
+ lineCount(yyscanner) ;
}
<ReadBodyIntf>"@end"/[^a-z_A-Z0-9] { // end of Objective C block
- current_root->moveToSubEntryAndRefresh( current ) ;
- initEntry();
- language = current->lang = SrcLangExt_Cpp; // see bug746361
- insideObjC=FALSE;
+ yyextra->current_root->moveToSubEntryAndRefresh( yyextra->current ) ;
+ initEntry(yyscanner);
+ yyextra->language = yyextra->current->lang = SrcLangExt_Cpp; // see bug746361
+ yyextra->insideObjC=FALSE;
BEGIN( FindMembers );
}
-<ReadBody,ReadNSBody,ReadBodyIntf>. { current->program += yytext ; }
+<ReadBody,ReadNSBody,ReadBodyIntf>. { yyextra->current->program += yytext ; }
<FindMembers>"("/{BN}*"::"*{BN}*({TSCOPE}{BN}*"::")*{TSCOPE}{BN}*")"{BN}*"(" | /* typedef void (A<int>::func_t)(args...) */
<FindMembers>("("({BN}*"::"*{BN}*{TSCOPE}{BN}*"::")*({BN}*[*&\^]{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) or int (*func(int))[], the ^ is for Obj-C blocks */
- if (insidePHP) // reference parameter
+ if (yyextra->insidePHP) // reference parameter
{
REJECT
}
else
{
- current->bodyLine = yyLineNr;
- lineCount();
- addType();
- funcPtrType=yytext;
- roundCount=0;
- //current->type += yytext;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ lineCount(yyscanner);
+ addType(yyscanner);
+ yyextra->funcPtrType=yytext;
+ yyextra->roundCount=0;
+ //yyextra->current->type += yytext;
BEGIN( FuncPtr );
}
}
<FuncPtr>{SCOPENAME} {
- current->name = yytext;
- if (nameIsOperator(current->name))
+ yyextra->current->name = yytext;
+ if (nameIsOperator(yyextra->current->name))
{
BEGIN( FuncPtrOperator );
}
else
{
- if (current->name=="const" || current->name=="volatile")
+ if (yyextra->current->name=="const" || yyextra->current->name=="volatile")
{
- funcPtrType += current->name;
+ yyextra->funcPtrType += yyextra->current->name;
}
else
{
@@ -4357,213 +3972,213 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FuncPtr>. {
- //printf("error: FuncPtr '%c' unexpected at line %d of %s\n",*yytext,yyLineNr,yyFileName);
+ //printf("error: FuncPtr '%c' unexpected at line %d of %s\n",*yytext,yyextra->yyLineNr,yyextra->yyFileName);
}
<FuncPtrOperator>"("{BN}*")"{BN}*/"(" {
- current->name += yytext;
- current->name = current->name.simplifyWhiteSpace();
- lineCount();
+ yyextra->current->name += yytext;
+ yyextra->current->name = yyextra->current->name.simplifyWhiteSpace();
+ lineCount(yyscanner);
}
<FuncPtrOperator>\n {
- lineCount();
- current->name += *yytext;
+ lineCount(yyscanner);
+ yyextra->current->name += *yytext;
}
<FuncPtrOperator>"(" {
unput(*yytext);
BEGIN( EndFuncPtr );
}
<FuncPtrOperator>. {
- current->name += *yytext;
+ yyextra->current->name += *yytext;
}
<EndFuncPtr>")"{BN}*/";" { // a variable with extra braces
- lineCount();
- current->type+=funcPtrType.data()+1;
+ lineCount(yyscanner);
+ yyextra->current->type+=yyextra->funcPtrType.data()+1;
BEGIN(FindMembers);
}
<EndFuncPtr>")"{BN}*/"(" { // a function pointer
- lineCount();
- current->type+=funcPtrType+")";
+ lineCount(yyscanner);
+ yyextra->current->type+=yyextra->funcPtrType+")";
BEGIN(FindMembers);
}
<EndFuncPtr>")"{BN}*/"[" { // an array of variables
- lineCount();
- current->type+=funcPtrType.data();
- current->args += ")";
+ lineCount(yyscanner);
+ yyextra->current->type+=yyextra->funcPtrType.data();
+ yyextra->current->args += ")";
BEGIN(FindMembers);
}
<EndFuncPtr>"(" { // a function returning a function or
// a function returning a pointer to an array
- current->args += *yytext ;
- //roundCount=0;
+ yyextra->current->args += *yytext ;
+ //yyextra->roundCount=0;
//BEGIN( FuncFunc );
- current->bodyLine = yyLineNr;
- currentArgumentContext = FuncFuncEnd;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->currentArgumentContext = FuncFuncEnd;
+ yyextra->fullArgString=yyextra->current->args.copy();
+ yyextra->copyArgString=&yyextra->current->args;
BEGIN( ReadFuncArgType ) ;
}
<EndFuncPtr>"["[^\n\]]*"]" {
- funcPtrType+=yytext;
+ yyextra->funcPtrType+=yytext;
}
<EndFuncPtr>")" {
BEGIN(FindMembers);
}
<FuncFunc>"(" {
- current->args += *yytext ;
- ++roundCount;
+ yyextra->current->args += *yytext ;
+ ++yyextra->roundCount;
}
<FuncFunc>")" {
- current->args += *yytext ;
- if ( roundCount )
- --roundCount;
+ yyextra->current->args += *yytext ;
+ if ( yyextra->roundCount )
+ --yyextra->roundCount;
else
{
BEGIN(FuncFuncEnd);
}
}
<FuncFuncEnd>")"{BN}*"(" {
- lineCount();
- current->type+=funcPtrType+")(";
+ lineCount(yyscanner);
+ yyextra->current->type+=yyextra->funcPtrType+")(";
BEGIN(FuncFuncType);
}
<FuncFuncEnd>")"{BN}*/[;{] {
- lineCount();
- current->type+=funcPtrType.data()+1;
+ lineCount(yyscanner);
+ yyextra->current->type+=yyextra->funcPtrType.data()+1;
BEGIN(Function);
}
<FuncFuncEnd>")"{BN}*/"[" { // function returning a pointer to an array
- lineCount();
- current->type+=funcPtrType;
- current->args+=")";
+ lineCount(yyscanner);
+ yyextra->current->type+=yyextra->funcPtrType;
+ yyextra->current->args+=")";
BEGIN(FuncFuncArray);
}
<FuncFuncEnd>. {
- current->args += *yytext;
+ yyextra->current->args += *yytext;
}
<FuncFuncType>"(" {
- current->type += *yytext;
- roundCount++;
+ yyextra->current->type += *yytext;
+ yyextra->roundCount++;
}
<FuncFuncType>")" {
- current->type += *yytext;
- if (roundCount)
- --roundCount;
+ yyextra->current->type += *yytext;
+ if (yyextra->roundCount)
+ --yyextra->roundCount;
else
BEGIN(Function);
}
-<FuncFuncType>{BN}*","{BN}* { lineCount() ; current->type += ", " ; }
-<FuncFuncType>{BN}+ { lineCount() ; current->type += ' ' ; }
+<FuncFuncType>{BN}*","{BN}* { lineCount(yyscanner) ; yyextra->current->type += ", " ; }
+<FuncFuncType>{BN}+ { lineCount(yyscanner) ; yyextra->current->type += ' ' ; }
<FuncFuncType>. {
- current->type += *yytext;
+ yyextra->current->type += *yytext;
}
<FindMembers>"("/{BN}*{ID}{BN}*"*"{BN}*{ID}*")"{BN}*"(" { // for catching typedef void (__stdcall *f)() like definitions
- if (current->type.left(7)=="typedef" && current->bodyLine==-1)
+ if (yyextra->current->type.left(7)=="typedef" && yyextra->current->bodyLine==-1)
// the bodyLine check is to prevent this guard to be true more than once
{
- current->bodyLine = yyLineNr;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
BEGIN( GetCallType );
}
- else if (!current->name.isEmpty()) // normal function
+ else if (!yyextra->current->name.isEmpty()) // normal function
{
- current->args = yytext;
- current->bodyLine = yyLineNr;
- currentArgumentContext = FuncQual;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
+ yyextra->current->args = yytext;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->currentArgumentContext = FuncQual;
+ yyextra->fullArgString=yyextra->current->args.copy();
+ yyextra->copyArgString=&yyextra->current->args;
BEGIN( ReadFuncArgType ) ;
//printf(">>> Read function arguments!\n");
}
}
<GetCallType>{BN}*{ID}{BN}*"*" {
- lineCount();
- addType();
- funcPtrType="(";
- funcPtrType+=yytext;
- roundCount=0;
+ lineCount(yyscanner);
+ addType(yyscanner);
+ yyextra->funcPtrType="(";
+ yyextra->funcPtrType+=yytext;
+ yyextra->roundCount=0;
BEGIN( FuncPtr );
}
<FindMembers>"(" {
- if (!current->name.isEmpty())
+ if (!yyextra->current->name.isEmpty())
{
- current->args = yytext;
- current->bodyLine = yyLineNr;
- currentArgumentContext = FuncQual;
- fullArgString=current->args.copy();
- copyArgString=&current->args;
+ yyextra->current->args = yytext;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->currentArgumentContext = FuncQual;
+ yyextra->fullArgString=yyextra->current->args.copy();
+ yyextra->copyArgString=&yyextra->current->args;
BEGIN( ReadFuncArgType ) ;
- //printf(">>> Read function arguments current->argList->count()=%d\n",current->argList->count());
+ //printf(">>> Read function arguments yyextra->current->argList.size()=%d\n",yyextra->current->argList.size());
}
}
/*
<FindMembers>"("{BN}*("void"{BN}*)?")" {
- lineCount();
- current->args = "()";
+ lineCount(yyscanner);
+ yyextra->current->args = "()";
BEGIN( FuncQual );
}
*/
/*- Function argument reading rules ---------------------------------------*/
-<ReadFuncArgType>[^ \/\r\t\n\)\(\"\'#]+ { *copyArgString+=yytext;
- fullArgString+=yytext;
+<ReadFuncArgType>[^ \/\r\t\n\)\(\"\'#]+ { *yyextra->copyArgString+=yytext;
+ yyextra->fullArgString+=yytext;
}
-<CopyArgString,CopyArgPHPString>[^\n\\\"\']+ { *copyArgString+=yytext;
- fullArgString+=yytext;
+<CopyArgString,CopyArgPHPString>[^\n\\\"\']+ { *yyextra->copyArgString+=yytext;
+ yyextra->fullArgString+=yytext;
}
<CopyArgRound>[^\/\n\)\(\"\']+ {
- *copyArgString+=yytext;
- fullArgString+=yytext;
+ *yyextra->copyArgString+=yytext;
+ yyextra->fullArgString+=yytext;
}
<ReadFuncArgType,ReadTempArgs>{BN}* {
- *copyArgString+=" ";
- fullArgString+=" ";
- lineCount();
+ *yyextra->copyArgString+=" ";
+ yyextra->fullArgString+=" ";
+ lineCount(yyscanner);
}
<ReadFuncArgType,CopyArgRound,CopyArgSharp,ReadTempArgs>{RAWBEGIN} {
- g_delimiter = yytext+2;
- g_delimiter=g_delimiter.left(g_delimiter.length()-1);
- lastRawStringContext = YY_START;
- pCopyRawString = copyArgString;
- *pCopyRawString+=yytext;
- fullArgString+=yytext;
+ yyextra->delimiter = yytext+2;
+ yyextra->delimiter=yyextra->delimiter.left(yyextra->delimiter.length()-1);
+ yyextra->lastRawStringContext = YY_START;
+ yyextra->pCopyRawString = yyextra->copyArgString;
+ *yyextra->pCopyRawString+=yytext;
+ yyextra->fullArgString+=yytext;
BEGIN(RawString);
}
<ReadFuncArgType,CopyArgRound,CopyArgSharp,ReadTempArgs>\" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- lastCopyArgStringContext = YY_START;
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ yyextra->lastCopyArgStringContext = YY_START;
BEGIN( CopyArgString );
}
<ReadFuncArgType,ReadTempArgs>"(" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- argRoundCount=0;
- lastCopyArgContext = YY_START;
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ yyextra->argRoundCount=0;
+ yyextra->lastCopyArgContext = YY_START;
BEGIN( CopyArgRound );
}
<ReadFuncArgType>")" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- stringToArgumentList(fullArgString,current->argList);
- if (insideJS)
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ stringToArgumentList(yyextra->fullArgString,yyextra->current->argList);
+ if (yyextra->insideJS)
{
- fixArgumentListForJavaScript(current->argList);
+ fixArgumentListForJavaScript(yyextra->current->argList);
}
- handleParametersCommentBlocks(current->argList);
+ handleParametersCommentBlocks(yyscanner,yyextra->current->argList);
- /* remember the current documentation block, since
+ /* remember the yyextra->current documentation block, since
we could overwrite it with the documentation of
a function argument, which we then have to correct later
on
*/
- docBackup = current->doc;
- briefBackup = current->brief;
+ yyextra->docBackup = yyextra->current->doc;
+ yyextra->briefBackup = yyextra->current->brief;
- BEGIN( currentArgumentContext );
+ BEGIN( yyextra->currentArgumentContext );
}
/* a special comment */
<ReadFuncArgType,ReadTempArgs>("/*"[*!]|"//"[/!])("<"?) {
- if (currentArgumentContext==DefineEnd)
+ if (yyextra->currentArgumentContext==DefineEnd)
{
// for defines we interpret a comment
// as documentation for the define
@@ -4571,17 +4186,17 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{
unput(yytext[i]);
}
- stringToArgumentList(fullArgString,current->argList);
- handleParametersCommentBlocks(current->argList);
- BEGIN( currentArgumentContext );
+ stringToArgumentList(yyextra->fullArgString,yyextra->current->argList);
+ handleParametersCommentBlocks(yyscanner,yyextra->current->argList);
+ BEGIN( yyextra->currentArgumentContext );
}
else // not a define
{
// for functions we interpret a comment
// as documentation for the argument
- fullArgString+=yytext;
- lastCopyArgChar=0;
- lastCommentInArgContext=YY_START;
+ yyextra->fullArgString+=yytext;
+ yyextra->lastCopyArgChar=0;
+ yyextra->lastCommentInArgContext=YY_START;
if (yytext[1]=='/')
BEGIN( CopyArgCommentLine );
else
@@ -4591,30 +4206,30 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
/* a non-special comment */
<ReadFuncArgType,ReadTempArgs>"/**/" { /* empty comment */ }
<ReadFuncArgType,ReadTempArgs>"/*" {
- lastCContext = YY_START;
+ yyextra->lastCContext = YY_START;
BEGIN( SkipComment );
}
<ReadFuncArgType,ReadTempArgs>"//" {
- lastCContext = YY_START;
+ yyextra->lastCContext = YY_START;
BEGIN( SkipCxxComment );
}
/*
-<ReadFuncArgType,ReadTempArgs>"'#" { if (insidePHP)
+<ReadFuncArgType,ReadTempArgs>"'#" { if (yyextra->insidePHP)
REJECT;
- *copyArgString+=yytext;
- fullArgString+=yytext;
+ *yyextra->copyArgString+=yytext;
+ yyextra->fullArgString+=yytext;
}
<ReadFuncArgType,ReadTempArgs>"#" {
- if (!insidePHP)
+ if (!yyextra->insidePHP)
REJECT;
- lastCContext = YY_START;
+ yyextra->lastCContext = YY_START;
BEGIN( SkipCxxComment );
}
*/
/* ')' followed by a special comment */
<ReadFuncArgType>")"{BN}*("/*"[*!]|"//"[/!])"<" {
- lineCount();
- if (currentArgumentContext==DefineEnd)
+ lineCount(yyscanner);
+ if (yyextra->currentArgumentContext==DefineEnd)
{
// for defines we interpret a comment
// as documentation for the define
@@ -4622,21 +4237,21 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{
unput(yytext[i]);
}
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- stringToArgumentList(fullArgString,current->argList);
- handleParametersCommentBlocks(current->argList);
- BEGIN( currentArgumentContext );
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ stringToArgumentList(yyextra->fullArgString,yyextra->current->argList);
+ handleParametersCommentBlocks(yyscanner,yyextra->current->argList);
+ BEGIN( yyextra->currentArgumentContext );
}
else
{
// for functions we interpret a comment
- // as documentation for the last argument
- lastCopyArgChar=*yytext;
+ // as documentation for the yyextra->last argument
+ yyextra->lastCopyArgChar=*yytext;
QCString text=&yytext[1];
text=text.stripWhiteSpace();
- lastCommentInArgContext=YY_START;
- fullArgString+=text;
+ yyextra->lastCommentInArgContext=YY_START;
+ yyextra->fullArgString+=text;
if (text.find("//")!=-1)
BEGIN( CopyArgCommentLine );
else
@@ -4644,152 +4259,152 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<CopyArgComment>^{B}*"*"+/{BN}+
-<CopyArgComment>[^\n\\\@\*]+ { fullArgString+=yytext; }
-<CopyArgComment>"*/" { fullArgString+=yytext;
- if (lastCopyArgChar!=0)
- unput(lastCopyArgChar);
- BEGIN( lastCommentInArgContext );
- }
-<CopyArgCommentLine>\n { fullArgString+=yytext;
- lineCount();
- if (lastCopyArgChar!=0)
- unput(lastCopyArgChar);
- BEGIN( lastCommentInArgContext );
+<CopyArgComment>[^\n\\\@\*]+ { yyextra->fullArgString+=yytext; }
+<CopyArgComment>"*/" { yyextra->fullArgString+=yytext;
+ if (yyextra->lastCopyArgChar!=0)
+ unput(yyextra->lastCopyArgChar);
+ BEGIN( yyextra->lastCommentInArgContext );
+ }
+<CopyArgCommentLine>\n { yyextra->fullArgString+=yytext;
+ lineCount(yyscanner);
+ if (yyextra->lastCopyArgChar!=0)
+ unput(yyextra->lastCopyArgChar);
+ BEGIN( yyextra->lastCommentInArgContext );
}
<CopyArgCommentLine>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
- docBlockName=&yytext[1];
- fullArgString+=yytext;
+ yyextra->docBlockName=&yytext[1];
+ yyextra->fullArgString+=yytext;
BEGIN(CopyArgVerbatim);
}
<CopyArgCommentLine>{CMD}("f$"|"f["|"f{") {
- docBlockName=&yytext[1];
- if (docBlockName.at(1)=='[')
+ yyextra->docBlockName=&yytext[1];
+ if (yyextra->docBlockName.at(1)=='[')
{
- docBlockName.at(1)='}';
+ yyextra->docBlockName.at(1)='}';
}
- if (docBlockName.at(1)=='{')
+ if (yyextra->docBlockName.at(1)=='{')
{
- docBlockName.at(1)='}';
+ yyextra->docBlockName.at(1)='}';
}
- fullArgString+=yytext;
+ yyextra->fullArgString+=yytext;
BEGIN(CopyArgVerbatim);
}
<CopyArgVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"enddot"|"endcode"|"f$"|"f]"|"f}")/[^a-z_A-Z0-9\-] { // end of verbatim block
- fullArgString+=yytext;
+ yyextra->fullArgString+=yytext;
if (yytext[1]=='f') // end of formula
{
BEGIN(CopyArgCommentLine);
}
- if (&yytext[4]==docBlockName)
+ if (&yytext[4]==yyextra->docBlockName)
{
BEGIN(CopyArgCommentLine);
}
}
-<CopyArgCommentLine>[^\\\@\n]+ { fullArgString+=yytext; }
-<CopyArgCommentLine>. { fullArgString+=*yytext; }
-<CopyArgComment,CopyArgVerbatim>\n { fullArgString+=*yytext; lineCount(); }
-<CopyArgComment,CopyArgVerbatim>. { fullArgString+=*yytext; }
+<CopyArgCommentLine>[^\\\@\n]+ { yyextra->fullArgString+=yytext; }
+<CopyArgCommentLine>. { yyextra->fullArgString+=*yytext; }
+<CopyArgComment,CopyArgVerbatim>\n { yyextra->fullArgString+=*yytext; lineCount(yyscanner); }
+<CopyArgComment,CopyArgVerbatim>. { yyextra->fullArgString+=*yytext; }
<CopyArgComment>{CMD}("brief"|"short"){B}+ {
- warn(yyFileName,yyLineNr,
- "Ignoring %cbrief command inside argument documentation",*yytext
+ warn(yyextra->yyFileName,yyextra->yyLineNr,
+ "Ignoring %cbrief command yyextra->inside argument documentation",*yytext
);
- fullArgString+=' ';
+ yyextra->fullArgString+=' ';
}
<ReadTempArgs>"<" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- argSharpCount=1;
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ yyextra->argSharpCount=1;
BEGIN( CopyArgSharp );
}
<ReadTempArgs>">" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- //printf("end template list %s\n",copyArgString->data());
- stringToArgumentList(fullArgString,currentArgumentList);
- BEGIN( currentArgumentContext );
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ //printf("end template list '%s'\n",yyextra->copyArgString->data());
+ stringToArgumentList(yyextra->fullArgString,*yyextra->currentArgumentList);
+ BEGIN( yyextra->currentArgumentContext );
}
<CopyArgRound>"(" {
- argRoundCount++;
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
+ yyextra->argRoundCount++;
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
}
<CopyArgRound>")" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- if (argRoundCount>0)
- argRoundCount--;
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ if (yyextra->argRoundCount>0)
+ yyextra->argRoundCount--;
else
- BEGIN( lastCopyArgContext );
+ BEGIN( yyextra->lastCopyArgContext );
}
<CopyArgSharp>"(" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- argRoundCount=0;
- lastCopyArgContext = YY_START;
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ yyextra->argRoundCount=0;
+ yyextra->lastCopyArgContext = YY_START;
BEGIN( CopyArgRound );
}
<CopyArgSharp>"<" {
- argSharpCount++;
- //printf("argSharpCount++=%d copy\n",argSharpCount);
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
+ yyextra->argSharpCount++;
+ //printf("yyextra->argSharpCount++=%d copy\n",yyextra->argSharpCount);
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
}
<CopyArgSharp>">" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- argSharpCount--;
- if (argSharpCount>0)
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ yyextra->argSharpCount--;
+ if (yyextra->argSharpCount>0)
{
- //printf("argSharpCount--=%d copy\n",argSharpCount);
+ //printf("yyextra->argSharpCount--=%d copy\n",yyextra->argSharpCount);
}
else
{
BEGIN( ReadTempArgs );
- //printf("end of argSharpCount\n");
+ //printf("end of yyextra->argSharpCount\n");
}
}
<CopyArgString,CopyArgPHPString>\\. {
- *copyArgString+=yytext;
- fullArgString+=yytext;
+ *yyextra->copyArgString+=yytext;
+ yyextra->fullArgString+=yytext;
}
<CopyArgString>\" {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- BEGIN( lastCopyArgStringContext );
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ BEGIN( yyextra->lastCopyArgStringContext );
}
<CopyArgPHPString>\' {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
- BEGIN( lastCopyArgStringContext );
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
+ BEGIN( yyextra->lastCopyArgStringContext );
}
<ReadFuncArgType,ReadTempArgs,CopyArgRound,CopyArgSharp>{CHARLIT} {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
REJECT;
}
else
{
- *copyArgString+=yytext;
- fullArgString+=yytext;
+ *yyextra->copyArgString+=yytext;
+ yyextra->fullArgString+=yytext;
}
}
<ReadFuncArgType,ReadTempArgs,CopyArgRound,CopyArgSharp>\' {
- *copyArgString+=yytext;
- fullArgString+=yytext;
- if (insidePHP)
+ *yyextra->copyArgString+=yytext;
+ yyextra->fullArgString+=yytext;
+ if (yyextra->insidePHP)
{
- lastCopyArgStringContext=YY_START;
+ yyextra->lastCopyArgStringContext=YY_START;
BEGIN(CopyArgPHPString);
}
}
<ReadFuncArgType,ReadTempArgs,CopyArgString,CopyArgPHPString,CopyArgRound,CopyArgSharp>\n {
- lineCount();
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
+ lineCount(yyscanner);
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
}
<ReadFuncArgType,ReadTempArgs,CopyArgString,CopyArgPHPString,CopyArgRound,CopyArgSharp>. {
- *copyArgString+=*yytext;
- fullArgString+=*yytext;
+ *yyextra->copyArgString+=*yytext;
+ yyextra->fullArgString+=*yytext;
}
@@ -4797,29 +4412,29 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
/*------------------------------------------------------------------------*/
-<FuncRound>"(" { current->args += *yytext ;
- ++roundCount ;
+<FuncRound>"(" { yyextra->current->args += *yytext ;
+ ++yyextra->roundCount ;
}
-<FuncRound>")" { current->args += *yytext ;
- if ( roundCount )
- --roundCount ;
+<FuncRound>")" { yyextra->current->args += *yytext ;
+ if ( yyextra->roundCount )
+ --yyextra->roundCount ;
else
BEGIN( FuncQual ) ;
}
/*
-<FuncQual>"#" { if (insidePHP)
+<FuncQual>"#" { if (yyextra->insidePHP)
REJECT;
- lastCPPContext = YY_START;
+ yyextra->lastCPPContext = YY_START;
BEGIN(SkipCPP);
}
*/
<FuncQual>[{:;,] {
if ( qstrcmp(yytext,";")==0 &&
- insidePHP &&
- !containsWord(current->type,"function") )
+ yyextra->insidePHP &&
+ !containsWord(yyextra->current->type,"function") )
{
- current->reset();
- initEntry();
+ yyextra->current->reset();
+ initEntry(yyscanner);
BEGIN( FindMembers );
}
else
@@ -4828,89 +4443,89 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FuncQual>{BN}*"abstract"{BN}* { // pure virtual member function
- lineCount() ;
- current->virt = Pure;
- current->args += " override ";
+ lineCount(yyscanner) ;
+ yyextra->current->virt = Pure;
+ yyextra->current->args += " override ";
}
<FuncQual,TrailingReturn>{BN}*"override"{BN}* { // C++11 overridden virtual member function
- lineCount() ;
- current->spec |= Entry::Override;
- current->args += " override ";
+ lineCount(yyscanner) ;
+ yyextra->current->spec |= Entry::Override;
+ yyextra->current->args += " override ";
BEGIN(FuncQual);
}
<FuncQual,TrailingReturn>{BN}*"final"{BN}* { // C++11 final method
- lineCount() ;
- current->spec |= Entry::Final;
- current->args += " final ";
+ lineCount(yyscanner) ;
+ yyextra->current->spec |= Entry::Final;
+ yyextra->current->args += " final ";
BEGIN(FuncQual);
}
<FuncQual>{BN}*"sealed"{BN}* { // sealed member function
- lineCount() ;
- current->spec |= Entry::Sealed;
- current->args += " sealed ";
+ lineCount(yyscanner) ;
+ yyextra->current->spec |= Entry::Sealed;
+ yyextra->current->args += " sealed ";
}
<FuncQual>{BN}*"new"{BN}* { // new member function
- lineCount() ;
- current->spec |= Entry::New;
- current->args += " new ";
+ lineCount(yyscanner) ;
+ yyextra->current->spec |= Entry::New;
+ yyextra->current->args += " new ";
}
<FuncQual>{BN}*"const"{BN}* { // const member function
- lineCount() ;
- current->args += " const ";
- current->argList->constSpecifier=TRUE;
+ lineCount(yyscanner) ;
+ yyextra->current->args += " const ";
+ yyextra->current->argList.constSpecifier=TRUE;
}
<FuncQual>{BN}*"volatile"{BN}* { // volatile member function
- lineCount() ;
- current->args += " volatile ";
- current->argList->volatileSpecifier=TRUE;
+ lineCount(yyscanner) ;
+ yyextra->current->args += " volatile ";
+ yyextra->current->argList.volatileSpecifier=TRUE;
}
<FuncQual>{BN}*"noexcept"{BN}* { // noexcept qualifier
- lineCount() ;
- current->args += " noexcept ";
- current->spec |= Entry::NoExcept;
+ lineCount(yyscanner) ;
+ yyextra->current->args += " noexcept ";
+ yyextra->current->spec |= Entry::NoExcept;
}
<FuncQual>{BN}*"noexcept"{BN}*"(" { // noexcept expression
- lineCount() ;
- current->args += " noexcept(";
- current->spec |= Entry::NoExcept;
- lastRoundContext=FuncQual;
- pCopyRoundString=&current->args;
- roundCount=0;
+ lineCount(yyscanner) ;
+ yyextra->current->args += " noexcept(";
+ yyextra->current->spec |= Entry::NoExcept;
+ yyextra->lastRoundContext=FuncQual;
+ yyextra->pCopyRoundString=&yyextra->current->args;
+ yyextra->roundCount=0;
BEGIN(CopyRound);
}
<FuncQual>{BN}*"&" {
- current->args += " &";
- current->argList->refQualifier=RefQualifierLValue;
+ yyextra->current->args += " &";
+ yyextra->current->argList.refQualifier=RefQualifierLValue;
}
<FuncQual>{BN}*"&&" {
- current->args += " &&";
- current->argList->refQualifier=RefQualifierRValue;
+ yyextra->current->args += " &&";
+ yyextra->current->argList.refQualifier=RefQualifierRValue;
}
<FuncQual,TrailingReturn>{BN}*"="{BN}*"0"{BN}* { // pure virtual member function
- lineCount() ;
- current->args += " = 0";
- current->virt = Pure;
- current->argList->pureSpecifier=TRUE;
+ lineCount(yyscanner) ;
+ yyextra->current->args += " = 0";
+ yyextra->current->virt = Pure;
+ yyextra->current->argList.pureSpecifier=TRUE;
BEGIN(FuncQual);
}
<FuncQual,TrailingReturn>{BN}*"="{BN}*"delete"{BN}* { // C++11 explicitly delete member
- lineCount();
- current->args += " = delete";
- current->spec |= Entry::Delete;
- current->argList->isDeleted=TRUE;
+ lineCount(yyscanner);
+ yyextra->current->args += " = delete";
+ yyextra->current->spec |= Entry::Delete;
+ yyextra->current->argList.isDeleted=TRUE;
BEGIN(FuncQual);
}
<FuncQual,TrailingReturn>{BN}*"="{BN}*"default"{BN}* { // C++11 explicitly defaulted constructor/assignment operator
- lineCount();
- current->args += " = default";
- current->spec |= Entry::Default;
+ lineCount(yyscanner);
+ yyextra->current->args += " = default";
+ yyextra->current->spec |= Entry::Default;
BEGIN(FuncQual);
}
<FuncQual>{BN}*"->"{BN}* {
- lineCount();
- current->argList->trailingReturnType = " -> ";
- current->args += " -> ";
+ lineCount(yyscanner);
+ yyextra->current->argList.trailingReturnType = " -> ";
+ yyextra->current->args += " -> ";
BEGIN(TrailingReturn);
}
<TrailingReturn>[{;] {
@@ -4918,30 +4533,30 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FuncQual);
}
<TrailingReturn>. {
- current->argList->trailingReturnType+=yytext;
- current->args+=yytext;
+ yyextra->current->argList.trailingReturnType+=yytext;
+ yyextra->current->args+=yytext;
}
<TrailingReturn>\n {
- lineCount();
- current->argList->trailingReturnType+=yytext;
- current->args+=' ';
+ lineCount(yyscanner);
+ yyextra->current->argList.trailingReturnType+=yytext;
+ yyextra->current->args+=' ';
}
<FuncRound,FuncFunc>{BN}*","{BN}* {
- lineCount() ;
- current->args += ", " ;
+ lineCount(yyscanner) ;
+ yyextra->current->args += ", " ;
}
<FuncQual,FuncRound,FuncFunc>{BN}+ {
- lineCount() ;
- current->args += ' ' ;
+ lineCount(yyscanner) ;
+ yyextra->current->args += ' ' ;
}
-<Function,FuncQual,FuncRound,FuncFunc>"#" { if (insidePHP)
+<Function,FuncQual,FuncRound,FuncFunc>"#" { if (yyextra->insidePHP)
REJECT;
- lastCPPContext = YY_START;
+ yyextra->lastCPPContext = YY_START;
BEGIN(SkipCPP);
}
<FuncQual>"=" {
- if (insideCli &&
- (current_root->section&Entry::COMPOUND_MASK)
+ if (yyextra->insideCli &&
+ (yyextra->current_root->section&Entry::COMPOUND_MASK)
)
{
BEGIN(CliOverride);
@@ -4949,9 +4564,9 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
else
{
// typically an initialized function pointer
- lastInitializerContext=YY_START;
- initBracketCount=0;
- current->initializer = yytext;
+ yyextra->lastInitializerContext=YY_START;
+ yyextra->initBracketCount=0;
+ yyextra->current->initializer = yytext;
BEGIN(ReadInitializer);
}
}
@@ -4962,7 +4577,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FuncQual);
}
<CliOverride>\n {
- lineCount();
+ lineCount(yyscanner);
}
<CliOverride>. {
}
@@ -4971,93 +4586,96 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FuncQual);
}
<FuncPtrInit>\" {
- current->args += *yytext;
- pCopyQuotedString=&current->args;
- lastStringContext=FuncPtrInit;
+ yyextra->current->args += *yytext;
+ yyextra->pCopyQuotedString=&yyextra->current->args;
+ yyextra->lastStringContext=FuncPtrInit;
BEGIN(CopyString);
}
<FuncPtrInit>\' {
- current->args += *yytext;
- if (insidePHP)
+ yyextra->current->args += *yytext;
+ if (yyextra->insidePHP)
{
- pCopyQuotedString=&current->args;
- lastStringContext=FuncPtrInit;
+ yyextra->pCopyQuotedString=&yyextra->current->args;
+ yyextra->lastStringContext=FuncPtrInit;
BEGIN(CopyPHPString);
}
}
<FuncPtrInit>{CHARLIT} {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
REJECT;
}
else
{
- current->args += yytext;
+ yyextra->current->args += yytext;
}
}
<FuncPtrInit>{ID} {
- current->args += yytext;
+ yyextra->current->args += yytext;
}
<FuncPtrInit>. {
- current->args += *yytext;
+ yyextra->current->args += *yytext;
}
<FuncPtrInit>\n {
- current->args += *yytext;
- lineCount();
+ yyextra->current->args += *yytext;
+ lineCount(yyscanner);
}
<FuncQual>{ID} { // typically a K&R style C function
- if (insideCS && qstrcmp(yytext,"where")==0)
+ if (yyextra->insideCS && qstrcmp(yytext,"where")==0)
{
// type constraint for a method
- delete current->typeConstr;
- current->typeConstr = new ArgumentList;
- current->typeConstr->append(new Argument);
- lastCSConstraint = YY_START;
+ yyextra->current->typeConstr.clear();
+ yyextra->current->typeConstr.push_back(Argument());
+ yyextra->lastCSConstraint = YY_START;
BEGIN( CSConstraintName );
}
- else if (checkForKnRstyleC())
+ else if (checkForKnRstyleC(yyscanner))
{
- current->args = yytext;
- oldStyleArgType.resize(0);
+ yyextra->current->args = yytext;
+ yyextra->oldStyleArgType.resize(0);
BEGIN(OldStyleArgs);
}
else
{
- current->args += yytext;
+ yyextra->current->args += yytext;
}
}
<OldStyleArgs>[,;] {
QCString oldStyleArgPtr;
QCString oldStyleArgName;
- splitKnRArg(oldStyleArgPtr,oldStyleArgName);
+ splitKnRArg(yyscanner,oldStyleArgPtr,oldStyleArgName);
QCString doc,brief;
- if (current->doc!=docBackup)
+ if (yyextra->current->doc!=yyextra->docBackup)
{
- doc=current->doc.copy();
- current->doc=docBackup;
+ doc=yyextra->current->doc.copy();
+ yyextra->current->doc=yyextra->docBackup;
}
- if (current->brief!=briefBackup)
+ if (yyextra->current->brief!=yyextra->briefBackup)
{
- brief=current->brief.copy();
- current->brief=briefBackup;
+ brief=yyextra->current->brief.copy();
+ yyextra->current->brief=yyextra->briefBackup;
}
- addKnRArgInfo(oldStyleArgType+oldStyleArgPtr,
+ addKnRArgInfo(yyscanner,yyextra->oldStyleArgType+oldStyleArgPtr,
oldStyleArgName,brief,doc);
- current->args.resize(0);
- if (*yytext==';') oldStyleArgType.resize(0);
+ yyextra->current->args.resize(0);
+ if (*yytext==';') yyextra->oldStyleArgType.resize(0);
}
-<OldStyleArgs>{ID} { current->args += yytext; }
+<OldStyleArgs>{ID} { yyextra->current->args += yytext; }
<OldStyleArgs>"{" {
- current->args = argListToString(current->argList);
+ if (yyextra->current->argList.empty())
+ {
+ yyextra->current->argList.noParameters=TRUE;
+ }
+ yyextra->current->args = argListToString(yyextra->current->argList);
unput('{');
BEGIN(FuncQual);
}
-<OldStyleArgs>. { current->args += *yytext; }
-<FuncQual,FuncRound,FuncFunc>. { current->args += *yytext; }
+<OldStyleArgs>. { yyextra->current->args += *yytext; }
+<FuncQual,FuncRound,FuncFunc>. { yyextra->current->args += *yytext; }
<FuncQual>{BN}*"try:" |
<FuncQual>{BN}*"try"{BN}+ { /* try-function-block */
- insideTryBlock=TRUE;
- lineCount();
+ yyextra->insideTryBlock=TRUE;
+ lineCount(yyscanner);
if (yytext[yyleng-1]==':')
{
unput(':');
@@ -5065,33 +4683,33 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<FuncQual>{BN}*"throw"{BN}*"(" { // C++ style throw clause
- current->exception = " throw (" ;
- roundCount=0;
- lineCount() ;
+ yyextra->current->exception = " throw (" ;
+ yyextra->roundCount=0;
+ lineCount(yyscanner) ;
BEGIN( ExcpRound ) ;
}
<FuncQual>{BN}*"raises"{BN}*"(" {
- current->exception = " raises (" ;
- lineCount() ;
- roundCount=0;
+ yyextra->current->exception = " raises (" ;
+ lineCount(yyscanner) ;
+ yyextra->roundCount=0;
BEGIN( ExcpRound ) ;
}
<FuncQual>{BN}*"throws"{BN}+ { // Java style throw clause
- current->exception = " throws " ;
- lineCount() ;
+ yyextra->current->exception = " throws " ;
+ lineCount(yyscanner) ;
BEGIN( ExcpList );
}
-<ExcpRound>"(" { current->exception += *yytext ;
- ++roundCount ;
+<ExcpRound>"(" { yyextra->current->exception += *yytext ;
+ ++yyextra->roundCount ;
}
-<ExcpRound>")" { current->exception += *yytext ;
- if ( roundCount )
- --roundCount ;
+<ExcpRound>")" { yyextra->current->exception += *yytext ;
+ if ( yyextra->roundCount )
+ --yyextra->roundCount ;
else
BEGIN( FuncQual ) ;
}
<ExcpRound>. {
- current->exception += *yytext;
+ yyextra->current->exception += *yytext;
}
<ExcpList>"{" {
unput('{'); BEGIN( FuncQual );
@@ -5100,101 +4718,101 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
unput(';'); BEGIN( FuncQual );
}
<ExcpList>"\n" {
- current->exception += ' ';
- lineCount();
+ yyextra->current->exception += ' ';
+ lineCount(yyscanner);
}
<ExcpList>. {
- current->exception += *yytext;
+ yyextra->current->exception += *yytext;
}
-<Function>"(" { current->type += current->name ;
- current->name = current->args ;
- current->args = yytext ;
- roundCount=0;
+<Function>"(" { yyextra->current->type += yyextra->current->name ;
+ yyextra->current->name = yyextra->current->args ;
+ yyextra->current->args = yytext ;
+ yyextra->roundCount=0;
BEGIN( FuncRound ) ;
}
<Function>":" {
- if (!insidePHP) BEGIN(SkipInits);
+ if (!yyextra->insidePHP) BEGIN(SkipInits);
}
<Function>[;{,] {
- current->name=current->name.simplifyWhiteSpace();
- current->type=current->type.simplifyWhiteSpace();
- current->args=removeRedundantWhiteSpace(current->args);
- // was: current->args.simplifyWhiteSpace();
- current->fileName = yyFileName;
- current->startLine = yyBegLineNr;
- current->startColumn = yyBegColNr;
+ yyextra->current->name=yyextra->current->name.simplifyWhiteSpace();
+ yyextra->current->type=yyextra->current->type.simplifyWhiteSpace();
+ yyextra->current->args=removeRedundantWhiteSpace(yyextra->current->args);
+ // was: yyextra->current->args.simplifyWhiteSpace();
+ yyextra->current->fileName = yyextra->yyFileName;
+ yyextra->current->startLine = yyextra->yyBegLineNr;
+ yyextra->current->startColumn = yyextra->yyBegColNr;
static QRegExp re("([^)]*[*&][^)]*)"); // (...*...)
- if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) )
+ if (*yytext!=';' || (yyextra->current_root->section&Entry::COMPOUND_MASK) )
{
- int tempArg=current->name.find('<');
- int ts=current->type.find('<');
- int te=current->type.findRev('>');
- int ti=current->type.find(re,0);
+ int tempArg=yyextra->current->name.find('<');
+ int ts=yyextra->current->type.find('<');
+ int te=yyextra->current->type.findRev('>');
+ int ti=yyextra->current->type.find(re,0);
// bug677315: A<int(void *, char *)> get(); is not a function pointer
bool isFunction = ti==-1 || // not a (...*...) pattern
(ts!=-1 && ts<te && ts<ti && ti<te); // (...*...) is part of a template argument list
//printf("type=%s ts=%d te=%d ti=%d isFunction=%d\n",
- // current->type.data(),ts,te,ti,isFunction);
+ // yyextra->current->type.data(),ts,te,ti,isFunction);
QCString tempName;
- if (tempArg==-1) tempName=current->name; else tempName=current->name.left(tempArg);
- if (!current->type.isEmpty() &&
- (!isFunction || current->type.left(8)=="typedef "))
+ if (tempArg==-1) tempName=yyextra->current->name; else tempName=yyextra->current->name.left(tempArg);
+ if (!yyextra->current->type.isEmpty() &&
+ (!isFunction || yyextra->current->type.left(8)=="typedef "))
{
- //printf("Scanner.l: found in class variable: '%s' '%s' '%s'\n", current->type.data(),current->name.data(),current->args.data());
- if (isTypedef && current->type.left(8)!="typedef ")
+ //printf("Scanner.l: found in class variable: '%s' '%s' '%s'\n", yyextra->current->type.data(),yyextra->current->name.data(),yyextra->current->args.data());
+ if (yyextra->isTypedef && yyextra->current->type.left(8)!="typedef ")
{
- current->type.prepend("typedef ");
+ yyextra->current->type.prepend("typedef ");
}
- current->section = Entry::VARIABLE_SEC ;
+ yyextra->current->section = Entry::VARIABLE_SEC ;
}
else
{
- //printf("Scanner.l: found in class function: '%s' '%s' '%s'\n", current->type.data(),current->name.data(),current->args.data());
- current->section = Entry::FUNCTION_SEC ;
- current->proto = *yytext==';';
+ //printf("Scanner.l: found in class function: '%s' '%s' '%s'\n", yyextra->current->type.data(),yyextra->current->name.data(),yyextra->current->args.data());
+ yyextra->current->section = Entry::FUNCTION_SEC ;
+ yyextra->current->proto = *yytext==';';
}
}
else // a global function prototype or function variable
{
- //printf("Scanner.l: prototype? type='%s' name='%s' args='%s'\n",current->type.data(),current->name.data(),current->args.data());
- if (!current->type.isEmpty() &&
- (current->type.find(re,0)!=-1 || current->type.left(8)=="typedef "))
+ //printf("Scanner.l: prototype? type='%s' name='%s' args='%s'\n",yyextra->current->type.data(),yyextra->current->name.data(),yyextra->current->args.data());
+ if (!yyextra->current->type.isEmpty() &&
+ (yyextra->current->type.find(re,0)!=-1 || yyextra->current->type.left(8)=="typedef "))
{
- if (isTypedef && current->type.left(8)!="typedef ")
+ if (yyextra->isTypedef && yyextra->current->type.left(8)!="typedef ")
{
- current->type.prepend("typedef ");
+ yyextra->current->type.prepend("typedef ");
}
//printf("Scanner.l: found function variable!\n");
- current->section = Entry::VARIABLE_SEC;
+ yyextra->current->section = Entry::VARIABLE_SEC;
}
else
{
//printf("Scanner.l: found prototype\n");
- current->section = Entry::FUNCTION_SEC;
- current->proto = TRUE;
+ yyextra->current->section = Entry::FUNCTION_SEC;
+ yyextra->current->proto = TRUE;
}
}
- //printf("Adding entry '%s'\n",current->name.data());
- if ( insidePHP)
+ //printf("Adding entry '%s'\n",yyextra->current->name.data());
+ if ( yyextra->insidePHP)
{
- if (findAndRemoveWord(current->type,"final"))
+ if (findAndRemoveWord(yyextra->current->type,"final"))
{
- current->spec |= Entry::Final;
+ yyextra->current->spec |= Entry::Final;
}
- if (findAndRemoveWord(current->type,"abstract"))
+ if (findAndRemoveWord(yyextra->current->type,"abstract"))
{
- current->spec |= Entry::Abstract;
+ yyextra->current->spec |= Entry::Abstract;
}
}
- if ( insidePHP && !containsWord(current->type,"function"))
+ if ( yyextra->insidePHP && !containsWord(yyextra->current->type,"function"))
{
- initEntry();
+ initEntry(yyscanner);
if ( *yytext == '{' )
{
- lastCurlyContext = FindMembers;
- curlyCount=0;
+ yyextra->lastCurlyContext = FindMembers;
+ yyextra->curlyCount=0;
BEGIN( SkipCurly );
}
else
@@ -5204,66 +4822,66 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
else
{
- if ( insidePHP)
+ if ( yyextra->insidePHP)
{
- findAndRemoveWord(current->type,"function");
+ findAndRemoveWord(yyextra->current->type,"function");
}
- previous = current.get();
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->previous = yyextra->current;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
// Objective C 2.0: Required/Optional section
- if (previous->spec & (Entry::Optional | Entry::Required))
+ if (yyextra->previous->spec & (Entry::Optional | Entry::Required))
{
- current->spec |= previous->spec & (Entry::Optional|Entry::Required);
+ yyextra->current->spec |= yyextra->previous->spec & (Entry::Optional|Entry::Required);
}
- lastCurlyContext = FindMembers;
+ yyextra->lastCurlyContext = FindMembers;
if ( *yytext == ',' )
{
- current->type = previous->type;
+ yyextra->current->type = yyextra->previous->type;
// we need to strip any trailing * and & (see bugs 623023 and 649103 for test cases)
- int i=current->type.length();
- while (i>0 && (current->type[i-1]=='*' || current->type[i-1]=='&' || current->type[i-1]==' ')) i--;
- current->type = current->type.left(i);
+ int i=yyextra->current->type.length();
+ while (i>0 && (yyextra->current->type[i-1]=='*' || yyextra->current->type[i-1]=='&' || yyextra->current->type[i-1]==' ')) i--;
+ yyextra->current->type = yyextra->current->type.left(i);
}
if ( *yytext == '{' )
{
- if ( !insidePHP && (current_root->section & Entry::COMPOUND_MASK) )
+ if ( !yyextra->insidePHP && (yyextra->current_root->section & Entry::COMPOUND_MASK) )
{
- previous->spec |= Entry::Inline;
+ yyextra->previous->spec |= Entry::Inline;
}
//addToBody(yytext);
- curlyCount=0;
+ yyextra->curlyCount=0;
BEGIN( SkipCurly ) ;
}
else
{
- if (previous->section!=Entry::VARIABLE_SEC)
- previous->bodyLine=-1; // a function/member declaration
+ if (yyextra->previous->section!=Entry::VARIABLE_SEC)
+ yyextra->previous->bodyLine=-1; // a function/member declaration
BEGIN( FindMembers ) ;
}
}
}
<SkipInits>">"{BN}*"{" { // C++11 style initializer (see bug 790788)
- lineCount();
- curlyCount=1;
+ lineCount(yyscanner);
+ yyextra->curlyCount=1;
BEGIN(SkipC11Inits);
}
<SkipInits>{ID}{BN}*"{" { // C++11 style initializer (see bug 688647)
- lineCount();
- curlyCount=1;
+ lineCount(yyscanner);
+ yyextra->curlyCount=1;
BEGIN(SkipC11Inits);
}
<SkipC11Inits>"{" {
- ++curlyCount;
+ ++yyextra->curlyCount;
}
<SkipC11Inits>"}" {
- if ( --curlyCount<=0 )
+ if ( --yyextra->curlyCount<=0 )
{
BEGIN(SkipInits);
}
}
<SkipC11Attribute>"]]" {
- BEGIN(lastC11AttributeContext);
+ BEGIN(yyextra->lastC11AttributeContext);
}
<SkipInits>"{" { // C++11 style initializer
unput('{');
@@ -5271,203 +4889,197 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
<SkipCurly>"{" {
//addToBody(yytext);
- ++curlyCount ;
+ ++yyextra->curlyCount ;
}
<SkipCurly>"}"/{BN}*("/*!"|"/**"|"//!"|"///")"<!--" | /* see bug710917 */
<SkipCurly>"}" {
//addToBody(yytext);
- if( curlyCount )
+ if( yyextra->curlyCount )
{
- --curlyCount ;
+ --yyextra->curlyCount ;
}
else
{
- if (current->sli && previous) // copy special list items
+ if (!yyextra->current->sli.empty() && yyextra->previous) // copy special list items
{
- QListIterator<ListItemInfo> li(*current->sli);
- ListItemInfo *lii;
- for (li.toFirst();(lii=li.current());++li)
- {
- previous->addSpecialListItem(lii->type,lii->itemId);
- }
- delete current->sli;
- current->sli = 0;
+ yyextra->previous->sli = yyextra->current->sli;
+ yyextra->current->sli.clear();
}
- if (previous) previous->endBodyLine=yyLineNr;
- BEGIN( lastCurlyContext ) ;
+ if (yyextra->previous) yyextra->previous->endBodyLine=yyextra->yyLineNr;
+ BEGIN( yyextra->lastCurlyContext ) ;
}
}
<SkipCurly>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" {
- lineCount();
- if ( curlyCount )
+ lineCount(yyscanner);
+ if ( yyextra->curlyCount )
{
//addToBody(yytext);
- --curlyCount ;
+ --yyextra->curlyCount ;
}
else
{
- current->endBodyLine=yyLineNr;
- // take previous out of current_root and move it into current
- current.swap(tempEntry); // remember current
- current_root->moveFromSubEntry(previous,current);
- previous = 0;
+ yyextra->current->endBodyLine=yyextra->yyLineNr;
+ // take yyextra->previous out of yyextra->current_root and move it into yyextra->current
+ yyextra->tempEntry = yyextra->current; // remember yyextra->current
+ yyextra->current_root->moveFromSubEntry(yyextra->previous.get(),yyextra->current);
+ yyextra->previous.reset();
- docBlockContext = SkipCurlyEndDoc;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
+ yyextra->docBlockContext = SkipCurlyEndDoc;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) );
- docBlock.resize(0);
- docBlockTerm = '}';
+ yyextra->docBlock.resize(0);
+ yyextra->docBlockTerm = '}';
if (yytext[yyleng-3]=='/')
{
- startCommentBlock(TRUE);
+ startCommentBlock(yyscanner,TRUE);
BEGIN( DocLine );
}
else
{
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
}
}
<SkipCurlyEndDoc>"}"{BN}*("/*!"|"/**"|"//!"|"///")"<" { // desc is followed by another one
- docBlockContext = SkipCurlyEndDoc;
- docBlockInBody = FALSE;
- docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
+ yyextra->docBlockContext = SkipCurlyEndDoc;
+ yyextra->docBlockInBody = FALSE;
+ yyextra->docBlockAutoBrief = ( yytext[yyleng-2]=='*' && Config_getBool(JAVADOC_AUTOBRIEF) ) ||
( yytext[yyleng-2]=='!' && Config_getBool(QT_AUTOBRIEF) );
- docBlock.resize(0);
- docBlockTerm = '}';
+ yyextra->docBlock.resize(0);
+ yyextra->docBlockTerm = '}';
if (yytext[yyleng-3]=='/')
{
- startCommentBlock(TRUE);
+ startCommentBlock(yyscanner,TRUE);
BEGIN( DocLine );
}
else
{
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
}
<SkipCurlyEndDoc>"}" {
//addToBody("}");
- if (tempEntry) // we can only switch back to current if no new item was created
+ if (yyextra->tempEntry) // we can only switch back to yyextra->current if no new item was created
{
- tempEntry.swap(current);
- tempEntry.reset();
+ yyextra->current = yyextra->tempEntry;
+ yyextra->tempEntry.reset();
}
- BEGIN( lastCurlyContext );
+ BEGIN( yyextra->lastCurlyContext );
}
<SkipCurly>\" {
//addToBody(yytext);
- lastStringContext=SkipCurly;
+ yyextra->lastStringContext=SkipCurly;
BEGIN( SkipString );
}
<SkipCurly>^{B}*"#" {
- if (insidePHP)
+ if (yyextra->insidePHP)
REJECT;
//addToBody(yytext);
BEGIN( SkipCurlyCpp );
}
<SkipCurly,SkipC11Inits,SkipInits,SkipC11Attribute>\n {
- lineCount();
+ lineCount(yyscanner);
//addToBody(yytext);
}
<SkipCurly,SkipCurlyCpp,ReadInitializer>"<<<" {
- if (!insidePHP)
+ if (!yyextra->insidePHP)
{
REJECT;
}
else
{
- lastHereDocContext = YY_START;
+ yyextra->lastHereDocContext = YY_START;
BEGIN(HereDoc);
}
}
<SkipCurly,SkipCurlyCpp>{B}*{RAWBEGIN} {
QCString raw=QCString(yytext).stripWhiteSpace();
- g_delimiter = raw.data()+2;
- g_delimiter=g_delimiter.left(g_delimiter.length()-1);
- lastRawStringContext = YY_START;
- dummyRawString.resize(0);
- pCopyRawString = &dummyRawString;
- *pCopyRawString+=yytext;
+ yyextra->delimiter = raw.data()+2;
+ yyextra->delimiter=yyextra->delimiter.left(yyextra->delimiter.length()-1);
+ yyextra->lastRawStringContext = YY_START;
+ yyextra->dummyRawString.resize(0);
+ yyextra->pCopyRawString = &yyextra->dummyRawString;
+ *yyextra->pCopyRawString+=yytext;
BEGIN(RawString);
}
<SkipCurly,SkipCurlyCpp>[^\n#"'@\\/{}<]+ {
- lineCount(); // for g_column updates
+ lineCount(yyscanner); // for yyextra->column updates
//addToBody(yytext);
}
<SkipCurlyCpp>\n {
//addToBody(yytext);
- lineCount();
- lastCurlyContext = FindMembers;
+ lineCount(yyscanner);
+ yyextra->lastCurlyContext = FindMembers;
BEGIN( SkipCurly );
}
<SkipCurlyCpp>\\[\r]*"\n"[\r]* {
//addToBody(yytext);
- lineCount();
+ lineCount(yyscanner);
}
<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp,SkipC11Attribute>"/*" {
//addToBody(yytext);
- lastCContext = YY_START;
+ yyextra->lastCContext = YY_START;
BEGIN(SkipComment);
}
<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp,SkipC11Attribute>"//" {
//addToBody(yytext);
- lastCContext = YY_START;
+ yyextra->lastCContext = YY_START;
BEGIN(SkipCxxComment);
}
<SkipInits,SkipC11Inits,SkipC11Attribute>"(" {
- roundCount=0;
- lastSkipRoundContext=YY_START;
+ yyextra->roundCount=0;
+ yyextra->lastSkipRoundContext=YY_START;
BEGIN(SkipRound);
}
<SkipInits,SkipC11Inits,SkipC11Attribute>\" {
- lastStringContext=YY_START;
+ yyextra->lastStringContext=YY_START;
BEGIN( SkipString );
}
<SkipInits>; {
- warn(yyFileName,yyLineNr,
+ warn(yyextra->yyFileName,yyextra->yyLineNr,
"Found ';' while parsing initializer list! "
"(doxygen could be confused by a macro call without semicolon)"
);
BEGIN( FindMembers );
}
<SkipInits,SkipCurly,SkipCurlyCpp>"#" {
- if (!insidePHP)
+ if (!yyextra->insidePHP)
REJECT;
//addToBody(yytext);
- lastCContext = YY_START;
+ yyextra->lastCContext = YY_START;
BEGIN(SkipCxxComment);
}
<SkipInits,SkipCurly,SkipCurlyCpp>@\" {
- if (!insideCS) REJECT;
+ if (!yyextra->insideCS) REJECT;
// C# verbatim string
- lastSkipVerbStringContext=YY_START;
- pSkipVerbString=&current->initializer;
+ yyextra->lastSkipVerbStringContext=YY_START;
+ yyextra->pSkipVerbString=&yyextra->current->initializer;
BEGIN(SkipVerbString);
}
<SkipInits,SkipCurly,SkipCurlyCpp>{CHARLIT} {
- if (insidePHP) REJECT;
+ if (yyextra->insidePHP) REJECT;
}
<SkipInits,SkipCurly,SkipCurlyCpp>\' {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- lastStringContext=YY_START;
+ yyextra->lastStringContext=YY_START;
BEGIN(SkipPHPString);
}
}
<SkipInits,SkipC11Inits,SkipCurly,SkipCurlyCpp,SkipC11Attribute>. { }
<SkipString,SkipPHPString>\\. { }
<SkipString>\" {
- BEGIN( lastStringContext );
+ BEGIN( yyextra->lastStringContext );
}
<SkipPHPString>\' {
- BEGIN( lastStringContext );
+ BEGIN( yyextra->lastStringContext );
}
<SkipString,SkipPHPString>"/*"|"*/"|"//" { }
<SkipString,SkipPHPString>\n {
- lineCount();
+ lineCount(yyscanner);
}
<SkipString,SkipPHPString>. { }
<CompoundName>":" { // for "class : public base {} var;" construct, see bug 608359
@@ -5475,248 +5087,243 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(ClassVar);
}
<CompoundName>";" {
- current->section = Entry::EMPTY_SEC ;
- current->type.resize(0) ;
- current->name.resize(0) ;
- current->args.resize(0) ;
- current->argList->clear();
+ yyextra->current->section = Entry::EMPTY_SEC ;
+ yyextra->current->type.resize(0) ;
+ yyextra->current->name.resize(0) ;
+ yyextra->current->args.resize(0) ;
+ yyextra->current->argList.clear();
BEGIN( FindMembers ) ;
}
<Bases>";" {
- if (insideIDL && (current->spec & (Entry::Singleton |
+ if (yyextra->insideIDL && (yyextra->current->spec & (Entry::Singleton |
Entry::Service)))
{
// in UNO IDL a service or singleton may be defined
// completely like this: "service Foo : XFoo;"
- if (!current->name.isEmpty() && !current_root->name.isEmpty())
+ if (!yyextra->current->name.isEmpty() && !yyextra->current_root->name.isEmpty())
{
- prependScope();
+ prependScope(yyscanner);
}
- current->name = current->name.stripWhiteSpace();
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
// there can be only one base class here
- if (!baseName.isEmpty())
+ if (!yyextra->baseName.isEmpty())
{
- current->extends->append(
- new BaseInfo(baseName,Public,Normal));
- baseName.resize(0);
+ yyextra->current->extends.push_back(
+ BaseInfo(yyextra->baseName,Public,Normal));
+ yyextra->baseName.resize(0);
}
- current_root->moveToSubEntryAndRefresh( current ) ;
- initEntry();
+ yyextra->current_root->moveToSubEntryAndRefresh( yyextra->current ) ;
+ initEntry(yyscanner);
}
else
{
- current->section = Entry::EMPTY_SEC ;
- current->type.resize(0) ;
- current->name.resize(0) ;
- current->args.resize(0) ;
- current->argList->clear();
+ yyextra->current->section = Entry::EMPTY_SEC ;
+ yyextra->current->type.resize(0) ;
+ yyextra->current->name.resize(0) ;
+ yyextra->current->args.resize(0) ;
+ yyextra->current->argList.clear();
}
BEGIN( FindMembers ) ;
}
<CompoundName>{SCOPENAME}/{BN}*"<" {
- sharpCount = 0;
- current->name = yytext ;
- if (current->spec & Entry::Protocol)
+ yyextra->sharpCount = 0;
+ yyextra->current->name = yytext ;
+ if (yyextra->current->spec & Entry::Protocol)
{
- current->name+="-p";
+ yyextra->current->name+="-p";
}
- lineCount();
- lastClassTemplSpecContext = ClassVar;
- if (insideObjC) // protocol list
+ lineCount(yyscanner);
+ yyextra->lastClassTemplSpecContext = ClassVar;
+ if (yyextra->insideObjC) // protocol list
{
BEGIN( ObjCProtocolList );
}
- else if (insideCS) // C# generic class
+ else if (yyextra->insideCS) // C# generic class
{
- //current->name+="-g";
+ //yyextra->current->name+="-g";
BEGIN( CSGeneric );
}
else // C++ template specialization
{
- roundCount=0;
+ yyextra->roundCount=0;
BEGIN( ClassTemplSpec );
}
}
<CSGeneric>"<" {
- if (current->tArgLists==0)
- {
- current->tArgLists = new QList<ArgumentList>;
- current->tArgLists->setAutoDelete(TRUE);
- }
- ArgumentList *al = new ArgumentList;
+ ArgumentList al;
// check bug 612858 before enabling the next line
- //current->spec |= Entry::Template;
- current->tArgLists->append(al);
- currentArgumentList = al;
- templateStr="<";
- current->name += "<";
- fullArgString = templateStr;
- copyArgString = &current->name;
- //copyArgString = &templateStr;
- currentArgumentContext = ClassVar;
+ //yyextra->current->spec |= Entry::Template;
+ yyextra->current->tArgLists.push_back(al);
+ yyextra->currentArgumentList = &yyextra->current->tArgLists.back();
+ yyextra->templateStr="<";
+ yyextra->current->name += "<";
+ yyextra->fullArgString = yyextra->templateStr;
+ yyextra->copyArgString = &yyextra->current->name;
+ //yyextra->copyArgString = &yyextra->templateStr;
+ yyextra->currentArgumentContext = ClassVar;
BEGIN( ReadTempArgs );
}
<ObjCProtocolList>"<" {
- insideProtocolList=TRUE;
+ yyextra->insideProtocolList=TRUE;
BEGIN( Bases );
}
<ClassTemplSpec>">"({BN}*"::"{BN}*{SCOPENAME})? {
- current->name += yytext;
- lineCount();
- if (roundCount==0 && --sharpCount<=0)
+ yyextra->current->name += yytext;
+ lineCount(yyscanner);
+ if (yyextra->roundCount==0 && --yyextra->sharpCount<=0)
{
- current->name = removeRedundantWhiteSpace(current->name);
- if (current->spec & Entry::Protocol)
+ yyextra->current->name = removeRedundantWhiteSpace(yyextra->current->name);
+ if (yyextra->current->spec & Entry::Protocol)
{ // Objective-C protocol
unput('{'); // fake start of body
BEGIN( ClassVar );
}
else
{
- BEGIN( lastClassTemplSpecContext );
+ BEGIN( yyextra->lastClassTemplSpecContext );
}
}
}
<ClassTemplSpec>"<" {
- current->name += yytext;
- if (roundCount==0) sharpCount++;
+ yyextra->current->name += yytext;
+ if (yyextra->roundCount==0) yyextra->sharpCount++;
}
<ClassTemplSpec>. {
- current->name += yytext;
+ yyextra->current->name += yytext;
}
<CompoundName>{SCOPENAME}{BN}*";" { // forward declaration
- if (current->tArgLists && current->tArgLists->count()>0)
+ if (!yyextra->current->tArgLists.empty())
{
// found a forward template declaration, this has
// a purpose of its own
- current->name = yytext;
- current->name=current->name.left(current->name.length()-1).stripWhiteSpace();
- //printf("template class declaration for %s!\n",current->name.data());
- QCString rn = current_root->name.copy();
- //printf("cn='%s' rn='%s' isTypedef=%d\n",cn.data(),rn.data(),isTypedef);
- if (!current->name.isEmpty() && !rn.isEmpty())
+ yyextra->current->name = yytext;
+ yyextra->current->name=yyextra->current->name.left(yyextra->current->name.length()-1).stripWhiteSpace();
+ //printf("template class declaration for %s!\n",yyextra->current->name.data());
+ QCString rn = yyextra->current_root->name.copy();
+ //printf("cn='%s' rn='%s' yyextra->isTypedef=%d\n",cn.data(),rn.data(),yyextra->isTypedef);
+ if (!yyextra->current->name.isEmpty() && !rn.isEmpty())
{
- prependScope();
+ prependScope(yyscanner);
}
- current->spec|=Entry::ForwardDecl;
- current_root->moveToSubEntryAndRefresh(current);
+ yyextra->current->spec|=Entry::ForwardDecl;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
}
- else if (insideIDL &&
- (((current_root->spec & (Entry::Interface |
+ else if (yyextra->insideIDL &&
+ (((yyextra->current_root->spec & (Entry::Interface |
Entry::Service)) &&
- (current->spec & Entry::Interface)) ||
- ((current_root->spec & (Entry::Service |
+ (yyextra->current->spec & Entry::Interface)) ||
+ ((yyextra->current_root->spec & (Entry::Service |
Entry::Singleton)) &&
- (current->spec & Entry::Service))))
+ (yyextra->current->spec & Entry::Service))))
{
- // interface inside of UNO IDL service or interface
- // service inside of UNO IDL service or singleton
+ // interface yyextra->inside of UNO IDL service or interface
+ // service yyextra->inside of UNO IDL service or singleton
// there may be documentation on the member,
// so do not throw it away...
- current->name = yytext;
- current->name=current->name.left(current->name.length()-1).stripWhiteSpace();
- current->section = (current->spec & Entry::Interface)
+ yyextra->current->name = yytext;
+ yyextra->current->name=yyextra->current->name.left(yyextra->current->name.length()-1).stripWhiteSpace();
+ yyextra->current->section = (yyextra->current->spec & Entry::Interface)
? Entry::EXPORTED_INTERFACE_SEC
: Entry::INCLUDED_SERVICE_SEC;
-// current->section = Entry::MEMBERDOC_SEC;
- current->spec &= ~(Entry::Interface|Entry::Service); // FIXME: horrible: Interface == Gettable, so need to clear it - actually we're mixing values from different enums in this case... granted only Optional and Interface are actually valid in this context but urgh...
- current_root->moveToSubEntryAndRefresh(current);
+// yyextra->current->section = Entry::MEMBERDOC_SEC;
+ yyextra->current->spec &= ~(Entry::Interface|Entry::Service); // FIXME: horrible: Interface == Gettable, so need to clear it - actually we're mixing values from different enums in this case... granted only Optional and Interface are actually valid in this context but urgh...
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
}
unput(';');
- current->reset();
- initEntry();
- if (insideObjC) // see bug746361
+ yyextra->current->reset();
+ initEntry(yyscanner);
+ if (yyextra->insideObjC) // see bug746361
{
- language = current->lang = SrcLangExt_Cpp;
- insideObjC = FALSE;
+ yyextra->language = yyextra->current->lang = SrcLangExt_Cpp;
+ yyextra->insideObjC = FALSE;
}
- if (isTypedef) // typedef of a class, put typedef keyword back
+ if (yyextra->isTypedef) // typedef of a class, put typedef keyword back
{
- current->type.prepend("typedef");
+ yyextra->current->type.prepend("typedef");
}
BEGIN( FindMembers );
}
<CompoundName>{SCOPENAME}/{BN}*"(" {
- current->name = yytext ;
- lineCount();
- if (insideCpp && current->name=="alignas") // C++11
+ yyextra->current->name = yytext ;
+ lineCount(yyscanner);
+ if (yyextra->insideCpp && yyextra->current->name=="alignas") // C++11
{
- lastAlignAsContext = YY_START;
+ yyextra->lastAlignAsContext = YY_START;
BEGIN( AlignAs );
}
else
{
- if (current->spec & Entry::Protocol)
+ if (yyextra->current->spec & Entry::Protocol)
{
- current->name += "-p";
+ yyextra->current->name += "-p";
}
BEGIN( ClassVar );
}
}
-<AlignAs>"(" { roundCount=0;
+<AlignAs>"(" { yyextra->roundCount=0;
BEGIN( AlignAsEnd );
}
-<AlignAs>\n { lineCount(); }
+<AlignAs>\n { lineCount(yyscanner); }
<AlignAs>.
-<AlignAsEnd>"(" { roundCount++; }
-<AlignAsEnd>")" { if (--roundCount<0)
+<AlignAsEnd>"(" { yyextra->roundCount++; }
+<AlignAsEnd>")" { if (--yyextra->roundCount<0)
{
- BEGIN( lastAlignAsContext );
+ BEGIN( yyextra->lastAlignAsContext );
}
}
-<AlignAsEnd>\n { lineCount(); }
+<AlignAsEnd>\n { lineCount(yyscanner); }
<AlignAsEnd>.
<CompoundName>{SCOPENAME}/{BN}*"," { // multiple forward declarations on one line
// e.g. @protocol A,B;
- current->reset();
- initEntry();
+ yyextra->current->reset();
+ initEntry(yyscanner);
}
<CompoundName>{SCOPENAME} {
- current->name = yytext ;
- if (insideCpp || insideObjC)
+ yyextra->current->name = yytext ;
+ if (yyextra->insideCpp || yyextra->insideObjC)
{
- current->id = ClangParser::instance()->lookup(yyLineNr,yytext);
+ yyextra->current->id = ClangParser::instance()->lookup(yyextra->yyLineNr,yytext);
}
- lineCount();
- if (current->spec & Entry::Protocol)
+ lineCount(yyscanner);
+ if (yyextra->current->spec & Entry::Protocol)
{
- current->name += "-p";
+ yyextra->current->name += "-p";
}
- if ((current->spec & Entry::Protocol) ||
- current->section == Entry::OBJCIMPL_SEC)
+ if ((yyextra->current->spec & Entry::Protocol) ||
+ yyextra->current->section == Entry::OBJCIMPL_SEC)
{
unput('{'); // fake start of body
}
BEGIN( ClassVar );
}
<CompoundName>{CSSCOPENAME} { // C# style scope
- current->name = substitute(yytext,".","::");
- lineCount();
+ yyextra->current->name = substitute(yytext,".","::");
+ lineCount(yyscanner);
BEGIN( ClassVar );
}
<ClassVar>{SCOPENAME}{BN}*/"(" {
- if (insideIDL && qstrncmp(yytext,"switch",6)==0 && !isId(yytext[6]))
+ if (yyextra->insideIDL && qstrncmp(yytext,"switch",6)==0 && !isId(yytext[6]))
{
// Corba IDL style union
- roundCount=0;
+ yyextra->roundCount=0;
BEGIN(SkipUnionSwitch);
}
else
{
- addType();
- current->name = yytext;
- current->name = current->name.stripWhiteSpace();
- lineCount();
+ addType(yyscanner);
+ yyextra->current->name = yytext;
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ lineCount(yyscanner);
BEGIN( FindMembers );
}
}
<ClassVar>"," {
- if (isTypedef)
+ if (yyextra->isTypedef)
{
// multiple types in one typedef
unput(',');
- current->type.prepend("typedef ");
+ yyextra->current->type.prepend("typedef ");
BEGIN(FindMembers);
}
else
@@ -5725,12 +5332,12 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") {
- if (insideCli)
+ if (yyextra->insideCli)
{
if (yytext[0]=='s') // sealed
- current->spec |= Entry::SealedClass;
+ yyextra->current->spec |= Entry::SealedClass;
else // abstract
- current->spec |= Entry::AbstractClass;
+ yyextra->current->spec |= Entry::AbstractClass;
BEGIN( ClassVar );
}
else
@@ -5739,67 +5346,66 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<ClassVar>{ID} {
- if (insideCpp || insideObjC)
+ if (yyextra->insideCpp || yyextra->insideObjC)
{
- current->id = ClangParser::instance()->lookup(yyLineNr,yytext);
+ yyextra->current->id = ClangParser::instance()->lookup(yyextra->yyLineNr,yytext);
}
- if (insideIDL && qstrcmp(yytext,"switch")==0)
+ if (yyextra->insideIDL && qstrcmp(yytext,"switch")==0)
{
// Corba IDL style union
- roundCount=0;
+ yyextra->roundCount=0;
BEGIN(SkipUnionSwitch);
}
- else if ((insideJava || insidePHP || insideJS || insideSlice) && (qstrcmp(yytext,"implements")==0 || qstrcmp(yytext,"extends")==0))
+ else if ((yyextra->insideJava || yyextra->insidePHP || yyextra->insideJS || yyextra->insideSlice) && (qstrcmp(yytext,"implements")==0 || qstrcmp(yytext,"extends")==0))
{
- current->type.resize(0);
- baseProt=Public;
- baseVirt=Normal;
- baseName.resize(0);
+ yyextra->current->type.resize(0);
+ yyextra->baseProt=Public;
+ yyextra->baseVirt=Normal;
+ yyextra->baseName.resize(0);
BEGIN( BasesProt ) ;
}
- else if (insideCS && qstrcmp(yytext,"where")==0) // C# type constraint
+ else if (yyextra->insideCS && qstrcmp(yytext,"where")==0) // C# type constraint
{
- delete current->typeConstr;
- current->typeConstr = new ArgumentList;
- current->typeConstr->append(new Argument);
- lastCSConstraint = YY_START;
+ yyextra->current->typeConstr.clear();
+ yyextra->current->typeConstr.push_back(Argument());
+ yyextra->lastCSConstraint = YY_START;
BEGIN( CSConstraintName );
}
- else if (insideCli && qstrcmp(yytext,"abstract")==0)
+ else if (yyextra->insideCli && qstrcmp(yytext,"abstract")==0)
{
- current->spec|=Entry::Abstract;
+ yyextra->current->spec|=Entry::Abstract;
}
- else if (insideCli && qstrcmp(yytext,"sealed")==0)
+ else if (yyextra->insideCli && qstrcmp(yytext,"sealed")==0)
{
- current->spec|=Entry::Sealed;
+ yyextra->current->spec|=Entry::Sealed;
}
else if (qstrcmp(yytext,"final")==0)
{
- current->spec|=Entry::Final;
+ yyextra->current->spec|=Entry::Final;
}
else
{
- if (current->section == Entry::ENUM_SEC)
+ if (yyextra->current->section == Entry::ENUM_SEC)
{ // found "enum a b" -> variable
- current->section = Entry::VARIABLE_SEC ;
+ yyextra->current->section = Entry::VARIABLE_SEC ;
}
- current->type += ' ' ;
- current->type += current->name ;
- current->name = yytext ;
+ yyextra->current->type += ' ' ;
+ yyextra->current->type += yyextra->current->name ;
+ yyextra->current->name = yytext ;
- if (nameIsOperator(current->name))
+ if (nameIsOperator(yyextra->current->name))
{
BEGIN( Operator );
}
}
}
<ClassVar>[(\[] {
- if (insideObjC && *yytext=='(') // class category
+ if (yyextra->insideObjC && *yytext=='(') // class category
{
- current->name+='(';
- //if (current->section!=Entry::OBJCIMPL_SEC)
+ yyextra->current->name+='(';
+ //if (yyextra->current->section!=Entry::OBJCIMPL_SEC)
//{
- current->spec|=Entry::Category;
+ yyextra->current->spec|=Entry::Category;
//}
BEGIN( ClassCategory );
}
@@ -5812,73 +5418,73 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
<CSConstraintType,CSConstraintName>"/**/" { /* empty comment */ }
<CSConstraintType,CSConstraintName>("/*"[*!]|"//"[/!])("<"?) { // special comment
- fullArgString.resize(0);
- lastCopyArgChar='#'; // end marker
- lastCommentInArgContext=YY_START;
+ yyextra->fullArgString.resize(0);
+ yyextra->lastCopyArgChar='#'; // end marker
+ yyextra->lastCommentInArgContext=YY_START;
if (yytext[1]=='/')
BEGIN( CopyArgCommentLine );
else
BEGIN( CopyArgComment );
}
<CSConstraintType,CSConstraintName>"#" { // artificially inserted token to signal end of comment block
- current->typeConstr->getLast()->docs = fullArgString;
+ yyextra->current->typeConstr.back().docs = yyextra->fullArgString;
}
<CSConstraintType>"{" { // end of type constraint reached
// parse documentation of the constraints
- handleParametersCommentBlocks(current->typeConstr);
+ handleParametersCommentBlocks(yyscanner,yyextra->current->typeConstr);
unput('{');
- BEGIN( lastCSConstraint );
+ BEGIN( yyextra->lastCSConstraint );
}
<CSConstraintType,CSConstraintName>";" {
- handleParametersCommentBlocks(current->typeConstr);
+ handleParametersCommentBlocks(yyscanner,yyextra->current->typeConstr);
unput(';');
- BEGIN( lastCSConstraint );
+ BEGIN( yyextra->lastCSConstraint );
}
<CSConstraintName>":" {
BEGIN( CSConstraintType );
}
<CSConstraintName>{ID} {
// parameter name
- current->typeConstr->getLast()->name=yytext;
+ yyextra->current->typeConstr.back().name=yytext;
}
<CSConstraintType>"where" { // another constraint for a different param
- current->typeConstr->append(new Argument);
+ yyextra->current->typeConstr.push_back(Argument());
BEGIN( CSConstraintName );
}
<CSConstraintType>({ID}".")*{ID}("<"{ID}">")?("()")? {
- if (current->typeConstr->getLast()->type.isEmpty())
+ if (yyextra->current->typeConstr.back().type.isEmpty())
// first type constraint for this parameter
{
- current->typeConstr->getLast()->type=yytext;
+ yyextra->current->typeConstr.back().type=yytext;
}
else // new type constraint for same parameter
{
- QCString name = current->typeConstr->getLast()->name;
- current->typeConstr->append(new Argument);
- current->typeConstr->getLast()->name=name;
- current->typeConstr->getLast()->type=yytext;
+ QCString name = yyextra->current->typeConstr.back().name;
+ yyextra->current->typeConstr.push_back(Argument());
+ yyextra->current->typeConstr.back().name=name;
+ yyextra->current->typeConstr.back().type=yytext;
}
}
<CSConstraintName,CSConstraintType>\n {
- lineCount();
+ lineCount(yyscanner);
}
<CSConstraintName,CSConstraintType>. {
}
<ClassCategory>{ID} {
- current->name+=yytext;
+ yyextra->current->name+=yytext;
}
<ClassCategory>")"/{BN}*"{" {
- current->name+=')';
+ yyextra->current->name+=')';
BEGIN( ClassVar );
}
<ClassCategory>")"/{BN}*"<" {
- current->name+=')';
+ yyextra->current->name+=')';
BEGIN( ObjCProtocolList );
}
<ClassCategory>")" {
- current->name+=')';
- if ((current->section & Entry::Protocol) ||
- current->section == Entry::OBJCIMPL_SEC)
+ yyextra->current->name+=')';
+ if ((yyextra->current->section & Entry::Protocol) ||
+ yyextra->current->section == Entry::OBJCIMPL_SEC)
{
unput('{'); // fake start of body
}
@@ -5890,61 +5496,61 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN( ClassVar );
}
<ClassVar>":" {
- if (current->section==Entry::VARIABLE_SEC) // enum A B:2, see bug 748208
+ if (yyextra->current->section==Entry::VARIABLE_SEC) // enum A B:2, see bug 748208
{
- current->bitfields+=":";
- current->args.resize(0);
+ yyextra->current->bitfields+=":";
+ yyextra->current->args.resize(0);
BEGIN(BitFields);
}
- else if (current->section==Entry::ENUM_SEC) // enum E:2, see bug 313527,
+ else if (yyextra->current->section==Entry::ENUM_SEC) // enum E:2, see bug 313527,
// or C++11 style enum: 'E : unsigned int {...}'
{
- current->args.resize(0);
+ yyextra->current->args.resize(0);
BEGIN(EnumBaseType);
}
else
{
- current->type.resize(0);
- if ((current->spec & Entry::Interface) ||
- (current->spec & Entry::Struct) ||
- (current->spec & Entry::Ref) ||
- (current->spec & Entry::Value) ||
- insidePHP || insideCS || insideD || insideObjC || insideIDL
+ yyextra->current->type.resize(0);
+ if ((yyextra->current->spec & Entry::Interface) ||
+ (yyextra->current->spec & Entry::Struct) ||
+ (yyextra->current->spec & Entry::Ref) ||
+ (yyextra->current->spec & Entry::Value) ||
+ yyextra->insidePHP || yyextra->insideCS || yyextra->insideD || yyextra->insideObjC || yyextra->insideIDL
)
- baseProt=Public;
+ yyextra->baseProt=Public;
else
- baseProt=Private;
- baseVirt=Normal;
- baseName.resize(0);
+ yyextra->baseProt=Private;
+ yyextra->baseVirt=Normal;
+ yyextra->baseName.resize(0);
BEGIN( BasesProt ) ;
}
}
<ClassVar>[;=*&] {
unput(*yytext);
- if (isTypedef) // typedef of a class, put typedef keyword back
+ if (yyextra->isTypedef) // typedef of a class, put typedef keyword back
{
- current->type.prepend("typedef");
+ yyextra->current->type.prepend("typedef");
}
if ((yytext[0]=='*' || yytext[0]=='&') &&
- current->section == Entry::ENUM_SEC)
+ yyextra->current->section == Entry::ENUM_SEC)
{ // found "enum a *b" -> variable
- current->section = Entry::VARIABLE_SEC ;
+ yyextra->current->section = Entry::VARIABLE_SEC ;
}
BEGIN( FindMembers );
}
<Bases,ClassVar>"///"/[^/] {
- if (!insideObjC)
+ if (!yyextra->insideObjC)
{
REJECT;
}
else
{
- lineCount();
- current->program+=yytext;
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->startColumn = yyColNr;
- curlyCount=0;
+ lineCount(yyscanner);
+ yyextra->current->program+=yytext;
+ yyextra->current->fileName = yyextra->yyFileName ;
+ yyextra->current->startLine = yyextra->yyLineNr ;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->curlyCount=0;
BEGIN( ReadBodyIntf );
}
}
@@ -5952,56 +5558,56 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
<Bases,ClassVar>("//"{B}*)?"/*!" |
<Bases,ClassVar>"//!" |
<Bases,ClassVar>[\-+]{BN}* {
- if (!insideObjC)
+ if (!yyextra->insideObjC)
{
REJECT;
}
else
{
- lineCount();
- current->program+=yytext;
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->startColumn = yyColNr;
- curlyCount=0;
+ lineCount(yyscanner);
+ yyextra->current->program+=yytext;
+ yyextra->current->fileName = yyextra->yyFileName ;
+ yyextra->current->startLine = yyextra->yyLineNr ;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->curlyCount=0;
BEGIN( ReadBodyIntf );
}
}
<CompoundName,ClassVar>{B}*"{"{B}* {
- current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->startColumn = yyColNr;
- current->name = removeRedundantWhiteSpace(current->name);
- if (current->name.isEmpty() && !isTypedef) // anonymous compound
+ yyextra->current->fileName = yyextra->yyFileName ;
+ yyextra->current->startLine = yyextra->yyLineNr ;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->name = removeRedundantWhiteSpace(yyextra->current->name);
+ if (yyextra->current->name.isEmpty() && !yyextra->isTypedef) // anonymous compound
{
- if (current->section==Entry::NAMESPACE_SEC) // allow reopening of anonymous namespaces
+ if (yyextra->current->section==Entry::NAMESPACE_SEC) // allow reopening of anonymous namespaces
{
if (Config_getBool(EXTRACT_ANON_NSPACES)) // use visible name
{
- current->name="anonymous_namespace{"+stripPath(current->fileName)+"}";
+ yyextra->current->name="anonymous_namespace{"+stripPath(yyextra->current->fileName)+"}";
}
else // use invisible name
{
- current->name.sprintf("@%d",anonNSCount);
+ yyextra->current->name.sprintf("@%d",yyextra->anonNSCount);
}
}
else
{
- current->name.sprintf("@%d",anonCount++);
+ yyextra->current->name.sprintf("@%d",yyextra->anonCount++);
}
}
- curlyCount=0;
- if (current_root && // not a nested struct inside an @interface section
- !(current_root->spec & Entry::Interface) &&
- ((current->spec & (Entry::Interface | Entry::Protocol | Entry::Category) ||
- current->section==Entry::OBJCIMPL_SEC)
+ yyextra->curlyCount=0;
+ if (yyextra->current_root && // not a nested struct yyextra->inside an @interface section
+ !(yyextra->current_root->spec & Entry::Interface) &&
+ ((yyextra->current->spec & (Entry::Interface | Entry::Protocol | Entry::Category) ||
+ yyextra->current->section==Entry::OBJCIMPL_SEC)
) &&
- insideObjC
+ yyextra->insideObjC
)
{ // ObjC body that ends with @end
BEGIN( ReadBodyIntf );
}
- else if (current->section==Entry::NAMESPACE_SEC)
+ else if (yyextra->current->section==Entry::NAMESPACE_SEC)
{ // namespace body
BEGIN( ReadNSBody );
}
@@ -6010,61 +5616,60 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN( ReadBody ) ;
}
}
-<BasesProt>"virtual"{BN}+ { lineCount(); baseVirt = Virtual; }
-<BasesProt>"public"{BN}+ { lineCount(); baseProt = Public; }
-<BasesProt>"protected"{BN}+ { lineCount(); baseProt = Protected; }
-<BasesProt>"internal"{BN}+ { if (!insideCli) REJECT ; lineCount(); baseProt = Package; }
-<BasesProt>"private"{BN}+ { lineCount(); baseProt = Private; }
-<BasesProt>{BN} { lineCount(); }
+<BasesProt>"virtual"{BN}+ { lineCount(yyscanner); yyextra->baseVirt = Virtual; }
+<BasesProt>"public"{BN}+ { lineCount(yyscanner); yyextra->baseProt = Public; }
+<BasesProt>"protected"{BN}+ { lineCount(yyscanner); yyextra->baseProt = Protected; }
+<BasesProt>"internal"{BN}+ { if (!yyextra->insideCli) REJECT ; lineCount(yyscanner); yyextra->baseProt = Package; }
+<BasesProt>"private"{BN}+ { lineCount(yyscanner); yyextra->baseProt = Private; }
+<BasesProt>{BN} { lineCount(yyscanner); }
<BasesProt>. { unput(*yytext); BEGIN(Bases); }
<Bases>("\\")?({ID}"\\")*{ID} { // PHP namespace token, not sure if interspacing is allowed but it gives problems (see bug 640847)
- if (!insidePHP)
+ if (!yyextra->insidePHP)
{
REJECT;
}
else // PHP base class of the form \Ns\Cl or Ns\Cl
{
- lineCount();
+ lineCount(yyscanner);
QCString bn=yytext;
bn = substitute(bn,"\\","::");
- baseName += bn;
- current->args += ' ';
- current->args += yytext;
+ yyextra->baseName += bn;
+ yyextra->current->args += ' ';
+ yyextra->current->args += yytext;
}
}
<Bases>("::")?{BN}*({ID}{BN}*"::"{BN}*)*{ID} {
- lineCount();
+ lineCount(yyscanner);
QCString baseScope = yytext;
- if (insideCS && baseScope.stripWhiteSpace()=="where")
+ if (yyextra->insideCS && baseScope.stripWhiteSpace()=="where")
{
// type constraint for a class
- delete current->typeConstr;
- current->typeConstr = new ArgumentList;
- current->typeConstr->append(new Argument);
- lastCSConstraint = YY_START;
+ yyextra->current->typeConstr.clear();
+ yyextra->current->typeConstr.push_back(Argument());
+ yyextra->lastCSConstraint = YY_START;
BEGIN( CSConstraintName );
}
else
{
- baseName+=yytext;
- current->args += ' ';
- current->args += yytext;
+ yyextra->baseName+=yytext;
+ yyextra->current->args += ' ';
+ yyextra->current->args += yytext;
}
}
<Bases>{BN}*{ID}("."{ID})* { // Java style class
QCString name = substitute(yytext,".","::");
- baseName += name;
- current->args += ' ';
- current->args += name;
+ yyextra->baseName += name;
+ yyextra->current->args += ' ';
+ yyextra->current->args += name;
}
<ClassVar,Bases>\n/{BN}*[^{, \t\n] {
- if (!insideObjC)
+ if (!yyextra->insideObjC)
{
REJECT;
}
else
{
- lineCount();
+ lineCount(yyscanner);
unput('{');
}
}
@@ -6076,53 +5681,53 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
unput('}');
unput('{');
}
-<ClassVar>"<" { current->name += *yytext;
- sharpCount=1;
- roundCount=0;
- lastSkipSharpContext = YY_START;
- specName = &current->name;
+<ClassVar>"<" { yyextra->current->name += *yytext;
+ yyextra->sharpCount=1;
+ yyextra->roundCount=0;
+ yyextra->lastSkipSharpContext = YY_START;
+ yyextra->specName = &yyextra->current->name;
BEGIN ( Specialization );
}
<Bases>{BN}*"<" {
- lineCount();
- sharpCount=1;
- roundCount=0;
- lastSkipSharpContext = YY_START;
- if (insideObjC) // start of protocol list
+ lineCount(yyscanner);
+ yyextra->sharpCount=1;
+ yyextra->roundCount=0;
+ yyextra->lastSkipSharpContext = YY_START;
+ if (yyextra->insideObjC) // start of protocol list
{
unput(',');
}
else // template specialization
{
- //if (insideCS) // generic
+ //if (yyextra->insideCS) // generic
//{
- // baseName+="-g";
+ // yyextra->baseName+="-g";
//}
- templateStr = yytext;
- specName = &templateStr;
+ yyextra->templateStr = yytext;
+ yyextra->specName = &yyextra->templateStr;
BEGIN ( Specialization );
}
}
-<Specialization>"<" { *specName += *yytext;
- if (roundCount==0) sharpCount++;
+<Specialization>"<" { *yyextra->specName += *yytext;
+ if (yyextra->roundCount==0) yyextra->sharpCount++;
}
<Specialization>">" {
- *specName += *yytext;
- if (roundCount==0 && --sharpCount<=0)
+ *yyextra->specName += *yytext;
+ if (yyextra->roundCount==0 && --yyextra->sharpCount<=0)
{
- baseName+=removeRedundantWhiteSpace(*specName);
- BEGIN(lastSkipSharpContext);
+ yyextra->baseName+=removeRedundantWhiteSpace(*yyextra->specName);
+ BEGIN(yyextra->lastSkipSharpContext);
}
}
-<Specialization>{BN}+ { lineCount(); *specName +=' '; }
-<Specialization>"<<" { *specName += yytext; }
+<Specialization>{BN}+ { lineCount(yyscanner); *yyextra->specName +=' '; }
+<Specialization>"<<" { *yyextra->specName += yytext; }
<Specialization>">>"/{B}*"::" { // M$ C++ extension to allow >> to close a template...
unput('>');
unput(' ');
unput('>');
}
<Specialization>">>" {
- if (insideCS) // for C# >> ends a nested template
+ if (yyextra->insideCS) // for C# >> ends a nested template
{
REJECT;
}
@@ -6132,9 +5737,9 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
// We require the bitshift to be enclosed in braces.
// See http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html
{
- if (roundCount>0)
+ if (yyextra->roundCount>0)
{
- *specName += yytext;
+ *yyextra->specName += yytext;
}
else
{
@@ -6144,64 +5749,64 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
}
-<Specialization>"typename"{BN}+ { lineCount(); }
-<Specialization>"(" { *specName += *yytext; roundCount++; }
-<Specialization>")" { *specName += *yytext; roundCount--; }
-
-<Specialization>"\\\\" { *specName += *yytext;}
-<Specialization>"\\'" { *specName += *yytext;}
-<Specialization>"\\\"" { *specName += *yytext;}
-<Specialization>"'" { *specName += *yytext;BEGIN(SpecializationSingleQuote);}
-<Specialization>"\"" { *specName += *yytext;BEGIN(SpecializationDoubleQuote);}
-<SpecializationSingleQuote,SpecializationDoubleQuote>"\\\\" { *specName += *yytext;}
-<SpecializationSingleQuote>"\\'" { *specName += *yytext;}
-<SpecializationSingleQuote>"'" { *specName += *yytext; BEGIN(Specialization);}
-<SpecializationDoubleQuote>"\\\"" { *specName += *yytext;}
-<SpecializationDoubleQuote>"\"" { *specName += *yytext; BEGIN(Specialization);}
-<SpecializationSingleQuote,SpecializationDoubleQuote>. { *specName += *yytext;}
+<Specialization>"typename"{BN}+ { lineCount(yyscanner); }
+<Specialization>"(" { *yyextra->specName += *yytext; yyextra->roundCount++; }
+<Specialization>")" { *yyextra->specName += *yytext; yyextra->roundCount--; }
+
+<Specialization>"\\\\" { *yyextra->specName += *yytext;}
+<Specialization>"\\'" { *yyextra->specName += *yytext;}
+<Specialization>"\\\"" { *yyextra->specName += *yytext;}
+<Specialization>"'" { *yyextra->specName += *yytext;BEGIN(SpecializationSingleQuote);}
+<Specialization>"\"" { *yyextra->specName += *yytext;BEGIN(SpecializationDoubleQuote);}
+<SpecializationSingleQuote,SpecializationDoubleQuote>"\\\\" { *yyextra->specName += *yytext;}
+<SpecializationSingleQuote>"\\'" { *yyextra->specName += *yytext;}
+<SpecializationSingleQuote>"'" { *yyextra->specName += *yytext; BEGIN(Specialization);}
+<SpecializationDoubleQuote>"\\\"" { *yyextra->specName += *yytext;}
+<SpecializationDoubleQuote>"\"" { *yyextra->specName += *yytext; BEGIN(Specialization);}
+<SpecializationSingleQuote,SpecializationDoubleQuote>. { *yyextra->specName += *yytext;}
<Specialization>. {
- *specName += *yytext;
+ *yyextra->specName += *yytext;
}
-<SkipRound>"(" { ++roundCount; }
-<SkipRound>")" { if (--roundCount<0)
- BEGIN ( lastSkipRoundContext );
+<SkipRound>"(" { ++yyextra->roundCount; }
+<SkipRound>")" { if (--yyextra->roundCount<0)
+ BEGIN ( yyextra->lastSkipRoundContext );
}
<SkipRound>\" {
- lastStringContext=SkipRound;
+ yyextra->lastStringContext=SkipRound;
BEGIN(SkipString);
}
-<Bases>","|(">"({BN}*"{")?)|({BN}+"implements"{BN}*) { lineCount();
- if (insideProtocolList)
+<Bases>","|(">"({BN}*"{")?)|({BN}+"implements"{BN}*) { lineCount(yyscanner);
+ if (yyextra->insideProtocolList)
{
- baseName+="-p";
+ yyextra->baseName+="-p";
}
else
{
- current->args += ',' ;
+ yyextra->current->args += ',' ;
}
- current->name = removeRedundantWhiteSpace(current->name);
- if (!baseName.isEmpty())
+ yyextra->current->name = removeRedundantWhiteSpace(yyextra->current->name);
+ if (!yyextra->baseName.isEmpty())
{
- current->extends->append(
- new BaseInfo(baseName,baseProt,baseVirt)
+ yyextra->current->extends.push_back(
+ BaseInfo(yyextra->baseName,yyextra->baseProt,yyextra->baseVirt)
);
}
- if ((current->spec & (Entry::Interface|Entry::Struct)) ||
- insideJava || insidePHP || insideCS ||
- insideD || insideObjC || insideIDL || insideSlice)
+ if ((yyextra->current->spec & (Entry::Interface|Entry::Struct)) ||
+ yyextra->insideJava || yyextra->insidePHP || yyextra->insideCS ||
+ yyextra->insideD || yyextra->insideObjC || yyextra->insideIDL || yyextra->insideSlice)
{
- baseProt=Public;
+ yyextra->baseProt=Public;
}
else
{
- baseProt=Private;
+ yyextra->baseProt=Private;
}
- baseVirt=Normal;
- baseName.resize(0);
+ yyextra->baseVirt=Normal;
+ yyextra->baseName.resize(0);
if (*yytext=='>')
{ // end of a ObjC protocol list
- insideProtocolList=FALSE;
+ yyextra->insideProtocolList=FALSE;
if (yyleng==1)
{
unput('{'); // dummy start body
@@ -6213,23 +5818,23 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
else
{
- if (*yytext==',' && insideObjC) // Begin of protocol list
+ if (*yytext==',' && yyextra->insideObjC) // Begin of protocol list
{
- insideProtocolList=TRUE;
+ yyextra->insideProtocolList=TRUE;
}
BEGIN(BasesProt);
}
}
-<Bases>{B}*"{"{B}* { current->fileName = yyFileName ;
- current->startLine = yyLineNr ;
- current->startColumn = yyColNr;
- current->name = removeRedundantWhiteSpace(current->name);
- if (!baseName.isEmpty())
- current->extends->append(
- new BaseInfo(baseName,baseProt,baseVirt)
+<Bases>{B}*"{"{B}* { yyextra->current->fileName = yyextra->yyFileName ;
+ yyextra->current->startLine = yyextra->yyLineNr ;
+ yyextra->current->startColumn = yyextra->yyColNr;
+ yyextra->current->name = removeRedundantWhiteSpace(yyextra->current->name);
+ if (!yyextra->baseName.isEmpty())
+ yyextra->current->extends.push_back(
+ BaseInfo(yyextra->baseName,yyextra->baseProt,yyextra->baseVirt)
);
- curlyCount=0;
- if (insideObjC)
+ yyextra->curlyCount=0;
+ if (yyextra->insideObjC)
{
BEGIN( ReadBodyIntf );
}
@@ -6239,217 +5844,214 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<SkipUnionSwitch>{B}*"(" {
- roundCount++;
+ yyextra->roundCount++;
}
<SkipUnionSwitch>")" {
- if (--roundCount==0)
+ if (--yyextra->roundCount==0)
{
BEGIN(ClassVar);
}
}
-<SkipUnionSwitch>\n { lineCount(); }
+<SkipUnionSwitch>\n { lineCount(yyscanner); }
<SkipUnionSwitch>.
-<Comment>{BN}+ { current->program += yytext ;
- lineCount() ;
+<Comment>{BN}+ { yyextra->current->program += yytext ;
+ lineCount(yyscanner) ;
}
-<Comment>"/*" { current->program += yytext ; }
-<Comment>"//" { current->program += yytext ; }
+<Comment>"/*" { yyextra->current->program += yytext ; }
+<Comment>"//" { yyextra->current->program += yytext ; }
<Comment>{CMD}("code"|"verbatim") {
- insideCode=TRUE;
- current->program += yytext ;
+ yyextra->insideCode=TRUE;
+ yyextra->current->program += yytext ;
}
<Comment>{CMD}("endcode"|"endverbatim") {
- insideCode=FALSE;
- current->program += yytext ;
+ yyextra->insideCode=FALSE;
+ yyextra->current->program += yytext ;
}
-<Comment>[^ \.\t\r\n\/\*]+ { current->program += yytext ; }
-<Comment>"*/" { current->program += yytext ;
- if (!insideCode) BEGIN( lastContext ) ;
+<Comment>[^ \.\t\r\n\/\*]+ { yyextra->current->program += yytext ; }
+<Comment>"*/" { yyextra->current->program += yytext ;
+ if (!yyextra->insideCode) BEGIN( yyextra->lastContext ) ;
}
-<Comment>. { current->program += *yytext ; }
+<Comment>. { yyextra->current->program += *yytext ; }
<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,SkipC11Inits,SkipC11Attribute,Bases,OldStyleArgs>("//"{B}*)?"/*!" {
- //printf("Start doc block at %d\n",yyLineNr);
- removeSlashes=(yytext[1]=='/');
- tmpDocType=-1;
- if (!current->doc.isEmpty())
+ //printf("Start doc block at %d\n",yyextra->yyLineNr);
+ if (!yyextra->current->doc.isEmpty())
{
- current->doc+="\n\n";
+ yyextra->current->doc+="\n\n";
}
else
{
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
+ yyextra->current->docLine = yyextra->yyLineNr;
+ yyextra->current->docFile = yyextra->yyFileName;
}
- lastDocContext = YY_START;
- if (current_root->section & Entry::SCOPE_MASK)
+ yyextra->lastDocContext = YY_START;
+ if (yyextra->current_root->section & Entry::SCOPE_MASK)
{
- current->inside = current_root->name+"::";
+ yyextra->current->inside = yyextra->current_root->name+"::";
}
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- docBlockAutoBrief = Config_getBool(QT_AUTOBRIEF);
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = YY_START==SkipCurly;
+ yyextra->docBlockAutoBrief = Config_getBool(QT_AUTOBRIEF);
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
- if (docBlockAutoBrief)
+ if (yyextra->docBlockAutoBrief)
{
- current->briefLine = yyLineNr;
- current->briefFile = yyFileName;
+ yyextra->current->briefLine = yyextra->yyLineNr;
+ yyextra->current->briefFile = yyextra->yyFileName;
}
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases,OldStyleArgs>"/**"[*]+{BL} {
+ bool javadocBanner = Config_getBool(JAVADOC_BANNER);
+ lineCount(yyscanner);
- static bool javadocBanner = Config_getBool(JAVADOC_BANNER);
-
- if( javadocBanner ) {
- lastDocContext = YY_START;
+ if( javadocBanner )
+ {
+ yyextra->lastDocContext = YY_START;
- //printf("Found comment banner at %s:%d\n",yyFileName,yyLineNr);
- if (current_root->section & Entry::SCOPE_MASK)
- {
- current->inside = current_root->name+"::";
- }
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- static bool javadocAutoBrief = Config_getBool(JAVADOC_AUTOBRIEF);
- docBlockAutoBrief = javadocAutoBrief;
+ //printf("Found comment banner at %s:%d\n",yyextra->yyFileName,yyextra->yyLineNr);
+ if (yyextra->current_root->section & Entry::SCOPE_MASK)
+ {
+ yyextra->current->inside = yyextra->current_root->name+"::";
+ }
+ yyextra->current->docLine = yyextra->yyLineNr;
+ yyextra->current->docFile = yyextra->yyFileName;
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = YY_START==SkipCurly;
+ bool javadocAutoBrief = Config_getBool(JAVADOC_AUTOBRIEF);
+ yyextra->docBlockAutoBrief = javadocAutoBrief;
- QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
+ QCString indent;
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
- if (docBlockAutoBrief)
- {
- current->briefLine = yyLineNr;
- current->briefFile = yyFileName;
- }
- startCommentBlock(FALSE);
- BEGIN( DocBlock );
- } else {
- current->program += yytext ;
- lastContext = YY_START ;
- BEGIN( Comment ) ;
+ if (yyextra->docBlockAutoBrief)
+ {
+ yyextra->current->briefLine = yyextra->yyLineNr;
+ yyextra->current->briefFile = yyextra->yyFileName;
+ }
+ startCommentBlock(yyscanner,FALSE);
+ BEGIN( DocBlock );
+ }
+ else
+ {
+ yyextra->current->program += yytext ;
+ yyextra->lastContext = YY_START ;
+ BEGIN( Comment ) ;
}
-
}
<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases,OldStyleArgs>("//"{B}*)?"/**"/[^/*] {
- removeSlashes=(yytext[1]=='/');
- lastDocContext = YY_START;
+ yyextra->lastDocContext = YY_START;
- //printf("Found comment block at %s:%d\n",yyFileName,yyLineNr);
- if (current_root->section & Entry::SCOPE_MASK)
+ //printf("Found comment block at %s:%d\n",yyextra->yyFileName,yyextra->yyLineNr);
+ if (yyextra->current_root->section & Entry::SCOPE_MASK)
{
- current->inside = current_root->name+"::";
+ yyextra->current->inside = yyextra->current_root->name+"::";
}
- current->docLine = yyLineNr;
- current->docFile = yyFileName;
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- static bool javadocAutoBrief = Config_getBool(JAVADOC_AUTOBRIEF);
- docBlockAutoBrief = javadocAutoBrief;
+ yyextra->current->docLine = yyextra->yyLineNr;
+ yyextra->current->docFile = yyextra->yyFileName;
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = YY_START==SkipCurly;
+ bool javadocAutoBrief = Config_getBool(JAVADOC_AUTOBRIEF);
+ yyextra->docBlockAutoBrief = javadocAutoBrief;
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
- if (docBlockAutoBrief)
+ if (yyextra->docBlockAutoBrief)
{
- current->briefLine = yyLineNr;
- current->briefFile = yyFileName;
+ yyextra->current->briefLine = yyextra->yyLineNr;
+ yyextra->current->briefFile = yyextra->yyFileName;
}
- startCommentBlock(FALSE);
+ startCommentBlock(yyscanner,FALSE);
BEGIN( DocBlock );
}
<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases,OldStyleArgs>"//!" {
- tmpDocType=-1;
- lastDocContext = YY_START;
- if (current_root->section & Entry::SCOPE_MASK)
+ yyextra->lastDocContext = YY_START;
+ if (yyextra->current_root->section & Entry::SCOPE_MASK)
{
- current->inside = current_root->name+"::";
+ yyextra->current->inside = yyextra->current_root->name+"::";
}
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- docBlockAutoBrief = FALSE;
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = YY_START==SkipCurly;
+ yyextra->docBlockAutoBrief = FALSE;
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
- startCommentBlock(current->brief.isEmpty());
+ startCommentBlock(yyscanner,yyextra->current->brief.isEmpty());
BEGIN( DocLine );
}
<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases,OldStyleArgs>"///"/[^/] {
- tmpDocType=-1;
- lastDocContext = YY_START;
- if (current_root->section & Entry::SCOPE_MASK)
+ yyextra->lastDocContext = YY_START;
+ if (yyextra->current_root->section & Entry::SCOPE_MASK)
{
- current->inside = current_root->name+"::";
+ yyextra->current->inside = yyextra->current_root->name+"::";
}
- docBlockContext = YY_START;
- docBlockInBody = YY_START==SkipCurly;
- docBlockAutoBrief = FALSE;
+ yyextra->docBlockContext = YY_START;
+ yyextra->docBlockInBody = YY_START==SkipCurly;
+ yyextra->docBlockAutoBrief = FALSE;
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock=indent;
- startCommentBlock(current->brief.isEmpty());
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock=indent;
+ startCommentBlock(yyscanner,yyextra->current->brief.isEmpty());
BEGIN( DocLine );
}
<FindMembers>"extern"{BN}*"\"C"("++")?"\""{BN}*("{")? {
- lineCount();
- externC=TRUE;
+ lineCount(yyscanner);
+ yyextra->externC=TRUE;
}
<FindMembers>"{" {
- if (externC)
+ if (yyextra->externC)
{
- externC=FALSE;
+ yyextra->externC=FALSE;
}
- else if (insideCS &&
- !current->name.isEmpty() &&
- !current->type.isEmpty())
+ else if (yyextra->insideCS &&
+ !yyextra->current->name.isEmpty() &&
+ !yyextra->current->type.isEmpty())
{
- if (containsWord(current->type,"event")) // event
+ if (containsWord(yyextra->current->type,"event")) // event
{
- current->mtype = mtype = Event;
+ yyextra->current->mtype = yyextra->mtype = Event;
}
else // property
{
- current->mtype = mtype = Property;
+ yyextra->current->mtype = yyextra->mtype = Property;
}
- current->bodyLine = yyLineNr;
- curlyCount=0;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->curlyCount=0;
BEGIN( CSAccessorDecl );
}
- else if (insideIDL && (current->spec & Entry::Attribute))
+ else if (yyextra->insideIDL && (yyextra->current->spec & Entry::Attribute))
{
// UNO IDL: attributes may have setter and getter
// exception specifications
- current->exception = " {";
+ yyextra->current->exception = " {";
BEGIN(UNOIDLAttributeBlock);
}
else
{
- if ((insideJava || insideCS || insideD) &&
- current->name.isEmpty()
+ if ((yyextra->insideJava || yyextra->insideCS || yyextra->insideD) &&
+ yyextra->current->name.isEmpty()
)
{
// static Java initializer
- needsSemi = FALSE;
- if (current->stat)
+ yyextra->needsSemi = FALSE;
+ if (yyextra->current->stat)
{
- current->name="[static initializer]";
- current->type.resize(0);
+ yyextra->current->name="[static initializer]";
+ yyextra->current->type.resize(0);
}
else
{
- current->name="[instance initializer]";
+ yyextra->current->name="[instance initializer]";
}
unput(*yytext);
BEGIN( Function );
@@ -6457,122 +6059,122 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
else
{
// pre C++11 code -> ignore the initializer
- //needsSemi = TRUE;
- //current->type.resize(0);
- //current->name.resize(0);
- //current->args.resize(0);
- //current->argList->clear();
- //curlyCount=0;
+ //yyextra->needsSemi = TRUE;
+ //yyextra->current->type.resize(0);
+ //yyextra->current->name.resize(0);
+ //yyextra->current->args.resize(0);
+ //yyextra->current->argList.clear();
+ //yyextra->curlyCount=0;
//BEGIN( SkipCurlyBlock );
// C++11 style initializer list
- current->bodyLine = yyLineNr;
- current->initializer = yytext;
- lastInitializerContext = YY_START;
- initBracketCount=1;
+ yyextra->current->bodyLine = yyextra->yyLineNr;
+ yyextra->current->initializer = yytext;
+ yyextra->lastInitializerContext = YY_START;
+ yyextra->initBracketCount=1;
BEGIN(ReadInitializer);
}
}
}
-<CSAccessorDecl>"{" { curlyCount++; }
+<CSAccessorDecl>"{" { yyextra->curlyCount++; }
<CSAccessorDecl>"}"{B}*"=" {
// fall back to next rule if it's not the right bracket
- if (curlyCount != 0) REJECT;
- current->initializer = "=";
- current->endBodyLine=yyLineNr;
- lastInitializerContext = FindMembers;
+ if (yyextra->curlyCount != 0) REJECT;
+ yyextra->current->initializer = "=";
+ yyextra->current->endBodyLine=yyextra->yyLineNr;
+ yyextra->lastInitializerContext = FindMembers;
BEGIN(ReadInitializer);
}
<CSAccessorDecl>"}" {
- if (curlyCount)
+ if (yyextra->curlyCount)
{
- curlyCount--;
+ yyextra->curlyCount--;
}
else
{
- mtype = Method;
- virt = Normal;
+ yyextra->mtype = Method;
+ yyextra->virt = Normal;
// not really important, but while we are at it
- current->endBodyLine=yyLineNr;
+ yyextra->current->endBodyLine=yyextra->yyLineNr;
unput(';');
BEGIN(FindMembers);
}
}
-<CSAccessorDecl>"private "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::PrivateSettable; }
-<CSAccessorDecl>"protected "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::ProtectedSettable; }
-<CSAccessorDecl>"private "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::PrivateGettable; }
-<CSAccessorDecl>"protected "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::ProtectedGettable; }
-<CSAccessorDecl>"set" { if (curlyCount==0) current->spec |= Entry::Settable; }
-<CSAccessorDecl>"get" { if (curlyCount==0) current->spec |= Entry::Gettable; }
-<CSAccessorDecl>"add" { if (curlyCount==0) current->spec |= Entry::Addable; }
-<CSAccessorDecl>"remove" { if (curlyCount==0) current->spec |= Entry::Removable; }
-<CSAccessorDecl>"raise" { if (curlyCount==0) current->spec |= Entry::Raisable; }
+<CSAccessorDecl>"private "{BN}*"set" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::PrivateSettable; }
+<CSAccessorDecl>"protected "{BN}*"set" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::ProtectedSettable; }
+<CSAccessorDecl>"private "{BN}*"get" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::PrivateGettable; }
+<CSAccessorDecl>"protected "{BN}*"get" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::ProtectedGettable; }
+<CSAccessorDecl>"set" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::Settable; }
+<CSAccessorDecl>"get" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::Gettable; }
+<CSAccessorDecl>"add" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::Addable; }
+<CSAccessorDecl>"remove" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::Removable; }
+<CSAccessorDecl>"raise" { if (yyextra->curlyCount==0) yyextra->current->spec |= Entry::Raisable; }
<CSAccessorDecl>"\"" { BEGIN(CSString);}
<CSAccessorDecl>"." {}
-<CSAccessorDecl>\n { lineCount(); }
+<CSAccessorDecl>\n { lineCount(yyscanner); }
<CSString>"\"" { BEGIN(CSAccessorDecl);}
<CSString>"//" {} // Otherwise the rule <*>"//" will kick in
<CSString>"/*" {} // Otherwise the rule <*>"/*" will kick in
-<CSString>\n { lineCount(); }
+<CSString>\n { lineCount(yyscanner); }
<CSString>"." {}
/* ---- Slice-specific rules ------ */
<SliceSequence>{SCOPENAME} {
- if (current->spec&Entry::Local)
+ if (yyextra->current->spec&Entry::Local)
{
- current->type = "local ";
+ yyextra->current->type = "local ";
}
- current->type += "sequence<";
- current->type += yytext;
- current->type += ">";
+ yyextra->current->type += "sequence<";
+ yyextra->current->type += yytext;
+ yyextra->current->type += ">";
}
<SliceSequence>{BN}*">"{BN}* {
- lineCount();
+ lineCount(yyscanner);
BEGIN(SliceSequenceName);
}
<SliceSequenceName>{ID}{BN}* {
- lineCount();
- current->name = yytext ;
- current->name = current->name.stripWhiteSpace();
+ lineCount(yyscanner);
+ yyextra->current->name = yytext ;
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
}
<SliceSequenceName>";" {
- current->section = Entry::VARIABLE_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current->section = Entry::VARIABLE_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN(FindMembers);
}
<SliceDictionary>{SCOPENAME}{BN}*","{BN}*{SCOPENAME} {
- lineCount();
- if (current->spec&Entry::Local)
+ lineCount(yyscanner);
+ if (yyextra->current->spec&Entry::Local)
{
- current->type = "local ";
+ yyextra->current->type = "local ";
}
- current->type += "dictionary<";
- current->type += yytext;
- current->type += ">";
- current->type = current->type.simplifyWhiteSpace();
+ yyextra->current->type += "dictionary<";
+ yyextra->current->type += yytext;
+ yyextra->current->type += ">";
+ yyextra->current->type = yyextra->current->type.simplifyWhiteSpace();
}
<SliceDictionary>{BN}*">"{BN}* {
- lineCount();
+ lineCount(yyscanner);
BEGIN(SliceDictionaryName);
}
<SliceDictionaryName>{ID}{BN}* {
- lineCount();
- current->name = yytext ;
- current->name = current->name.stripWhiteSpace();
+ lineCount(yyscanner);
+ yyextra->current->name = yytext ;
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
}
<SliceDictionaryName>";" {
- current->section = Entry::VARIABLE_SEC;
- current_root->moveToSubEntryAndRefresh(current);
- initEntry();
+ yyextra->current->section = Entry::VARIABLE_SEC;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ initEntry(yyscanner);
BEGIN(FindMembers);
}
@@ -6582,100 +6184,100 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
/* ---- Single line comments ------ */
<DocLine>[^\n]*"\n"[ \t]*"//"[/!][<]? { // continuation of multiline C++-style comment
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
int markerLen = yytext[yyleng-1]=='<' ? 4 : 3;
- docBlock.resize(docBlock.length() - markerLen);
- lineCount();
+ yyextra->docBlock.resize(yyextra->docBlock.length() - markerLen);
+ lineCount(yyscanner);
}
<DocLine>{B}*"///"[/]+{B}*/"\n" { // ignore marker line (see bug700345)
- handleCommentBlock(docBlock.data(),current->brief.isEmpty());
- BEGIN( docBlockContext );
+ handleCommentBlock(yyscanner,yyextra->docBlock.data(),yyextra->current->brief.isEmpty());
+ BEGIN( yyextra->docBlockContext );
}
<DocLine>[^\n]*/"\n"{B}*"//"[!/]{B}*{CMD}"}" { // next line is an end group marker, see bug 752712
- docBlock+=yytext;
- handleCommentBlock(docBlock.data(),current->brief.isEmpty());
- BEGIN( docBlockContext );
+ yyextra->docBlock+=yytext;
+ handleCommentBlock(yyscanner,yyextra->docBlock.data(),yyextra->current->brief.isEmpty());
+ BEGIN( yyextra->docBlockContext );
}
<DocLine>[^\n]*/"\n" { // whole line
- docBlock+=yytext;
- handleCommentBlock(docBlock.data(),current->brief.isEmpty());
- BEGIN( docBlockContext );
+ yyextra->docBlock+=yytext;
+ handleCommentBlock(yyscanner,yyextra->docBlock.data(),yyextra->current->brief.isEmpty());
+ BEGIN( yyextra->docBlockContext );
}
/* ---- Comments blocks ------ */
<DocBlock>"*"*"*/" { // end of comment block
- handleCommentBlock(docBlock.data(),FALSE);
- BEGIN(docBlockContext);
+ handleCommentBlock(yyscanner,yyextra->docBlock.data(),FALSE);
+ BEGIN(yyextra->docBlockContext);
}
<DocBlock>^{B}*"*"+/[^/] {
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock+=indent;
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock+=indent;
}
<DocBlock>^{B}*("//")?{B}*"*"+/[^//a-z_A-Z0-9*] { // start of a comment line
QCString indent;
- indent.fill(' ',computeIndent(yytext,g_column));
- docBlock+=indent;
+ indent.fill(' ',computeIndent(yytext,yyextra->column));
+ yyextra->docBlock+=indent;
}
<DocBlock>^{B}*("//"){B}* { // strip embedded C++ comments if at the start of a line
}
<DocBlock>"//" { // slashes in the middle of a comment block
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
}
<DocBlock>"/*" { // start of a new comment in the
// middle of a comment block
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
}
<DocBlock>({CMD}{CMD}){ID}/[^a-z_A-Z0-9] { // escaped command
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
}
<DocBlock>{CMD}("f$"|"f["|"f{") {
- docBlock+=yytext;
- docBlockName=&yytext[1];
- if (docBlockName.at(1)=='{')
+ yyextra->docBlock+=yytext;
+ yyextra->docBlockName=&yytext[1];
+ if (yyextra->docBlockName.at(1)=='{')
{
- docBlockName.at(1)='}';
+ yyextra->docBlockName.at(1)='}';
}
- g_fencedSize=0;
- g_nestedComment=FALSE;
+ yyextra->fencedSize=0;
+ yyextra->nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
<DocBlock>{B}*"<"{PRE}">" {
- docBlock+=yytext;
- docBlockName="<pre>";
- g_fencedSize=0;
- g_nestedComment=FALSE;
+ yyextra->docBlock+=yytext;
+ yyextra->docBlockName="<pre>";
+ yyextra->fencedSize=0;
+ yyextra->nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
<DocBlock>{CMD}("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"manonly"|"dot"|"code")/[^a-z_A-Z0-9\-] { // verbatim command (which could contain nested comments!)
- docBlock+=yytext;
- docBlockName=&yytext[1];
- g_fencedSize=0;
- g_nestedComment=FALSE;
+ yyextra->docBlock+=yytext;
+ yyextra->docBlockName=&yytext[1];
+ yyextra->fencedSize=0;
+ yyextra->nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
<DocBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
- docBlock+=substitute(yytext,"*"," ");
- docBlockName="~~~";
- g_fencedSize=yyleng;
- g_nestedComment=FALSE;
+ yyextra->docBlock+=substitute(yytext,"*"," ");
+ yyextra->docBlockName="~~~";
+ yyextra->fencedSize=yyleng;
+ yyextra->nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
<DocBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* {
- docBlock+=substitute(yytext,"*"," ");
- docBlockName="```";
- g_fencedSize=yyleng;
- g_nestedComment=FALSE;
+ yyextra->docBlock+=substitute(yytext,"*"," ");
+ yyextra->docBlockName="```";
+ yyextra->fencedSize=yyleng;
+ yyextra->nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
<DocBlock>{B}*"<code>" {
- if (insideCS)
+ if (yyextra->insideCS)
{
- docBlock+=yytext;
- docBlockName="<code>";
- g_nestedComment=FALSE;
+ yyextra->docBlock+=yytext;
+ yyextra->docBlockName="<code>";
+ yyextra->nestedComment=FALSE;
BEGIN(DocCopyBlock);
}
else
@@ -6684,49 +6286,49 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<DocBlock>[^@*~\/\\\n]+ { // any character that isn't special
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
}
<DocBlock>\n { // newline
- lineCount();
- docBlock+=*yytext;
+ lineCount(yyscanner);
+ yyextra->docBlock+=*yytext;
}
<DocBlock>. { // command block
- docBlock+=*yytext;
+ yyextra->docBlock+=*yytext;
}
/* ---- Copy verbatim sections ------ */
<DocCopyBlock>"</"{PRE}">" { // end of a <pre> block
- docBlock+=yytext;
- if (docBlockName=="<pre>")
+ yyextra->docBlock+=yytext;
+ if (yyextra->docBlockName=="<pre>")
{
BEGIN(DocBlock);
}
}
<DocCopyBlock>"</"{CODE}">" { // end of a <code> block
- docBlock+=yytext;
- if (docBlockName=="<code>")
+ yyextra->docBlock+=yytext;
+ if (yyextra->docBlockName=="<code>")
{
BEGIN(DocBlock);
}
}
<DocCopyBlock>[\\@]("f$"|"f]"|"f}") {
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
BEGIN(DocBlock);
}
<DocCopyBlock>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddocbookonly"|"endmanonly"|"enddot"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
- docBlock+=yytext;
- if (&yytext[4]==docBlockName)
+ yyextra->docBlock+=yytext;
+ if (&yytext[4]==yyextra->docBlockName)
{
BEGIN(DocBlock);
}
}
<DocCopyBlock>^{B}*"*"+/{BN}+ { // start of a comment line
- if (docBlockName=="verbatim")
+ if (yyextra->docBlockName=="verbatim")
{
REJECT;
}
- else if (docBlockName=="code")
+ else if (yyextra->docBlockName=="code")
{
REJECT;
}
@@ -6734,15 +6336,15 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
{
QCString indent;
indent.fill(' ',computeIndent(yytext,0));
- docBlock+=indent;
+ yyextra->docBlock+=indent;
}
}
<DocCopyBlock>^{B}*"*"+/{B}+"*"{BN}* { // start of a comment line with two *'s
- if (docBlockName=="code")
+ if (yyextra->docBlockName=="code")
{
QCString indent;
indent.fill(' ',computeIndent(yytext,0));
- docBlock+=indent;
+ yyextra->docBlock+=indent;
}
else
{
@@ -6750,11 +6352,11 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<DocCopyBlock>^{B}*"*"+/({ID}|"(") { // Assume *var or *(... is part of source code (see bug723516)
- if (docBlockName=="code")
+ if (yyextra->docBlockName=="code")
{
QCString indent;
indent.fill(' ',computeIndent(yytext,-1));
- docBlock+=indent+"*";
+ yyextra->docBlock+=indent+"*";
}
else
{
@@ -6762,18 +6364,18 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<DocCopyBlock>^{B}*"*"+/{BN}* { // start of a comment line with one *
- if (docBlockName=="code")
+ if (yyextra->docBlockName=="code")
{
QCString indent;
- if (g_nestedComment) // keep * it is part of the code
+ if (yyextra->nestedComment) // keep * it is part of the code
{
indent.fill(' ',computeIndent(yytext,-1));
- docBlock+=indent+"*";
+ yyextra->docBlock+=indent+"*";
}
else // remove * it is part of the comment block
{
indent.fill(' ',computeIndent(yytext,0));
- docBlock+=indent;
+ yyextra->docBlock+=indent;
}
}
else
@@ -6782,45 +6384,45 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
}
}
<DocCopyBlock>^({B}*"*"+)?{B}{0,3}"~~~"[~]* {
- docBlock+=substitute(yytext,"*"," ");
- if (g_fencedSize==yyleng)
+ yyextra->docBlock+=substitute(yytext,"*"," ");
+ if (yyextra->fencedSize==yyleng)
{
BEGIN(DocBlock);
}
}
<DocCopyBlock>^({B}*"*"+)?{B}{0,3}"```"[`]* {
- docBlock+=substitute(yytext,"*"," ");
- if (g_fencedSize==yyleng)
+ yyextra->docBlock+=substitute(yytext,"*"," ");
+ if (yyextra->fencedSize==yyleng)
{
BEGIN(DocBlock);
}
}
<DocCopyBlock>[^\<@/*\]~\$\\\n]+ { // any character that is not special
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
}
<DocCopyBlock>"/*"|"*/"|"//" {
if (yytext[1]=='*')
{
- g_nestedComment=TRUE;
+ yyextra->nestedComment=TRUE;
}
else if (yytext[0]=='*')
{
- g_nestedComment=FALSE;
+ yyextra->nestedComment=FALSE;
}
- docBlock+=yytext;
+ yyextra->docBlock+=yytext;
}
<DocCopyBlock>\n { // newline
- docBlock+=*yytext;
- lineCount();
+ yyextra->docBlock+=*yytext;
+ lineCount(yyscanner);
}
<DocCopyBlock>. { // any other character
- docBlock+=*yytext;
+ yyextra->docBlock+=*yytext;
}
<DocCopyBlock><<EOF>> {
- warn(yyFileName,yyLineNr,
- "reached end of file while inside a '%s' block!\n"
+ warn(yyextra->yyFileName,yyextra->yyLineNr,
+ "reached end of file while yyextra->inside a '%s' block!\n"
"The command that should end the block seems to be missing!\n",
- docBlockName.data());
+ yyextra->docBlockName.data());
yyterminate();
}
@@ -6828,69 +6430,69 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
/* ------------- Prototype parser -------------- */
<Prototype>"operator"{B}*"("{B}*")" {
- current->name+=yytext;
+ yyextra->current->name+=yytext;
}
<Prototype>"(" {
- current->args+=*yytext;
- currentArgumentContext = PrototypeQual;
- fullArgString = current->args.copy();
- copyArgString = &current->args;
+ yyextra->current->args+=*yytext;
+ yyextra->currentArgumentContext = PrototypeQual;
+ yyextra->fullArgString = yyextra->current->args.copy();
+ yyextra->copyArgString = &yyextra->current->args;
BEGIN( ReadFuncArgType ) ;
}
<Prototype>"("({ID}"::")*({B}*[&*])+ {
- current->type+=current->name+yytext;
- current->name.resize(0);
+ yyextra->current->type+=yyextra->current->name+yytext;
+ yyextra->current->name.resize(0);
BEGIN( PrototypePtr );
}
<PrototypePtr>{SCOPENAME} {
- current->name+=yytext;
+ yyextra->current->name+=yytext;
}
<PrototypePtr>"(" {
- current->args+=*yytext;
- currentArgumentContext = PrototypeQual;
- fullArgString = current->args.copy();
- copyArgString = &current->args;
+ yyextra->current->args+=*yytext;
+ yyextra->currentArgumentContext = PrototypeQual;
+ yyextra->fullArgString = yyextra->current->args.copy();
+ yyextra->copyArgString = &yyextra->current->args;
BEGIN( ReadFuncArgType ) ;
}
<PrototypePtr>")" {
- current->type+=')';
+ yyextra->current->type+=')';
BEGIN( Prototype );
}
<PrototypePtr>. {
- current->name+=yytext;
+ yyextra->current->name+=yytext;
}
<PrototypeQual>"{" {
BEGIN( PrototypeSkipLine);
}
<PrototypeQual>{B}*"const"{B}* {
- current->args += " const ";
- current->argList->constSpecifier=TRUE;
+ yyextra->current->args += " const ";
+ yyextra->current->argList.constSpecifier=TRUE;
}
<PrototypeQual>{B}*"volatile"{B}* {
- current->args += " volatile ";
- current->argList->volatileSpecifier=TRUE;
+ yyextra->current->args += " volatile ";
+ yyextra->current->argList.volatileSpecifier=TRUE;
}
<PrototypeQual>{B}*"="{B}*"0"{B}* {
- current->args += " = 0";
- current->virt = Pure;
- current->argList->pureSpecifier=TRUE;
+ yyextra->current->args += " = 0";
+ yyextra->current->virt = Pure;
+ yyextra->current->argList.pureSpecifier=TRUE;
}
<PrototypeQual>"throw"{B}*"(" {
- current->exception = "throw(";
+ yyextra->current->exception = "throw(";
BEGIN(PrototypeExc);
}
<PrototypeExc>")" {
- current->exception += ')';
+ yyextra->current->exception += ')';
BEGIN(PrototypeQual);
}
<PrototypeExc>. {
- current->exception += *yytext;
+ yyextra->current->exception += *yytext;
}
<PrototypeQual>. {
- current->args += *yytext;
+ yyextra->current->args += *yytext;
}
<Prototype>. {
- current->name += *yytext;
+ yyextra->current->name += *yytext;
}
<PrototypeSkipLine>. {
}
@@ -6899,149 +6501,475 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
<SkipCxxComment>.*"\\\n" { // line continuation
- if (insideCS)
+ if (yyextra->insideCS)
{
REJECT;
}
else
{
- lineCount();
+ lineCount(yyscanner);
}
}
<SkipCxxComment>.*/\n {
- BEGIN( lastCContext ) ;
+ BEGIN( yyextra->lastCContext ) ;
}
<SkipComment>[^\*\n]+
/* ------------ Generic rules -------------- */
<*>"[[" { // C++11 attribute
- if (!insideCpp) REJECT;
+ if (!yyextra->insideCpp) REJECT;
if (YY_START == CopyGString || YY_START == CopyGString) REJECT;
- lastC11AttributeContext = YY_START;
+ yyextra->lastC11AttributeContext = YY_START;
BEGIN( SkipC11Attribute );
}
-<*>\n { lineCount(); }
+<*>\n { lineCount(yyscanner); }
<*>\" {
- if (insideIDL && insideCppQuote)
+ if (yyextra->insideIDL && yyextra->insideCppQuote)
{
BEGIN(EndCppQuote);
}
}
<*>"#" {
- if (!insidePHP)
+ if (!yyextra->insidePHP)
REJECT;
- lastCContext = YY_START ;
+ yyextra->lastCContext = YY_START ;
BEGIN( SkipCxxComment ) ;
}
<*>\' {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- lastStringContext=YY_START;
+ yyextra->lastStringContext=YY_START;
BEGIN(SkipPHPString);
}
}
<*>\" {
- if (insidePHP)
+ if (yyextra->insidePHP)
{
- lastStringContext=YY_START;
+ yyextra->lastStringContext=YY_START;
BEGIN(SkipString);
}
}
<*>\? {
- if (insideCS)
+ if (yyextra->insideCS && (YY_START != SkipRound))
{
- if (current->type.isEmpty())
+ if (yyextra->current->type.isEmpty())
{
- if (current->name.isEmpty())
- current->name="?";
+ if (yyextra->current->name.isEmpty())
+ yyextra->current->name="?";
else
- current->name+="?";
+ yyextra->current->name+="?";
}
else
{
- current->type+="?";
+ yyextra->current->type+="?";
}
}
}
<*>.
<SkipComment>"//"|"/*"
-<*>"/*" { lastCContext = YY_START ;
+<*>"/*" { yyextra->lastCContext = YY_START ;
BEGIN( SkipComment ) ;
}
-<SkipComment>{B}*"*/" { BEGIN( lastCContext ) ; }
+<SkipComment>{B}*"*/" { BEGIN( yyextra->lastCContext ) ; }
<*>"//" {
- lastCContext = YY_START ;
+ yyextra->lastCContext = YY_START ;
BEGIN( SkipCxxComment ) ;
}
%%
//----------------------------------------------------------------------------
+static int yyread(yyscan_t yyscanner,char *buf,int max_size)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ int c=0;
+ while( c < max_size && yyextra->inputString[yyextra->inputPosition] )
+ {
+ *buf = yyextra->inputString[yyextra->inputPosition++] ;
+ //printf("%d (%c)\n",*buf,*buf);
+ c++; buf++;
+ }
+ return c;
+}
+
+
+static void initParser(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ yyextra->outerScopeEntries.clear();
+ yyextra->baseName.resize(0);
+ yyextra->protection = Public;
+ yyextra->baseProt = Public;
+ yyextra->sharpCount = 0;
+ yyextra->roundCount = 0;
+ yyextra->curlyCount = 0;
+ yyextra->mtype = Method;
+ yyextra->stat = FALSE;
+ yyextra->virt = Normal;
+ yyextra->baseVirt = Normal;
+ yyextra->isTypedef = FALSE;
+ yyextra->autoGroupStack.clear();
+ yyextra->insideTryBlock = FALSE;
+ yyextra->autoGroupStack.setAutoDelete(TRUE);
+ yyextra->insideFormula = FALSE;
+ yyextra->insideCode=FALSE;
+ yyextra->insideCli=Config_getBool(CPP_CLI_SUPPORT);
+ yyextra->previous = 0;
+ yyextra->firstTypedefEntry.reset();
+ yyextra->memspecEntry.reset();
+}
+
+static void initEntry(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->insideJava)
+ {
+ yyextra->protection = (yyextra->current_root->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
+ }
+ yyextra->current->protection = yyextra->protection ;
+ yyextra->current->mtype = yyextra->mtype;
+ yyextra->current->virt = yyextra->virt;
+ yyextra->current->stat = yyextra->stat;
+ yyextra->current->lang = yyextra->language;
+ //printf("*** initEntry(yyscanner) yyextra->language=%d\n",yyextra->language);
+ Doxygen::docGroup.initGroupInfo(yyextra->current.get());
+ yyextra->isTypedef=FALSE;
+}
+
+
+//-----------------------------------------------------------------------------
+
+static void lineCount(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ int tabSize = Config_getInt(TAB_SIZE);
+ const char *p;
+ for (p = yytext ; *p ; ++p )
+ {
+ if (*p=='\n')
+ {
+ yyextra->yyLineNr++,yyextra->column=0,yyextra->yyColNr=1;
+ }
+ else if (*p=='\t')
+ {
+ yyextra->column+=tabSize - (yyextra->column%tabSize);
+ }
+ else
+ {
+ yyextra->column++,yyextra->yyColNr++;
+ }
+ }
+ //printf("lineCount()=%d\n",yyextra->column);
+}
+
+static inline int computeIndent(const char *s,int startIndent)
+{
+ int col=startIndent;
+ int tabSize=Config_getInt(TAB_SIZE);
+ const char *p=s;
+ char c;
+ while ((c=*p++))
+ {
+ if (c=='\t') col+=tabSize-(col%tabSize);
+ else if (c=='\n') col=0;
+ else col++;
+ }
+ return col;
+}
+
+static void addType(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ uint tl=yyextra->current->type.length();
+ if( tl>0 && !yyextra->current->name.isEmpty() && yyextra->current->type.at(tl-1)!='.')
+ {
+ yyextra->current->type += ' ' ;
+ }
+ yyextra->current->type += yyextra->current->name ;
+ yyextra->current->name.resize(0) ;
+ tl=yyextra->current->type.length();
+ if( tl>0 && !yyextra->current->args.isEmpty() && yyextra->current->type.at(tl-1)!='.')
+ {
+ yyextra->current->type += ' ' ;
+ }
+ yyextra->current->type += yyextra->current->args ;
+ yyextra->current->args.resize(0) ;
+ yyextra->current->argList.clear();
+}
+
+
+static QCString stripQuotes(const char *s)
+{
+ QCString name;
+ if (s==0 || *s==0) return name;
+ name=s;
+ if (name.at(0)=='"' && name.at(name.length()-1)=='"')
+ {
+ name=name.mid(1,name.length()-2);
+ }
+ return name;
+}
+
+//-----------------------------------------------------------------
+
+static bool nameIsOperator(QCString &name)
+{
+ int i=name.find("operator");
+ if (i==-1) return FALSE;
+ if (i==0 && !isId(name.at(8))) return TRUE; // case operator ::X
+ if (i>0 && !isId(name.at(i-1)) && !isId(name.at(i+8))) return TRUE; // case X::operator
+ return FALSE; // case TEXToperatorTEXT
+}
+
+//-----------------------------------------------------------------------------
+
+static void setContext(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ yyextra->language = getLanguageFromFileName(yyextra->yyFileName);
+ yyextra->insideIDL = yyextra->language==SrcLangExt_IDL;
+ yyextra->insideJava = yyextra->language==SrcLangExt_Java;
+ yyextra->insideCS = yyextra->language==SrcLangExt_CSharp;
+ yyextra->insideD = yyextra->language==SrcLangExt_D;
+ yyextra->insidePHP = yyextra->language==SrcLangExt_PHP;
+ yyextra->insideObjC = yyextra->language==SrcLangExt_ObjC;
+ yyextra->insideJS = yyextra->language==SrcLangExt_JS;
+ yyextra->insideSlice = yyextra->language==SrcLangExt_Slice;
+ yyextra->insideCpp = yyextra->language==SrcLangExt_Cpp;
+ //printf("setContext(%s) yyextra->insideIDL=%d yyextra->insideJava=%d yyextra->insideCS=%d "
+ // "yyextra->insideD=%d yyextra->insidePHP=%d yyextra->insideObjC=%d\n",
+ // yyextra->yyFileName.data(),yyextra->insideIDL,yyextra->insideJava,yyextra->insideCS,yyextra->insideD,yyextra->insidePHP,yyextra->insideObjC
+ // );
+}
+
+//-----------------------------------------------------------------------------
+
+static void prependScope(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->current_root->section & Entry::SCOPE_MASK)
+ {
+ //printf("--- prependScope %s to %s\n",yyextra->current_root->name.data(),yyextra->current->name.data());
+ yyextra->current->name.prepend(yyextra->current_root->name+"::");
+ //printf("prependScope #=%d #yyextra->current=%d\n",yyextra->current_root->tArgLists->count(),yyextra->current->tArgLists->count());
+ for (const ArgumentList &srcAl : yyextra->current_root->tArgLists)
+ {
+ yyextra->current->tArgLists.insert(yyextra->current->tArgLists.begin(),srcAl);
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+/*! Returns TRUE iff the yyextra->current entry could be a K&R style C function */
+static bool checkForKnRstyleC(yyscan_t yyscanner)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (((QCString)yyextra->yyFileName).right(2).lower()!=".c") return FALSE; // must be a C file
+ if (yyextra->current->argList.empty()) return FALSE; // must have arguments
+ for (const Argument &a : yyextra->current->argList)
+ {
+ // in K&R style argument do not have a type, but doxygen expects a type
+ // so it will think the argument has no name
+ if (a.type.isEmpty() || !a.name.isEmpty()) return FALSE;
+ }
+ return TRUE;
+}
+
+//-----------------------------------------------------------------------------
-static void startCommentBlock(bool brief)
+static void splitKnRArg(yyscan_t yyscanner,QCString &oldStyleArgPtr,QCString &oldStyleArgName)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ int si = yyextra->current->args.length();
+ if (yyextra->oldStyleArgType.isEmpty()) // new argument
+ {
+ static QRegExp re("([^)]*)");
+ int bi1 = yyextra->current->args.findRev(re);
+ int bi2 = bi1!=-1 ? yyextra->current->args.findRev(re,bi1-1) : -1;
+ char c;
+ if (bi1!=-1 && bi2!=-1) // found something like "int (*func)(int arg)"
+ {
+ int s=bi2+1;
+ yyextra->oldStyleArgType = yyextra->current->args.left(s);
+ int i=s;
+ while (i<si && ((c=yyextra->current->args.at(i))=='*' || isspace((uchar)c))) i++;
+ yyextra->oldStyleArgType += yyextra->current->args.mid(s,i-s);
+ s=i;
+ while (i<si && isId(yyextra->current->args.at(i))) i++;
+ oldStyleArgName = yyextra->current->args.mid(s,i-s);
+ yyextra->oldStyleArgType+=yyextra->current->args.mid(i);
+ }
+ else if (bi1!=-1) // redundant braces like in "int (*var)"
+ {
+ int s=bi1;
+ yyextra->oldStyleArgType = yyextra->current->args.left(s);
+ s++;
+ int i=s+1;
+ while (i<si && ((c=yyextra->current->args.at(i))=='*' || isspace((uchar)c))) i++;
+ yyextra->oldStyleArgType += yyextra->current->args.mid(s,i-s);
+ s=i;
+ while (i<si && isId(yyextra->current->args.at(i))) i++;
+ oldStyleArgName = yyextra->current->args.mid(s,i-s);
+ }
+ else // normal "int *var"
+ {
+ int l=si,i=l-1,j;
+ char c;
+ // look for start of name in "type *name"
+ while (i>=0 && isId(yyextra->current->args.at(i))) i--;
+ j=i+1;
+ // look for start of *'s
+ while (i>=0 && ((c=yyextra->current->args.at(i))=='*' || isspace((uchar)c))) i--;
+ i++;
+ if (i!=l)
+ {
+ yyextra->oldStyleArgType=yyextra->current->args.left(i);
+ oldStyleArgPtr=yyextra->current->args.mid(i,j-i);
+ oldStyleArgName=yyextra->current->args.mid(j).stripWhiteSpace();
+ }
+ else
+ {
+ oldStyleArgName=yyextra->current->args.copy().stripWhiteSpace();
+ }
+ }
+ }
+ else // continuation like *arg2 in "int *args,*arg2"
+ {
+ int l=si,j=0;
+ char c;
+ while (j<l && ((c=yyextra->current->args.at(j))=='*' || isspace((uchar)c))) j++;
+ if (j>0)
+ {
+ oldStyleArgPtr=yyextra->current->args.left(j);
+ oldStyleArgName=yyextra->current->args.mid(j).stripWhiteSpace();
+ }
+ else
+ {
+ oldStyleArgName=yyextra->current->args.copy().stripWhiteSpace();
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+/*! Update the argument \a name with additional \a type info. For K&R style
+ * function the type is found \e after the argument list, so this routine
+ * in needed to fix up.
+ */
+static void addKnRArgInfo(yyscan_t yyscanner,const QCString &type,const QCString &name,
+ const QCString &brief,const QCString &docs)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ for (Argument &a : yyextra->current->argList)
+ {
+ if (a.type==name)
+ {
+ a.type=type.stripWhiteSpace();
+ if (a.type.left(9)=="register ") // strip keyword
+ {
+ a.type=a.type.mid(9);
+ }
+ a.name=name.stripWhiteSpace();
+ if (!brief.isEmpty() && !docs.isEmpty())
+ {
+ a.docs=brief+"\n\n"+docs;
+ }
+ else if (!brief.isEmpty())
+ {
+ a.docs=brief;
+ }
+ else
+ {
+ a.docs=docs;
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+
+void fixArgumentListForJavaScript(ArgumentList &al)
+{
+ for (Argument &a : al)
+ {
+ if (!a.type.isEmpty() && a.name.isEmpty())
+ { // a->type is actually the (typeless) parameter name, so move it
+ a.name=a.type;
+ a.type.resize(0);
+ }
+ }
+}
+
+
+static void startCommentBlock(yyscan_t yyscanner,bool brief)
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
if (brief)
{
- current->briefFile = yyFileName;
- current->briefLine = yyLineNr;
+ yyextra->current->briefFile = yyextra->yyFileName;
+ yyextra->current->briefLine = yyextra->yyLineNr;
}
else
{
- current->docFile = yyFileName;
- current->docLine = yyLineNr;
+ yyextra->current->docFile = yyextra->yyFileName;
+ yyextra->current->docLine = yyextra->yyLineNr;
}
}
//----------------------------------------------------------------------------
-static void newEntry()
+static void newEntry(yyscan_t yyscanner)
{
- if (tempEntry==0) // if temp entry is not 0, it holds current,
- // and current is actually replaced by previous which was
- // already added to current_root, so we should not add it again
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ if (yyextra->tempEntry==0) // if temp entry is not 0, it holds yyextra->current,
+ // and yyextra->current is actually replaced by yyextra->previous which was
+ // already added to yyextra->current_root, so we should not add it again
// (see bug723314)
{
- previous = current.get();
- current_root->moveToSubEntryAndRefresh(current);
+ yyextra->previous = yyextra->current;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
}
else
{
- previous = current.get();
- tempEntry.swap(current);
- tempEntry.reset();
+ yyextra->previous = yyextra->current;
+ yyextra->current = yyextra->tempEntry;
+ yyextra->tempEntry.reset();
}
- initEntry();
+ initEntry(yyscanner);
}
-static void handleCommentBlock(const QCString &doc,bool brief)
+static void handleCommentBlock(yyscan_t yyscanner,const QCString &doc,bool brief)
{
- static bool hideInBodyDocs = Config_getBool(HIDE_IN_BODY_DOCS);
- if (docBlockInBody && hideInBodyDocs) return;
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ bool hideInBodyDocs = Config_getBool(HIDE_IN_BODY_DOCS);
+ if (yyextra->docBlockInBody && hideInBodyDocs) return;
//printf("parseCommentBlock [%s] brief=%d\n",doc.data(),brief);
- int lineNr = brief ? current->briefLine : current->docLine; // line of block start
+ int lineNr = brief ? yyextra->current->briefLine : yyextra->current->docLine; // line of block start
// fill in inbodyFile && inbodyLine the first time, see bug 633891
- Entry *docEntry = docBlockInBody && previous ? previous : current.get();
- if (docBlockInBody && docEntry && docEntry->inbodyLine==-1)
+ std::shared_ptr<Entry> docEntry = yyextra->docBlockInBody && yyextra->previous ? yyextra->previous : yyextra->current;
+ if (yyextra->docBlockInBody && docEntry && docEntry->inbodyLine==-1)
{
- docEntry->inbodyFile = yyFileName;
+ docEntry->inbodyFile = yyextra->yyFileName;
docEntry->inbodyLine = lineNr;
}
int position=0;
bool needsEntry=FALSE;
- QCString processedDoc = preprocessCommentBlock(stripIndentation(doc),yyFileName,lineNr);
+ QCString processedDoc = preprocessCommentBlock(stripIndentation(doc),yyextra->yyFileName,lineNr);
while (parseCommentBlock(
- g_thisParser,
- docBlockInBody && previous ? previous : current.get(),
+ yyextra->thisParser,
+ yyextra->docBlockInBody && yyextra->previous ? yyextra->previous.get() : yyextra->current.get(),
processedDoc, // text
- yyFileName, // file
+ yyextra->yyFileName, // file
lineNr, // line of block start
- docBlockInBody ? FALSE : brief, // isBrief
- docBlockInBody ? FALSE : docBlockAutoBrief, // isJavaDocStyle
- docBlockInBody, // isInBody
- protection,
+ yyextra->docBlockInBody ? FALSE : brief, // isBrief
+ yyextra->docBlockInBody ? FALSE : yyextra->docBlockAutoBrief, // isJavaDocStyle
+ yyextra->docBlockInBody, // isInBody
+ yyextra->protection,
position,
needsEntry
)
@@ -7050,77 +6978,76 @@ static void handleCommentBlock(const QCString &doc,bool brief)
//printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position);
if (needsEntry)
{
- QCString docFile = current->docFile;
- newEntry();
- current->docFile = docFile;
- current->docLine = lineNr;
+ QCString docFile = yyextra->current->docFile;
+ newEntry(yyscanner);
+ yyextra->current->docFile = docFile;
+ yyextra->current->docLine = lineNr;
}
}
if (needsEntry)
{
- newEntry();
+ newEntry(yyscanner);
}
- if (docBlockTerm)
+ if (yyextra->docBlockTerm)
{
- unput(docBlockTerm);
- docBlockTerm=0;
+ unput(yyextra->docBlockTerm);
+ yyextra->docBlockTerm=0;
}
}
-static void handleParametersCommentBlocks(ArgumentList *al)
+static void handleParametersCommentBlocks(yyscan_t yyscanner,ArgumentList &al)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf(">>>>>>> handleParametersCommentBlocks()\n");
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (Argument &a : al)
{
//printf(" Param %s docs=%s\n",a->name.data(),a->docs.data());
- if (!a->docs.isEmpty())
+ if (!a.docs.isEmpty())
{
- if (!a->name && a->type == "...") a->name= "...";
+ if (!a.name && a.type == "...") a.name= "...";
int position=0;
bool needsEntry;
// save context
- QCString orgDoc = current->doc;
- QCString orgBrief = current->brief;
- int orgDocLine = current->docLine;
- int orgBriefLine = current->briefLine;
+ QCString orgDoc = yyextra->current->doc;
+ QCString orgBrief = yyextra->current->brief;
+ int orgDocLine = yyextra->current->docLine;
+ int orgBriefLine = yyextra->current->briefLine;
- current->doc.resize(0);
- current->brief.resize(0);
+ yyextra->current->doc.resize(0);
+ yyextra->current->brief.resize(0);
//printf("handleParametersCommentBlock [%s]\n",doc.data());
while (parseCommentBlock(
- g_thisParser,
- current.get(),
- a->docs, // text
- yyFileName, // file
- current->docLine, // line of block start
+ yyextra->thisParser,
+ yyextra->current.get(),
+ a.docs, // text
+ yyextra->yyFileName, // file
+ yyextra->current->docLine, // line of block start
FALSE,
FALSE,
FALSE,
- protection,
+ yyextra->protection,
position,
needsEntry
)
)
{
//printf("handleParametersCommentBlock position=%d [%s]\n",position,doc.data()+position);
- if (needsEntry) newEntry();
+ if (needsEntry) newEntry(yyscanner);
}
if (needsEntry)
{
- newEntry();
+ newEntry(yyscanner);
}
- a->docs = current->doc;
+ a.docs = yyextra->current->doc;
// restore context
- current->doc = orgDoc;
- current->brief = orgBrief;
- current->docLine = orgDocLine;
- current->briefLine = orgBriefLine;
+ yyextra->current->doc = orgDoc;
+ yyextra->current->brief = orgBrief;
+ yyextra->current->docLine = orgDocLine;
+ yyextra->current->briefLine = orgBriefLine;
}
}
}
@@ -7128,8 +7055,9 @@ static void handleParametersCommentBlocks(ArgumentList *al)
//----------------------------------------------------------------------------
-static void parseCompounds(const std::unique_ptr<Entry> &rt)
+static void parseCompounds(yyscan_t yyscanner,const std::shared_ptr<Entry> &rt)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf("parseCompounds(%s)\n",rt->name.data());
for (const auto &ce : rt->children())
{
@@ -7138,219 +7066,209 @@ static void parseCompounds(const std::unique_ptr<Entry> &rt)
//printf("-- %s ---------\n%s\n---------------\n",
// ce->name.data(),ce->program.data());
// init scanner state
- padCount=0;
+ yyextra->padCount=0;
//depthIf = 0;
- g_column=0;
- inputString = ce->program;
- inputPosition = 0;
- scannerYYrestart( scannerYYin ) ;
+ yyextra->column=0;
+ yyextra->inputString = ce->program;
+ yyextra->inputPosition = 0;
if (ce->section==Entry::ENUM_SEC || (ce->spec&Entry::Enum))
BEGIN( FindFields ) ;
else
BEGIN( FindMembers ) ;
- current_root = ce.get() ;
- yyFileName = ce->fileName;
+ yyextra->current_root = ce;
+ yyextra->yyFileName = ce->fileName;
//setContext();
- yyLineNr = ce->startLine ;
- yyColNr = ce->startColumn ;
- insideObjC = ce->lang==SrcLangExt_ObjC;
- //printf("---> Inner block starts at line %d objC=%d\n",yyLineNr,insideObjC);
- current = std::make_unique<Entry>();
- gstat = FALSE;
- initEntry();
+ yyextra->yyLineNr = ce->startLine ;
+ yyextra->yyColNr = ce->startColumn ;
+ yyextra->insideObjC = ce->lang==SrcLangExt_ObjC;
+ //printf("---> Inner block starts at line %d objC=%d\n",yyextra->yyLineNr,yyextra->insideObjC);
+ yyextra->current = std::make_shared<Entry>();
+ yyextra->stat = FALSE;
+ initEntry(yyscanner);
// deep copy group list from parent (see bug 727732)
- static bool autoGroupNested = Config_getBool(GROUP_NESTED_COMPOUNDS);
- if (autoGroupNested && rt->groups && ce->section!=Entry::ENUM_SEC && !(ce->spec&Entry::Enum))
+ bool autoGroupNested = Config_getBool(GROUP_NESTED_COMPOUNDS);
+ if (autoGroupNested && ce->section!=Entry::ENUM_SEC && !(ce->spec&Entry::Enum))
{
- QListIterator<Grouping> gli(*rt->groups);
- Grouping *g;
- for (;(g=gli.current());++gli)
- {
- ce->groups->append(new Grouping(*g));
- }
+ ce->groups = rt->groups;
}
int ni=ce->name.findRev("::"); if (ni==-1) ni=0; else ni+=2;
// set default protection based on the compound type
if( ce->section==Entry::CLASS_SEC ) // class
{
- if (insidePHP || insideD || insideJS || insideIDL || insideSlice)
+ if (yyextra->insidePHP || yyextra->insideD || yyextra->insideJS || yyextra->insideIDL || yyextra->insideSlice)
{
- current->protection = protection = Public ;
+ yyextra->current->protection = yyextra->protection = Public ;
}
- else if (insideJava)
+ else if (yyextra->insideJava)
{
- current->protection = protection = (ce->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
+ yyextra->current->protection = yyextra->protection = (ce->spec & (Entry::Interface|Entry::Enum)) ? Public : Package;
}
else if (ce->spec&(Entry::Interface | Entry::Ref | Entry::Value | Entry::Struct | Entry::Union))
{
if (ce->lang==SrcLangExt_ObjC)
{
- current->protection = protection = Protected ;
+ yyextra->current->protection = yyextra->protection = Protected ;
}
else
{
- current->protection = protection = Public ;
+ yyextra->current->protection = yyextra->protection = Public ;
}
}
else
{
- current->protection = protection = Private ;
+ yyextra->current->protection = yyextra->protection = Private ;
}
}
else if (ce->section == Entry::ENUM_SEC ) // enum
{
- current->protection = protection = ce->protection;
+ yyextra->current->protection = yyextra->protection = ce->protection;
}
else if (!ce->name.isEmpty() && ce->name.at(ni)=='@') // unnamed union or namespace
{
if (ce->section == Entry::NAMESPACE_SEC ) // unnamed namespace
{
- current->stat = gstat = TRUE;
+ yyextra->current->stat = yyextra->stat = TRUE;
}
- current->protection = protection = ce->protection;
+ yyextra->current->protection = yyextra->protection = ce->protection;
}
else // named struct, union, protocol, category
{
- current->protection = protection = Public ;
+ yyextra->current->protection = yyextra->protection = Public ;
}
- mtype = Method;
- virt = Normal;
- //printf("name=%s current->stat=%d gstat=%d\n",ce->name.data(),current->stat,gstat);
+ yyextra->mtype = Method;
+ yyextra->virt = Normal;
+ //printf("name=%s yyextra->current->stat=%d yyextra->stat=%d\n",ce->name.data(),yyextra->current->stat,yyextra->stat);
//memberGroupId = DOX_NOGROUP;
//memberGroupRelates.resize(0);
//memberGroupInside.resize(0);
QCString name = ce->name;
- Doxygen::docGroup.enterCompound(yyFileName,yyLineNr,name);
+ Doxygen::docGroup.enterCompound(yyextra->yyFileName,yyextra->yyLineNr,name);
- scannerYYlex() ;
- g_lexInit=TRUE;
+ scannerYYlex(yyscanner);
+ yyextra->lexInit=TRUE;
//forceEndGroup();
- Doxygen::docGroup.leaveCompound(yyFileName,yyLineNr,name);
+ Doxygen::docGroup.leaveCompound(yyextra->yyFileName,yyextra->yyLineNr,name);
ce->program.resize(0);
//if (depthIf>0)
//{
- // warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
+ // warn(yyextra->yyFileName,yyextra->yyLineNr,"Documentation block ended in the middle of a conditional section!");
//}
}
- parseCompounds(ce);
+ parseCompounds(yyscanner,ce);
}
}
//----------------------------------------------------------------------------
-static void parseMain(const char *fileName,
+static void parseMain(yyscan_t yyscanner,
+ const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &rt,
+ const std::shared_ptr<Entry> &rt,
bool sameTranslationUnit,
QStrList & filesInSameTranslationUnit)
{
- initParser();
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
+ initParser(yyscanner);
- inputString = fileBuf;
- inputPosition = 0;
- g_column = 0;
+ yyextra->inputString = fileBuf;
+ yyextra->inputPosition = 0;
+ yyextra->column = 0;
+ scannerYYrestart(0,yyscanner);
- //anonCount = 0; // don't reset per file
+ //yyextra->anonCount = 0; // don't reset per file
//depthIf = 0;
- protection = Public;
- mtype = Method;
- gstat = FALSE;
- virt = Normal;
- current_root = rt.get();
- global_root = rt.get();
- inputFile.setName(fileName);
- if (inputFile.open(IO_ReadOnly))
+ yyextra->protection = Public;
+ yyextra->mtype = Method;
+ yyextra->stat = FALSE;
+ yyextra->virt = Normal;
+ yyextra->current_root = rt;
+ yyextra->yyLineNr= 1 ;
+ yyextra->yyFileName = fileName;
+ setContext(yyscanner);
+ bool processWithClang = yyextra->insideCpp || yyextra->insideObjC;
+ if (processWithClang)
{
- yyLineNr= 1 ;
- yyFileName = fileName;
- setContext();
- bool processWithClang = insideCpp || insideObjC;
- if (processWithClang)
- {
- if (!sameTranslationUnit) // new file
- {
- ClangParser::instance()->start(fileName,filesInSameTranslationUnit);
- }
- else
- {
- ClangParser::instance()->switchToFile(fileName);
- }
- }
- rt->lang = language;
- msg("Parsing file %s...\n",yyFileName.data());
-
- current_root = rt.get() ;
- initParser();
- Doxygen::docGroup.enterFile(yyFileName,yyLineNr);
- current = std::make_unique<Entry>();
- //printf("current=%p current_root=%p\n",current,current_root);
- int sec=guessSection(yyFileName);
- if (sec)
+ if (!sameTranslationUnit) // new file
{
- current->name = yyFileName;
- current->section = sec;
- current_root->moveToSubEntryAndRefresh(current);
- }
- current->reset();
- initEntry();
- scannerYYrestart( scannerYYin );
- if ( insidePHP )
- {
- BEGIN( FindMembersPHP );
+ ClangParser::instance()->start(fileName,filesInSameTranslationUnit);
}
else
{
- BEGIN( FindMembers );
- }
-
- scannerYYlex();
- g_lexInit=TRUE;
-
- if (YY_START==Comment)
- {
- warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
+ ClangParser::instance()->switchToFile(fileName);
}
+ }
+ rt->lang = yyextra->language;
+ msg("Parsing file %s...\n",yyextra->yyFileName.data());
+
+ yyextra->current_root = rt;
+ initParser(yyscanner);
+ Doxygen::docGroup.enterFile(yyextra->yyFileName,yyextra->yyLineNr);
+ yyextra->current = std::make_shared<Entry>();
+ //printf("yyextra->current=%p yyextra->current_root=%p\n",yyextra->current,yyextra->current_root);
+ int sec=guessSection(yyextra->yyFileName);
+ if (sec)
+ {
+ yyextra->current->name = yyextra->yyFileName;
+ yyextra->current->section = sec;
+ yyextra->current_root->moveToSubEntryAndRefresh(yyextra->current);
+ }
+ yyextra->current->reset();
+ initEntry(yyscanner);
+ if ( yyextra->insidePHP )
+ {
+ BEGIN( FindMembersPHP );
+ }
+ else
+ {
+ BEGIN( FindMembers );
+ }
- //forceEndGroup();
- Doxygen::docGroup.leaveFile(yyFileName,yyLineNr);
+ scannerYYlex(yyscanner);
+ yyextra->lexInit=TRUE;
- rt->program.resize(0);
+ if (YY_START==Comment)
+ {
+ warn(yyextra->yyFileName,yyextra->yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
+ }
- parseCompounds(rt);
+ //forceEndGroup();
+ Doxygen::docGroup.leaveFile(yyextra->yyFileName,yyextra->yyLineNr);
- inputFile.close();
+ rt->program.resize(0);
- anonNSCount++;
+ parseCompounds(yyscanner,rt);
- // add additional entries that were created during processing
- for (auto &kv: g_outerScopeEntries)
- {
- //printf(">>> adding '%s' to scope '%s'\n",kv.second->name.data(),kv.first->name.data());
- kv.first->moveToSubEntryAndKeep(kv.second);
- }
- g_outerScopeEntries.clear();
+ yyextra->anonNSCount++;
+ // add additional entries that were created during processing
+ for (auto &kv: yyextra->outerScopeEntries)
+ {
+ //printf(">>> adding '%s' to scope '%s'\n",kv.second->name.data(),kv.first->name.data());
+ kv.first->moveToSubEntryAndKeep(kv.second);
}
+ yyextra->outerScopeEntries.clear();
+
}
//----------------------------------------------------------------------------
-static void parsePrototype(const QCString &text)
+static void parsePrototype(yyscan_t yyscanner,const QCString &text)
{
+ struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
//printf("**** parsePrototype(%s) begin\n",text.data());
if (text.isEmpty())
{
- warn(yyFileName,yyLineNr,"Empty prototype found!");
+ warn(yyextra->yyFileName,yyextra->yyLineNr,"Empty prototype found!");
return;
}
- if (!current) // nothing to store (see bug683516)
+ if (!yyextra->current) // nothing to store (see bug683516)
{
return;
}
@@ -7361,44 +7279,34 @@ static void parsePrototype(const QCString &text)
// save scanner state
orgState = YY_CURRENT_BUFFER;
- yy_switch_to_buffer(yy_create_buffer(scannerYYin, YY_BUF_SIZE));
- orgInputString = inputString;
- orgInputPosition = inputPosition;
+ yy_switch_to_buffer(yy_create_buffer(0, YY_BUF_SIZE, yyscanner), yyscanner);
+ orgInputString = yyextra->inputString;
+ orgInputPosition = yyextra->inputPosition;
// set new string
- inputString = text;
- inputPosition = 0;
- g_column = 0;
- scannerYYrestart( scannerYYin );
+ yyextra->inputString = text;
+ yyextra->inputPosition = 0;
+ yyextra->column = 0;
+ scannerYYrestart(0, yyscanner);
BEGIN(Prototype);
- scannerYYlex();
- g_lexInit=TRUE;
+ scannerYYlex(yyscanner);
+ yyextra->lexInit=TRUE;
- current->name = current->name.stripWhiteSpace();
- if (current->section == Entry::MEMBERDOC_SEC && current->args.isEmpty())
- current->section = Entry::VARIABLEDOC_SEC;
+ yyextra->current->name = yyextra->current->name.stripWhiteSpace();
+ if (yyextra->current->section == Entry::MEMBERDOC_SEC && yyextra->current->args.isEmpty())
+ yyextra->current->section = Entry::VARIABLEDOC_SEC;
// restore original scanner state
YY_BUFFER_STATE tmpState = YY_CURRENT_BUFFER;
- yy_switch_to_buffer(orgState);
- yy_delete_buffer(tmpState);
- inputString = orgInputString;
- inputPosition = orgInputPosition;
+ yy_switch_to_buffer(orgState, yyscanner);
+ yy_delete_buffer(tmpState, yyscanner);
+ yyextra->inputString = orgInputString;
+ yyextra->inputPosition = orgInputPosition;
//printf("**** parsePrototype end\n");
}
-void scanFreeScanner()
-{
-#if defined(YY_FLEX_SUBMINOR_VERSION)
- if (g_lexInit)
- {
- scannerYYlex_destroy();
- }
-#endif
-}
-
//static void handleGroupStartCommand(const char *header)
//{
// memberGroupHeader=header;
@@ -7408,62 +7316,63 @@ void scanFreeScanner()
//static void handleGroupEndCommand()
//{
// endGroup();
-// previous=0;
+// g_previous=0;
//}
//----------------------------------------------------------------------------
-void CLanguageScanner::startTranslationUnit(const char *)
+struct COutlineParser::Private
{
+ yyscan_t yyscanner;
+ scannerYY_state state;
+};
+
+COutlineParser::COutlineParser() : p(std::make_unique<COutlineParser::Private>())
+{
+ scannerYYlex_init_extra(&p->state,&p->yyscanner);
+#ifdef FLEX_DEBUG
+ scannerYYset_debug(1,p->yyscanner);
+#endif
}
-void CLanguageScanner::finishTranslationUnit()
+COutlineParser::~COutlineParser()
{
- bool processWithClang = insideCpp || insideObjC;
+ scannerYYlex_destroy(p->yyscanner);
+}
+
+void COutlineParser::startTranslationUnit(const char *)
+{
+}
+
+void COutlineParser::finishTranslationUnit()
+{
+ struct yyguts_t *yyg = (struct yyguts_t*)p->yyscanner;
+ bool processWithClang = yyextra->insideCpp || yyextra->insideObjC;
if (processWithClang)
{
ClangParser::instance()->finish();
}
}
-void CLanguageScanner::parseInput(const char *fileName,
+void COutlineParser::parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList & filesInSameTranslationUnit)
{
- g_thisParser = this;
+ struct yyguts_t *yyg = (struct yyguts_t*)p->yyscanner;
+ yyextra->thisParser = this;
printlex(yy_flex_debug, TRUE, __FILE__, fileName);
- ::parseMain(fileName,fileBuf,root,
+ ::parseMain(p->yyscanner, fileName,fileBuf,root,
sameTranslationUnit,filesInSameTranslationUnit);
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
}
-void CLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
- const char * scopeName,
- const QCString & input,
- SrcLangExt lang,
- bool isExampleBlock,
- const char * exampleName,
- FileDef * fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- const MemberDef *memberDef,
- bool showLineNumbers,
- const Definition *searchCtx,
- bool collectXRefs
- )
-{
- ::parseCCode(codeOutIntf,scopeName,input,lang,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers,searchCtx,collectXRefs);
-}
-bool CLanguageScanner::needsPreprocessing(const QCString &extension)
+bool COutlineParser::needsPreprocessing(const QCString &extension) const
{
QCString fe=extension.lower();
SrcLangExt lang = getLanguageFromFileName(extension);
@@ -7473,23 +7382,11 @@ bool CLanguageScanner::needsPreprocessing(const QCString &extension)
);
}
-void CLanguageScanner::resetCodeParserState()
+void COutlineParser::parsePrototype(const char *text)
{
- ::resetCCodeParserState();
-}
-
-void CLanguageScanner::parsePrototype(const char *text)
-{
- ::parsePrototype(text);
+ ::parsePrototype(p->yyscanner,text);
}
//----------------------------------------------------------------------------
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void scannerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
#include "scanner.l.h"
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index b21d587..22d33b6 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -426,7 +426,7 @@ struct SearchIndexExternal::Private
{
Private() : docEntries(12251) {}
SDict<SearchDocEntry> docEntries;
- SearchDocEntry *current;
+ SearchDocEntry *current = 0;
};
SearchIndexExternal::SearchIndexExternal() : SearchIndexIntf(External)
@@ -1372,7 +1372,7 @@ void initSearchIndexer()
}
}
-void finializeSearchIndexer()
+void finalizeSearchIndexer()
{
delete Doxygen::searchIndex;
}
diff --git a/src/searchindex.h b/src/searchindex.h
index 9a612ad..8cbe352 100644
--- a/src/searchindex.h
+++ b/src/searchindex.h
@@ -34,7 +34,7 @@ class MemberDef;
/*! Initialize the search indexer */
void initSearchIndexer();
/*! Cleanup the search indexer */
-void finializeSearchIndexer();
+void finalizeSearchIndexer();
//------- server side search index ----------------------
diff --git a/src/section.h b/src/section.h
index b6268a9..9e6c695 100644
--- a/src/section.h
+++ b/src/section.h
@@ -26,33 +26,18 @@ class Definition;
/** Class representing a section in a page */
struct SectionInfo
{
- enum SectionType { Page = 0,
- Section = 1,
- Subsection = 2,
- Subsubsection = 3,
- Paragraph = 4,
+ enum SectionType { Page = 0,
+ Section = 1,
+ Subsection = 2,
+ Subsubsection = 3,
+ Paragraph = 4,
Anchor = 5,
Table = 6
};
SectionInfo(const char *f,const int lin,const char *l,const char *t,
SectionType st,int lev,const char *r=0) :
label(l), title(t), type(st), ref(r), definition(0),
- fileName(f), lineNr(lin), generated(FALSE), level(lev)
- {
- }
- SectionInfo(const SectionInfo &s)
- {
- label=s.label.copy();
- title=s.title.copy();
- type =s.type;
- ref=s.ref.copy();
- definition=s.definition;
- fileName=s.fileName.copy();
- lineNr=s.lineNr;
- generated=s.generated;
- level=s.level;
- }
- ~SectionInfo() {}
+ fileName(f), lineNr(lin), generated(FALSE), level(lev) {}
QCString label;
QCString title;
SectionType type;
diff --git a/src/sortdict.h b/src/sortdict.h
index 0e0b5c1..203ae5e 100644
--- a/src/sortdict.h
+++ b/src/sortdict.h
@@ -244,7 +244,7 @@ class SDict
return m_list->find(item);
}
- /*! Equavalent to find(). */
+ /*! Equivalent to find(). */
T *operator[](const char *key) const
{
return m_dict->find(key);
@@ -553,7 +553,7 @@ class SIntDict
return m_dict->find(key);
}
- /*! Equavalent to find(). */
+ /*! Equivalent to find(). */
T *operator[](int key) const
{
return m_dict->find(key);
diff --git a/src/sqlcode.h b/src/sqlcode.h
index d8a09b7..20e20f7 100644
--- a/src/sqlcode.h
+++ b/src/sqlcode.h
@@ -19,7 +19,7 @@
#ifndef SQLCODE_H
#define SQLCODE_H
-#include "types.h"
+#include "parserintf.h"
class CodeOutputInterface;
class FileDef;
@@ -27,11 +27,28 @@ class MemberDef;
class QCString;
class Definition;
-extern void parseSqlCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
- bool collectXRefs);
-extern void resetSqlCodeParserState();
+/** SQL scanner. Only support syntax highlighting of code at the moment.
+ */
+class SQLCodeParser : public CodeParserInterface
+{
+ public:
+ void parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt,
+ bool isExampleBlock,
+ const char *exampleName=0,
+ FileDef *fileDef=0,
+ int startLine=-1,
+ int endLine=-1,
+ bool inlineFragment=FALSE,
+ const MemberDef *memberDef=0,
+ bool showLineNumbers=TRUE,
+ const Definition *searchCtx=0,
+ bool collectXRefs=TRUE
+ );
+ void resetCodeParserState();
+};
+
#endif
diff --git a/src/sqlcode.l b/src/sqlcode.l
index 2685c46..02c2c14 100644
--- a/src/sqlcode.l
+++ b/src/sqlcode.l
@@ -383,7 +383,7 @@ void parseSqlCode(
struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
#ifdef FLEX_DEBUG
- yyset_debug(1,yyscanner);
+ sqlcodeYYset_debug(1,yyscanner);
#endif
printlex(yy_flex_debug, TRUE, __FILE__, fd ? fd->fileName().data(): NULL);
@@ -454,12 +454,34 @@ void resetSqlCodeParserState()
yyextra->currentMemberDef = 0;
}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void sqlcodeYYdummy() { yy_flex_realloc(0,0); }
+//---------------------------------------------------------------------------------
+
+void SQLCodeParser::parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt,
+ bool isExampleBlock,
+ const char *exampleName,
+ FileDef *fileDef,
+ int startLine,
+ int endLine,
+ bool inlineFragment,
+ const MemberDef *memberDef,
+ bool showLineNumbers,
+ const Definition *searchCtx,
+ bool collectXRefs
+ )
+{
+ parseSqlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
+ fileDef,startLine,endLine,inlineFragment,memberDef,
+ showLineNumbers,searchCtx,collectXRefs);
}
-#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
-#endif
+
+void SQLCodeParser::resetCodeParserState()
+{
+ resetSqlCodeParserState();
+}
+
+//---------------------------------------------------------------------------------
#include "sqlcode.l.h"
diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp
index 49818b2..14a73d8 100644
--- a/src/sqlite3gen.cpp
+++ b/src/sqlite3gen.cpp
@@ -1015,26 +1015,34 @@ static void insertMemberReference(const MemberDef *src, const MemberDef *dst, co
static void insertMemberFunctionParams(int memberdef_id, const MemberDef *md, const Definition *def)
{
- const ArgumentList *declAl = md->declArgumentList();
- const ArgumentList *defAl = md->argumentList();
- if (declAl!=0 && defAl!=0 && declAl->count()>0)
- {
- ArgumentListIterator declAli(*declAl);
- ArgumentListIterator defAli(*defAl);
- const Argument *a;
- for (declAli.toFirst();(a=declAli.current());++declAli)
+ const ArgumentList &declAl = md->declArgumentList();
+ const ArgumentList &defAl = md->argumentList();
+ if (declAl.size()>0)
+ {
+// ArgumentListIterator declAli(*declAl);
+// ArgumentListIterator defAli(*defAl);
+// const Argument *a;
+// for (declAli.toFirst();(a=declAli.current());++declAli)
+ auto defIt = defAl.begin();
+ for (const Argument &a : declAl)
{
- const Argument *defArg = defAli.current();
+ //const Argument *defArg = defAli.current();
+ const Argument *defArg = 0;
+ if (defIt!=defAl.end())
+ {
+ defArg = &(*defIt);
+ ++defIt;
+ }
- if (!a->attrib.isEmpty())
+ if (!a.attrib.isEmpty())
{
- bindTextParameter(param_select,":attributes",a->attrib);
- bindTextParameter(param_insert,":attributes",a->attrib);
+ bindTextParameter(param_select,":attributes",a.attrib);
+ bindTextParameter(param_insert,":attributes",a.attrib);
}
- if (!a->type.isEmpty())
+ if (!a.type.isEmpty())
{
StringList l;
- linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a->type);
+ linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a.type);
StringListIterator li(l);
QCString *s;
@@ -1046,32 +1054,31 @@ static void insertMemberFunctionParams(int memberdef_id, const MemberDef *md, co
insertMemberReference(src_refid,dst_refid, "argument");
++li;
}
- bindTextParameter(param_select,":type",a->type);
- bindTextParameter(param_insert,":type",a->type);
+ bindTextParameter(param_select,":type",a.type);
+ bindTextParameter(param_insert,":type",a.type);
}
- if (!a->name.isEmpty())
+ if (!a.name.isEmpty())
{
- bindTextParameter(param_select,":declname",a->name);
- bindTextParameter(param_insert,":declname",a->name);
+ bindTextParameter(param_select,":declname",a.name);
+ bindTextParameter(param_insert,":declname",a.name);
}
- if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
+ if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
{
bindTextParameter(param_select,":defname",defArg->name);
bindTextParameter(param_insert,":defname",defArg->name);
}
- if (!a->array.isEmpty())
+ if (!a.array.isEmpty())
{
- bindTextParameter(param_select,":array",a->array);
- bindTextParameter(param_insert,":array",a->array);
+ bindTextParameter(param_select,":array",a.array);
+ bindTextParameter(param_insert,":array",a.array);
}
- if (!a->defval.isEmpty())
+ if (!a.defval.isEmpty())
{
StringList l;
- linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a->defval);
- bindTextParameter(param_select,":defval",a->defval);
- bindTextParameter(param_insert,":defval",a->defval);
+ linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a.defval);
+ bindTextParameter(param_select,":defval",a.defval);
+ bindTextParameter(param_insert,":defval",a.defval);
}
- if (defArg) ++defAli;
int param_id=step(param_select,TRUE,TRUE);
if (param_id==0) {
@@ -1091,18 +1098,16 @@ static void insertMemberFunctionParams(int memberdef_id, const MemberDef *md, co
static void insertMemberDefineParams(int memberdef_id,const MemberDef *md, const Definition *def)
{
- if (md->argumentList()->count()==0) // special case for "foo()" to
- // disguish it from "foo".
+ if (md->argumentList().empty()) // special case for "foo()" to
+ // distinguish it from "foo".
{
DBG_CTX(("no params\n"));
}
else
{
- ArgumentListIterator ali(*md->argumentList());
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : md->argumentList())
{
- bindTextParameter(param_insert,":defname",a->type);
+ bindTextParameter(param_insert,":defname",a.type);
int param_id=step(param_insert,TRUE);
if (param_id==-1) {
continue;
@@ -1120,7 +1125,7 @@ static void associateMember(const MemberDef *md, struct Refid member_refid, stru
// TODO: skip EnumValue only to guard against recording refids and member records
// for enumvalues until we can support documenting them as entities.
if (md->memberType()==MemberType_EnumValue) return;
- if (md->name().at(0)!='@') // skip anonymous members
+ if (!md->isAnonymous()) // skip anonymous members
{
bindIntParameter(member_insert, ":scope_rowid", scope_refid.rowid);
bindIntParameter(member_insert, ":memberdef_rowid", member_refid.rowid);
@@ -1271,7 +1276,7 @@ static void writeInnerClasses(const ClassSDict *cl, struct Refid outer_refid)
const ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
- if (!cd->isHidden() && cd->name().find('@')==-1) // skip anonymous scopes
+ if (!cd->isHidden() && !cd->isAnonymous())
{
struct Refid inner_refid = insertRefid(cd->getOutputFileBase());
@@ -1360,7 +1365,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl, struct Refid outer_re
const NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
- if (!nd->isHidden() && nd->name().find('@')==-1) // skip anonymous scopes
+ if (!nd->isHidden() && !nd->isAnonymous())
{
struct Refid inner_refid = insertRefid(nd->getOutputFileBase());
@@ -1373,48 +1378,39 @@ static void writeInnerNamespaces(const NamespaceSDict *nl, struct Refid outer_re
}
-static void writeTemplateArgumentList(const ArgumentList * al,
+static void writeTemplateArgumentList(const ArgumentList &al,
const Definition * scope,
const FileDef * fileScope)
{
- if (al)
+ for (const Argument &a : al)
{
- ArgumentListIterator ali(*al);
- Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ if (!a.type.isEmpty())
{
- if (!a->type.isEmpty())
- {
- #warning linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->type);
- bindTextParameter(param_select,":type",a->type);
- bindTextParameter(param_insert,":type",a->type);
- }
- if (!a->name.isEmpty())
- {
- bindTextParameter(param_select,":declname",a->name);
- bindTextParameter(param_insert,":declname",a->name);
- bindTextParameter(param_select,":defname",a->name);
- bindTextParameter(param_insert,":defname",a->name);
- }
- if (!a->defval.isEmpty())
- {
- #warning linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->defval);
- bindTextParameter(param_select,":defval",a->defval);
- bindTextParameter(param_insert,":defval",a->defval);
- }
- if (!step(param_select,TRUE,TRUE))
- step(param_insert);
+//#warning linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.type);
+ bindTextParameter(param_select,":type",a.type);
+ bindTextParameter(param_insert,":type",a.type);
}
+ if (!a.name.isEmpty())
+ {
+ bindTextParameter(param_select,":declname",a.name);
+ bindTextParameter(param_insert,":declname",a.name);
+ bindTextParameter(param_select,":defname",a.name);
+ bindTextParameter(param_insert,":defname",a.name);
+ }
+ if (!a.defval.isEmpty())
+ {
+//#warning linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.defval);
+ bindTextParameter(param_select,":defval",a.defval);
+ bindTextParameter(param_insert,":defval",a.defval);
+ }
+ if (!step(param_select,TRUE,TRUE))
+ step(param_insert);
}
}
static void writeMemberTemplateLists(const MemberDef *md)
{
- const ArgumentList *templMd = md->templateArguments();
- if (templMd) // function template prefix
- {
- writeTemplateArgumentList(templMd,md->getClassDef(),md->getFileDef());
- }
+ writeTemplateArgumentList(md->templateArguments(),md->getClassDef(),md->getFileDef());
}
static void writeTemplateList(const ClassDef *cd)
{
@@ -1675,12 +1671,9 @@ static void generateSqlite3ForMember(const MemberDef *md, struct Refid scope_ref
if (isFunc)
{
- const ArgumentList *al = md->argumentList();
- if (al!=0)
- {
- bindIntParameter(memberdef_insert,":const",al->constSpecifier);
- bindIntParameter(memberdef_insert,":volatile",al->volatileSpecifier);
- }
+ const ArgumentList &al = md->argumentList();
+ bindIntParameter(memberdef_insert,":const",al.constSpecifier);
+ bindIntParameter(memberdef_insert,":volatile",al.volatileSpecifier);
bindIntParameter(memberdef_insert,":explicit",md->isExplicit());
bindIntParameter(memberdef_insert,":inline",md->isInline());
bindIntParameter(memberdef_insert,":final",md->isFinal());
@@ -1961,7 +1954,7 @@ static void generateSqlite3ForClass(const ClassDef *cd)
if (cd->isReference()) return; // skip external references.
if (cd->isHidden()) return; // skip hidden classes.
- if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
+ if (cd->isAnonymous()) return; // skip anonymous compounds.
if (cd->templateMaster()!=0) return; // skip generated template instances.
struct Refid refid = insertRefid(cd->getOutputFileBase());
diff --git a/src/sqlscanner.h b/src/sqlscanner.h
deleted file mode 100644
index b981b5b..0000000
--- a/src/sqlscanner.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef SQLSCANNER_H
-#define SQLSCANNER_H
-
-#include "parserintf.h"
-#include "sqlcode.h"
-
-/** SQL scanner. Only support syntax highlighting of code at the moment.
- */
-class SQLScanner : public ParserInterface
-{
-public:
- SQLScanner() {}
- virtual ~SQLScanner() {}
- void startTranslationUnit(const char *) {}
- void finishTranslationUnit() {}
- void parseInput(const char *, const char *, const std::unique_ptr<Entry> &, bool , QStrList &) {}
- bool needsPreprocessing(const QCString &) { return FALSE; }
-
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- const MemberDef *memberDef=0,
- bool showLineNumbers=TRUE,
- const Definition *searchCtx=0,
- bool collectXRefs=TRUE
- )
- {
- parseSqlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers,searchCtx,collectXRefs);
- }
-
- void resetCodeParserState()
- {
- resetSqlCodeParserState();
- }
-
- void parsePrototype(const char *) {}
-
-private:
-};
-
-#endif
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 18f6161..8f85e9d 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -100,14 +100,14 @@ class TagClassInfo
{
public:
enum Kind { None=-1, Class, Struct, Union, Interface, Exception, Protocol, Category, Enum, Service, Singleton };
- TagClassInfo() { bases=0, templateArguments=0; members.setAutoDelete(TRUE); isObjC=FALSE; kind = None; }
- ~TagClassInfo() { delete bases; delete templateArguments; }
+ TagClassInfo() { templateArguments=0; members.setAutoDelete(TRUE); isObjC=FALSE; kind = None; }
+ ~TagClassInfo() { delete templateArguments; }
QCString name;
QCString filename;
QCString clangId;
QCString anchor;
TagAnchorInfoList docAnchors;
- QList<BaseInfo> *bases;
+ std::vector<BaseInfo> bases;
QList<TagMemberInfo> members;
QList<QCString> *templateArguments;
QCStringList classList;
@@ -623,12 +623,7 @@ class TagFileParser : public QXmlDefaultHandler
{
virt = Virtual;
}
- if (m_curClass->bases==0)
- {
- m_curClass->bases = new QList<BaseInfo>;
- m_curClass->bases->setAutoDelete(TRUE);
- }
- m_curClass->bases->append(new BaseInfo(m_curString,prot,virt));
+ m_curClass->bases.push_back(BaseInfo(m_curString,prot,virt));
}
else
{
@@ -640,7 +635,7 @@ class TagFileParser : public QXmlDefaultHandler
{
if (m_state==InClass && m_curClass)
{
- m_curClass->bases->getLast()->name = m_curString;
+ m_curClass->bases.back().name = m_curString;
}
else
{
@@ -914,12 +909,12 @@ class TagFileParser : public QXmlDefaultHandler
}
void dump();
- void buildLists(const std::unique_ptr<Entry> &root);
+ void buildLists(const std::shared_ptr<Entry> &root);
void addIncludes();
private:
- void buildMemberList(const std::unique_ptr<Entry> &ce,QList<TagMemberInfo> &members);
- void addDocAnchors(const std::unique_ptr<Entry> &e,const TagAnchorInfoList &l);
+ void buildMemberList(const std::shared_ptr<Entry> &ce,QList<TagMemberInfo> &members);
+ void addDocAnchors(const std::shared_ptr<Entry> &e,const TagAnchorInfoList &l);
QList<TagClassInfo> m_tagFileClasses;
QList<TagFileInfo> m_tagFileFiles;
QList<TagNamespaceInfo> m_tagFileNamespaces;
@@ -990,14 +985,9 @@ void TagFileParser::dump()
{
msg("class '%s'\n",cd->name.data());
msg(" filename '%s'\n",cd->filename.data());
- if (cd->bases)
+ for (const BaseInfo &bi : cd->bases)
{
- QListIterator<BaseInfo> bii(*cd->bases);
- BaseInfo *bi;
- for ( bii.toFirst() ; (bi=bii.current()) ; ++bii)
- {
- msg( " base: %s \n", bi->name.data() );
- }
+ msg( " base: %s \n", bi.name.data() );
}
QListIterator<TagMemberInfo> mci(cd->members);
@@ -1149,7 +1139,7 @@ void TagFileParser::dump()
}
}
-void TagFileParser::addDocAnchors(const std::unique_ptr<Entry> &e,const TagAnchorInfoList &l)
+void TagFileParser::addDocAnchors(const std::shared_ptr<Entry> &e,const TagAnchorInfoList &l)
{
QListIterator<TagAnchorInfo> tli(l);
TagAnchorInfo *ta;
@@ -1162,7 +1152,7 @@ void TagFileParser::addDocAnchors(const std::unique_ptr<Entry> &e,const TagAncho
SectionInfo *si=new SectionInfo(ta->fileName,-1,ta->label,ta->title,
SectionInfo::Anchor,0,m_tagName);
Doxygen::sectionDict->append(ta->label,si);
- e->anchors->append(si);
+ e->anchors.push_back(si);
}
else
{
@@ -1171,20 +1161,18 @@ void TagFileParser::addDocAnchors(const std::unique_ptr<Entry> &e,const TagAncho
}
}
-void TagFileParser::buildMemberList(const std::unique_ptr<Entry> &ce,QList<TagMemberInfo> &members)
+void TagFileParser::buildMemberList(const std::shared_ptr<Entry> &ce,QList<TagMemberInfo> &members)
{
QListIterator<TagMemberInfo> mii(members);
TagMemberInfo *tmi;
for (;(tmi=mii.current());++mii)
{
- std::unique_ptr<Entry> me = std::make_unique<Entry>();
+ std::shared_ptr<Entry> me = std::make_shared<Entry>();
me->type = tmi->type;
me->name = tmi->name;
me->args = tmi->arglist;
if (!me->args.isEmpty())
{
- delete me->argList;
- me->argList = new ArgumentList;
stringToArgumentList(me->args,me->argList);
}
if (tmi->enumValues.count()>0)
@@ -1194,16 +1182,15 @@ void TagFileParser::buildMemberList(const std::unique_ptr<Entry> &ce,QList<TagMe
TagEnumValueInfo *evi;
for (evii.toFirst();(evi=evii.current());++evii)
{
- std::unique_ptr<Entry> ev = std::make_unique<Entry>();
+ std::shared_ptr<Entry> ev = std::make_shared<Entry>();
ev->type = "@";
ev->name = evi->name;
ev->id = evi->clangid;
ev->section = Entry::VARIABLE_SEC;
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->anchor = evi->anchor;
- ti->fileName = evi->file;
- ev->tagInfo = ti;
+ ev->tagInfoData.tagName = m_tagName;
+ ev->tagInfoData.anchor = evi->anchor;
+ ev->tagInfoData.fileName = evi->file;
+ ev->hasTagInfo = TRUE;
me->moveToSubEntryAndKeep(ev);
}
}
@@ -1214,14 +1201,13 @@ void TagFileParser::buildMemberList(const std::unique_ptr<Entry> &ce,QList<TagMe
me->id = tmi->clangId;
if (ce->section == Entry::GROUPDOC_SEC)
{
- me->groups->append(new Grouping(ce->name,Grouping::GROUPING_INGROUP));
+ me->groups.push_back(Grouping(ce->name,Grouping::GROUPING_INGROUP));
}
addDocAnchors(me,tmi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->anchor = tmi->anchor;
- ti->fileName = tmi->anchorFile;
- me->tagInfo = ti;
+ me->tagInfoData.tagName = m_tagName;
+ me->tagInfoData.anchor = tmi->anchor;
+ me->tagInfoData.fileName = tmi->anchorFile;
+ me->hasTagInfo = TRUE;
if (tmi->kind=="define")
{
me->type="#define";
@@ -1310,14 +1296,14 @@ static QCString stripPath(const QCString &s)
* This tree contains the information extracted from the input in a
* "unrelated" form.
*/
-void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
+void TagFileParser::buildLists(const std::shared_ptr<Entry> &root)
{
// build class list
QListIterator<TagClassInfo> cit(m_tagFileClasses);
TagClassInfo *tci;
for (cit.toFirst();(tci=cit.current());++cit)
{
- std::unique_ptr<Entry> ce = std::make_unique<Entry>();
+ std::shared_ptr<Entry> ce = std::make_shared<Entry>();
ce->section = Entry::CLASS_SEC;
switch (tci->kind)
{
@@ -1341,38 +1327,28 @@ void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
ce->name+="-p";
}
addDocAnchors(ce,tci->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->anchor = tci->anchor;
- ti->fileName = tci->filename;
+ ce->tagInfoData.tagName = m_tagName;
+ ce->tagInfoData.anchor = tci->anchor;
+ ce->tagInfoData.fileName = tci->filename;
+ ce->hasTagInfo = TRUE;
ce->id = tci->clangId;
- ce->tagInfo = ti;
ce->lang = tci->isObjC ? SrcLangExt_ObjC : SrcLangExt_Unknown;
// transfer base class list
- if (tci->bases)
- {
- delete ce->extends;
- ce->extends = tci->bases; tci->bases = 0;
- }
+ ce->extends = tci->bases;
+ tci->bases.clear();
if (tci->templateArguments)
{
- if (ce->tArgLists==0)
- {
- ce->tArgLists = new QList<ArgumentList>;
- ce->tArgLists->setAutoDelete(TRUE);
- }
- ArgumentList *al = new ArgumentList;
- ce->tArgLists->append(al);
-
+ ArgumentList al;
QListIterator<QCString> sli(*tci->templateArguments);
QCString *argName;
for (;(argName=sli.current());++sli)
{
- Argument *a = new Argument;
- a->type = "class";
- a->name = *argName;
- al->append(a);
+ Argument a;
+ a.type = "class";
+ a.name = *argName;
+ al.push_back(a);
}
+ ce->tArgLists.push_back(al);
}
buildMemberList(ce,tci->members);
@@ -1384,14 +1360,13 @@ void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
TagFileInfo *tfi;
for (fit.toFirst();(tfi=fit.current());++fit)
{
- std::unique_ptr<Entry> fe = std::make_unique<Entry>();
+ std::shared_ptr<Entry> fe = std::make_shared<Entry>();
fe->section = guessSection(tfi->name);
fe->name = tfi->name;
addDocAnchors(fe,tfi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tfi->filename;
- fe->tagInfo = ti;
+ fe->tagInfoData.tagName = m_tagName;
+ fe->tagInfoData.fileName = tfi->filename;
+ fe->hasTagInfo = TRUE;
QCString fullName = m_tagName+":"+tfi->path+stripPath(tfi->name);
fe->fileName = fullName;
@@ -1421,15 +1396,14 @@ void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
TagNamespaceInfo *tni;
for (nit.toFirst();(tni=nit.current());++nit)
{
- std::unique_ptr<Entry> ne = std::make_unique<Entry>();
+ std::shared_ptr<Entry> ne = std::make_shared<Entry>();
ne->section = Entry::NAMESPACE_SEC;
ne->name = tni->name;
addDocAnchors(ne,tni->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tni->filename;
+ ne->tagInfoData.tagName = m_tagName;
+ ne->tagInfoData.fileName = tni->filename;
+ ne->hasTagInfo = TRUE;
ne->id = tni->clangId;
- ne->tagInfo = ti;
buildMemberList(ne,tni->members);
root->moveToSubEntryAndKeep(ne);
@@ -1440,14 +1414,13 @@ void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
TagPackageInfo *tpgi;
for (pit.toFirst();(tpgi=pit.current());++pit)
{
- std::unique_ptr<Entry> pe = std::make_unique<Entry>();
+ std::shared_ptr<Entry> pe = std::make_shared<Entry>();
pe->section = Entry::PACKAGE_SEC;
pe->name = tpgi->name;
addDocAnchors(pe,tpgi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tpgi->filename;
- pe->tagInfo = ti;
+ pe->tagInfoData.tagName = m_tagName;
+ pe->tagInfoData.fileName = tpgi->filename;
+ pe->hasTagInfo = TRUE;
buildMemberList(pe,tpgi->members);
root->moveToSubEntryAndKeep(pe);
@@ -1458,15 +1431,14 @@ void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
TagGroupInfo *tgi;
for (git.toFirst();(tgi=git.current());++git)
{
- std::unique_ptr<Entry> ge = std::make_unique<Entry>();
+ std::shared_ptr<Entry> ge = std::make_shared<Entry>();
ge->section = Entry::GROUPDOC_SEC;
ge->name = tgi->name;
ge->type = tgi->title;
addDocAnchors(ge,tgi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tgi->filename;
- ge->tagInfo = ti;
+ ge->tagInfoData.tagName = m_tagName;
+ ge->tagInfoData.fileName = tgi->filename;
+ ge->hasTagInfo = TRUE;
buildMemberList(ge,tgi->members);
root->moveToSubEntryAndKeep(ge);
@@ -1483,10 +1455,10 @@ void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
//for (eli.toFirst();(childNode=eli.current());++eli)
const auto &children = root->children();
auto i = std::find_if(children.begin(),children.end(),
- [&](const std::unique_ptr<Entry> &e) { return e->name = *it; });
+ [&](const std::shared_ptr<Entry> &e) { return e->name = *it; });
if (i!=children.end())
{
- (*i)->groups->append(new Grouping(tgi->name,Grouping::GROUPING_INGROUP));
+ (*i)->groups.push_back(Grouping(tgi->name,Grouping::GROUPING_INGROUP));
}
}
}
@@ -1496,15 +1468,14 @@ void TagFileParser::buildLists(const std::unique_ptr<Entry> &root)
TagPageInfo *tpi;
for (pgit.toFirst();(tpi=pgit.current());++pgit)
{
- std::unique_ptr<Entry> pe = std::make_unique<Entry>();
+ std::shared_ptr<Entry> pe = std::make_shared<Entry>();
pe->section = tpi->filename=="index" ? Entry::MAINPAGEDOC_SEC : Entry::PAGEDOC_SEC;
pe->name = tpi->name;
pe->args = tpi->title;
addDocAnchors(pe,tpi->docAnchors);
- TagInfo *ti = new TagInfo;
- ti->tagName = m_tagName;
- ti->fileName = tpi->filename;
- pe->tagInfo = ti;
+ pe->tagInfoData.tagName = m_tagName;
+ pe->tagInfoData.fileName = tpi->filename;
+ pe->hasTagInfo = TRUE;
root->moveToSubEntryAndKeep(pe);
}
}
@@ -1556,7 +1527,7 @@ void TagFileParser::addIncludes()
}
}
-void parseTagFile(const std::unique_ptr<Entry> &root,const char *fullName)
+void parseTagFile(const std::shared_ptr<Entry> &root,const char *fullName)
{
QFileInfo fi(fullName);
if (!fi.exists()) return;
diff --git a/src/tagreader.h b/src/tagreader.h
index 4c09a04..454060b 100644
--- a/src/tagreader.h
+++ b/src/tagreader.h
@@ -23,6 +23,6 @@ class Entry;
#include <memory>
-void parseTagFile(const std::unique_ptr<Entry> &root,const char *fullPathName);
+void parseTagFile(const std::shared_ptr<Entry> &root,const char *fullPathName);
#endif
diff --git a/src/tclscanner.h b/src/tclscanner.h
index 482fb1f..cdd56d8 100644
--- a/src/tclscanner.h
+++ b/src/tclscanner.h
@@ -25,18 +25,23 @@
*
* This is the Tcl language parser for doxygen.
*/
-class TclLanguageScanner : public ParserInterface
+class TclOutlineParser : public OutlineParserInterface
{
public:
- virtual ~TclLanguageScanner() {}
void startTranslationUnit(const char *) {}
void finishTranslationUnit() {}
void parseInput(const char *fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList &filesInSameTranslationUnit);
- bool needsPreprocessing(const QCString &extension);
+ bool needsPreprocessing(const QCString &extension) const;
+ void parsePrototype(const char *text);
+};
+
+class TclCodeParser : public CodeParserInterface
+{
+ public:
void parseCode(CodeOutputInterface &codeOutIntf,
const char *scopeName,
const QCString &input,
@@ -53,7 +58,6 @@ class TclLanguageScanner : public ParserInterface
bool collectXRefs=TRUE
);
void resetCodeParserState();
- void parsePrototype(const char *text);
};
#endif
diff --git a/src/tclscanner.l b/src/tclscanner.l
index 3b939ce..a4709ce 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -429,7 +429,7 @@ static struct
QCString input_string; // file contents
int input_position; // position in file
QCString file_name; // name of used file
- ParserInterface *this_parser; // myself
+ OutlineParserInterface *this_parser; // myself
int command; // true if command was found
int comment; // set true if comment was scanned
int brace_level; // bookkeeping of braces
@@ -486,6 +486,8 @@ Entry* tcl_entry_new()
// myEntry->mtype = Method;
// myEntry->virt = Normal;
// myEntry->stat = FALSE;
+ myEntry->docFile = tcl.file_name;
+ myEntry->inbodyFile = tcl.file_name;
myEntry->fileName = tcl.file_name;
myEntry->lang = SrcLangExt_Tcl;
Doxygen::docGroup.initGroupInfo(myEntry);
@@ -535,6 +537,13 @@ static void tcl_name(const QCString &ns0, const QCString &name0, QCString &ns, Q
ns = "";
name = myNm;
}
+ else if (myNm.length()-myStart == 2)
+ {
+ // ending with :: so get name equal to last component
+ ns = myNm.mid(0,myStart);
+ myStart = ns.findRev("::");
+ name = myNm.mid(myStart+2);
+ }
else
{
ns = myNm.mid(0,myStart);
@@ -1494,7 +1503,7 @@ tcl_inf("-> %s\n",(const char *)tcl.string_comment);
{
tcl_inf("-> %s\n",(const char *)tcl.string_comment);
int myPos=0;
- bool myNew=0;
+ bool myNew=false;
int myLine=tcl.line_comment;
BufStr myI(1024);
BufStr myO(1024);
@@ -1622,37 +1631,32 @@ tcl_inf("-> %s\n",(const char *)tcl.string_comment);
static void tcl_command_ARGLIST(QCString &arglist)
{
D
- Argument *myArg;
QCStringList myArgs;
QCString myArglist="";
- if (!tcl.entry_current->argList)
- {
- tcl.entry_current->argList=new ArgumentList;
- }
tcl_split_list(arglist,myArgs);
for (uint i=0;i<myArgs.count();i++)
{
QCStringList myArgs1;
- myArg=new Argument;
+ Argument myArg;
tcl_split_list(*myArgs.at(i),myArgs1);
if (myArgs1.count()==2)
{
- myArg->name= (*myArgs1.at(0));
- myArg->defval= (*myArgs1.at(1));
- if (myArg->defval.isEmpty())
+ myArg.name= (*myArgs1.at(0));
+ myArg.defval= (*myArgs1.at(1));
+ if (myArg.defval.isEmpty())
{
- myArg->defval = " ";
+ myArg.defval = " ";
}
- myArglist += "?" + QCString(myArg->name) + "? ";
+ myArglist += "?" + QCString(myArg.name) + "? ";
}
else
{
- myArg->name= (*myArgs.at(i));
- myArglist += myArg->name + " ";
+ myArg.name= (*myArgs.at(i));
+ myArglist += myArg.name + " ";
}
- tcl.entry_current->argList->append(myArg);
+ tcl.entry_current->argList.push_back(myArg);
}
arglist = myArglist;
tcl.entry_current->args = arglist;
@@ -2151,6 +2155,8 @@ D
tcl.entry_current->mtype = Method;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl_protection(tcl.entry_current);
@@ -2193,6 +2199,8 @@ D
tcl.entry_current->mtype = Method;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl_protection(tcl.entry_current);
@@ -2230,6 +2238,8 @@ D
tcl.entry_current->mtype = Method;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl_protection(tcl.entry_current);
@@ -2265,6 +2275,8 @@ D
tcl.entry_current->mtype = Method;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl_protection(tcl.entry_current);
@@ -2298,6 +2310,8 @@ D
tcl.entry_current->section = Entry::NAMESPACE_SEC;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl.entry_main->moveToSubEntryAndKeep(tcl.entry_current);
@@ -2336,6 +2350,8 @@ D
tcl.entry_current->section = Entry::CLASS_SEC;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl.entry_main->moveToSubEntryAndKeep(tcl.entry_current);
@@ -2368,6 +2384,8 @@ D
tcl.entry_current->section = Entry::CLASS_SEC;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl.entry_main->moveToSubEntryAndKeep(tcl.entry_current);
@@ -2420,6 +2438,8 @@ D
tcl.entry_current->mtype = Method;
tcl.entry_current->name = myMethod;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl_protection(tcl.entry_current);
@@ -2490,6 +2510,8 @@ D
tcl.entry_current->section = Entry::VARIABLE_SEC;
tcl.entry_current->name = myName;
tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->docLine = tcl.line_comment;
+ tcl.entry_current->inbodyLine = tcl.line_comment;
tcl.entry_current->bodyLine = tcl.line_body0;
tcl.entry_current->endBodyLine = tcl.line_body1;
tcl_protection(tcl.entry_current);
@@ -2705,7 +2727,7 @@ tcl_inf("->\n");
{
for (unsigned int i = 2; i < tcl.list_commandwords.count(); i = i + 2)
{
- tcl.scan.at(0)->entry_cl->extends->append(new BaseInfo((*tcl.list_commandwords.at(i)),Public,Normal));
+ tcl.scan.at(0)->entry_cl->extends.push_back(BaseInfo((*tcl.list_commandwords.at(i)),Public,Normal));
}
}
goto command_end;
@@ -2942,9 +2964,9 @@ static void tcl_parse(const QCString ns, const QCString cls)
}
//! Parse text file and build up entry tree.
-void TclLanguageScanner::parseInput(const char *fileName,
+void TclOutlineParser::parseInput(const char *fileName,
const char *input,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool /*sameTranslationUnit*/,
QStrList & /*filesInSameTranslationUnit*/)
{
@@ -2973,8 +2995,40 @@ tcl_inf("%s\n",fileName);
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
}
+
+bool TclOutlineParser::needsPreprocessing(const QCString &extension) const
+{
+ (void)extension;
+ return FALSE;
+}
+
+void TclOutlineParser::parsePrototype(const char *text)
+{
+ (void)text;
+}
+
+static int yyread(char *buf,int max_size)
+{
+ int c=0;
+
+ *buf = '\0';
+ while ( c < max_size && tcl.input_string.at(tcl.input_position) )
+ {
+ *buf = tcl.input_string.at(tcl.input_position++) ;
+ c++; buf++;
+ }
+ //printf("Read from=%d size=%d max=%d c=%d\n",tcl.input_position,strlen(&tcl.input_string[tcl.input_position]),max_size,c);
+ return c;
+}
+
+//----------------------------------------------------------------------------
+
+void TclCodeParser::resetCodeParserState()
+{
+}
+
//! Parse file and codify.
-void TclLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf,
+void TclCodeParser::parseCode(CodeOutputInterface & codeOutIntf,
const char * scopeName,
const QCString & input,
SrcLangExt lang,
@@ -3078,36 +3132,6 @@ tcl_inf("%s (%d,%d) %d %d\n",myStr.data(),startLine,endLine,isExampleBlock,inlin
tcl.entry.clear();
printlex(yy_flex_debug, FALSE, __FILE__, fileDef ? fileDef->fileName().data(): NULL);
}
-
-bool TclLanguageScanner::needsPreprocessing(const QCString &extension)
-{
- (void)extension;
- return FALSE;
-}
-
-void TclLanguageScanner::resetCodeParserState()
-{
-}
-
-void TclLanguageScanner::parsePrototype(const char *text)
-{
- (void)text;
-}
-
-static int yyread(char *buf,int max_size)
-{
- int c=0;
-
- *buf = '\0';
- while ( c < max_size && tcl.input_string.at(tcl.input_position) )
- {
- *buf = tcl.input_string.at(tcl.input_position++) ;
- c++; buf++;
- }
- //printf("Read from=%d size=%d max=%d c=%d\n",tcl.input_position,strlen(&tcl.input_string[tcl.input_position]),max_size,c);
- return c;
-}
-
//----------------------------------------------------------------------------
// to avoid a warning
@@ -3116,11 +3140,4 @@ void tclDummy()
yy_top_state();
}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-//----------------------------------------------------------------------------
-extern "C" { // some bogus code to keep the compiler happy
- void tclscannerYYdummy() { yy_flex_realloc(0,0); }
-}
-#endif
-
#include "tclscanner.l.h"
diff --git a/src/template.cpp b/src/template.cpp
index 228da4d..ca28c73 100644
--- a/src/template.cpp
+++ b/src/template.cpp
@@ -245,7 +245,7 @@ class TemplateStruct::Private
Private() : fields(17), refCount(0)
{ fields.setAutoDelete(TRUE); }
QDict<TemplateVariant> fields;
- int refCount;
+ int refCount = 0;
};
TemplateStruct::TemplateStruct()
@@ -306,8 +306,8 @@ class TemplateList::Private
public:
Private() : index(-1), refCount(0) {}
QValueList<TemplateVariant> elems;
- int index;
- int refCount;
+ int index = -1;
+ int refCount = 0;
};
@@ -398,7 +398,7 @@ class TemplateListConstIterator : public TemplateListIntf::ConstIterator
private:
const TemplateList &m_list;
QValueList<TemplateVariant>::ConstIterator m_it;
- int m_index;
+ int m_index = 0;
};
TemplateListIntf::ConstIterator *TemplateList::createIterator() const
@@ -565,21 +565,21 @@ class TemplateContextImpl : public TemplateContext
void addIndexEntry(const QCString &indexName,const QValueList<TemplateKeyValue> &arguments);
private:
- const TemplateEngine *m_engine;
+ const TemplateEngine *m_engine = 0;
QCString m_templateName;
- int m_line;
+ int m_line = 0;
QCString m_outputDir;
QList< QDict<TemplateVariant> > m_contextStack;
TemplateBlockContext m_blockContext;
QDict<TemplateEscapeIntf*> m_escapeIntfDict;
- TemplateEscapeIntf *m_activeEscapeIntf;
- TemplateSpacelessIntf *m_spacelessIntf;
- bool m_spacelessEnabled;
- bool m_tabbingEnabled;
+ TemplateEscapeIntf *m_activeEscapeIntf = 0;
+ TemplateSpacelessIntf *m_spacelessIntf = 0;
+ bool m_spacelessEnabled = false;
+ bool m_tabbingEnabled = false;
TemplateAutoRef<TemplateStruct> m_indices;
QDict< QStack<TemplateVariant> > m_indexStacks;
QCString m_encoding;
- void *m_fromUtf8;
+ void *m_fromUtf8 = 0;
};
//-----------------------------------------------------------------------------
@@ -1445,7 +1445,7 @@ class ExprAstNumber : public ExprAst
int number() const { return m_number; }
virtual TemplateVariant resolve(TemplateContext *) { return TemplateVariant(m_number); }
private:
- int m_number;
+ int m_number = 0;
};
/** @brief Class representing a variable in the AST */
@@ -1497,7 +1497,7 @@ class ExprAstFunctionVariable : public ExprAst
return v;
}
private:
- ExprAst *m_var;
+ ExprAst *m_var = 0;
QList<ExprAst> m_args;
};
@@ -1526,7 +1526,7 @@ class ExprAstFilter : public ExprAst
}
private:
QCString m_name;
- ExprAst *m_arg;
+ ExprAst *m_arg = 0;
};
/** @brief Class representing a filter applied to an expression in the AST */
@@ -1542,7 +1542,7 @@ class ExprAstFilterAppl : public ExprAst
return m_filter->apply(m_expr->resolve(c),c);
}
private:
- ExprAst *m_expr;
+ ExprAst *m_expr = 0;
ExprAstFilter *m_filter;
};
@@ -1568,7 +1568,7 @@ class ExprAstNegate : public ExprAst
virtual TemplateVariant resolve(TemplateContext *c)
{ return TemplateVariant(!m_expr->resolve(c).toBool()); }
private:
- ExprAst *m_expr;
+ ExprAst *m_expr = 0;
};
class ExprAstUnary : public ExprAst
@@ -1589,8 +1589,8 @@ class ExprAstUnary : public ExprAst
}
}
private:
- Operator::Type m_operator;
- ExprAst *m_exp;
+ Operator::Type m_operator = Operator::Or;
+ ExprAst *m_exp = 0;
};
/** @brief Class representing a binary operator in the AST */
@@ -1696,9 +1696,9 @@ class ExprAstBinary : public ExprAst
}
}
private:
- Operator::Type m_operator;
- ExprAst *m_lhs;
- ExprAst *m_rhs;
+ Operator::Type m_operator = Operator::Or;
+ ExprAst *m_lhs = 0;
+ ExprAst *m_rhs = 0;
};
//----------------------------------------------------------
@@ -1715,7 +1715,7 @@ class TemplateNode
TemplateNode *parent() { return m_parent; }
private:
- TemplateNode *m_parent;
+ TemplateNode *m_parent = 0;
};
//----------------------------------------------------------
@@ -1736,7 +1736,7 @@ class TemplateParser
QCString templateName() const { return m_templateName; }
void warn(const char *fileName,int line,const char *fmt,...) const;
private:
- const TemplateEngine *m_engine;
+ const TemplateEngine *m_engine = 0;
QCString m_templateName;
QList<TemplateToken> &m_tokens;
};
@@ -2282,9 +2282,9 @@ class ExpressionParser
return TRUE;
}
- const TemplateParser *m_parser;
+ const TemplateParser *m_parser = 0;
ExprToken m_curToken;
- int m_line;
+ int m_line = 0;
const char *m_tokenStream;
};
@@ -2296,9 +2296,9 @@ class TemplateToken
public:
enum Type { Text, Variable, Block };
TemplateToken(Type t,const char *d,int l) : type(t), data(d), line(l) {}
- Type type;
+ Type type = Text;
QCString data;
- int line;
+ int line = 0;
};
//----------------------------------------------------------
@@ -2339,7 +2339,7 @@ class TemplateImpl : public TemplateNode, public Template
TemplateBlockContext *blockContext() { return &m_blockContext; }
private:
- TemplateEngine *m_engine;
+ TemplateEngine *m_engine = 0;
QCString m_name;
TemplateNodeList m_nodes;
TemplateBlockContext m_blockContext;
@@ -2358,8 +2358,8 @@ class TemplateStructWeakRef : public TemplateStructIntf
virtual int addRef() { return ++m_refCount; }
virtual int release() { int count=--m_refCount; if (count<=0) { delete this; } return count; }
private:
- TemplateStructIntf *m_ref;
- int m_refCount;
+ TemplateStructIntf *m_ref = 0;
+ int m_refCount = 0;
};
//----------------------------------------------------------
@@ -2789,8 +2789,8 @@ class TemplateNodeVariable : public TemplateNode
private:
QCString m_templateName;
- int m_line;
- ExprAst *m_var;
+ int m_line = 0;
+ ExprAst *m_var = 0;
QList<ExprAst> m_args;
};
@@ -2853,7 +2853,7 @@ template<class T> class TemplateNodeCreator : public TemplateNode
}
}
QCString m_templateName;
- int m_line;
+ int m_line = 0;
};
//----------------------------------------------------------
@@ -2950,8 +2950,8 @@ class TemplateNodeIf : public TemplateNodeCreator<TemplateNodeIf>
{
GuardedNodes() : guardAst(0) {}
~GuardedNodes() { delete guardAst; }
- int line;
- ExprAst *guardAst;
+ int line = 0;
+ ExprAst *guardAst = 0;
TemplateNodeList trueNodes;
};
QList<GuardedNodes> m_ifGuardedNodes;
@@ -3009,7 +3009,7 @@ class TemplateNodeRepeat : public TemplateNodeCreator<TemplateNodeRepeat>
}
private:
TemplateNodeList m_repeatNodes;
- ExprAst *m_expr;
+ ExprAst *m_expr = 0;
};
//----------------------------------------------------------
@@ -3175,9 +3175,9 @@ class TemplateNodeRange : public TemplateNodeCreator<TemplateNodeRange>
}
private:
- bool m_down;
- ExprAst *m_startExpr;
- ExprAst *m_endExpr;
+ bool m_down = false;
+ ExprAst *m_startExpr = 0;
+ ExprAst *m_endExpr = 0;
QCString m_var;
TemplateNodeList m_loopNodes;
};
@@ -3332,8 +3332,8 @@ class TemplateNodeFor : public TemplateNodeCreator<TemplateNodeFor>
}
private:
- bool m_reversed;
- ExprAst *m_expr;
+ bool m_reversed = false;
+ ExprAst *m_expr = 0;
QValueList<QCString> m_vars;
TemplateNodeList m_loopNodes;
TemplateNodeList m_emptyNodes;
@@ -3534,7 +3534,7 @@ class TemplateNodeExtend : public TemplateNodeCreator<TemplateNodeExtend>
}
private:
- ExprAst *m_extendExpr;
+ ExprAst *m_extendExpr = 0;
TemplateNodeList m_nodes;
};
@@ -3591,7 +3591,7 @@ class TemplateNodeInclude : public TemplateNodeCreator<TemplateNodeInclude>
}
private:
- ExprAst *m_includeExpr;
+ ExprAst *m_includeExpr = 0;
};
//----------------------------------------------------------
@@ -3724,8 +3724,8 @@ class TemplateNodeCreate : public TemplateNodeCreator<TemplateNodeCreate>
}
private:
- ExprAst *m_templateExpr;
- ExprAst *m_fileExpr;
+ ExprAst *m_templateExpr = 0;
+ ExprAst *m_fileExpr = 0;
};
//----------------------------------------------------------
@@ -3839,7 +3839,7 @@ class TemplateNodeTree : public TemplateNodeCreator<TemplateNodeTree>
}
private:
- ExprAst *m_treeExpr;
+ ExprAst *m_treeExpr = 0;
TemplateNodeList m_treeNodes;
};
@@ -3853,7 +3853,7 @@ class TemplateNodeIndexEntry : public TemplateNodeCreator<TemplateNodeIndexEntry
Mapping(const QCString &n,ExprAst *e) : name(n), value(e) {}
~Mapping() { delete value; }
QCString name;
- ExprAst *value;
+ ExprAst *value = 0;
};
public:
TemplateNodeIndexEntry(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
@@ -4128,7 +4128,7 @@ class TemplateNodeCycle : public TemplateNodeCreator<TemplateNodeCycle>
}
}
private:
- uint m_index;
+ uint m_index = 0;
QList<ExprAst> m_args;
};
@@ -4142,7 +4142,7 @@ class TemplateNodeSet : public TemplateNodeCreator<TemplateNodeSet>
Mapping(const QCString &n,ExprAst *e) : name(n), value(e) {}
~Mapping() { delete value; }
QCString name;
- ExprAst *value;
+ ExprAst *value = 0;
};
public:
TemplateNodeSet(TemplateParser *parser,TemplateNode *parent,int line,const QCString &data)
@@ -4175,7 +4175,7 @@ class TemplateNodeSet : public TemplateNodeCreator<TemplateNodeSet>
}
}
private:
- Mapping *m_mapping;
+ Mapping *m_mapping = 0;
};
//----------------------------------------------------------
@@ -4323,8 +4323,8 @@ class TemplateNodeMarkers : public TemplateNodeCreator<TemplateNodeMarkers>
private:
TemplateNodeList m_nodes;
QCString m_var;
- ExprAst *m_listExpr;
- ExprAst *m_patternExpr;
+ ExprAst *m_listExpr = 0;
+ ExprAst *m_patternExpr = 0;
};
//----------------------------------------------------------
@@ -4427,8 +4427,8 @@ class TemplateNodeResource : public TemplateNodeCreator<TemplateNodeResource>
}
}
private:
- ExprAst *m_resExpr;
- ExprAst *m_asExpr;
+ ExprAst *m_resExpr = 0;
+ ExprAst *m_asExpr = 0;
};
//----------------------------------------------------------
@@ -4645,11 +4645,11 @@ class TemplateLexer
const char *data,int line,int startPos,int endPos,
TemplateToken::Type type);
void reset();
- const TemplateEngine *m_engine;
+ const TemplateEngine *m_engine = 0;
QCString m_fileName;
QCString m_data;
- char m_openChar;
- char m_closeChar;
+ char m_openChar = 0;
+ char m_closeChar = 0;
};
TemplateLexer::TemplateLexer(const TemplateEngine *engine,const QCString &fileName,const QCString &data) :
@@ -4693,7 +4693,7 @@ void TemplateLexer::tokenize(QList<TemplateToken> &tokens)
{
state=StateBeginTemplate;
}
- else if (c!=' ' && c!='\t' && c!='\n') // non-whitepace text
+ else if (c!=' ' && c!='\t' && c!='\n') // non-whitespace text
{
emptyOutputLine=FALSE;
}
@@ -5070,10 +5070,10 @@ class TemplateEngine::Private
int line() const { return m_line; }
private:
- Type m_type;
+ Type m_type = Template;
QCString m_fileName;
QCString m_blockName;
- int m_line;
+ int m_line = 0;
};
public:
Private(TemplateEngine *engine) : m_templateCache(17) /*, m_indent(0)*/, m_engine(engine)
@@ -5185,7 +5185,7 @@ class TemplateEngine::Private
private:
QDict<Template> m_templateCache;
//mutable int m_indent;
- TemplateEngine *m_engine;
+ TemplateEngine *m_engine = 0;
QList<IncludeEntry> m_includeStack;
QCString m_extension;
QCString m_templateDirName;
diff --git a/src/tooltip.cpp b/src/tooltip.cpp
index a30a85c..8cc1f87 100644
--- a/src/tooltip.cpp
+++ b/src/tooltip.cpp
@@ -115,10 +115,9 @@ void TooltipManager::writeTooltips(CodeOutputInterface &ol)
if (d->definitionType()==Definition::TypeMember)
{
MemberDef *md = dynamic_cast<MemberDef*>(d);
- decl = md->declaration();
- if (!decl.isEmpty() && decl.at(0)=='@') // hide enum values
+ if (!md->isAnonymous())
{
- decl.resize(0);
+ decl = md->declaration();
}
}
ol.writeTooltip(di.currentKey(), // id
diff --git a/src/types.h b/src/types.h
index 4d305b6..189a93d 100644
--- a/src/types.h
+++ b/src/types.h
@@ -92,7 +92,6 @@ struct Grouping
}
Grouping( const char *gn, GroupPri_t p ) : groupname(gn), pri(p) {}
- Grouping( const Grouping &g ) : groupname(g.groupname), pri(g.pri) {}
QCString groupname; //!< name of the group
GroupPri_t pri; //!< priority of this definition
diff --git a/src/util.cpp b/src/util.cpp
index e1e9fb5..55dcc19 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -540,7 +540,7 @@ const ClassDef *newResolveTypedef(const FileDef *fileScope,
const MemberDef **pMemType,
QCString *pTemplSpec,
QCString *pResolvedType,
- ArgumentList *actTemplParams)
+ const ArgumentList *actTemplParams)
{
//printf("newResolveTypedef(md=%p,cachedVal=%p)\n",md,md->getCachedTypedefVal());
bool isCached = md->isTypedefValCached(); // value already cached
@@ -563,11 +563,11 @@ const ClassDef *newResolveTypedef(const FileDef *fileScope,
const ClassDef *typeClass = md->getClassDef();
QCString type = md->typeString(); // get the "value" of the typedef
- if (typeClass && typeClass->isTemplate() &&
- actTemplParams && actTemplParams->count()>0)
+ if (typeClass && typeClass->isTemplate() &&
+ actTemplParams && !actTemplParams->empty())
{
type = substituteTemplateArgumentsInString(type,
- typeClass->templateArguments(),actTemplParams);
+ typeClass->templateArguments(),*actTemplParams);
}
QCString typedefValue = type;
int tl=type.length();
@@ -955,7 +955,7 @@ class AccessStack
*/
int isAccessibleFrom(const Definition *scope,const FileDef *fileScope,const Definition *item)
{
- //printf("<isAccesibleFrom(scope=%s,item=%s itemScope=%s)\n",
+ //printf("<isAccessibleFrom(scope=%s,item=%s itemScope=%s)\n",
// scope->name().data(),item->name().data(),item->getOuterScope()->name().data());
static AccessStack accessStack;
@@ -1397,7 +1397,7 @@ static const ClassDef *getResolvedClassRec(const Definition *scope,
ArgumentList actTemplParams;
if (!strippedTemplateParams.isEmpty()) // template part that was stripped
{
- stringToArgumentList(strippedTemplateParams,&actTemplParams);
+ stringToArgumentList(strippedTemplateParams,actTemplParams);
}
int qualifierIndex = computeQualifiedIndex(name);
@@ -2260,17 +2260,15 @@ void writeExample(OutputList &ol,ExampleSDict *ed)
}
-QCString argListToString(const ArgumentList *al,bool useCanonicalType,bool showDefVals)
+QCString argListToString(const ArgumentList &al,bool useCanonicalType,bool showDefVals)
{
QCString result;
- if (al==0) return result;
- ArgumentListIterator ali(*al);
- const Argument *a=ali.current();
+ if (!al.hasParameters()) return result;
result+="(";
- while (a)
+ for (auto it = al.begin() ; it!=al.end() ;)
{
- QCString type1 = useCanonicalType && !a->canType.isEmpty() ?
- a->canType : a->type;
+ Argument a = *it;
+ QCString type1 = useCanonicalType && !a.canType.isEmpty() ? a.canType : a.type;
QCString type2;
int i=type1.find(")("); // hack to deal with function pointers
if (i!=-1)
@@ -2278,86 +2276,84 @@ QCString argListToString(const ArgumentList *al,bool useCanonicalType,bool showD
type2=type1.mid(i);
type1=type1.left(i);
}
- if (!a->attrib.isEmpty())
+ if (!a.attrib.isEmpty())
{
- result+=a->attrib+" ";
+ result+=a.attrib+" ";
}
- if (!a->name.isEmpty() || !a->array.isEmpty())
+ if (!a.name.isEmpty() || !a.array.isEmpty())
{
- result+= type1+" "+a->name+type2+a->array;
+ result+= type1+" "+a.name+type2+a.array;
}
else
{
result+= type1+type2;
}
- if (!a->defval.isEmpty() && showDefVals)
+ if (!a.defval.isEmpty() && showDefVals)
{
- result+="="+a->defval;
+ result+="="+a.defval;
}
- ++ali;
- a = ali.current();
- if (a) result+=", ";
+ ++it;
+ if (it!=al.end()) result+=", ";
}
result+=")";
- if (al->constSpecifier) result+=" const";
- if (al->volatileSpecifier) result+=" volatile";
- if (al->refQualifier==RefQualifierLValue) result+=" &";
- else if (al->refQualifier==RefQualifierRValue) result+=" &&";
- if (!al->trailingReturnType.isEmpty()) result+=" -> "+al->trailingReturnType;
- if (al->pureSpecifier) result+=" =0";
+ if (al.constSpecifier) result+=" const";
+ if (al.volatileSpecifier) result+=" volatile";
+ if (al.refQualifier==RefQualifierLValue) result+=" &";
+ else if (al.refQualifier==RefQualifierRValue) result+=" &&";
+ if (!al.trailingReturnType.isEmpty()) result+=" -> "+al.trailingReturnType;
+ if (al.pureSpecifier) result+=" =0";
return removeRedundantWhiteSpace(result);
}
-QCString tempArgListToString(const ArgumentList *al,SrcLangExt lang)
+QCString tempArgListToString(const ArgumentList &al,SrcLangExt lang)
{
QCString result;
- if (al==0) return result;
+ if (al.empty()) return result;
result="<";
- ArgumentListIterator ali(*al);
- const Argument *a=ali.current();
- while (a)
+ auto it = al.begin();
+ while (it!=al.end())
{
- if (!a->name.isEmpty()) // add template argument name
+ Argument a = *it;
+ if (!a.name.isEmpty()) // add template argument name
{
- if (a->type.left(4)=="out") // C# covariance
+ if (a.type.left(4)=="out") // C# covariance
{
result+="out ";
}
- else if (a->type.left(3)=="in") // C# contravariance
+ else if (a.type.left(3)=="in") // C# contravariance
{
result+="in ";
}
if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
{
- result+=a->type+" ";
+ result+=a.type+" ";
}
- result+=a->name;
+ result+=a.name;
}
else // extract name from type
{
- int i=a->type.length()-1;
- while (i>=0 && isId(a->type.at(i))) i--;
+ int i=a.type.length()-1;
+ while (i>=0 && isId(a.type.at(i))) i--;
if (i>0)
{
- result+=a->type.right(a->type.length()-i-1);
- if (a->type.find("...")!=-1)
+ result+=a.type.right(a.type.length()-i-1);
+ if (a.type.find("...")!=-1)
{
result+="...";
}
}
else // nothing found -> take whole name
{
- result+=a->type;
+ result+=a.type;
}
}
- if (!a->typeConstraint.isEmpty() && lang==SrcLangExt_Java)
+ if (!a.typeConstraint.isEmpty() && lang==SrcLangExt_Java)
{
result+=" extends "; // TODO: now Java specific, C# has where...
- result+=a->typeConstraint;
+ result+=a.typeConstraint;
}
- ++ali;
- a=ali.current();
- if (a) result+=", ";
+ ++it;
+ if (it!=al.end()) result+=", ";
}
result+=">";
return removeRedundantWhiteSpace(result);
@@ -2432,7 +2428,7 @@ static QCString getFilterFromList(const char *name,const QStrList &filterList,bo
if (i_equals!=-1)
{
QCString filterPattern = fs.left(i_equals);
- QRegExp fpat(filterPattern,portable_fileSystemIsCaseSensitive(),TRUE);
+ QRegExp fpat(filterPattern,Portable::fileSystemIsCaseSensitive(),TRUE);
if (fpat.match(name)!=-1)
{
// found a match!
@@ -2590,10 +2586,10 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
return "";
}
-QCString dateToString(bool includeTime)
+static QDateTime getCurrentDateTime()
{
QDateTime current = QDateTime::currentDateTime();
- QCString sourceDateEpoch = portable_getenv("SOURCE_DATE_EPOCH");
+ QCString sourceDateEpoch = Portable::getenv("SOURCE_DATE_EPOCH");
if (!sourceDateEpoch.isEmpty())
{
bool ok;
@@ -2622,6 +2618,12 @@ QCString dateToString(bool includeTime)
current.setTimeUtc_t((ulong)epoch); // TODO: add support for 64bit epoch value
}
}
+ return current;
+}
+
+QCString dateToString(bool includeTime)
+{
+ const QDateTime current = getCurrentDateTime();
return theTranslator->trDateTime(current.date().year(),
current.date().month(),
current.date().day(),
@@ -2634,9 +2636,9 @@ QCString dateToString(bool includeTime)
QCString yearToString()
{
- const QDate &d=QDate::currentDate();
+ const QDateTime current = getCurrentDateTime();
QCString result;
- result.sprintf("%d", d.year());
+ result.sprintf("%d", current.date().year());
return result;
}
@@ -2705,19 +2707,6 @@ exit:
return prot;
}
-//static void printArgList(ArgumentList *al)
-//{
-// if (al==0) return;
-// ArgumentListIterator ali(*al);
-// Argument *a;
-// printf("(");
-// for (;(a=ali.current());++ali)
-// {
-// printf("t='%s' n='%s' v='%s' ",a->type.data(),!a->name.isEmpty()>0?a->name.data():"",!a->defval.isEmpty()>0?a->defval.data():"");
-// }
-// printf(")");
-//}
-
#ifndef NEWMATCH
// strip any template specifiers that follow className in string s
static QCString trimTemplateSpecifiers(
@@ -3311,138 +3300,6 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
return TRUE;
}
-
-/*!
- * Matches the arguments list srcAl with the argument list dstAl
- * Returns TRUE if the argument lists are equal. Two argument list are
- * considered equal if the number of arguments is equal and the types of all
- * arguments are equal. Furthermore the const and volatile specifiers
- * stored in the list should be equal.
- */
-bool matchArguments(ArgumentList *srcAl,ArgumentList *dstAl,
- const char *cl,const char *ns,bool checkCV,
- NamespaceSDict *usingNamespaces,
- SDict<Definition> *usingClasses)
-{
- QCString className=cl;
- QCString namespaceName=ns;
-
- // strip template specialization from class name if present
- //int til=className.find('<'),tir=className.find('>');
- //if (til!=-1 && tir!=-1 && tir>til)
- //{
- // className=className.left(til)+className.right(className.length()-tir-1);
- //}
-
- //printf("matchArguments(%s,%s) className=%s namespaceName=%s checkCV=%d usingNamespaces=%d usingClasses=%d\n",
- // srcAl ? argListToString(srcAl).data() : "",
- // dstAl ? argListToString(dstAl).data() : "",
- // cl,ns,checkCV,
- // usingNamespaces?usingNamespaces->count():0,
- // usingClasses?usingClasses->count():0
- // );
-
- if (srcAl==0 || dstAl==0)
- {
- bool match = srcAl==dstAl; // at least one of the members is not a function
- if (match)
- {
- MATCH
- return TRUE;
- }
- else
- {
- NOMATCH
- return FALSE;
- }
- }
-
- // handle special case with void argument
- if ( srcAl->count()==0 && dstAl->count()==1 &&
- dstAl->getFirst()->type=="void" )
- { // special case for finding match between func() and func(void)
- Argument *a=new Argument;
- a->type = "void";
- srcAl->append(a);
- MATCH
- return TRUE;
- }
- if ( dstAl->count()==0 && srcAl->count()==1 &&
- srcAl->getFirst()->type=="void" )
- { // special case for finding match between func(void) and func()
- Argument *a=new Argument;
- a->type = "void";
- dstAl->append(a);
- MATCH
- return TRUE;
- }
-
- if (srcAl->count() != dstAl->count())
- {
- NOMATCH
- return FALSE; // different number of arguments -> no match
- }
-
- if (checkCV)
- {
- if (srcAl->constSpecifier != dstAl->constSpecifier)
- {
- NOMATCH
- return FALSE; // one member is const, the other not -> no match
- }
- if (srcAl->volatileSpecifier != dstAl->volatileSpecifier)
- {
- NOMATCH
- return FALSE; // one member is volatile, the other not -> no match
- }
- }
-
- if (srcAl->refQualifier != dstAl->refQualifier)
- {
- NOMATCH
- return FALSE; // one member is has a different ref-qualifier than the other
- }
-
- // so far the argument list could match, so we need to compare the types of
- // all arguments.
- ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
- Argument *srcA,*dstA;
- for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
- {
- if (!matchArgument(srcA,dstA,className,namespaceName,
- usingNamespaces,usingClasses))
- {
- NOMATCH
- return FALSE;
- }
- }
- MATCH
- return TRUE; // all arguments match
-}
-
-#endif
-
-#if 0
-static QCString resolveSymbolName(FileDef *fs,Definition *symbol,QCString &templSpec)
-{
- ASSERT(symbol!=0);
- if (symbol->definitionType()==Definition::TypeMember &&
- ((MemberDef*)symbol)->isTypedef()) // if symbol is a typedef then try
- // to resolve it
- {
- MemberDef *md = 0;
- ClassDef *cd = newResolveTypedef(fs,(MemberDef*)symbol,&md,&templSpec);
- if (cd)
- {
- return cd->qualifiedName()+templSpec;
- }
- else if (md)
- {
- return md->qualifiedName();
- }
- }
- return symbol->qualifiedName();
-}
#endif
static QCString stripDeclKeywords(const QCString &s)
@@ -3688,10 +3545,10 @@ static QCString extractCanonicalType(const Definition *d,const FileDef *fs,QCStr
return removeRedundantWhiteSpace(canType);
}
-static QCString extractCanonicalArgType(const Definition *d,const FileDef *fs,const Argument *arg)
+static QCString extractCanonicalArgType(const Definition *d,const FileDef *fs,const Argument &arg)
{
- QCString type = arg->type.stripWhiteSpace();
- QCString name = arg->name;
+ QCString type = arg.type.stripWhiteSpace();
+ QCString name = arg.name;
//printf("----- extractCanonicalArgType(type=%s,name=%s)\n",type.data(),name.data());
if ((type=="const" || type=="volatile") && !name.isEmpty())
{ // name is part of type => correct
@@ -3703,17 +3560,17 @@ static QCString extractCanonicalArgType(const Definition *d,const FileDef *fs,co
if (!type.isEmpty()) type+=" ";
type+=name;
}
- if (!arg->array.isEmpty())
+ if (!arg.array.isEmpty())
{
- type+=arg->array;
+ type+=arg.array;
}
return extractCanonicalType(d,fs,type);
}
static bool matchArgument2(
- const Definition *srcScope,const FileDef *srcFileScope,Argument *srcA,
- const Definition *dstScope,const FileDef *dstFileScope,Argument *dstA
+ const Definition *srcScope,const FileDef *srcFileScope,Argument &srcA,
+ const Definition *dstScope,const FileDef *dstFileScope,Argument &dstA
)
{
//printf(">> match argument: %s::'%s|%s' (%s) <-> %s::'%s|%s' (%s)\n",
@@ -3727,37 +3584,37 @@ static bool matchArgument2(
// NOMATCH
// return FALSE;
//}
- QCString sSrcName = " "+srcA->name;
- QCString sDstName = " "+dstA->name;
- QCString srcType = srcA->type;
- QCString dstType = dstA->type;
+ QCString sSrcName = " "+srcA.name;
+ QCString sDstName = " "+dstA.name;
+ QCString srcType = srcA.type;
+ QCString dstType = dstA.type;
stripIrrelevantConstVolatile(srcType);
stripIrrelevantConstVolatile(dstType);
//printf("'%s'<->'%s'\n",sSrcName.data(),dstType.right(sSrcName.length()).data());
//printf("'%s'<->'%s'\n",sDstName.data(),srcType.right(sDstName.length()).data());
if (sSrcName==dstType.right(sSrcName.length()))
{ // case "unsigned int" <-> "unsigned int i"
- srcA->type+=sSrcName;
- srcA->name="";
- srcA->canType=""; // invalidate cached type value
+ srcA.type+=sSrcName;
+ srcA.name="";
+ srcA.canType=""; // invalidate cached type value
}
else if (sDstName==srcType.right(sDstName.length()))
{ // case "unsigned int i" <-> "unsigned int"
- dstA->type+=sDstName;
- dstA->name="";
- dstA->canType=""; // invalidate cached type value
+ dstA.type+=sDstName;
+ dstA.name="";
+ dstA.canType=""; // invalidate cached type value
}
- if (srcA->canType.isEmpty())
+ if (srcA.canType.isEmpty())
{
- srcA->canType = extractCanonicalArgType(srcScope,srcFileScope,srcA);
+ srcA.canType = extractCanonicalArgType(srcScope,srcFileScope,srcA);
}
- if (dstA->canType.isEmpty())
+ if (dstA.canType.isEmpty())
{
- dstA->canType = extractCanonicalArgType(dstScope,dstFileScope,dstA);
+ dstA.canType = extractCanonicalArgType(dstScope,dstFileScope,dstA);
}
- if (srcA->canType==dstA->canType)
+ if (srcA.canType==dstA.canType)
{
MATCH
return TRUE;
@@ -3773,49 +3630,34 @@ static bool matchArgument2(
// new algorithm for argument matching
-bool matchArguments2(const Definition *srcScope,const FileDef *srcFileScope,const ArgumentList *srcAl,
- const Definition *dstScope,const FileDef *dstFileScope,const ArgumentList *dstAl,
+bool matchArguments2(const Definition *srcScope,const FileDef *srcFileScope,const ArgumentList &inSrcAl,
+ const Definition *dstScope,const FileDef *dstFileScope,const ArgumentList &inDstAl,
bool checkCV)
{
- //printf("*** matchArguments2\n");
ASSERT(srcScope!=0 && dstScope!=0);
- if (srcAl==0 || dstAl==0)
- {
- bool match = srcAl==dstAl; // at least one of the members is not a function
- if (match)
- {
- MATCH
- return TRUE;
- }
- else
- {
- NOMATCH
- return FALSE;
- }
- }
+ ArgumentList srcAl = inSrcAl;
+ ArgumentList dstAl = inDstAl;
// handle special case with void argument
- if ( srcAl->count()==0 && dstAl->count()==1 &&
- dstAl->getFirst()->type=="void" )
+ if ( srcAl.empty() && dstAl.size()==1 && dstAl.front().type=="void" )
{ // special case for finding match between func() and func(void)
- Argument *a=new Argument;
- a->type = "void";
- const_cast<ArgumentList*>(srcAl)->append(a);
+ Argument a;
+ a.type = "void";
+ srcAl.push_back(a);
MATCH
return TRUE;
}
- if ( dstAl->count()==0 && srcAl->count()==1 &&
- srcAl->getFirst()->type=="void" )
+ if ( dstAl.empty() && srcAl.size()==1 && srcAl.front().type=="void" )
{ // special case for finding match between func(void) and func()
- Argument *a=new Argument;
- a->type = "void";
- const_cast<ArgumentList*>(dstAl)->append(a);
+ Argument a;
+ a.type = "void";
+ dstAl.push_back(a);
MATCH
return TRUE;
}
- if (srcAl->count() != dstAl->count())
+ if (srcAl.size() != dstAl.size())
{
NOMATCH
return FALSE; // different number of arguments -> no match
@@ -3823,19 +3665,19 @@ bool matchArguments2(const Definition *srcScope,const FileDef *srcFileScope,cons
if (checkCV)
{
- if (srcAl->constSpecifier != dstAl->constSpecifier)
+ if (srcAl.constSpecifier != dstAl.constSpecifier)
{
NOMATCH
return FALSE; // one member is const, the other not -> no match
}
- if (srcAl->volatileSpecifier != dstAl->volatileSpecifier)
+ if (srcAl.volatileSpecifier != dstAl.volatileSpecifier)
{
NOMATCH
return FALSE; // one member is volatile, the other not -> no match
}
}
- if (srcAl->refQualifier != dstAl->refQualifier)
+ if (srcAl.refQualifier != dstAl.refQualifier)
{
NOMATCH
return FALSE; // one member is has a different ref-qualifier than the other
@@ -3843,10 +3685,12 @@ bool matchArguments2(const Definition *srcScope,const FileDef *srcFileScope,cons
// so far the argument list could match, so we need to compare the types of
// all arguments.
- ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
- Argument *srcA,*dstA;
- for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
- {
+ auto srcIt = srcAl.begin();
+ auto dstIt = dstAl.begin();
+ for (;srcIt!=srcAl.end() && dstIt!=dstAl.end();++srcIt,++dstIt)
+ {
+ Argument &srcA = *srcIt;
+ Argument &dstA = *dstIt;
if (!matchArgument2(srcScope,srcFileScope,srcA,
dstScope,dstFileScope,dstA)
)
@@ -3863,134 +3707,139 @@ bool matchArguments2(const Definition *srcScope,const FileDef *srcFileScope,cons
// merges the initializer of two argument lists
// pre: the types of the arguments in the list should match.
-void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwrite)
+void mergeArguments(ArgumentList &srcAl,ArgumentList &dstAl,bool forceNameOverwrite)
{
//printf("mergeArguments '%s', '%s'\n",
// argListToString(srcAl).data(),argListToString(dstAl).data());
- if (srcAl==0 || dstAl==0 || srcAl->count()!=dstAl->count())
+ if (srcAl.size()!=dstAl.size())
{
return; // invalid argument lists -> do not merge
}
- ArgumentListIterator srcAli(*srcAl),dstAli(*dstAl);
- Argument *srcA,*dstA;
- for (;(srcA=srcAli.current()) && (dstA=dstAli.current());++srcAli,++dstAli)
+ auto srcIt=srcAl.begin();
+ auto dstIt=dstAl.begin();
+ while (srcIt!=srcAl.end() && dstIt!=dstAl.end())
{
- if (srcA->defval.isEmpty() && !dstA->defval.isEmpty())
+ Argument &srcA = *srcIt;
+ Argument &dstA = *dstIt;
+
+ if (srcA.defval.isEmpty() && !dstA.defval.isEmpty())
{
- //printf("Defval changing '%s'->'%s'\n",srcA->defval.data(),dstA->defval.data());
- srcA->defval=dstA->defval.copy();
+ //printf("Defval changing '%s'->'%s'\n",srcA.defval.data(),dstA.defval.data());
+ srcA.defval=dstA.defval;
}
- else if (!srcA->defval.isEmpty() && dstA->defval.isEmpty())
+ else if (!srcA.defval.isEmpty() && dstA.defval.isEmpty())
{
- //printf("Defval changing '%s'->'%s'\n",dstA->defval.data(),srcA->defval.data());
- dstA->defval=srcA->defval.copy();
+ //printf("Defval changing '%s'->'%s'\n",dstA.defval.data(),srcA.defval.data());
+ dstA.defval=srcA.defval;
}
// fix wrongly detected const or volatile specifiers before merging.
// example: "const A *const" is detected as type="const A *" name="const"
- if (srcA->name=="const" || srcA->name=="volatile")
+ if (srcA.name=="const" || srcA.name=="volatile")
{
- srcA->type+=" "+srcA->name;
- srcA->name.resize(0);
+ srcA.type+=" "+srcA.name;
+ srcA.name.resize(0);
}
- if (dstA->name=="const" || dstA->name=="volatile")
+ if (dstA.name=="const" || dstA.name=="volatile")
{
- dstA->type+=" "+dstA->name;
- dstA->name.resize(0);
+ dstA.type+=" "+dstA.name;
+ dstA.name.resize(0);
}
- if (srcA->type==dstA->type)
+ if (srcA.type==dstA.type)
{
- //printf("1. merging %s:%s <-> %s:%s\n",srcA->type.data(),srcA->name.data(),dstA->type.data(),dstA->name.data());
- if (srcA->name.isEmpty() && !dstA->name.isEmpty())
+ //printf("1. merging %s:%s <-> %s:%s\n",srcA.type.data(),srcA.name.data(),dstA.type.data(),dstA.name.data());
+ if (srcA.name.isEmpty() && !dstA.name.isEmpty())
{
- //printf("type: '%s':='%s'\n",srcA->type.data(),dstA->type.data());
- //printf("name: '%s':='%s'\n",srcA->name.data(),dstA->name.data());
- srcA->type = dstA->type.copy();
- srcA->name = dstA->name.copy();
+ //printf("type: '%s':='%s'\n",srcA.type.data(),dstA.type.data());
+ //printf("name: '%s':='%s'\n",srcA.name.data(),dstA.name.data());
+ srcA.type = dstA.type;
+ srcA.name = dstA.name;
}
- else if (!srcA->name.isEmpty() && dstA->name.isEmpty())
+ else if (!srcA.name.isEmpty() && dstA.name.isEmpty())
{
- //printf("type: '%s':='%s'\n",dstA->type.data(),srcA->type.data());
- //printf("name: '%s':='%s'\n",dstA->name.data(),srcA->name.data());
- dstA->type = srcA->type.copy();
- dstA->name = dstA->name.copy();
+ //printf("type: '%s':='%s'\n",dstA.type.data(),srcA.type.data());
+ //printf("name: '%s':='%s'\n",dstA.name.data(),srcA.name.data());
+ dstA.type = srcA.type;
+ dstA.name = dstA.name;
}
- else if (!srcA->name.isEmpty() && !dstA->name.isEmpty())
+ else if (!srcA.name.isEmpty() && !dstA.name.isEmpty())
{
- //printf("srcA->name=%s dstA->name=%s\n",srcA->name.data(),dstA->name.data());
+ //printf("srcA.name=%s dstA.name=%s\n",srcA.name.data(),dstA.name.data());
if (forceNameOverwrite)
{
- srcA->name = dstA->name;
+ srcA.name = dstA.name;
}
else
{
- if (srcA->docs.isEmpty() && !dstA->docs.isEmpty())
+ if (srcA.docs.isEmpty() && !dstA.docs.isEmpty())
{
- srcA->name = dstA->name;
+ srcA.name = dstA.name;
}
- else if (!srcA->docs.isEmpty() && dstA->docs.isEmpty())
+ else if (!srcA.docs.isEmpty() && dstA.docs.isEmpty())
{
- dstA->name = srcA->name;
+ dstA.name = srcA.name;
}
}
}
}
else
{
- //printf("2. merging '%s':'%s' <-> '%s':'%s'\n",srcA->type.data(),srcA->name.data(),dstA->type.data(),dstA->name.data());
- srcA->type=srcA->type.stripWhiteSpace();
- dstA->type=dstA->type.stripWhiteSpace();
- if (srcA->type+" "+srcA->name==dstA->type) // "unsigned long:int" <-> "unsigned long int:bla"
+ //printf("2. merging '%s':'%s' <-> '%s':'%s'\n",srcA.type.data(),srcA.name.data(),dstA.type.data(),dstA.name.data());
+ srcA.type=srcA.type.stripWhiteSpace();
+ dstA.type=dstA.type.stripWhiteSpace();
+ if (srcA.type+" "+srcA.name==dstA.type) // "unsigned long:int" <-> "unsigned long int:bla"
{
- srcA->type+=" "+srcA->name;
- srcA->name=dstA->name;
+ srcA.type+=" "+srcA.name;
+ srcA.name=dstA.name;
}
- else if (dstA->type+" "+dstA->name==srcA->type) // "unsigned long int bla" <-> "unsigned long int"
+ else if (dstA.type+" "+dstA.name==srcA.type) // "unsigned long int bla" <-> "unsigned long int"
{
- dstA->type+=" "+dstA->name;
- dstA->name=srcA->name;
+ dstA.type+=" "+dstA.name;
+ dstA.name=srcA.name;
}
- else if (srcA->name.isEmpty() && !dstA->name.isEmpty())
+ else if (srcA.name.isEmpty() && !dstA.name.isEmpty())
{
- srcA->name = dstA->name;
+ srcA.name = dstA.name;
}
- else if (dstA->name.isEmpty() && !srcA->name.isEmpty())
+ else if (dstA.name.isEmpty() && !srcA.name.isEmpty())
{
- dstA->name = srcA->name;
+ dstA.name = srcA.name;
}
}
- int i1=srcA->type.find("::"),
- i2=dstA->type.find("::"),
- j1=srcA->type.length()-i1-2,
- j2=dstA->type.length()-i2-2;
- if (i1!=-1 && i2==-1 && srcA->type.right(j1)==dstA->type)
+ int i1=srcA.type.find("::"),
+ i2=dstA.type.find("::"),
+ j1=srcA.type.length()-i1-2,
+ j2=dstA.type.length()-i2-2;
+ if (i1!=-1 && i2==-1 && srcA.type.right(j1)==dstA.type)
{
- //printf("type: '%s':='%s'\n",dstA->type.data(),srcA->type.data());
- //printf("name: '%s':='%s'\n",dstA->name.data(),srcA->name.data());
- dstA->type = srcA->type.left(i1+2)+dstA->type;
- dstA->name = dstA->name.copy();
+ //printf("type: '%s':='%s'\n",dstA.type.data(),srcA.type.data());
+ //printf("name: '%s':='%s'\n",dstA.name.data(),srcA.name.data());
+ dstA.type = srcA.type.left(i1+2)+dstA.type;
+ dstA.name = dstA.name;
}
- else if (i1==-1 && i2!=-1 && dstA->type.right(j2)==srcA->type)
+ else if (i1==-1 && i2!=-1 && dstA.type.right(j2)==srcA.type)
{
- //printf("type: '%s':='%s'\n",srcA->type.data(),dstA->type.data());
- //printf("name: '%s':='%s'\n",dstA->name.data(),srcA->name.data());
- srcA->type = dstA->type.left(i2+2)+srcA->type;
- srcA->name = dstA->name.copy();
+ //printf("type: '%s':='%s'\n",srcA.type.data(),dstA.type.data());
+ //printf("name: '%s':='%s'\n",dstA.name.data(),srcA.name.data());
+ srcA.type = dstA.type.left(i2+2)+srcA.type;
+ srcA.name = dstA.name;
}
- if (srcA->docs.isEmpty() && !dstA->docs.isEmpty())
+ if (srcA.docs.isEmpty() && !dstA.docs.isEmpty())
{
- srcA->docs = dstA->docs.copy();
+ srcA.docs = dstA.docs;
}
- else if (dstA->docs.isEmpty() && !srcA->docs.isEmpty())
+ else if (dstA.docs.isEmpty() && !srcA.docs.isEmpty())
{
- dstA->docs = srcA->docs.copy();
+ dstA.docs = srcA.docs;
}
//printf("Merge argument '%s|%s' '%s|%s'\n",
- // srcA->type.data(),srcA->name.data(),
- // dstA->type.data(),dstA->name.data());
+ // srcA.type.data(),srcA.name.data(),
+ // dstA.type.data(),dstA.name.data());
+ ++srcIt;
+ ++dstIt;
}
}
@@ -4023,14 +3872,13 @@ static void findMembersWithSpecificName(MemberName *mn,
ArgumentList *argList=0;
if (args && !md->isDefine() && qstrcmp(args,"()")!=0)
{
- argList=new ArgumentList;
- const ArgumentList *mdAl = md->argumentList();
+ const ArgumentList &mdAl = md->argumentList();
+ ArgumentList argList;
stringToArgumentList(args,argList);
match=matchArguments2(
md->getOuterScope(),fd,mdAl,
Doxygen::globalScope,fd,argList,
- checkCV);
- delete argList; argList=0;
+ checkCV);
}
if (match && (forceTagFile==0 || md->getReference()==forceTagFile))
{
@@ -4154,22 +4002,20 @@ bool getDefs(const QCString &scName,
MemberNameIterator mmli(*mn);
MemberDef *mmd;
int mdist=maxInheritanceDepth;
- ArgumentList *argList=0;
+ ArgumentList argList;
if (args)
{
- argList=new ArgumentList;
stringToArgumentList(args,argList);
}
for (mmli.toFirst();(mmd=mmli.current());++mmli)
{
if (!mmd->isStrongEnumValue())
{
- ArgumentList *mmdAl = mmd->argumentList();
- bool match=args==0 ||
+ const ArgumentList &mmdAl = mmd->argumentList();
+ bool match=args==0 ||
matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
- fcd,fcd->getFileDef(),argList,
- checkCV
- );
+ fcd, fcd->getFileDef(),argList,
+ checkCV);
//printf("match=%d\n",match);
if (match)
{
@@ -4187,10 +4033,6 @@ bool getDefs(const QCString &scName,
}
}
}
- if (argList)
- {
- delete argList; argList=0;
- }
if (mdist==maxInheritanceDepth && args && qstrcmp(args,"()")==0)
// no exact match found, but if args="()" an arbitrary member will do
{
@@ -4277,33 +4119,43 @@ bool getDefs(const QCString &scName,
//printf("Global symbol\n");
MemberNameIterator mmli(*mn);
MemberDef *mmd, *fuzzy_mmd = 0;
- ArgumentList *argList = 0;
+ ArgumentList argList;
bool hasEmptyArgs = args && qstrcmp(args, "()") == 0;
if (args)
- stringToArgumentList(args, argList = new ArgumentList);
+ {
+ stringToArgumentList(args, argList);
+ }
for (mmli.toFirst(); (mmd = mmli.current()); ++mmli)
{
if (!mmd->isLinkable() || (!mmd->isRelated() && !mmd->isForeign()) ||
!mmd->getClassDef())
+ {
continue;
+ }
- if (!args) break;
+ if (!args)
+ {
+ break;
+ }
- ArgumentList *mmdAl = mmd->argumentList();
+ ArgumentList &mmdAl = mmd->argumentList();
if (matchArguments2(mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
Doxygen::globalScope,mmd->getFileDef(),argList,
checkCV
)
- ) break;
+ )
+ {
+ break;
+ }
if (!fuzzy_mmd && hasEmptyArgs)
+ {
fuzzy_mmd = mmd;
+ }
}
- if (argList) delete argList, argList = 0;
-
mmd = mmd ? mmd : fuzzy_mmd;
if (mmd && !mmd->isStrongEnumValue())
@@ -4371,16 +4223,15 @@ bool getDefs(const QCString &scName,
else if (mmd->getOuterScope()==fnd /* && mmd->isLinkable() */ )
{ // namespace is found
bool match=TRUE;
- ArgumentList *argList=0;
+ ArgumentList argList;
if (args && qstrcmp(args,"()")!=0)
{
- argList=new ArgumentList;
- const ArgumentList *mmdAl = mmd->argumentList();
+ const ArgumentList &mmdAl = mmd->argumentList();
stringToArgumentList(args,argList);
match=matchArguments2(
mmd->getOuterScope(),mmd->getFileDef(),mmdAl,
fnd,mmd->getFileDef(),argList,
- checkCV);
+ checkCV);
}
if (match)
{
@@ -4388,10 +4239,6 @@ bool getDefs(const QCString &scName,
md=mmd;
found=TRUE;
}
- if (args)
- {
- delete argList; argList=0;
- }
}
}
if (!found && args && !qstrcmp(args,"()"))
@@ -4436,7 +4283,7 @@ bool getDefs(const QCString &scName,
int ni=namespaceName.findRev("::");
//printf("namespaceName=%s ni=%d\n",namespaceName.data(),ni);
bool notInNS = tmd && ni==-1 && tmd->getNamespaceDef()==0 && (mScope.isEmpty() || mScope==tmd->name());
- bool sameNS = tmd && tmd->getNamespaceDef() && namespaceName.left(ni)==tmd->getNamespaceDef()->name();
+ bool sameNS = tmd && tmd->getNamespaceDef() && namespaceName.left(ni)==tmd->getNamespaceDef()->name() && namespaceName.mid(ni+2)==tmd->name();
//printf("notInNS=%d sameNS=%d\n",notInNS,sameNS);
if (tmd && tmd->isStrong() && // C++11 enum class
(notInNS || sameNS) &&
@@ -5820,10 +5667,10 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te
int si,pi=0;
ClassDef *cd=0;
while (
- (si=scope.find("::",pi))!=-1 && !getClass(scope.left(si)+templ) &&
- ((cd=getClass(scope.left(si)))==0 || cd->templateArguments()==0)
- )
- {
+ (si=scope.find("::",pi))!=-1 && !getClass(scope.left(si)+templ) &&
+ ((cd=getClass(scope.left(si)))==0 || cd->templateArguments().empty())
+ )
+ {
//printf("Tried '%s'\n",(scope.left(si)+templ).data());
pi=si+2;
}
@@ -6429,7 +6276,7 @@ int extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStri
QCString normalizeNonTemplateArgumentsInString(
const QCString &name,
const Definition *context,
- const ArgumentList * formalArgs)
+ const ArgumentList &formalArgs)
{
// skip until <
int p=name.find('<');
@@ -6445,16 +6292,12 @@ QCString normalizeNonTemplateArgumentsInString(
result += name.mid(p,i-p);
QCString n = name.mid(i,l);
bool found=FALSE;
- if (formalArgs) // check that n is not a formal template argument
+ for (const Argument formArg : formalArgs)
{
- ArgumentListIterator formAli(*formalArgs);
- const Argument *formArg;
- for (formAli.toFirst();
- (formArg=formAli.current()) && !found;
- ++formAli
- )
+ if (formArg.name == n)
{
- found = formArg->name==n;
+ found=TRUE;
+ break;
}
}
if (!found)
@@ -6490,12 +6333,12 @@ QCString normalizeNonTemplateArgumentsInString(
*/
QCString substituteTemplateArgumentsInString(
const QCString &name,
- ArgumentList *formalArgs,
- ArgumentList *actualArgs)
+ const ArgumentList &formalArgs,
+ const ArgumentList &actualArgs)
{
//printf("substituteTemplateArgumentsInString(name=%s formal=%s actualArg=%s)\n",
// name.data(),argListToString(formalArgs).data(),argListToString(actualArgs).data());
- if (formalArgs==0) return name;
+ if (formalArgs.empty()) return name;
QCString result;
static QRegExp re("[a-z_A-Z\\x80-\\xFF][a-z_A-Z0-9\\x80-\\xFF]*");
int p=0,l,i;
@@ -6504,82 +6347,89 @@ QCString substituteTemplateArgumentsInString(
{
result += name.mid(p,i-p);
QCString n = name.mid(i,l);
- ArgumentListIterator formAli(*formalArgs);
- ArgumentListIterator actAli(*actualArgs);
- Argument *formArg;
- Argument *actArg;
+ auto formIt = formalArgs.begin();
+ auto actIt = actualArgs.begin();
// if n is a template argument, then we substitute it
// for its template instance argument.
bool found=FALSE;
- for (formAli.toFirst();
- (formArg=formAli.current()) && !found;
- ++formAli,++actAli
+ for (auto formIt = formalArgs.begin();
+ formIt!=formalArgs.end() && !found;
+ ++formIt
)
{
- actArg = actAli.current();
- if (formArg->type.left(6)=="class " && formArg->name.isEmpty())
+ Argument formArg = *formIt;
+ Argument actArg;
+ if (actIt!=actualArgs.end())
+ {
+ actArg = *actIt;
+ }
+ if (formArg.type.left(6)=="class " && formArg.name.isEmpty())
{
- formArg->name = formArg->type.mid(6);
- formArg->type = "class";
+ formArg.name = formArg.type.mid(6);
+ formArg.type = "class";
}
- if (formArg->type.left(9)=="typename " && formArg->name.isEmpty())
+ if (formArg.type.left(9)=="typename " && formArg.name.isEmpty())
{
- formArg->name = formArg->type.mid(9);
- formArg->type = "typename";
+ formArg.name = formArg.type.mid(9);
+ formArg.type = "typename";
}
- if (formArg->type=="class" || formArg->type=="typename" || formArg->type.left(8)=="template")
+ if (formArg.type=="class" || formArg.type=="typename" || formArg.type.left(8)=="template")
{
//printf("n=%s formArg->type='%s' formArg->name='%s' formArg->defval='%s'\n",
// n.data(),formArg->type.data(),formArg->name.data(),formArg->defval.data());
//printf(">> formArg->name='%s' actArg->type='%s' actArg->name='%s'\n",
// formArg->name.data(),actArg ? actArg->type.data() : "",actArg ? actArg->name.data() : ""
// );
- if (formArg->name==n && actArg && !actArg->type.isEmpty()) // base class is a template argument
+ if (formArg.name==n && actIt!=actualArgs.end() && !actArg.type.isEmpty()) // base class is a template argument
{
// replace formal argument with the actual argument of the instance
- if (!leftScopeMatch(actArg->type,n))
+ if (!leftScopeMatch(actArg.type,n))
// the scope guard is to prevent recursive lockup for
// template<class A> class C : public<A::T>,
// where A::T would become A::T::T here,
// since n==A and actArg->type==A::T
// see bug595833 for an example
{
- if (actArg->name.isEmpty())
+ if (actArg.name.isEmpty())
{
- result += actArg->type+" ";
+ result += actArg.type+" ";
found=TRUE;
}
else
// for case where the actual arg is something like "unsigned int"
// the "int" part is in actArg->name.
{
- result += actArg->type+" "+actArg->name+" ";
+ result += actArg.type+" "+actArg.name+" ";
found=TRUE;
}
}
}
- else if (formArg->name==n &&
- actArg==0 &&
- !formArg->defval.isEmpty() &&
- formArg->defval!=name /* to prevent recursion */
+ else if (formArg.name==n &&
+ actIt==actualArgs.end() &&
+ !formArg.defval.isEmpty() &&
+ formArg.defval!=name /* to prevent recursion */
)
{
- result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs)+" ";
+ result += substituteTemplateArgumentsInString(formArg.defval,formalArgs,actualArgs)+" ";
found=TRUE;
}
}
- else if (formArg->name==n &&
- actArg==0 &&
- !formArg->defval.isEmpty() &&
- formArg->defval!=name /* to prevent recursion */
+ else if (formArg.name==n &&
+ actIt==actualArgs.end() &&
+ !formArg.defval.isEmpty() &&
+ formArg.defval!=name /* to prevent recursion */
)
{
- result += substituteTemplateArgumentsInString(formArg->defval,formalArgs,actualArgs)+" ";
+ result += substituteTemplateArgumentsInString(formArg.defval,formalArgs,actualArgs)+" ";
found=TRUE;
}
+ if (actIt!=actualArgs.end())
+ {
+ actIt++;
+ }
}
- if (!found)
+ if (!found)
{
result += n;
}
@@ -6591,6 +6441,7 @@ QCString substituteTemplateArgumentsInString(
return result.stripWhiteSpace();
}
+#if 0
/*! Makes a deep copy of the list of argument lists \a srcLists.
* Will allocate memory, that is owned by the caller.
*/
@@ -6607,6 +6458,7 @@ QList<ArgumentList> *copyArgumentLists(const QList<ArgumentList> *srcLists)
}
return dstLists;
}
+#endif
/*! Strips template specifiers from scope \a fullName, except those
* that make up specialized classes. The switch \a parentOnly
@@ -6760,11 +6612,10 @@ found:
PageDef *addRelatedPage(const char *name,const QCString &ptitle,
const QCString &doc,
- const QList<SectionInfo> * /*anchors*/,
const char *fileName,int startLine,
- const QList<ListItemInfo> *sli,
+ const std::vector<ListItemInfo> &sli,
GroupDef *gd,
- TagInfo *tagInfo,
+ const TagInfo *tagInfo,
bool xref,
SrcLangExt lang
)
@@ -6850,30 +6701,28 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle,
//----------------------------------------------------------------------------
-void addRefItem(const QList<ListItemInfo> *sli,
+void addRefItem(const std::vector<ListItemInfo> &sli,
const char *key,
const char *prefix, const char *name,const char *title,const char *args,Definition *scope)
{
//printf("addRefItem(sli=%p,key=%s,prefix=%s,name=%s,title=%s,args=%s)\n",sli,key,prefix,name,title,args);
- if (sli && key && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
+ if (key && key[0]!='@') // check for @ to skip anonymous stuff (see bug427012)
{
- QListIterator<ListItemInfo> slii(*sli);
- ListItemInfo *lii;
- for (slii.toFirst();(lii=slii.current());++slii)
+ for (const ListItemInfo &lii : sli)
{
- RefList *refList = Doxygen::xrefLists->find(lii->type);
+ RefList *refList = Doxygen::xrefLists->find(lii.type);
if (refList
&&
(
// either not a built-in list or the list is enabled
- (lii->type!="todo" || Config_getBool(GENERATE_TODOLIST)) &&
- (lii->type!="test" || Config_getBool(GENERATE_TESTLIST)) &&
- (lii->type!="bug" || Config_getBool(GENERATE_BUGLIST)) &&
- (lii->type!="deprecated" || Config_getBool(GENERATE_DEPRECATEDLIST))
+ (lii.type!="todo" || Config_getBool(GENERATE_TODOLIST)) &&
+ (lii.type!="test" || Config_getBool(GENERATE_TESTLIST)) &&
+ (lii.type!="bug" || Config_getBool(GENERATE_BUGLIST)) &&
+ (lii.type!="deprecated" || Config_getBool(GENERATE_DEPRECATEDLIST))
)
)
{
- RefItem *item = refList->getRefItem(lii->itemId);
+ RefItem *item = refList->getRefItem(lii.itemId);
ASSERT(item!=0);
item->prefix = prefix;
@@ -8045,22 +7894,20 @@ QCString expandAlias(const QCString &aliasName,const QCString &aliasValue)
return result;
}
-void writeTypeConstraints(OutputList &ol,const Definition *d,const ArgumentList *al)
+void writeTypeConstraints(OutputList &ol,const Definition *d,const ArgumentList &al)
{
- if (al==0) return;
+ if (al.empty()) return;
ol.startConstraintList(theTranslator->trTypeConstraints());
- ArgumentListIterator ali(*al);
- const Argument *a;
- for (;(a=ali.current());++ali)
+ for (const Argument &a : al)
{
ol.startConstraintParam();
- ol.parseText(a->name);
+ ol.parseText(a.name);
ol.endConstraintParam();
ol.startConstraintType();
- linkifyText(TextGeneratorOLImpl(ol),d,0,0,a->type);
+ linkifyText(TextGeneratorOLImpl(ol),d,0,0,a.type);
ol.endConstraintType();
ol.startConstraintDocs();
- ol.generateDoc(d->docFile(),d->docLine(),d,0,a->docs,TRUE,FALSE);
+ ol.generateDoc(d->docFile(),d->docLine(),d,0,a.docs,TRUE,FALSE);
ol.endConstraintDocs();
}
ol.endConstraintList();
@@ -8081,14 +7928,22 @@ void stackTrace()
p += sprintf(p,"%p ", backtraceFrames[x]);
}
fprintf(stderr,"========== STACKTRACE START ==============\n");
- if (FILE *fp = popen(cmd, "r"))
+ #if defined(_WIN32) && !defined(__CYGWIN__)
+ if (FILE *fp = _popen(cmd, "r"))
+ #else
+ if (FILE *fp = ::popen(cmd, "r"))
+ #endif
{
char resBuf[512];
while (size_t len = fread(resBuf, 1, sizeof(resBuf), fp))
{
fwrite(resBuf, 1, len, stderr);
}
- pclose(fp);
+ #if defined(_WIN32) && !defined(__CYGWIN__)
+ _pclose(fp);
+ #else
+ ::pclose(fp);
+ #endif
}
fprintf(stderr,"============ STACKTRACE END ==============\n");
//fprintf(stderr,"%s\n", frameStrings[x]);
@@ -8164,7 +8019,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf,bool filter,bool isSourceC
{
QCString cmd=filterName+" \""+fileName+"\"";
Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",qPrint(cmd));
- FILE *f=portable_popen(cmd,"r");
+ FILE *f=Portable::popen(cmd,"r");
if (!f)
{
err("could not execute filter %s\n",filterName.data());
@@ -8178,7 +8033,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf,bool filter,bool isSourceC
//printf(">>>>>>>>Reading %d bytes\n",numRead);
inBuf.addArray(buf,numRead),size+=numRead;
}
- portable_pclose(f);
+ Portable::pclose(f);
inBuf.at(inBuf.curPos()) ='\0';
Debug::print(Debug::FilterOutput, 0, "Filter output\n");
Debug::print(Debug::FilterOutput,0,"-------------\n%s\n-------------\n",qPrint(inBuf));
@@ -8186,13 +8041,18 @@ bool readInputFile(const char *fileName,BufStr &inBuf,bool filter,bool isSourceC
int start=0;
if (size>=2 &&
- (((uchar)inBuf.at(0)==0xFF && (uchar)inBuf.at(1)==0xFE) || // Little endian BOM
- ((uchar)inBuf.at(0)==0xFE && (uchar)inBuf.at(1)==0xFF) // big endian BOM
- )
- ) // UCS-2 encoded file
+ ((uchar)inBuf.at(0)==0xFF && (uchar)inBuf.at(1)==0xFE) // Little endian BOM
+ ) // UCS-2LE encoded file
+ {
+ transcodeCharacterBuffer(fileName,inBuf,inBuf.curPos(),
+ "UCS-2LE","UTF-8");
+ }
+ else if (size>=2 &&
+ ((uchar)inBuf.at(0)==0xFE && (uchar)inBuf.at(1)==0xFF) // big endian BOM
+ ) // UCS-2BE encoded file
{
transcodeCharacterBuffer(fileName,inBuf,inBuf.curPos(),
- "UCS-2","UTF-8");
+ "UCS-2BE","UTF-8");
}
else if (size>=3 &&
(uchar)inBuf.at(0)==0xEF &&
@@ -8799,7 +8659,7 @@ bool namespaceHasVisibleChild(const NamespaceDef *nd,bool includeClasses,bool fi
const NamespaceDef *cnd;
for (cnli.toFirst();(cnd=cnli.current());++cnli)
{
- if (cnd->isLinkableInProject() && cnd->localName().find('@')==-1)
+ if (cnd->isLinkableInProject() && !cnd->isAnonymous())
{
return TRUE;
}
diff --git a/src/util.h b/src/util.h
index cb2b957..662a1db 100644
--- a/src/util.h
+++ b/src/util.h
@@ -186,12 +186,12 @@ void writePageRef(OutputDocInterface &od,const char *cn,const char *mn);
QCString getCanonicalTemplateSpec(const Definition *d,const FileDef *fs,const QCString& spec);
-bool matchArguments2(const Definition *srcScope,const FileDef *srcFileScope,const ArgumentList *srcAl,
- const Definition *dstScope,const FileDef *dstFileScope,const ArgumentList *dstAl,
+bool matchArguments2(const Definition *srcScope,const FileDef *srcFileScope,const ArgumentList &srcAl,
+ const Definition *dstScope,const FileDef *dstFileScope,const ArgumentList &dstAl,
bool checkCV
);
-void mergeArguments(ArgumentList *,ArgumentList *,bool forceNameOverwrite=FALSE);
+void mergeArguments(ArgumentList &,ArgumentList &,bool forceNameOverwrite=FALSE);
QCString substituteClassNames(const QCString &s);
@@ -232,9 +232,9 @@ inline bool isId(int c)
QCString removeRedundantWhiteSpace(const QCString &s);
-QCString argListToString(const ArgumentList *al,bool useCanonicalType=FALSE,bool showDefVals=TRUE);
+QCString argListToString(const ArgumentList &al,bool useCanonicalType=FALSE,bool showDefVals=TRUE);
-QCString tempArgListToString(const ArgumentList *al,SrcLangExt lang);
+QCString tempArgListToString(const ArgumentList &al,SrcLangExt lang);
QCString generateMarker(int id);
@@ -305,14 +305,14 @@ int extractClassNameFromType(const QCString &type,int &pos,
QCString normalizeNonTemplateArgumentsInString(
const QCString &name,
const Definition *context,
- const ArgumentList *formalArgs);
+ const ArgumentList &formalArgs);
QCString substituteTemplateArgumentsInString(
const QCString &name,
- ArgumentList *formalArgs,
- ArgumentList *actualArgs);
+ const ArgumentList &formalArgs,
+ const ArgumentList &actualArgs);
-QList<ArgumentList> *copyArgumentLists(const QList<ArgumentList> *srcLists);
+//QList<ArgumentList> *copyArgumentLists(const QList<ArgumentList> *srcLists);
QCString stripTemplateSpecifiersFromScope(const QCString &fullName,
bool parentOnly=TRUE,
@@ -327,18 +327,17 @@ int getScopeFragment(const QCString &s,int p,int *l);
int filterCRLF(char *buf,int len);
-void addRefItem(const QList<ListItemInfo> *sli,const char *prefix,
+void addRefItem(const std::vector<ListItemInfo> &sli,const char *prefix,
const char *key,
const char *name,const char *title,const char *args,Definition *scope);
PageDef *addRelatedPage(const char *name,
const QCString &ptitle,
const QCString &doc,
- const QList<SectionInfo> *anchors,
const char *fileName,int startLine,
- const QList<ListItemInfo> *sli,
+ const std::vector<ListItemInfo> &sli = std::vector<ListItemInfo>(),
GroupDef *gd=0,
- TagInfo *tagInfo=0,
+ const TagInfo *tagInfo=0,
bool xref=FALSE,
SrcLangExt lang=SrcLangExt_Unknown
);
@@ -407,7 +406,7 @@ const ClassDef *newResolveTypedef(const FileDef *fileScope,
const MemberDef **pMemType=0,
QCString *pTemplSpec=0,
QCString *pResolvedType=0,
- ArgumentList *actTemplParams=0);
+ const ArgumentList *actTemplParams=0);
QCString parseCommentAsText(const Definition *scope,const MemberDef *member,const QCString &doc,const QCString &fileName,int lineNr);
@@ -424,7 +423,7 @@ int countAliasArguments(const QCString argList);
QCString resolveAliasCmd(const QCString aliasCmd);
QCString expandAlias(const QCString &aliasName,const QCString &aliasValue);
-void writeTypeConstraints(OutputList &ol,const Definition *d,const ArgumentList *al);
+void writeTypeConstraints(OutputList &ol,const Definition *d,const ArgumentList &al);
QCString convertCharEntitiesToUTF8(const QCString &s);
diff --git a/src/vhdlcode.h b/src/vhdlcode.h
index a7b4687..b79e2ab 100644
--- a/src/vhdlcode.h
+++ b/src/vhdlcode.h
@@ -1,16 +1,35 @@
#ifndef VHDLCODE_H
#define VHDLCODE_H
+#include "parserintf.h"
+
class CodeOutputInterface;
class FileDef;
class MemberDef;
-void parseVhdlCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
- bool collectXRefs);
-void resetVhdlCodeParserState();
void codeFreeVhdlScanner();
+class VHDLCodeParser : public CodeParserInterface
+{
+ public:
+ virtual ~VHDLCodeParser() {}
+ void parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt lang,
+ bool isExampleBlock,
+ const char *exampleName=0,
+ FileDef *fileDef=0,
+ int startLine=-1,
+ int endLine=-1,
+ bool inlineFragment=FALSE,
+ const MemberDef *memberDef=0,
+ bool showLineNumbers=TRUE,
+ const Definition *searchCtx=0,
+ bool collectXRefs=TRUE
+ );
+ void resetCodeParserState() {}
+};
+
+
#endif
diff --git a/src/vhdlcode.l b/src/vhdlcode.l
index 03bf883..fe5a8d9 100644
--- a/src/vhdlcode.l
+++ b/src/vhdlcode.l
@@ -33,6 +33,7 @@
#include <qdir.h>
#include <qcstringlist.h>
+#include "vhdlcode.h"
#include "entry.h"
#include "doxygen.h"
#include "message.h"
@@ -434,14 +435,10 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
static void setParameterList(const MemberDef *md)
{
g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : "";
- const ArgumentList *al = md->argumentList();
- if (al==0) return;
- ArgumentListIterator ali(*al);
- const Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a: md->argumentList())
{
- g_parmName = a->name.copy();
- g_parmType = a->type.copy();
+ g_parmName = a.name.copy();
+ g_parmType = a.type.copy();
int i = g_parmType.find('*');
if (i!=-1) g_parmType = g_parmType.left(i);
i = g_parmType.find('&');
@@ -683,9 +680,8 @@ static void codifyMapLines(const char *text)
static void writeFuncProto()
{
- QList<Argument> ql;
QCString name,ret;
- VhdlDocGen::parseFuncProto(g_FuncProto,ql,name,ret,FALSE);
+ VhdlDocGen::parseFuncProto(g_FuncProto,name,ret,FALSE);
if (name.isEmpty())
{
@@ -702,7 +698,7 @@ static void writeFuncProto()
{
temp.stripPrefix("_");// _{package body name}
}
- MemberDef *mdef=VhdlDocGen::findFunction(ql,name,temp,FALSE);
+ MemberDef *mdef=VhdlDocGen::findFunction(name,temp);
if (mdef)
{
@@ -1535,17 +1531,26 @@ XILINX "INST"|"NET"|"PIN"|"BLKNM"|"BUFG"|"COLLAPSE"|"CPLD"|"COMPGRP"|"CONFI
/*@ ----------------------------------------------------------------------------
*/
-void resetVhdlCodeParserState()
+static void resetVhdlCodeParserState()
{
g_vhdlKeyDict.setAutoDelete(TRUE);
g_vhdlKeyDict.clear();
}
-void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s,
- bool exBlock, const char *exName,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- const MemberDef *memberDef,bool,const Definition *searchCtx,
- bool /* collectXRefs */)
+void VHDLCodeParser::parseCode(CodeOutputInterface &od,
+ const char *className,
+ const QCString &s,
+ SrcLangExt,
+ bool exBlock,
+ const char *exName,
+ FileDef *fd,
+ int startLine,
+ int endLine,
+ bool inlineFragment,
+ const MemberDef *memberDef,
+ bool,
+ const Definition *searchCtx,
+ bool /* collectXRefs */)
{
//printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd);
if (s.isEmpty()) return;
@@ -1639,13 +1644,5 @@ void codeFreeVhdlScanner()
#endif
}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void vhdlcodeYYdummy() { yy_flex_realloc(0,0); }
-}
-#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!"
-#endif
-
#include "vhdlcode.l.h"
diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp
index fca010e..66d8384 100644
--- a/src/vhdldocgen.cpp
+++ b/src/vhdldocgen.cpp
@@ -72,7 +72,7 @@ static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCStri
static void writeUCFLink(const MemberDef* mdef,OutputList &ol);
static void assignBinding(VhdlConfNode* conf);
static void addInstance(ClassDef* entity, ClassDef* arch, ClassDef *inst,
- const std::unique_ptr<Entry> &cur);
+ const std::shared_ptr<Entry> &cur);
//---------- create svg -------------------------------------------------------------
static void createSVG();
@@ -169,7 +169,7 @@ static void createSVG()
QCString vlargs="-Tsvg \""+ov+"\" "+dir ;
- if (portable_system(Config_getString(DOT_PATH) + "dot",vlargs)!=0)
+ if (Portable::system(Config_getString(DOT_PATH) + "dot",vlargs)!=0)
{
err("could not create dot file");
}
@@ -717,7 +717,7 @@ static QMap<ClassDef*,QList<ClassDef> > packages;
MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& memName)
{
- ClassDef* cd,*ecd;
+ ClassDef* cd,*ecd=0;
MemberDef *mdef=0;
cd=getClass(className);
@@ -793,9 +793,11 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
if (!packages.contains(ecd)) VhdlDocGen::findAllPackages(ecd);
}
- QMap<ClassDef*,QList<ClassDef> >::Iterator cList=packages.find(ecd);
- if (cList.key()!=0)
- {
+ if (ecd)
+ {
+ QMap<ClassDef*,QList<ClassDef> >::Iterator cList=packages.find(ecd);
+ if (cList!=packages.end())
+ {
QList<ClassDef> mlist=cList.data();
for (uint j=0;j<mlist.count();j++)
{
@@ -804,7 +806,8 @@ MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& mem
mdef=VhdlDocGen::findMemberDef(mlist.at(j),memName,MemberListType_pubMethods);
if (mdef) return mdef;
}
- }
+ }
+ }
return 0;
}//findMember
@@ -899,12 +902,9 @@ void VhdlDocGen::findAllPackages( ClassDef *cdef)
* is called in vhdlcode.l
*/
-MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
- const QCString& funcname,
- const QCString& package, bool /*type*/)
+MemberDef* VhdlDocGen::findFunction(const QCString& funcname, const QCString& package)
{
MemberDef* mdef=0;
- //int funcType;
ClassDef *cdef=getClass(package.data());
if (cdef==0) return 0;
@@ -918,40 +918,11 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql,
QCString mname=mdef->name();
if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (compareString(funcname,mname)==0))
{
- ArgumentList *alp = mdef->argumentList();
-
- // ArgumentList* arg2=mdef->getArgumentList();
- if (alp==0) break;
- ArgumentListIterator ali(*alp);
- ArgumentListIterator ali1(ql);
-
- if (ali.count() != ali1.count()) break;
-
- Argument *arg,*arg1;
- int equ=0;
-
- for (;(arg=ali.current()) && (arg1=ali1.current());++ali,++ali1)
- {
- equ+=abs(compareString(arg->type,arg1->type));
-
- QCString s1=arg->type;
- QCString s2=arg1->type;
- VhdlDocGen::deleteAllChars(s1,' ');
- VhdlDocGen::deleteAllChars(s2,' ');
- equ+=abs(compareString(s1,s2));
- s1=arg->attrib;
- s2=arg1->attrib;
- VhdlDocGen::deleteAllChars(s1,' ');
- VhdlDocGen::deleteAllChars(s2,' ');
- equ+=abs(compareString(s1,s2));
- // printf("\n 1. type [%s] name [%s] attrib [%s]",arg->type,arg->name,arg->attrib);
- // printf("\n 2. type [%s] name [%s] attrib [%s]",arg1->type,arg1->name,arg1->attrib);
- } // for
- if (equ==0) return mdef;
+ return mdef;
}//if
}//for
}//if
- return mdef;
+ return 0;
} //findFunction
@@ -1153,15 +1124,12 @@ void VhdlDocGen::prepareComment(QCString& qcs)
/*!
* parses a function proto
* @param text function string
- * @param qlist stores the function types
* @param name points to the function name
* @param ret Stores the return type
* @param doc ???
*/
-void VhdlDocGen::parseFuncProto(const char* text,QList<Argument>& qlist,
- QCString& name,QCString& ret,bool doc)
+void VhdlDocGen::parseFuncProto(const char* text,QCString& name,QCString& ret,bool doc)
{
- (void)qlist; //unused
int index,end;
QCString s1(text);
QCString temp;
@@ -1450,44 +1418,43 @@ void VhdlDocGen::formatString(const QCString &s, OutputList& ol,const MemberDef*
* writes a procedure prototype to the output
*/
-void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef)
+void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList &al,const MemberDef* mdef)
{
- ArgumentListIterator ali(*al);
- Argument *arg;
bool sem=FALSE;
- int len=al->count();
+ int len=al.size();
ol.docify("( ");
if (len > 2)
{
ol.lineBreak();
}
- for (;(arg=ali.current());++ali)
+ for (const Argument &arg : al)
{
ol.startBold();
if (sem && len <3)
ol.writeChar(',');
- QCString nn=arg->name;
+ QCString nn=arg.name;
nn+=": ";
- QCString *str=VhdlDocGen::findKeyWord(arg->defval);
- arg->defval+=" ";
+ QCString defval = arg.defval;
+ QCString *str=VhdlDocGen::findKeyWord(defval);
+ defval+=" ";
if (str)
{
- startFonts(arg->defval,str->data(),ol);
+ startFonts(defval,str->data(),ol);
}
else
{
- startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.)
+ startFonts(defval,"vhdlchar",ol); // write type (variable,constant etc.)
}
startFonts(nn,"vhdlchar",ol); // write name
- if (qstricmp(arg->attrib,arg->type) != 0)
+ if (qstricmp(arg.attrib,arg.type) != 0)
{
- startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out
+ startFonts(arg.attrib.lower(),"stringliteral",ol); // write in|out
}
ol.docify(" ");
- VhdlDocGen::formatString(arg->type,ol,mdef);
+ VhdlDocGen::formatString(arg.type,ol,mdef);
sem=TRUE;
ol.endBold();
if (len > 2)
@@ -1506,13 +1473,11 @@ void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const
* writes a function prototype to the output
*/
-void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef)
+void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList &al,const MemberDef* mdef)
{
- if (al==0) return;
- ArgumentListIterator ali(*al);
- Argument *arg;
+ if (!al.hasParameters()) return;
bool sem=FALSE;
- int len=al->count();
+ int len=al.size();
ol.startBold();
ol.docify(" ( ");
ol.endBold();
@@ -1520,10 +1485,10 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
{
ol.lineBreak();
}
- for (;(arg=ali.current());++ali)
+ for (const Argument &arg : al)
{
ol.startBold();
- QCString att=arg->defval;
+ QCString att=arg.defval;
bool bGen=att.stripPrefix("gen!");
if (sem && len < 3)
@@ -1545,9 +1510,9 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
startFonts(att,"vhdlchar",ol);
}
- QCString nn=arg->name;
+ QCString nn=arg.name;
nn+=": ";
- QCString ss=arg->type.stripWhiteSpace(); //.lower();
+ QCString ss=arg.type.stripWhiteSpace(); //.lower();
QCString w=ss.stripWhiteSpace();//.upper();
startFonts(nn,"vhdlchar",ol);
startFonts("in ","stringliteral",ol);
@@ -1557,9 +1522,8 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
else
startFonts(w,"vhdlchar",ol);
- if (arg->attrib)
- startFonts(arg->attrib,"vhdlchar",ol);
-
+ if (arg.attrib)
+ startFonts(arg.attrib,"vhdlchar",ol);
sem=TRUE;
ol.endBold();
@@ -1587,21 +1551,19 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const
* writes a process prototype to the output
*/
-void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef)
+void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList &al,const MemberDef* mdef)
{
- if (al==0) return;
- ArgumentListIterator ali(*al);
- Argument *arg;
+ if (!al.hasParameters()) return;
bool sem=FALSE;
ol.startBold();
ol.docify(" ( ");
- for (;(arg=ali.current());++ali)
+ for (const Argument &arg : al)
{
if (sem)
{
ol.docify(" , ");
}
- QCString nn=arg->name;
+ QCString nn=arg.name;
// startFonts(nn,"vhdlchar",ol);
VhdlDocGen::writeFormatString(nn,ol,mdef);
sem=TRUE;
@@ -1618,15 +1580,13 @@ void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const M
bool VhdlDocGen::writeFuncProcDocu(
const MemberDef *md,
OutputList& ol,
- const ArgumentList* al,
+ const ArgumentList &al,
bool /*type*/)
{
- if (al==0) return FALSE;
//bool sem=FALSE;
ol.enableAll();
- ArgumentListIterator ali(*al);
- int index=ali.count();
+ int index=al.size();
if (index==0)
{
ol.docify(" ( ) ");
@@ -1635,13 +1595,12 @@ bool VhdlDocGen::writeFuncProcDocu(
ol.endMemberDocName();
ol.startParameterList(TRUE);
//ol.startParameterName(FALSE);
- Argument *arg;
bool first=TRUE;
- for (;(arg=ali.current());++ali)
+ for (const Argument &arg : al)
{
ol.startParameterType(first,"");
// if (first) ol.writeChar('(');
- QCString attl=arg->defval;
+ QCString attl=arg.defval;
bool bGen=attl.stripPrefix("gen!");
if (bGen)
VhdlDocGen::writeFormatString(QCString("generic "),ol,md);
@@ -1649,17 +1608,17 @@ bool VhdlDocGen::writeFuncProcDocu(
if (VhdlDocGen::isProcedure(md))
{
- startFonts(arg->defval,"keywordtype",ol);
+ startFonts(arg.defval,"keywordtype",ol);
ol.docify(" ");
}
ol.endParameterType();
ol.startParameterName(TRUE);
- VhdlDocGen::writeFormatString(arg->name,ol,md);
+ VhdlDocGen::writeFormatString(arg.name,ol,md);
if (VhdlDocGen::isProcedure(md))
{
- startFonts(arg->attrib,"stringliteral",ol);
+ startFonts(arg.attrib,"stringliteral",ol);
}
else if (VhdlDocGen::isVhdlFunction(md))
{
@@ -1672,8 +1631,8 @@ bool VhdlDocGen::writeFuncProcDocu(
ol.enable(OutputGenerator::Man);
if (!VhdlDocGen::isProcess(md))
{
- // startFonts(arg->type,"vhdlkeyword",ol);
- VhdlDocGen::writeFormatString(arg->type,ol,md);
+ // startFonts(arg.type,"vhdlkeyword",ol);
+ VhdlDocGen::writeFormatString(arg.type,ol,md);
}
ol.disable(OutputGenerator::Man);
ol.endEmphasis();
@@ -1702,28 +1661,26 @@ bool VhdlDocGen::writeFuncProcDocu(
-QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool func)
+QCString VhdlDocGen::convertArgumentListToString(const ArgumentList &al,bool func)
{
QCString argString;
bool sem=FALSE;
- ArgumentListIterator ali(*al);
- Argument *arg;
- for (;(arg=ali.current());++ali)
+ for (const Argument &arg : al)
{
if (sem) argString.append(", ");
if (func)
{
- argString+=arg->name;
+ argString+=arg.name;
argString+=":";
- argString+=arg->type;
+ argString+=arg.type;
}
else
{
- argString+=arg->defval+" ";
- argString+=arg->name+" :";
- argString+=arg->attrib+" ";
- argString+=arg->type;
+ argString+=arg.defval+" ";
+ argString+=arg.name+" :";
+ argString+=arg.attrib+" ";
+ argString+=arg.type;
}
sem=TRUE;
}
@@ -2003,7 +1960,7 @@ void VhdlDocGen::writeVHDLDeclaration(const MemberDef* mdef,OutputList &ol,
QCString ltype(mdef->typeString());
QCString largs(mdef->argsString());
ClassDef *kl=0;
- const ArgumentList *alp = mdef->argumentList();
+ const ArgumentList &al = mdef->argumentList();
QCString nn;
//VhdlDocGen::adjustRecordMember(mdef);
if (gd) gd=0;
@@ -2021,11 +1978,11 @@ void VhdlDocGen::writeVHDLDeclaration(const MemberDef* mdef,OutputList &ol,
ol.docify(" ");
writeLink(mdef,ol);
- if (alp!=0 && mm==VhdlDocGen::FUNCTION)
- VhdlDocGen::writeFunctionProto(ol,alp,mdef);
+ if (al.hasParameters() && mm==VhdlDocGen::FUNCTION)
+ VhdlDocGen::writeFunctionProto(ol,al,mdef);
- if (alp!=0 && mm==VhdlDocGen::PROCEDURE)
- VhdlDocGen::writeProcedureProto(ol,alp,mdef);
+ if (al.hasParameters() && mm==VhdlDocGen::PROCEDURE)
+ VhdlDocGen::writeProcedureProto(ol,al,mdef);
break;
case VhdlDocGen::USE:
@@ -2090,7 +2047,7 @@ void VhdlDocGen::writeVHDLDeclaration(const MemberDef* mdef,OutputList &ol,
case VhdlDocGen::PROCESS:
writeLink(mdef,ol);
ol.insertMemberAlign();
- VhdlDocGen::writeProcessProto(ol,alp,mdef);
+ VhdlDocGen::writeProcessProto(ol,al,mdef);
break;
case VhdlDocGen::PACKAGE:
case VhdlDocGen::ENTITY:
@@ -2422,7 +2379,7 @@ void VhdlDocGen::writeStringLink(const MemberDef *mdef,QCString mem, OutputList&
void VhdlDocGen::writeSource(const MemberDef *mdef,OutputList& ol,const QCString & cname)
{
- ParserInterface *pIntf = Doxygen::parserManager->getParser(".vhd");
+ CodeParserInterface &intf = Doxygen::parserManager->getCodeParser(".vhd");
// pIntf->resetCodeParserState();
QCString codeFragment=mdef->documentation();
@@ -2448,7 +2405,7 @@ void VhdlDocGen::writeSource(const MemberDef *mdef,OutputList& ol,const QCString
codeFragment.prepend("\n");
ol.pushGeneratorState();
ol.startCodeFragment();
- pIntf->parseCode(ol, // codeOutIntf
+ intf.parseCode( ol, // codeOutIntf
0, // scope
codeFragment, // input
SrcLangExt_VHDL, // lang
@@ -2578,7 +2535,7 @@ static void initUCF(Entry* root,const char* type,QCString & qcs,int line,QCStr
qcs.stripPrefix("=");
- std::unique_ptr<Entry> current = std::make_unique<Entry>();
+ std::shared_ptr<Entry> current = std::make_shared<Entry>();
current->spec=VhdlDocGen::UCF_CONST;
current->section=Entry::VARIABLE_SEC;
current->bodyLine=line;
@@ -2943,7 +2900,7 @@ void VhdlDocGen::computeVhdlComponentRelations()
}
static void addInstance(ClassDef* classEntity, ClassDef* ar,
- ClassDef *cd , const std::unique_ptr<Entry> &cur)
+ ClassDef *cd , const std::shared_ptr<Entry> &cur)
{
QCString bName,n1;
@@ -2984,8 +2941,8 @@ ferr:
n1,uu,uu, 0,
Public, Normal, cur->stat,Member,
MemberType_Variable,
- 0,
- 0,
+ ArgumentList(),
+ ArgumentList(),
"");
if (ar->getOutputFileBase())
@@ -3177,13 +3134,13 @@ void VhdlDocGen::createFlowChart(const MemberDef *mdef)
bool b=readCodeFragment( fd->absFilePath().data(), actualStart,actualEnd,codeFragment);
if (!b) return;
- VHDLLanguageScanner *pIntf =(VHDLLanguageScanner*) Doxygen::parserManager->getParser(".vhd");
+ VHDLOutlineParser &intf =dynamic_cast<VHDLOutlineParser&>(Doxygen::parserManager->getOutlineParser(".vhd"));
VhdlDocGen::setFlowMember(mdef);
- std::unique_ptr<Entry> root = std::make_unique<Entry>();
+ std::shared_ptr<Entry> root = std::make_shared<Entry>();
QStrList filesInSameTu;
- pIntf->startTranslationUnit("");
- pIntf->parseInput("",codeFragment.data(),root,FALSE,filesInSameTu);
- pIntf->finishTranslationUnit();
+ intf.startTranslationUnit("");
+ intf.parseInput("",codeFragment.data(),root,FALSE,filesInSameTu);
+ intf.finishTranslationUnit();
}
void VhdlDocGen::resetCodeVhdlParserState()
@@ -3839,7 +3796,7 @@ void FlowChart::createSVG()
QCString vlargs="-Tsvg \""+ov+"\" "+dir ;
- if (portable_system(Config_getString(DOT_PATH) + "dot",vlargs)!=0)
+ if (Portable::system(Config_getString(DOT_PATH) + "dot",vlargs)!=0)
{
err("could not create dot file");
}
@@ -4055,34 +4012,30 @@ void FlowChart::writeEdge(FTextStream &t,int fl_from,int fl_to,int i,bool bFrom,
t << "\n";
}
-void FlowChart::alignFuncProc( QCString & q,const ArgumentList* al,bool isFunc)
+void FlowChart::alignFuncProc( QCString & q,const ArgumentList &al,bool isFunc)
{
- if (al==0) return;
-
- ArgumentListIterator ali(*al);
- int index=ali.count();
+ int index=al.size();
if (index==0) return;
int len=q.length()+VhdlDocGen::getFlowMember()->name().length();
QCString prev,temp;
prev.fill(' ',len+1);
- Argument *arg;
q+="\n";
- for (;(arg=ali.current());++ali)
+ for (const Argument &arg : al)
{
- QCString attl=arg->defval+" ";
- attl+=arg->name+" ";
+ QCString attl=arg.defval+" ";
+ attl+=arg.name+" ";
if (!isFunc)
{
- attl+=arg->attrib+" ";
+ attl+=arg.attrib+" ";
}
else
{
attl+=" in ";
}
- attl+=arg->type;
+ attl+=arg.type;
if (--index) attl+=",\n"; else attl+="\n";
attl.prepend(prev.data());
@@ -4359,42 +4312,3 @@ void FlowChart::writeFlowLinks(FTextStream &t)
} //writeFlowLinks
-void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt, // lang
- bool isExampleBlock,
- const char *exampleName,
- FileDef *fileDef,
- int startLine,
- int endLine,
- bool inlineFragment,
- const MemberDef *memberDef,
- bool showLineNumbers,
- const Definition *searchCtx,
- bool collectXRefs
- )
-{
-
-parseVhdlCode(codeOutIntf,
- scopeName,
- input,
- isExampleBlock,
- exampleName,
- fileDef,
- startLine,
- endLine,
- inlineFragment,
- memberDef,
- showLineNumbers,
- searchCtx,
- collectXRefs
-
-);
-
-
-
-
-
-
-}// class
diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h
index e2c843c..6203196 100644
--- a/src/vhdldocgen.h
+++ b/src/vhdldocgen.h
@@ -95,7 +95,6 @@ class VhdlDocGen
static bool deleteCharRev(QCString &s,char c);
static void deleteAllChars(QCString &s,char c);
static void parseFuncProto(const char* text,
- QList<Argument>& ,
QCString& name,
QCString& ret,
bool doc=false);
@@ -113,9 +112,8 @@ class VhdlDocGen
const QCString& key,
MemberListType type);
static ClassDef *getClass(const char *name);
- static MemberDef* findFunction(const QList<Argument> &ql,
- const QCString& name,
- const QCString& package, bool type);
+ static MemberDef* findFunction(const QCString& name,
+ const QCString& package);
static QCString getClassTitle(const ClassDef*);
static void writeInlineClassLink(const ClassDef*,
OutputList &ol);
@@ -155,11 +153,11 @@ class VhdlDocGen
static void formatString(const QCString&,OutputList& ol,const MemberDef*);
static void writeFormatString(const QCString&,OutputList& ol,const MemberDef*);
- static void writeFunctionProto(OutputList& ol,const ArgumentList *al,const MemberDef*);
- static void writeProcessProto(OutputList& ol,const ArgumentList *al,const MemberDef*);
- static void writeProcedureProto(OutputList& ol, const ArgumentList *al,const MemberDef*);
- static bool writeFuncProcDocu(const MemberDef *mdef, OutputList& ol,const ArgumentList* al,bool type=false);
- static void writeRecordProto(const MemberDef *mdef, OutputList& ol,const ArgumentList *al);
+ static void writeFunctionProto(OutputList& ol,const ArgumentList &al,const MemberDef*);
+ static void writeProcessProto(OutputList& ol,const ArgumentList &al,const MemberDef*);
+ static void writeProcedureProto(OutputList& ol, const ArgumentList &al,const MemberDef*);
+ static bool writeFuncProcDocu(const MemberDef *mdef, OutputList& ol,const ArgumentList &al,bool type=false);
+ static void writeRecordProto(const MemberDef *mdef, OutputList& ol,const ArgumentList &al);
static bool writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition* d, OutputList &ol);
@@ -179,7 +177,7 @@ class VhdlDocGen
static bool writeClassType(const ClassDef *,OutputList &ol ,QCString & cname);
- static QCString convertArgumentListToString(const ArgumentList* al,bool f);
+ static QCString convertArgumentListToString(const ArgumentList &al,bool f);
static QCString getProcessNumber();
static QCString getRecordNumber();
@@ -196,7 +194,6 @@ class VhdlDocGen
static void correctMemberProperties(MemberDef *md);
static void writeSource(const MemberDef *mdef,OutputList& ol,const QCString & cname);
- static void writeAlphbeticalClass(OutputList& ol,const ClassDef* cd,const QCString &);
static QCString parseForConfig(QCString & entity,QCString & arch);
static QCString parseForBinding(QCString & entity,QCString & arch);
@@ -225,7 +222,7 @@ class VhdlDocGen
private:
static void findAllArchitectures(QList<QCString>& ql,const ClassDef *cd);
- static bool compareArgList(ArgumentList*,ArgumentList*);
+ static bool compareArgList(const ArgumentList &,const ArgumentList &);
static void writeVhdlLink(const ClassDef* cdd ,OutputList& ol,QCString& type,QCString& name,QCString& beh);
static void writeStringLink(const MemberDef *mdef,QCString mem,OutputList& ol);
static void writeRecUnitDocu( const MemberDef *md, OutputList& ol,QCString largs);
@@ -294,7 +291,7 @@ class FlowChart
static void moveToPrevLevel();
static int getTimeStamp();
static void writeFlowChart();
- static void alignFuncProc(QCString & q,const ArgumentList* al,bool isFunc);
+ static void alignFuncProc(QCString & q,const ArgumentList &al,bool isFunc);
static QCString convertNameToFileName();
static void printNode(const FlowChart* n);
static void printFlowTree();
@@ -310,11 +307,11 @@ class FlowChart
~FlowChart();
private:
- int id;
- int stamp;
- int type;
+ int id = 0;
+ int stamp = 0;
+ int type = 0;
- int line;
+ int line = 0;
QCString label;
QCString text;
diff --git a/src/vhdljjparser.cpp b/src/vhdljjparser.cpp
index ae10f4d..8b7ebf6 100644
--- a/src/vhdljjparser.cpp
+++ b/src/vhdljjparser.cpp
@@ -33,7 +33,7 @@
using namespace vhdl::parser;
using namespace std;
-static ParserInterface *g_thisParser;
+static OutlineParserInterface *g_thisParser;
static QCString yyFileName;
static int yyLineNr = 1;
@@ -48,16 +48,15 @@ static Entry* oldEntry;
static bool varr=FALSE;
static QCString varName;
-static std::vector< std::unique_ptr<Entry> > instFiles;
-static std::vector< std::unique_ptr<Entry> > libUse;
+static std::vector< std::shared_ptr<Entry> > instFiles;
+static std::vector< std::shared_ptr<Entry> > libUse;
static std::vector<Entry*> lineEntry;
-Entry* VhdlParser::currentCompound=0;
Entry* VhdlParser::tempEntry=0;
Entry* VhdlParser::lastEntity=0 ;
Entry* VhdlParser::lastCompound=0 ;
Entry* VhdlParser::current_root = 0;
-std::unique_ptr<Entry> VhdlParser::current=0;
+std::shared_ptr<Entry> VhdlParser::current=0;
QCString VhdlParser::compSpec;
QCString VhdlParser::currName;
QCString VhdlParser::confName;
@@ -90,7 +89,7 @@ static void insertEntryAtLine(const Entry* ce,int line);
//-------------------------------------
const QList<VhdlConfNode>& getVhdlConfiguration() { return configL; }
-const std::vector<std::unique_ptr<Entry> > &getVhdlInstList() { return instFiles; }
+const std::vector<std::shared_ptr<Entry> > &getVhdlInstList() { return instFiles; }
Entry* getVhdlCompound()
{
@@ -105,8 +104,8 @@ bool isConstraintFile(const QCString &fileName,const QCString &ext)
}
-void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,
- const std::unique_ptr<Entry> &root, bool ,QStrList&)
+void VHDLOutlineParser::parseInput(const char *fileName,const char *fileBuf,
+ const std::shared_ptr<Entry> &root, bool ,QStrList&)
{
g_thisParser=this;
bool inLine=false;
@@ -140,10 +139,9 @@ void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,
VhdlParser::current_root=root.get();
VhdlParser::lastCompound=0;
VhdlParser::lastEntity=0;
- VhdlParser::currentCompound=0;
VhdlParser::lastEntity=0;
oldEntry = 0;
- VhdlParser::current=std::make_unique<Entry>();
+ VhdlParser::current=std::make_shared<Entry>();
VhdlParser::initEntry(VhdlParser::current.get());
Doxygen::docGroup.enterFile(fileName,yyLineNr);
vhdlFileName = fileName;
@@ -321,7 +319,7 @@ void VhdlParser::handleCommentBlock(const char* doc1,bool brief)
strComment.resize(0);
}
-void VHDLLanguageScanner::parsePrototype(const char *text)
+void VHDLOutlineParser::parsePrototype(const char *text)
{
varName=text;
varr=TRUE;
@@ -347,7 +345,7 @@ void VhdlParser::addCompInst(const char *n, const char* instName, const char* co
current->write=genLabels.right(genLabels.length()-u);
current->read=genLabels.left(u);
}
- //printf (" \n genlable: [%s] inst: [%s] name: [%s] %d\n",n,instName,comp,iLine);
+ //printf (" \n genlabel: [%s] inst: [%s] name: [%s] %d\n",n,instName,comp,iLine);
if (lastCompound)
{
@@ -355,10 +353,10 @@ void VhdlParser::addCompInst(const char *n, const char* instName, const char* co
if (true) // !findInstant(current->type))
{
initEntry(current.get());
- instFiles.emplace_back(std::make_unique<Entry>(*current));
+ instFiles.emplace_back(std::make_shared<Entry>(*current));
}
- current=std::make_unique<Entry>();
+ current=std::make_shared<Entry>();
}
else
{
@@ -396,7 +394,7 @@ void VhdlParser::addVhdlType(const char *n,int startLine,int section,
if (!lastCompound && (section==Entry::VARIABLE_SEC) && (spec == VhdlDocGen::USE || spec == VhdlDocGen::LIBRARY) )
{
- libUse.emplace_back(std::make_unique<Entry>(*current));
+ libUse.emplace_back(std::make_shared<Entry>(*current));
current->reset();
}
newEntry();
@@ -441,9 +439,9 @@ void VhdlParser::createFunction(const char *imp,uint64 spec,const char *fn)
QCStringList q1=QCStringList::split(",",fname);
for (uint ii=0;ii<q1.count();ii++)
{
- Argument *arg=new Argument;
- arg->name=q1[ii];
- current->argList->append(arg);
+ Argument arg;
+ arg.name=q1[ii];
+ current->argList.push_back(arg);
}
}
return;
@@ -532,7 +530,7 @@ void VhdlParser::addConfigureNode(const char* a,const char*b, bool,bool isLeaf,b
void VhdlParser::addProto(const char *s1,const char *s2,const char *s3,
- const char *s4,const char *s5,const char *s6)
+ const char *s4,const char *s5,const char *s6)
{
(void)s5; // avoid unused warning
QCString name=s2;
@@ -540,21 +538,21 @@ void VhdlParser::addProto(const char *s1,const char *s2,const char *s3,
for (uint u=0;u<ql.count();u++)
{
- Argument *arg=new Argument;
- arg->name=ql[u];
+ Argument arg;
+ arg.name=ql[u];
if (s3)
{
- arg->type=s3;
+ arg.type=s3;
}
- arg->type+=" ";
- arg->type+=s4;
+ arg.type+=" ";
+ arg.type+=s4;
if (s6)
{
- arg->type+=s6;
+ arg.type+=s6;
}
if (parse_sec==GEN_SEC && param_sec==0)
{
- arg->defval="gen!";
+ arg.defval="gen!";
}
if (parse_sec==PARAM_SEC)
@@ -562,10 +560,10 @@ void VhdlParser::addProto(const char *s1,const char *s2,const char *s3,
// assert(false);
}
- arg->defval+=s1;
- arg->attrib="";//s6;
+ arg.defval+=s1;
+ arg.attrib="";//s6;
- current->argList->append(arg);
+ current->argList.push_back(arg);
current->args+=s2;
current->args+=",";
}
diff --git a/src/vhdljjparser.h b/src/vhdljjparser.h
index a179630..53eb0be 100644
--- a/src/vhdljjparser.h
+++ b/src/vhdljjparser.h
@@ -30,7 +30,6 @@ void parserVhdlfile(const char* inputBuffer);
class Entry;
class ClassSDict;
-class FileStorage;
class ClassDef;
class MemberDef;
struct VhdlConfNode;
@@ -40,36 +39,20 @@ struct VhdlConfNode;
*
* This is the VHDL language parser for doxygen.
*/
-class VHDLLanguageScanner : public ParserInterface
+class VHDLOutlineParser : public OutlineParserInterface
{
public:
- virtual ~VHDLLanguageScanner() {}
+ virtual ~VHDLOutlineParser() {}
void startTranslationUnit(const char *) {}
void finishTranslationUnit() {}
void parseInput(const char * fileName,
const char *fileBuf,
- const std::unique_ptr<Entry> &root,
+ const std::shared_ptr<Entry> &root,
bool sameTranslationUnit,
QStrList &filesInSameTranslationUnit);
-
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt lang,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- const MemberDef *memberDef=0,
- bool showLineNumbers=TRUE,
- const Definition *searchCtx=0,
- bool collectXRefs=TRUE
- );
- bool needsPreprocessing(const QCString &) { return TRUE; }
- void resetCodeParserState(){};
- void parsePrototype(const char *text);
+
+ bool needsPreprocessing(const QCString &) const { return TRUE; }
+ void parsePrototype(const char *text);
};
struct VhdlConfNode
@@ -90,15 +73,15 @@ struct VhdlConfNode
QCString arch;
QCString binding;
QCString compSpec;
- int level;
- bool isLeaf;
- bool isInlineConf;
+ int level = 0;
+ bool isLeaf = false;
+ bool isInlineConf = false;
};
void vhdlscanFreeScanner();
const QList<VhdlConfNode>& getVhdlConfiguration();
-const std::vector<std::unique_ptr<Entry> >&getVhdlInstList();
+const std::vector<std::shared_ptr<Entry> >&getVhdlInstList();
#endif
diff --git a/src/xmlcode.h b/src/xmlcode.h
index e463866..4cada9b 100644
--- a/src/xmlcode.h
+++ b/src/xmlcode.h
@@ -19,7 +19,7 @@
#ifndef XMLCODE_H
#define XMLCODE_H
-#include "types.h"
+#include "parserintf.h"
class CodeOutputInterface;
class FileDef;
@@ -27,11 +27,28 @@ class MemberDef;
class QCString;
class Definition;
-extern void parseXmlCode(CodeOutputInterface &,const char *,const QCString &,
- bool ,const char *,FileDef *fd,
- int startLine,int endLine,bool inlineFragment,
- const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
- bool collectXRefs);
-extern void resetXmlCodeParserState();
+/** XML scanner. Only support syntax highlighting of code at the moment.
+ */
+class XMLCodeParser : public CodeParserInterface
+{
+ public:
+ void parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt,
+ bool isExampleBlock,
+ const char *exampleName=0,
+ FileDef *fileDef=0,
+ int startLine=-1,
+ int endLine=-1,
+ bool inlineFragment=FALSE,
+ const MemberDef *memberDef=0,
+ bool showLineNumbers=TRUE,
+ const Definition *searchCtx=0,
+ bool collectXRefs=TRUE
+ );
+ void resetCodeParserState();
+};
+
#endif
diff --git a/src/xmlcode.l b/src/xmlcode.l
index bd6e8a8..94548f8 100644
--- a/src/xmlcode.l
+++ b/src/xmlcode.l
@@ -407,12 +407,32 @@ void resetXmlCodeParserState()
g_currentMemberDef = 0;
}
-#if !defined(YY_FLEX_SUBMINOR_VERSION)
-extern "C" { // some bogus code to keep the compiler happy
- void xmlcodeYYdummy() { yy_flex_realloc(0,0); }
+//----------------------------------------------------------------------------
+
+void XMLCodeParser::parseCode(CodeOutputInterface &codeOutIntf,
+ const char *scopeName,
+ const QCString &input,
+ SrcLangExt,
+ bool isExampleBlock,
+ const char *exampleName,
+ FileDef *fileDef,
+ int startLine,
+ int endLine,
+ bool inlineFragment,
+ const MemberDef *memberDef,
+ bool showLineNumbers,
+ const Definition *searchCtx,
+ bool collectXRefs
+ )
+{
+ parseXmlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
+ fileDef,startLine,endLine,inlineFragment,memberDef,
+ showLineNumbers,searchCtx,collectXRefs);
+}
+
+void XMLCodeParser::resetCodeParserState()
+{
+ resetXmlCodeParserState();
}
-#elif YY_FLEX_MAJOR_VERSION<=2 && YY_FLEX_MINOR_VERSION<=5 && YY_FLEX_SUBMINOR_VERSION<33
-#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
-#endif
#include "xmlcode.l.h"
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index a0afa9d..828c265 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -251,8 +251,8 @@ void XmlDocVisitor::visit(DocVerbatim *s)
m_t << " filename=\"" << lang << "\">";
else
m_t << ">";
- Doxygen::parserManager->getParser(lang)
- ->parseCode(m_ci,s->context(),s->text(),langExt,
+ Doxygen::parserManager->getCodeParser(lang)
+ .parseCode(m_ci,s->context(),s->text(),langExt,
s->isExample(),s->exampleFile());
m_t << "</programlisting>";
break;
@@ -306,8 +306,8 @@ void XmlDocVisitor::visit(DocInclude *inc)
m_t << "<programlisting filename=\"" << inc->file() << "\">";
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -325,8 +325,8 @@ void XmlDocVisitor::visit(DocInclude *inc)
break;
case DocInclude::Include:
m_t << "<programlisting filename=\"" << inc->file() << "\">";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,inc->context(),
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,inc->context(),
inc->text(),
langExt,
inc->isExample(),
@@ -367,8 +367,8 @@ void XmlDocVisitor::visit(DocInclude *inc)
break;
case DocInclude::Snippet:
m_t << "<programlisting filename=\"" << inc->file() << "\">";
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -382,8 +382,8 @@ void XmlDocVisitor::visit(DocInclude *inc)
m_t << "<programlisting filename=\"" << inc->file() << "\">";
QFileInfo cfi( inc->file() );
FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
- Doxygen::parserManager->getParser(inc->extension())
- ->parseCode(m_ci,
+ Doxygen::parserManager->getCodeParser(inc->extension())
+ .parseCode(m_ci,
inc->context(),
extractBlock(inc->text(),inc->blockId()),
langExt,
@@ -436,8 +436,8 @@ void XmlDocVisitor::visit(DocIncOperator *op)
fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
}
- Doxygen::parserManager->getParser(locLangExt)
- ->parseCode(m_ci,op->context(),
+ Doxygen::parserManager->getCodeParser(locLangExt)
+ .parseCode(m_ci,op->context(),
op->text(),langExt,op->isExample(),
op->exampleFile(),
fd, // fileDef
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index d05adf0..bf5af84 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -338,43 +338,41 @@ void XMLCodeGenerator::finish()
if (m_insideCodeLine) endCodeLine();
}
-static void writeTemplateArgumentList(const ArgumentList *al,
- FTextStream &t,
+static void writeTemplateArgumentList(FTextStream &t,
+ const ArgumentList &al,
const Definition *scope,
const FileDef *fileScope,
int indent)
{
QCString indentStr;
indentStr.fill(' ',indent);
- if (al)
+ if (al.hasParameters())
{
t << indentStr << "<templateparamlist>" << endl;
- ArgumentListIterator ali(*al);
- const Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : al)
{
t << indentStr << " <param>" << endl;
- if (!a->type.isEmpty())
+ if (!a.type.isEmpty())
{
t << indentStr << " <type>";
- linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->type);
+ linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.type);
t << "</type>" << endl;
}
- if (!a->name.isEmpty())
+ if (!a.name.isEmpty())
{
- t << indentStr << " <declname>" << convertToXML(a->name) << "</declname>" << endl;
- t << indentStr << " <defname>" << convertToXML(a->name) << "</defname>" << endl;
+ t << indentStr << " <declname>" << convertToXML(a.name) << "</declname>" << endl;
+ t << indentStr << " <defname>" << convertToXML(a.name) << "</defname>" << endl;
}
- if (!a->defval.isEmpty())
+ if (!a.defval.isEmpty())
{
t << indentStr << " <defval>";
- linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->defval);
+ linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.defval);
t << "</defval>" << endl;
}
- if (!a->typeConstraint.isEmpty())
+ if (!a.typeConstraint.isEmpty())
{
t << indentStr << " <typeconstraint>";
- linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->typeConstraint);
+ linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a.typeConstraint);
t << "</typeconstraint>" << endl;
}
t << indentStr << " </param>" << endl;
@@ -385,16 +383,12 @@ static void writeTemplateArgumentList(const ArgumentList *al,
static void writeMemberTemplateLists(const MemberDef *md,FTextStream &t)
{
- const ArgumentList *templMd = md->templateArguments();
- if (templMd) // function template prefix
- {
- writeTemplateArgumentList(templMd,t,md->getClassDef(),md->getFileDef(),8);
- }
+ writeTemplateArgumentList(t,md->templateArguments(),md->getClassDef(),md->getFileDef(),8);
}
static void writeTemplateList(const ClassDef *cd,FTextStream &t)
{
- writeTemplateArgumentList(cd->templateArguments(),t,cd,0,4);
+ writeTemplateArgumentList(t,cd->templateArguments(),cd,0,4);
}
static void writeXMLDocBlock(FTextStream &t,
@@ -423,11 +417,11 @@ static void writeXMLDocBlock(FTextStream &t,
void writeXMLCodeBlock(FTextStream &t,FileDef *fd)
{
- ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension());
+ CodeParserInterface &intf=Doxygen::parserManager->getCodeParser(fd->getDefFileExtension());
SrcLangExt langExt = getLanguageFromFileName(fd->getDefFileExtension());
- pIntf->resetCodeParserState();
+ intf.resetCodeParserState();
XMLCodeGenerator *xmlGen = new XMLCodeGenerator(t);
- pIntf->parseCode(*xmlGen, // codeOutIntf
+ intf.parseCode(*xmlGen, // codeOutIntf
0, // scopeName
fileToString(fd->absFilePath(),Config_getBool(FILTER_SOURCE_FILES)),
langExt, // lang
@@ -436,7 +430,7 @@ void writeXMLCodeBlock(FTextStream &t,FileDef *fd)
fd, // fileDef
-1, // startLine
-1, // endLine
- FALSE, // inlineFragement
+ FALSE, // inlineFragment
0, // memberDef
TRUE // showLineNumbers
);
@@ -520,7 +514,6 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
// enum values are written as part of the enum
if (md->memberType()==MemberType_EnumValue) return;
if (md->isHidden()) return;
- //if (md->name().at(0)=='@') return; // anonymous member
// group members are only visible in their group
//if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return;
@@ -591,9 +584,9 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
if (isFunc)
{
- const ArgumentList *al = md->argumentList();
+ const ArgumentList &al = md->argumentList();
t << " const=\"";
- if (al!=0 && al->constSpecifier) t << "yes"; else t << "no";
+ if (al.constSpecifier) t << "yes"; else t << "no";
t << "\"";
t << " explicit=\"";
@@ -604,10 +597,10 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
if (md->isInline()) t << "yes"; else t << "no";
t << "\"";
- if (al!=0 && al->refQualifier!=RefQualifierNone)
+ if (al.refQualifier!=RefQualifierNone)
{
t << " refqual=\"";
- if (al->refQualifier==RefQualifierLValue) t << "lvalue"; else t << "rvalue";
+ if (al.refQualifier==RefQualifierLValue) t << "lvalue"; else t << "rvalue";
t << "\"";
}
@@ -641,7 +634,7 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
t << " noexcept=\"yes\"";
}
- if (al && al->volatileSpecifier)
+ if (al.volatileSpecifier)
{
t << " volatile=\"yes\"";
}
@@ -840,51 +833,55 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
if (isFunc) //function
{
- const ArgumentList *declAl = md->declArgumentList();
- const ArgumentList *defAl = md->argumentList();
- if (declAl && defAl && declAl->count()>0)
+ const ArgumentList &declAl = md->declArgumentList();
+ const ArgumentList &defAl = md->argumentList();
+ if (declAl.hasParameters())
{
- ArgumentListIterator declAli(*declAl);
- ArgumentListIterator defAli(*defAl);
- const Argument *a;
- for (declAli.toFirst();(a=declAli.current());++declAli)
+ auto defIt = defAl.begin();
+ for (const Argument &a : declAl)
{
- Argument *defArg = defAli.current();
+ //const Argument *defArg = defAli.current();
+ const Argument *defArg = 0;
+ if (defIt!=defAl.end())
+ {
+ defArg = &(*defIt);
+ ++defIt;
+ }
t << " <param>" << endl;
- if (!a->attrib.isEmpty())
+ if (!a.attrib.isEmpty())
{
t << " <attributes>";
- writeXMLString(t,a->attrib);
+ writeXMLString(t,a.attrib);
t << "</attributes>" << endl;
}
- if (!a->type.isEmpty())
+ if (!a.type.isEmpty())
{
t << " <type>";
- linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a->type);
+ linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a.type);
t << "</type>" << endl;
}
- if (!a->name.isEmpty())
+ if (!a.name.isEmpty())
{
t << " <declname>";
- writeXMLString(t,a->name);
+ writeXMLString(t,a.name);
t << "</declname>" << endl;
}
- if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
+ if (defArg && !defArg->name.isEmpty() && defArg->name!=a.name)
{
t << " <defname>";
writeXMLString(t,defArg->name);
t << "</defname>" << endl;
}
- if (!a->array.isEmpty())
+ if (!a.array.isEmpty())
{
t << " <array>";
- writeXMLString(t,a->array);
+ writeXMLString(t,a.array);
t << "</array>" << endl;
}
- if (!a->defval.isEmpty())
+ if (!a.defval.isEmpty())
{
t << " <defval>";
- linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a->defval);
+ linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a.defval);
t << "</defval>" << endl;
}
if (defArg && defArg->hasDocumentation())
@@ -895,25 +892,22 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
t << "</briefdescription>" << endl;
}
t << " </param>" << endl;
- if (defArg) ++defAli;
}
}
}
else if (md->memberType()==MemberType_Define &&
md->argsString()) // define
{
- if (md->argumentList()->count()==0) // special case for "foo()" to
- // disguish it from "foo".
+ if (md->argumentList().empty()) // special case for "foo()" to
+ // distinguish it from "foo".
{
t << " <param></param>" << endl;
}
else
{
- ArgumentListIterator ali(*md->argumentList());
- const Argument *a;
- for (ali.toFirst();(a=ali.current());++ali)
+ for (const Argument &a : md->argumentList())
{
- t << " <param><defname>" << a->type << "</defname></param>" << endl;
+ t << " <param><defname>" << a.type << "</defname></param>" << endl;
}
}
}
@@ -986,7 +980,7 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
if (md->getDefLine()!=-1)
{
t << " <location file=\""
- << stripFromPath(md->getDefFileName()) << "\" line=\""
+ << convertToXML(stripFromPath(md->getDefFileName())) << "\" line=\""
<< md->getDefLine() << "\" column=\""
<< md->getDefColumn() << "\"" ;
if (md->getStartBodyLine()!=-1)
@@ -994,14 +988,14 @@ static void generateXMLForMember(const MemberDef *md,FTextStream &ti,FTextStream
FileDef *bodyDef = md->getBodyDef();
if (bodyDef)
{
- t << " bodyfile=\"" << stripFromPath(bodyDef->absFilePath()) << "\"";
+ t << " bodyfile=\"" << convertToXML(stripFromPath(bodyDef->absFilePath())) << "\"";
}
t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
<< md->getEndBodyLine() << "\"";
}
if (md->getDeclLine()!=-1)
{
- t << " declfile=\"" << stripFromPath(md->getDeclFileName()) << "\" declline=\""
+ t << " declfile=\"" << convertToXML(stripFromPath(md->getDeclFileName())) << "\" declline=\""
<< md->getDeclLine() << "\" declcolumn=\""
<< md->getDeclColumn() << "\"";
}
@@ -1095,7 +1089,7 @@ static void writeListOfAllMembers(const ClassDef *cd,FTextStream &t)
for (mii.toFirst();(mi=mii.current());++mii)
{
const MemberDef *md=mi->memberDef;
- if (md->name().at(0)!='@') // skip anonymous members
+ if (!md->isAnonymous())
{
Protection prot = mi->prot;
Specifier virt=md->virtualness();
@@ -1137,7 +1131,7 @@ static void writeInnerClasses(const ClassSDict *cl,FTextStream &t)
const ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
- if (!cd->isHidden() && cd->name().find('@')==-1) // skip anonymous scopes
+ if (!cd->isHidden() && !cd->isAnonymous())
{
t << " <innerclass refid=\"" << classOutputFileBase(cd)
<< "\" prot=\"";
@@ -1162,7 +1156,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t)
const NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
- if (!nd->isHidden() && nd->name().find('@')==-1) // skip anonymous scopes
+ if (!nd->isHidden() && !nd->isAnonymous())
{
t << " <innernamespace refid=\"" << nd->getOutputFileBase()
<< "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
@@ -1252,7 +1246,7 @@ static void generateXMLForClass(const ClassDef *cd,FTextStream &ti)
if (cd->isReference()) return; // skip external references.
if (cd->isHidden()) return; // skip hidden classes.
- if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
+ if (cd->isAnonymous()) return; // skip anonymous compounds.
if (cd->templateMaster()!=0) return; // skip generated template instances.
if (cd->isArtificial()) return; // skip artificially created classes
@@ -1424,7 +1418,7 @@ static void generateXMLForClass(const ClassDef *cd,FTextStream &ti)
t << " </collaborationgraph>" << endl;
}
t << " <location file=\""
- << stripFromPath(cd->getDefFileName()) << "\" line=\""
+ << convertToXML(stripFromPath(cd->getDefFileName())) << "\" line=\""
<< cd->getDefLine() << "\"" << " column=\""
<< cd->getDefColumn() << "\"" ;
if (cd->getStartBodyLine()!=-1)
@@ -1432,7 +1426,7 @@ static void generateXMLForClass(const ClassDef *cd,FTextStream &ti)
FileDef *bodyDef = cd->getBodyDef();
if (bodyDef)
{
- t << " bodyfile=\"" << stripFromPath(bodyDef->absFilePath()) << "\"";
+ t << " bodyfile=\"" << convertToXML(stripFromPath(bodyDef->absFilePath())) << "\"";
}
t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
<< cd->getEndBodyLine() << "\"";
@@ -1512,7 +1506,7 @@ static void generateXMLForNamespace(const NamespaceDef *nd,FTextStream &ti)
writeXMLDocBlock(t,nd->docFile(),nd->docLine(),nd,0,nd->documentation());
t << " </detaileddescription>" << endl;
t << " <location file=\""
- << stripFromPath(nd->getDefFileName()) << "\" line=\""
+ << convertToXML(stripFromPath(nd->getDefFileName())) << "\" line=\""
<< nd->getDefLine() << "\"" << " column=\""
<< nd->getDefColumn() << "\"/>" << endl ;
t << " </compounddef>" << endl;
@@ -1654,7 +1648,7 @@ static void generateXMLForFile(FileDef *fd,FTextStream &ti)
writeXMLCodeBlock(t,fd);
t << " </programlisting>" << endl;
}
- t << " <location file=\"" << stripFromPath(fd->getDefFileName()) << "\"/>" << endl;
+ t << " <location file=\"" << convertToXML(stripFromPath(fd->getDefFileName())) << "\"/>" << endl;
t << " </compounddef>" << endl;
t << "</doxygen>" << endl;
@@ -1768,7 +1762,7 @@ static void generateXMLForDir(DirDef *dd,FTextStream &ti)
t << " <detaileddescription>" << endl;
writeXMLDocBlock(t,dd->docFile(),dd->docLine(),dd,0,dd->documentation());
t << " </detaileddescription>" << endl;
- t << " <location file=\"" << stripFromPath(dd->name()) << "\"/>" << endl;
+ t << " <location file=\"" << convertToXML(stripFromPath(dd->name())) << "\"/>" << endl;
t << " </compounddef>" << endl;
t << "</doxygen>" << endl;
diff --git a/src/xmlscanner.h b/src/xmlscanner.h
deleted file mode 100644
index b54d416..0000000
--- a/src/xmlscanner.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/******************************************************************************
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef XMLSCANNER_H
-#define XMLSCANNER_H
-
-#include "parserintf.h"
-#include "xmlcode.h"
-
-/** XML scanner. Only support syntax highlighting of code at the moment.
- */
-class XMLScanner : public ParserInterface
-{
-public:
- XMLScanner() {}
- virtual ~XMLScanner() {}
- void startTranslationUnit(const char *) {}
- void finishTranslationUnit() {}
- void parseInput(const char *, const char *, const std::unique_ptr<Entry> &, bool , QStrList &) {}
- bool needsPreprocessing(const QCString &) { return FALSE; }
-
- void parseCode(CodeOutputInterface &codeOutIntf,
- const char *scopeName,
- const QCString &input,
- SrcLangExt,
- bool isExampleBlock,
- const char *exampleName=0,
- FileDef *fileDef=0,
- int startLine=-1,
- int endLine=-1,
- bool inlineFragment=FALSE,
- const MemberDef *memberDef=0,
- bool showLineNumbers=TRUE,
- const Definition *searchCtx=0,
- bool collectXRefs=TRUE
- )
- {
- parseXmlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,
- fileDef,startLine,endLine,inlineFragment,memberDef,
- showLineNumbers,searchCtx,collectXRefs);
- }
-
- void resetCodeParserState()
- {
- resetXmlCodeParserState();
- }
-
- void parsePrototype(const char *) {}
-
-private:
-};
-
-#endif
diff --git a/templates/html/doxygen.css b/templates/html/doxygen.css
index ffba793..2c9dfd5 100644
--- a/templates/html/doxygen.css
+++ b/templates/html/doxygen.css
@@ -66,6 +66,11 @@ p.startli, p.startdd {
margin-top: 2px;
}
+th p.starttd, p.intertd, p.endtd {
+ font-size: 100%;
+ font-weight: 700;
+}
+
p.starttd {
margin-top: 0px;
}
diff --git a/templates/html/htmllayout.tpl b/templates/html/htmllayout.tpl
index a40bdbc..b434d0c 100644
--- a/templates/html/htmllayout.tpl
+++ b/templates/html/htmllayout.tpl
@@ -98,7 +98,7 @@
{# write the file sources #}
{% for compound in fileList %}
{% with page=compound %}
- {# TODO: to deal with clang optimisation, we need to write the sources in a different order! #}
+ {# TODO: to deal with clang optimization, we need to write the sources in a different order! #}
{% if compound.hasSourceFile %}
{% create compound.sourceFileName|append:config.HTML_FILE_EXTENSION from 'htmlsource.tpl' %}
{% endif %}
diff --git a/templates/html/htmltypeconstraints.tpl b/templates/html/htmltypeconstraints.tpl
index b5a8cd0..ccb3579 100644
--- a/templates/html/htmltypeconstraints.tpl
+++ b/templates/html/htmltypeconstraints.tpl
@@ -1,6 +1,6 @@
{# obj should be a class or member #}
{% if obj.typeConstraints %}
- <div class="typecontraint">
+ <div class="typeconstraint">
<dl><dt><b>{{ tr.typeConstraints }}</b></dt>
<dd><table border="0" cellspacing="2" cellpadding="0">
{% for arg in obj.typeConstraints %}
diff --git a/testing/012/indexpage.xml b/testing/012/indexpage.xml
index c0d96e7..3ee0fc8 100644
--- a/testing/012/indexpage.xml
+++ b/testing/012/indexpage.xml
@@ -7,7 +7,7 @@
</briefdescription>
<detaileddescription>
<para>See <ref refid="citelist_1CITEREF_knuth79" kindref="member">[3]</ref> for more info.</para>
- <para>Other references with crossreference see <ref refid="citelist_1CITEREF_Be09" kindref="member">[1]</ref> and <ref refid="citelist_1CITEREF_BertholdHeinzVigerske2009" kindref="member">[2]</ref> for more info. </para>
+ <para>Other references with cross references see <ref refid="citelist_1CITEREF_Be09" kindref="member">[1]</ref> and <ref refid="citelist_1CITEREF_BertholdHeinzVigerske2009" kindref="member">[2]</ref> for more info. </para>
</detaileddescription>
</compounddef>
</doxygen>
diff --git a/testing/012_cite.dox b/testing/012_cite.dox
index 2e022de..6cec0cf 100644
--- a/testing/012_cite.dox
+++ b/testing/012_cite.dox
@@ -5,5 +5,5 @@
/** \mainpage
* See \cite knuth79 for more info.
*
- * Other references with crossreference see \cite Be09 and \cite BertholdHeinzVigerske2009 for more info.
+ * Other references with cross references see \cite Be09 and \cite BertholdHeinzVigerske2009 for more info.
*/
diff --git a/testing/071/namespace_a_namespace_1_1_0d0.xml b/testing/071/namespace_a_namespace_1_1_0d0.xml
index 14f5a51..d439723 100644
--- a/testing/071/namespace_a_namespace_1_1_0d0.xml
+++ b/testing/071/namespace_a_namespace_1_1_0d0.xml
@@ -3,24 +3,24 @@
<compounddef id="namespace_a_namespace_1_1_0d0" kind="namespace" language="C++">
<compoundname>ANamespace::@0</compoundname>
<sectiondef kind="enum">
- <memberdef kind="enum" id="071__enum__in__anon__ns_8cpp_1a96ab6574751fdf6a53ceec8a3896c45d" prot="public" static="no" strong="yes">
+ <memberdef kind="enum" id="namespace_a_namespace_1_1_0d0_1a96ab6574751fdf6a53ceec8a3896c45d" prot="public" static="no" strong="yes">
<type/>
<name>Boolean</name>
- <enumvalue id="071__enum__in__anon__ns_8cpp_1a96ab6574751fdf6a53ceec8a3896c45daf8320b26d30ab433c5a54546d21f414c" prot="public">
+ <enumvalue id="namespace_a_namespace_1_1_0d0_1a96ab6574751fdf6a53ceec8a3896c45daf8320b26d30ab433c5a54546d21f414c" prot="public">
<name>False</name>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
</enumvalue>
- <enumvalue id="071__enum__in__anon__ns_8cpp_1a96ab6574751fdf6a53ceec8a3896c45daf827cf462f62848df37c5e1e94a4da74" prot="public">
+ <enumvalue id="namespace_a_namespace_1_1_0d0_1a96ab6574751fdf6a53ceec8a3896c45daf827cf462f62848df37c5e1e94a4da74" prot="public">
<name>True</name>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
</enumvalue>
- <enumvalue id="071__enum__in__anon__ns_8cpp_1a96ab6574751fdf6a53ceec8a3896c45da2767828026039e8ba7b38973cbb701f2" prot="public">
+ <enumvalue id="namespace_a_namespace_1_1_0d0_1a96ab6574751fdf6a53ceec8a3896c45da2767828026039e8ba7b38973cbb701f2" prot="public">
<name>FileNotFound</name>
<briefdescription>
</briefdescription>
diff --git a/testing/078/078__xml__namespace__members__in__file__scope_8h.xml b/testing/078/078__xml__namespace__members__in__file__scope_8h.xml
index 1198549..078c5ad 100644
--- a/testing/078/078__xml__namespace__members__in__file__scope_8h.xml
+++ b/testing/078/078__xml__namespace__members__in__file__scope_8h.xml
@@ -4,7 +4,7 @@
<compoundname>078_xml_namespace_members_in_file_scope.h</compoundname>
<innernamespace refid="namespace_namespace">Namespace</innernamespace>
<sectiondef kind="enum">
- <memberdef kind="enum" id="078__xml__namespace__members__in__file__scope_8h_1add172b93283b1ab7612c3ca6cc5dcfea" prot="public" static="no" strong="yes">
+ <memberdef kind="enum" id="namespace_namespace_1add172b93283b1ab7612c3ca6cc5dcfea" prot="public" static="no" strong="yes">
<type/>
<name>Enum</name>
<briefdescription>
@@ -18,7 +18,7 @@
</memberdef>
</sectiondef>
<sectiondef kind="func">
- <memberdef kind="function" id="078__xml__namespace__members__in__file__scope_8h_1a0f1fe1a972c7c4196988a1bdde63ec77" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <memberdef kind="function" id="namespace_namespace_1a0f1fe1a972c7c4196988a1bdde63ec77" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type>void</type>
<definition>void Namespace::foo</definition>
<argsstring>()</argsstring>
diff --git a/testing/testsqlite3.py b/testing/testsqlite3.py
index e8ab16c..b4227b4 100755
--- a/testing/testsqlite3.py
+++ b/testing/testsqlite3.py
@@ -6,7 +6,7 @@ import sys
import getopt
# map XML attributes/elements to SQL rows
-# --POC: iterate through the children and attributes of the memberdef elelement
+# --POC: iterate through the children and attributes of the memberdef element
# and search it in doxygen_sqlite3.db
g_conn=None
diff --git a/vhdlparser/CMakeLists.txt b/vhdlparser/CMakeLists.txt
index f89008c..ad5af28 100644
--- a/vhdlparser/CMakeLists.txt
+++ b/vhdlparser/CMakeLists.txt
@@ -1,3 +1,13 @@
+find_package(Javacc)
+if (JAVACC_FOUND)
+ add_custom_command(
+ COMMAND ${JAVACC_EXECUTABLE} -OUTPUT_DIRECTORY=${CMAKE_SOURCE_DIR}/vhdlparser ${CMAKE_SOURCE_DIR}/vhdlparser/vhdlparser.jj
+ DEPENDS ${CMAKE_SOURCE_DIR}/vhdlparser/vhdlparser.jj
+ OUTPUT ${CMAKE_SOURCE_DIR}/vhdlparser/CharStream.cc ${CMAKE_SOURCE_DIR}/vhdlparser/CharStream.h ${CMAKE_SOURCE_DIR}/vhdlparser/ErrorHandler.h ${CMAKE_SOURCE_DIR}/vhdlparser/JavaCC.h ${CMAKE_SOURCE_DIR}/vhdlparser/ParseException.cc ${CMAKE_SOURCE_DIR}/vhdlparser/ParseException.h ${CMAKE_SOURCE_DIR}/vhdlparser/Token.cc ${CMAKE_SOURCE_DIR}/vhdlparser/Token.h ${CMAKE_SOURCE_DIR}/vhdlparser/TokenManager.h ${CMAKE_SOURCE_DIR}/vhdlparser/TokenMgrError.cc ${CMAKE_SOURCE_DIR}/vhdlparser/TokenMgrError.h ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParser.cc ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParser.h ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParserConstants.h ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParserTokenManager.cc ${CMAKE_SOURCE_DIR}/vhdlparser/VhdlParserTokenManager.h
+ )
+
+endif()
+
include_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/qtools ${GENERATED_SRC})
add_library(vhdlparser STATIC
CharStream.cc
diff --git a/vhdlparser/CharStream.cc b/vhdlparser/CharStream.cc
index 8cc17c3..05003ef 100644
--- a/vhdlparser/CharStream.cc
+++ b/vhdlparser/CharStream.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#include "CharStream.h"
@@ -12,8 +12,8 @@ void ArrayCopy(T* src, int src_offset, T* dest, int dest_offset, int len) {
class StringReaderStream : public ReaderStream {
public:
- StringReaderStream(const JAVACC_STRING_TYPE& str) : str_(str), cur_(0), max_(str.size()) {}
- virtual size_t read(JAVACC_CHAR_TYPE *bufptr, int offset, size_t len) {
+ StringReaderStream(const JJString& str) : str_(str), cur_(0), max_(str.size()) {}
+ virtual size_t read(JJChar *bufptr, int offset, size_t len) {
size_t count = str_.copy(bufptr + offset, len > max_ ? max_ : len, cur_);
cur_ += count;
max_ -= count;
@@ -25,7 +25,7 @@ class StringReaderStream : public ReaderStream {
}
private:
- const JAVACC_STRING_TYPE str_;
+ const JJString str_;
size_t cur_;
size_t max_;
};
@@ -33,7 +33,7 @@ class StringReaderStream : public ReaderStream {
namespace vhdl {
namespace parser {
-void CharStream::ReInit(const JAVACC_STRING_TYPE& str, int startline,
+void CharStream::ReInit(const JJString& str, int startline,
int startcolumn, int buffersize) {
StringReaderStream *stream = new StringReaderStream(str);
ReInit(stream, startline, startcolumn, buffersize);
@@ -46,12 +46,12 @@ void CharStream::ReInit(ReaderStream *input_stream, int startline,
delete inputStream;
}
- if (buffer != NULL) {
+ if (buffer) {
DeleteBuffers();
}
available = bufsize = buffersize;
- buffer = new JAVACC_CHAR_TYPE[buffersize];
+ buffer = new JJChar[buffersize];
bufline = new int[buffersize];
bufcolumn = new int[buffersize];
@@ -111,7 +111,7 @@ void CharStream::adjustBeginLineColumn(int newLine, int newCol) {
}
void CharStream::ExpandBuff(bool wrapAround) {
- JAVACC_CHAR_TYPE *newbuffer = new JAVACC_CHAR_TYPE[bufsize + 2048];
+ JJChar *newbuffer = new JJChar[bufsize + 2048];
int *newbufline = new int[bufsize + 2048];
int *newbufcolumn = new int[bufsize + 2048];
@@ -160,7 +160,7 @@ void CharStream::FillBuff() {
}
}
- int i = inputStream->read(buffer, maxNextCharInd, available - maxNextCharInd);
+ size_t i = inputStream->read(buffer, maxNextCharInd, available - maxNextCharInd);
if (i > 0) {
maxNextCharInd += i;
} else {
@@ -172,7 +172,7 @@ void CharStream::FillBuff() {
}
}
-void CharStream::UpdateLineColumn(JAVACC_CHAR_TYPE c) {
+void CharStream::UpdateLineColumn(JJChar c) {
column++;
if (prevCharIsLF) {
prevCharIsLF = false;
@@ -209,4 +209,4 @@ void CharStream::UpdateLineColumn(JAVACC_CHAR_TYPE c) {
}
}
-/* JavaCC - OriginalChecksum=e709b9ee1adf0fcb6b1c5e1641f10348 (do not edit this line) */
+/* JavaCC - OriginalChecksum=0ba78d6c493d812eba61de6fa794fd15 (do not edit this line) */
diff --git a/vhdlparser/CharStream.h b/vhdlparser/CharStream.h
index 784b584..a955d8e 100644
--- a/vhdlparser/CharStream.h
+++ b/vhdlparser/CharStream.h
@@ -1,7 +1,8 @@
-/* Generated By:JavaCC: Do not edit this line. CharStream.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. CharStream.h Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef CHARSTREAM_H
-#define CHARSTREAM_H
+#ifndef JAVACC_CHARSTREAM_H_
+#define JAVACC_CHARSTREAM_H_
+
#include "JavaCC.h"
#ifndef INITIAL_BUFFER_SIZE
@@ -28,17 +29,35 @@ namespace parser {
class CharStream {
- public:
- void setTabSize(int i) { tabSize = i; }
- int getTabSize(int i) { return tabSize; }
- virtual int getColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
- virtual int getLine() { return trackLineColumn ? bufline[bufpos] : -1; }
- virtual int getEndColumn() { return trackLineColumn ? bufcolumn[bufpos] : -1; }
- virtual int getEndLine() { return trackLineColumn ? bufline[bufpos] : -1; }
- virtual int getBeginColumn() { return trackLineColumn ? bufcolumn[tokenBegin] : -1; }
- virtual int getBeginLine() { return trackLineColumn ? bufline[tokenBegin] : -1; }
-
- virtual bool getTrackLineColumn() { return trackLineColumn; }
+public:
+ void setTabSize(int i) { tabSize = i; }
+ int getTabSize(int i) { return tabSize; }
+
+private:
+ int getBufcolumn(int pos) {
+ if (trackLineColumn && pos>=0) {
+ return bufcolumn[pos];
+ } else {
+ return -1;
+ }
+ }
+ int getBufline(int pos) {
+ if (trackLineColumn && pos>=0) {
+ return bufline[pos];
+ } else {
+ return -1;
+ }
+ }
+
+public:
+ virtual int getColumn() { return getBufcolumn(bufpos); }
+ virtual int getLine() { return getBufline(bufpos); }
+ virtual int getEndColumn() { return getBufcolumn(bufpos); }
+ virtual int getEndLine() { return getBufline(bufpos); }
+ virtual int getBeginColumn() { return getBufcolumn(tokenBegin); }
+ virtual int getBeginLine() { return getBufline(tokenBegin); }
+
+ virtual bool getTrackLineColumn() { return trackLineColumn; }
virtual void setTrackLineColumn(bool val) { trackLineColumn = val; }
/**
@@ -47,25 +66,25 @@ class CharStream {
* (longer) token. So, they will be used again as the prefix of the next
* token and it is the implemetation's responsibility to do this right.
*/
-virtual inline void backup(int amount) {
- inBuf += amount;
- bufpos -= amount;
- if (bufpos < 0) {
- bufpos += bufsize;
+ virtual inline void backup(int amount) {
+ inBuf += amount;
+ bufpos -= amount;
+ if (bufpos < 0) {
+ bufpos += bufsize;
+ }
}
-}
/**
* Returns the next character that marks the beginning of the next token.
* All characters must remain in the buffer between two successive calls
* to this method to implement backup correctly.
*/
-virtual inline JAVACC_CHAR_TYPE BeginToken() {
- tokenBegin = -1;
- JAVACC_CHAR_TYPE c = readChar();
- tokenBegin = bufpos;
- return c;
-}
+ virtual inline JJChar BeginToken() {
+ tokenBegin = -1;
+ JJChar c = readChar();
+ tokenBegin = bufpos;
+ return c;
+ }
/**
@@ -73,31 +92,30 @@ virtual inline JAVACC_CHAR_TYPE BeginToken() {
* of selecting the input is the responsibility of the class
* implementing this class.
*/
-virtual inline JAVACC_CHAR_TYPE readChar() {
- if (inBuf > 0) {
- --inBuf;
- ++bufpos;
- if (bufpos == bufsize) {
- bufpos = 0;
+ virtual inline JJChar readChar() {
+ if (inBuf > 0) {
+ --inBuf;
+ ++bufpos;
+ if (bufpos == bufsize) {
+ bufpos = 0;
+ }
+ return buffer[bufpos];
}
- return buffer[bufpos];
- }
+ ++bufpos;
+ if (bufpos >= maxNextCharInd) {
+ FillBuff();
+ }
- ++bufpos;
- if (bufpos >= maxNextCharInd) {
- FillBuff();
- }
+ JJChar c = buffer[bufpos];
- JAVACC_CHAR_TYPE c = buffer[bufpos];
+ if (trackLineColumn) {
+ UpdateLineColumn(c);
+ }
- if (trackLineColumn) {
- UpdateLineColumn(c);
+ return c;
}
- return c;
-}
-
virtual void ExpandBuff(bool wrapAround);
virtual void FillBuff();
@@ -108,12 +126,11 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
* anything that they want to. For example, for efficiency, one might decide
* to just return NULL, which is a valid implementation.
*/
- virtual JAVACC_STRING_TYPE GetImage() {
+ virtual JJString GetImage() {
if (bufpos >= tokenBegin)
- return JAVACC_STRING_TYPE(buffer + tokenBegin, bufpos - tokenBegin + 1);
+ return JJString(buffer + tokenBegin, bufpos - tokenBegin + 1);
else
- return JAVACC_STRING_TYPE(buffer + tokenBegin, bufsize - tokenBegin)
- .append(buffer, bufpos + 1);
+ return JJString(buffer + tokenBegin, bufsize - tokenBegin).append(buffer, bufpos + 1);
}
/**
@@ -122,12 +139,11 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
* for use in actions in the case of MORE. A simple and inefficient
* implementation of this is as follows :
*/
- virtual JAVACC_STRING_TYPE GetSuffix(int len) {
+ virtual JJString GetSuffix(int len) {
if ((bufpos + 1) >= len) {
- return JAVACC_STRING_TYPE(buffer + bufpos - len + 1, len);
+ return JJString(buffer + bufpos - len + 1, len);
}
- return JAVACC_STRING_TYPE(buffer + bufsize - (len - bufpos - 1), len - bufpos - 1)
- .append(buffer, bufpos + 1);
+ return JJString(buffer + bufsize - (len - bufpos - 1), len - bufpos - 1).append(buffer, bufpos + 1);
}
/**
@@ -144,74 +160,71 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
}
bool endOfInput() {
- return inBuf == 0 && bufpos + 1 >= maxNextCharInd &&
- inputStream->endOfInput();
+ return inBuf == 0 && bufpos + 1 >= maxNextCharInd && inputStream->endOfInput();
}
- CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline,
+ CharStream(const JJChar *buf, int sz, int startline,
int startcolumn, int buffersize) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
- ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, buffersize);
+ bufline(nullptr), bufcolumn(nullptr), buffer(nullptr), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(nullptr), deleteStream(false) {
+ ReInit(JJString(buf, sz), startline, startcolumn, buffersize);
}
- CharStream(const JAVACC_CHAR_TYPE *buf, int sz, int startline, int startcolumn) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
- ReInit(JAVACC_STRING_TYPE(buf, sz), startline, startcolumn, INITIAL_BUFFER_SIZE);
+ CharStream(const JJChar *buf, int sz, int startline, int startcolumn) :
+ bufline(nullptr), bufcolumn(nullptr), buffer(nullptr), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(nullptr), deleteStream(false) {
+ ReInit(JJString(buf, sz), startline, startcolumn, INITIAL_BUFFER_SIZE);
}
- CharStream(const JAVACC_STRING_TYPE& str, int startline,
+ CharStream(const JJString& str, int startline,
int startcolumn, int buffersize) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(nullptr), bufcolumn(nullptr), buffer(nullptr), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(nullptr), deleteStream(false) {
ReInit(str, startline, startcolumn, buffersize);
}
- CharStream(const JAVACC_STRING_TYPE& str, int startline, int startcolumn) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0) ,tabSize(8), trackLineColumn(true){
+ CharStream(const JJString& str, int startline, int startcolumn) :
+ bufline(nullptr), bufcolumn(nullptr), buffer(nullptr), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(nullptr), deleteStream(false) {
ReInit(str, startline, startcolumn, INITIAL_BUFFER_SIZE);
}
CharStream(ReaderStream *input_stream, int startline,
int startcolumn, int buffersize) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
- ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
+ bufline(nullptr), bufcolumn(nullptr), buffer(nullptr), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(nullptr), deleteStream(false) {
+ ReInit(input_stream, startline, startcolumn, buffersize);
}
CharStream(ReaderStream *input_stream, int startline, int startcolumn) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(nullptr), bufcolumn(nullptr), buffer(nullptr), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(nullptr), deleteStream(false) {
ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
}
CharStream(ReaderStream *input_stream) :
- bufline(NULL), bufcolumn(NULL), inputStream(NULL), deleteStream(false),
- buffer(NULL), bufpos(0), bufsize(0), tokenBegin(0), column(0), line(0),
- prevCharIsCR (false), prevCharIsLF (false), available(0), maxNextCharInd(0),
- inBuf(0),tabSize(8), trackLineColumn(true) {
+ bufline(nullptr), bufcolumn(nullptr), buffer(nullptr), bufpos(0), bufsize(0),
+ tokenBegin(0), column(0), line(0), prevCharIsCR(false), prevCharIsLF(false),
+ available(0), maxNextCharInd(0), inBuf(0), tabSize(1), trackLineColumn(true),
+ inputStream(nullptr), deleteStream(false) {
ReInit(input_stream, 1, 1, INITIAL_BUFFER_SIZE);
}
- virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn,
- int buffersize);
+ virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn, int buffersize);
- virtual void ReInit(ReaderStream *input_stream, int startline,
- int startcolumn) {
+ virtual void ReInit(ReaderStream *input_stream, int startline, int startcolumn) {
ReInit(input_stream, startline, startcolumn, INITIAL_BUFFER_SIZE);
}
@@ -219,39 +232,40 @@ virtual inline JAVACC_CHAR_TYPE readChar() {
ReInit(input_stream, 1, 1, INITIAL_BUFFER_SIZE);
}
- virtual void ReInit(const JAVACC_STRING_TYPE& str, int startline,
+ virtual void ReInit(const JJString& str, int startline,
int startcolumn, int buffersize);
- virtual void ReInit(const JAVACC_STRING_TYPE& str, int startline,
+ virtual void ReInit(const JJString& str, int startline,
int startcolumn) {
ReInit(str, startline, startcolumn, INITIAL_BUFFER_SIZE);
}
virtual void adjustBeginLineColumn(int newLine, int newCol);
- protected:
- virtual void UpdateLineColumn(JAVACC_CHAR_TYPE c);
-
- int *bufline;
- int *bufcolumn;
- ReaderStream *inputStream;
- bool deleteStream;
- JAVACC_CHAR_TYPE * buffer;
- int bufpos;
- int bufsize;
- int tokenBegin;
- int column;
- int line;
- bool prevCharIsCR ;
- bool prevCharIsLF ;
- int available;
- int maxNextCharInd;
- int inBuf ;
- int tabSize ;
- bool trackLineColumn;
+protected:
+ virtual void UpdateLineColumn(JJChar c);
+
+ int* bufline;
+ int* bufcolumn;
+ JJChar* buffer;
+ int bufpos;
+ int bufsize;
+ int tokenBegin;
+ int column;
+ int line;
+ bool prevCharIsCR;
+ bool prevCharIsLF;
+ int available;
+ int maxNextCharInd;
+ int inBuf;
+ int tabSize;
+ bool trackLineColumn;
+ ReaderStream* inputStream;
+ bool deleteStream;
};
}
}
+
#endif
-/* JavaCC - OriginalChecksum=5eaf75ef6a2c7859369c80cf6fd037e0 (do not edit this line) */
+/* JavaCC - OriginalChecksum=c5b4b2e72393f865547f405cc9def169 (do not edit this line) */
diff --git a/vhdlparser/ErrorHandler.h b/vhdlparser/ErrorHandler.h
index 7500a5f..d5535e8 100644
--- a/vhdlparser/ErrorHandler.h
+++ b/vhdlparser/ErrorHandler.h
@@ -1,7 +1,9 @@
-/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ErrorHandler.h Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,BUILD_PARSER=true,BUILD_TOKEN_MANAGER=true */
-#ifndef ERRORHANDLER_H
-#define ERRORHANDLER_H
+#ifndef JAVACC_ERRORHANDLER_H
+#define JAVACC_ERRORHANDLER_H
+
+#include <stdio.h>
#include <string>
#include "JavaCC.h"
#include "Token.h"
@@ -9,7 +11,7 @@
namespace vhdl {
namespace parser {
-JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
+JJSimpleString addUnicodeEscapes(const JJString& str);
class VhdlParser;
class ErrorHandler {
@@ -23,22 +25,22 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
// expectedKind - token kind that the parser was trying to consume.
// expectedToken - the image of the token - tokenImages[expectedKind].
// actual - the actual token that the parser got instead.
- virtual void handleUnexpectedToken(int expectedKind, JAVACC_STRING_TYPE expectedToken, Token *actual, VhdlParser *parser) {
+ virtual void handleUnexpectedToken(int expectedKind, const JJString& expectedToken, Token *actual, VhdlParser *parser) {
error_count++;
fprintf(stderr, "Expecting %s at: %d:%d but got %s\n", addUnicodeEscapes(expectedToken).c_str(), actual->beginLine, actual->beginColumn, addUnicodeEscapes(actual->image).c_str());
}
// Called when the parser cannot continue parsing.
// last - the last token successfully parsed.
// unexpected - the token at which the error occurs.
- // production - the production in which this error occurs.
- virtual void handleParseError(Token *last, Token *unexpected, JAVACC_SIMPLE_STRING production, VhdlParser *parser) {
+ // production - the production in which this error occurrs.
+ virtual void handleParseError(Token *last, Token *unexpected, const JJSimpleString& production, VhdlParser *parser) {
error_count++;
fprintf(stderr, "Encountered: %s at: %d:%d while parsing: %s\n", addUnicodeEscapes(unexpected->image).c_str(), unexpected->beginLine, unexpected->beginColumn, production.c_str());
}
virtual int getErrorCount() {
return error_count;
}
- virtual void handleOtherError(JAVACC_STRING_TYPE message, VhdlParser *parser) {
+ virtual void handleOtherError(const JJString& message, VhdlParser *parser) {
fprintf(stderr, "Error: %s\n", (char*)message.c_str());
}
virtual ~ErrorHandler() {}
@@ -61,11 +63,11 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
// errorAfter : prefix that was seen before this error occurred
// curchar : the offending character
//
- virtual void lexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, VhdlParserTokenManager* token_manager) {
+ virtual void lexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, const JJString& errorAfter, JJChar curChar, VhdlParserTokenManager* token_manager) {
// by default, we just print an error message and return.
fprintf(stderr, "Lexical error at: %d:%d. Encountered: %c after: %s.\n", errorLine, errorColumn, curChar, (EOFSeen? "EOF" : (const char*)errorAfter.c_str()));
}
- virtual void lexicalError(JAVACC_STRING_TYPE errorMessage, VhdlParserTokenManager* token_manager) {
+ virtual void lexicalError(const JJString& errorMessage, VhdlParserTokenManager* token_manager) {
fprintf(stderr, "%s\n", (char*)errorMessage.c_str());
}
virtual ~TokenManagerErrorHandler() {}
@@ -75,4 +77,5 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str);
}
#endif
-/* JavaCC - OriginalChecksum=685d19cb4cd943b60089f599e45f23ad (do not edit this line) */
+
+/* JavaCC - OriginalChecksum=5361b31ac6530c6c23511012deb15394 (do not edit this line) */
diff --git a/vhdlparser/JavaCC.h b/vhdlparser/JavaCC.h
index 224b2b5..2d34634 100644
--- a/vhdlparser/JavaCC.h
+++ b/vhdlparser/JavaCC.h
@@ -1,31 +1,33 @@
-/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 6.2 */
+/* Generated By:JavaCC: Do not edit this line. JavaCC.h Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef JAVACC_H_
-#define JAVACC_H_
-#include <stdio.h>
+#ifndef JAVACC_JAVACC_H_
+#define JAVACC_JAVACC_H_
+
#include <string>
-#include <memory.h>
-#include <assert.h>
-#include "vhdlstring.h"
+#include <memory>
+#include <cassert>
+#include <functional>
#ifndef JAVACC_CHAR_TYPE
#define JAVACC_CHAR_TYPE char
#endif
#ifndef JAVACC_STRING_TYPE
-#define JAVACC_STRING_TYPE VhdlString
+#define JAVACC_STRING_TYPE std::basic_string<JAVACC_CHAR_TYPE>
#endif
-#define JAVACC_SIMPLE_STRING VhdlString
+#define JAVACC_SIMPLE_STRING std::basic_string<char>
-typedef JAVACC_STRING_TYPE StringBuffer;
-typedef JAVACC_STRING_TYPE String;
+typedef JAVACC_CHAR_TYPE JJChar;
+typedef JAVACC_STRING_TYPE JJString;
+typedef JAVACC_STRING_TYPE JJStringBuffer;
+typedef JAVACC_SIMPLE_STRING JJSimpleString;
// Abstraction on stream classes to read a block of data into a buffer.
class ReaderStream {
public:
// Read block of data into a buffer and return the actual number read.
- virtual size_t read(JAVACC_CHAR_TYPE * /*bufptr*/, int /*offset*/, size_t /*len*/) { return 0; }
+ virtual size_t read(JAVACC_CHAR_TYPE *buffer, int offset, size_t len) { return 0; }
virtual bool endOfInput() { return true; }
virtual ~ReaderStream() {}
};
@@ -33,11 +35,26 @@ public:
const JAVACC_CHAR_TYPE EMPTY[] = { 0 };
#ifndef MAX
-#define MAX(a,b) ((a)>(b)?(a):(b))
+#define MAX(a,b) (a>=b?a:b)
#endif
#ifndef MIN
-#define MIN(a,b) ((a)<(b)?(a):(b))
+#define MIN(a,b) (a<=b?a:b)
#endif
+template<typename T>
+struct JJEnter
+{
+ JJEnter(T f_) : f{f_} {f();}
+ ~JJEnter(){}
+ T f;
+};
+template<typename T>
+struct JJExit
+{
+ JJExit(T f_) : f{f_} {}
+ ~JJExit(){f();}
+ T f;
+};
+
#endif
-/* JavaCC - OriginalChecksum=eb066370c81bb58bb68713327da9719f (do not edit this line) */
+/* JavaCC - OriginalChecksum=b719dd5e5f87efc5315d14df0b701850 (do not edit this line) */
diff --git a/vhdlparser/ParseException.cc b/vhdlparser/ParseException.cc
index 99649af..9f256d9 100644
--- a/vhdlparser/ParseException.cc
+++ b/vhdlparser/ParseException.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ParseException.cc Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#include "ParseException.h"
@@ -23,7 +23,7 @@ namespace parser {
*/
ParseException::ParseException(Token currentTokenVal,
int** expectedTokenSequencesVal,
- JAVACC_STRING_TYPE* tokenImageVal
+ JJString* tokenImageVal
)
{
initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal);
@@ -46,14 +46,14 @@ namespace parser {
}
/** Constructor with message. */
- ParseException::ParseException(JAVACC_STRING_TYPE message) {
+ ParseException::ParseException(const JJString& message) {
}
/**
* This is the last token that has been consumed successfully. If
* this object has been created due to a parse error, the token
- * following this token will (therefore) be the first error token.
+ * followng this token will (therefore) be the first error token.
*/
Token currentToken;
@@ -69,7 +69,7 @@ namespace parser {
* parser within which the parse error occurred. This array is
* defined in the generated ...Constants class.
*/
- JAVACC_STRING_TYPE* tokenImage;
+ JJString* tokenImage;
/**
* It uses "currentToken" and "expectedTokenSequences" to generate a parse
@@ -78,12 +78,12 @@ namespace parser {
* from the parser) the correct error message
* gets displayed.
*/
- JAVACC_STRING_TYPE ParseException::initialise(Token currentToken,
+ JJString ParseException::initialise(Token currentToken,
int** expectedTokenSequences,
- JAVACC_STRING_TYPE* tokenImage) {
+ JJString* tokenImage) {
#if 0
- //JAVACC_STRING_TYPE eol = System.getProperty("line.separator", "\n");
- expected = new JAVACC_STRING_TYPE();
+ //JJString eol = System.getProperty("line.separator", "\n");
+ expected = new JJString();
int maxSize = 0;
for (int i = 0; i < expectedTokenSequences.length; i++) {
if (maxSize < expectedTokenSequences[i].length) {
@@ -93,39 +93,39 @@ namespace parser {
expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');
}
if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
- expected.append((JAVACC_CHAR_TYPE*)"...");
+ expected.append((JJChar*)"...");
}
expected.append(eol).append(" ");
}
- JAVACC_STRING_TYPE retval = (JAVACC_CHAR_TYPE*)"Encountered \"";
+ JJString retval = (JJChar*)"Encountered \"";
Token tok = currentToken.next;
for (int i = 0; i < maxSize; i++) {
- if (i != 0) retval += (JAVACC_CHAR_TYPE*)" ";
+ if (i != 0) retval += (JJChar*)" ";
if (tok.kind == 0) {
retval += tokenImage[0];
break;
}
- retval += (JAVACC_CHAR_TYPE*)" " + tokenImage[tok.kind];
- retval += (JAVACC_CHAR_TYPE*)" \"";
+ retval += (JJChar*)" " + tokenImage[tok.kind];
+ retval += (JJChar*)" \"";
retval += add_escapes(tok.image);
- retval += (JAVACC_CHAR_TYPE*)" \"";
+ retval += (JJChar*)" \"";
tok = tok.next;
}
- retval += (JAVACC_CHAR_TYPE*)"\" at line " + currentToken.next.beginLine + (JAVACC_CHAR_TYPE*)", column " + currentToken.next.beginColumn;
- retval += (JAVACC_CHAR_TYPE*)"." + eol;
+ retval += (JJChar*)"\" at line " + currentToken.next.beginLine + (JJChar*)", column " + currentToken.next.beginColumn;
+ retval += (JJChar*)"." + eol;
if (expectedTokenSequences.length == 1) {
- retval += (JAVACC_CHAR_TYPE*)"Was expecting:" + eol + (JAVACC_CHAR_TYPE*)" ";
+ retval += (JJChar*)"Was expecting:" + eol + (JJChar*)" ";
} else {
- retval += (JAVACC_CHAR_TYPE*)"Was expecting one of:" + eol + (JAVACC_CHAR_TYPE*)" ";
+ retval += (JJChar*)"Was expecting one of:" + eol + (JJChar*)" ";
}
retval += expected.toString();
return retval;
#endif
- return (JAVACC_CHAR_TYPE*)"Parse exception";
+ return (JJChar*)"Parse exception";
}
/**
- * The end of line JAVACC_STRING_TYPE for this machine.
+ * The end of line JJString for this machine.
*/
#define eol "\n"
@@ -134,15 +134,13 @@ namespace parser {
* when these raw version cannot be used as part of an ASCII
* string literal.
*/
- JAVACC_STRING_TYPE ParseException::add_escapes(JAVACC_STRING_TYPE str) {
+ JJString ParseException::add_escapes(const JJString& str) {
/*
- JAVACC_STRING_TYPE *retval = new JAVACC_STRING_TYPE();
- JAVACC_CHAR_TYPE ch;
+ JJString *retval = new JJString();
+ JJChar ch;
for (int i = 0; i < str.length(); i++) {
switch (str.charAt(i))
{
- case 0 :
- continue;
case '\b':
retval.append("\\b");
continue;
@@ -169,7 +167,7 @@ namespace parser {
continue;
default:
if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
- JAVACC_STRING_TYPE s = "0000" + Integer.toString(ch, 16);
+ JJString s = "0000" + Integer.toString(ch, 16);
retval.append("\\u" + s.substring(s.length() - 4, s.length()));
} else {
retval.append(ch);
@@ -183,4 +181,4 @@ namespace parser {
}
}
-/* JavaCC - OriginalChecksum=99d488e13335cf377284c90700f070ed (do not edit this line) */
+/* JavaCC - OriginalChecksum=7a72405661a136830ccf7f3cab0fffdc (do not edit this line) */
diff --git a/vhdlparser/ParseException.h b/vhdlparser/ParseException.h
index b025912..c4afc27 100644
--- a/vhdlparser/ParseException.h
+++ b/vhdlparser/ParseException.h
@@ -1,7 +1,8 @@
-/* Generated By:JavaCC: Do not edit this line. ParseException.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. ParseException.h Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef _PARSE_EXCEPTION_H
-#define _PARSE_EXCEPTION_H
+#ifndef JAVACC_PARSE_EXCEPTION_H
+#define JAVACC_PARSE_EXCEPTION_H
+
#include "JavaCC.h"
#include "Token.h"
@@ -28,7 +29,7 @@ class ParseException {
*/
ParseException(Token currentTokenVal,
int** expectedTokenSequencesVal,
- JAVACC_STRING_TYPE* tokenImageVal
+ JJString* tokenImageVal
);
/**
@@ -44,13 +45,13 @@ class ParseException {
ParseException();
/** Constructor with message. */
- ParseException(JAVACC_STRING_TYPE message);
+ ParseException(const JJString& message);
/**
* This is the last token that has been consumed successfully. If
* this object has been created due to a parse error, the token
- * following this token will (therefore) be the first error token.
+ * followng this token will (therefore) be the first error token.
*/
Token currentToken;
@@ -66,7 +67,7 @@ class ParseException {
* parser within which the parse error occurred. This array is
* defined in the generated ...Constants class.
*/
- JAVACC_STRING_TYPE* tokenImage;
+ JJString* tokenImage;
/**
* It uses "currentToken" and "expectedTokenSequences" to generate a parse
@@ -75,9 +76,9 @@ class ParseException {
* from the parser) the correct error message
* gets displayed.
*/
- private: JAVACC_STRING_TYPE initialise(Token currentToken,
+ private: JJString initialise(Token currentToken,
int** expectedTokenSequences,
- JAVACC_STRING_TYPE* tokenImage);
+ JJString* tokenImage);
/**
* The end of line string for this machine.
@@ -89,11 +90,12 @@ class ParseException {
* when these raw version cannot be used as part of an ASCII
* string literal.
*/
- JAVACC_STRING_TYPE add_escapes(JAVACC_STRING_TYPE str);
+ JJString add_escapes(const JJString& str);
};
}
}
+
#endif
-/* JavaCC - OriginalChecksum=8c47c56fc2030f05b43e20cae6ca5d66 (do not edit this line) */
+/* JavaCC - OriginalChecksum=6705523c0ea4e83f3c38da57253c0aea (do not edit this line) */
diff --git a/vhdlparser/Token.cc b/vhdlparser/Token.cc
index 62a8169..d47dc68 100644
--- a/vhdlparser/Token.cc
+++ b/vhdlparser/Token.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. Token.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. Token.cc Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */
#include "Token.h"
@@ -18,42 +18,46 @@ namespace parser {
* override this method as appropriate.
*/
void * Token::getValue() {
- return NULL;
+ return nullptr;
}
/**
* No-argument constructor
*/
- Token::Token() {
- this->next = NULL;
- this->specialToken = NULL;
+ Token::Token() :
+ beginLine(0), beginColumn(0), endLine(0), endColumn(0)
+ {
+ this->next = nullptr;
+ this->specialToken = nullptr;
}
/**
* Constructs a new token for the specified Image.
*/
- Token::Token(int kind)
+ Token::Token(int kind) :
+ beginLine(0), beginColumn(0), endLine(0), endColumn(0)
{
this->kind = kind;
- this->next = NULL;
- this->specialToken = NULL;
+ this->next = nullptr;
+ this->specialToken = nullptr;
}
/**
* Constructs a new token for the specified Image and Kind.
*/
- Token::Token(int kind, JAVACC_STRING_TYPE image)
+ Token::Token(int kind, const JJString& image)
+ : beginLine(0), beginColumn(0), endLine(0), endColumn(0)
{
this->kind = kind;
this->image = image;
- this->next = NULL;
- this->specialToken = NULL;
+ this->next = nullptr;
+ this->specialToken = nullptr;
}
/**
* Returns the image.
*/
- JAVACC_STRING_TYPE Token::toString()
+ const JJString& Token::toString()
{
return image;
}
@@ -70,7 +74,7 @@ namespace parser {
* to the following switch statement. Then you can cast matchedToken
* variable to the appropriate type and use sit in your lexical actions.
*/
- Token *Token::newToken(int ofKind, JAVACC_STRING_TYPE image)
+ Token *Token::newToken(int ofKind, const JJString& image)
{
switch(ofKind)
{
@@ -80,13 +84,16 @@ namespace parser {
Token *Token::newToken(int ofKind)
{
- return newToken(ofKind, JAVACC_STRING_TYPE((JAVACC_CHAR_TYPE*)""));
+ return newToken(ofKind, JJString());
}
Token::~Token() {
if (specialToken) delete specialToken;
+ this->kind = 0;
+ this->next = nullptr;
+ this->specialToken = nullptr;
}
}
}
-/* JavaCC - OriginalChecksum=9db9ca693072c4c37bb7cc933c0c5e35 (do not edit this line) */
+/* JavaCC - OriginalChecksum=01131f3b3906a670aa8fee6224233701 (do not edit this line) */
diff --git a/vhdlparser/Token.h b/vhdlparser/Token.h
index 5fce69f..3575005 100644
--- a/vhdlparser/Token.h
+++ b/vhdlparser/Token.h
@@ -1,7 +1,8 @@
-/* Generated By:JavaCC: Do not edit this line. Token.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. Token.h Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true,TOKEN_INCLUDES=,TOKEN_EXTENDS= */
-#ifndef TOKEN_H
-#define TOKEN_H
+#ifndef JAVACC_TOKEN_H
+#define JAVACC_TOKEN_H
+
#include "JavaCC.h"
@@ -35,7 +36,7 @@ class Token
/**
* The string image of the token.
*/
- JAVACC_STRING_TYPE image;
+ JJString image;
/**
* A reference to the next regular (non-special) token from the input
@@ -84,14 +85,15 @@ class Token
/**
* Constructs a new token for the specified Image and Kind.
*/
- Token(int kind, JAVACC_STRING_TYPE image);
+ Token(int kind, const JJString& image);
+
+ virtual ~Token();
/**
* Returns the image.
*/
- JAVACC_STRING_TYPE toString();
+ const JJString& toString();
- public: virtual ~Token();
/**
* Returns a new Token void *, by default. However, if you want, you
@@ -105,12 +107,13 @@ class Token
* to the following switch statement. Then you can cast matchedToken
* variable to the appropriate type and use sit in your lexical actions.
*/
- static Token *newToken(int ofKind, JAVACC_STRING_TYPE image);
+ static Token *newToken(int ofKind, const JJString& image);
static Token *newToken(int ofKind);
};
}
}
+
#endif
-/* JavaCC - OriginalChecksum=2f5eb1c937adc983dfa2008c4fe383a7 (do not edit this line) */
+/* JavaCC - OriginalChecksum=8c237423e3d9695c3bfcf539bcf92375 (do not edit this line) */
diff --git a/vhdlparser/TokenManager.h b/vhdlparser/TokenManager.h
index df371d9..6b158ae 100644
--- a/vhdlparser/TokenManager.h
+++ b/vhdlparser/TokenManager.h
@@ -1,11 +1,12 @@
-/* Generated By:JavaCC: Do not edit this line. TokenManager.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenManager.h Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef TOKENMANAGER_H
-#define TOKENMANAGER_H
+#ifndef JAVACC_TOKENMANAGER_H
+#define JAVACC_TOKENMANAGER_H
+
+#include <iostream>
#include "JavaCC.h"
#include "Token.h"
-
namespace vhdl {
namespace parser {
/**
@@ -19,15 +20,17 @@ public:
/** This gets the next token from the input stream.
* A token of kind 0 (<EOF>) should be returned on EOF.
*/
- public: virtual Token *getNextToken() = 0;
- public: virtual ~TokenManager() { }
- public: virtual void lexicalError() {
- fprintf(stderr, "Lexical error encountered.\n");
+ virtual ~TokenManager() { }
+ virtual Token *getNextToken() = 0;
+ virtual void setParser(void* parser) {};
+ virtual void lexicalError() {
+ std::cerr << "Lexical error encountered." << std::endl;
}
};
}
}
+
#endif
-/* JavaCC - OriginalChecksum=9e6cfa00cefe7e342b80eb59f1a114ff (do not edit this line) */
+/* JavaCC - OriginalChecksum=c5e389e7ee25f48da34e517ae429ac2a (do not edit this line) */
diff --git a/vhdlparser/TokenMgrError.cc b/vhdlparser/TokenMgrError.cc
index 9093e6e..3560805 100644
--- a/vhdlparser/TokenMgrError.cc
+++ b/vhdlparser/TokenMgrError.cc
@@ -1,4 +1,4 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.cc Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.cc Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
#include "TokenMgrError.h"
@@ -14,17 +14,17 @@ namespace parser {
* errorLine : line number when the error occurred
* errorColumn : column number when the error occurred
* errorAfter : prefix that was seen before this error occurred
- * curJAVACC_CHAR_TYPE : the offending character
+ * curJJChar : the offending character
* Note: You can customize the lexical error message by modifying this method.
*/
- JAVACC_STRING_TYPE TokenMgrError::LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar) {
+ JJString TokenMgrError::LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, const JJString& errorAfter, JJChar curChar) {
#if 0
- JAVACC_STRING_TYPE s;
- stringstream<JAVACC_STRING_TYPE> ss;
+ JJString s;
+ stringstream<JJString> ss;
ss << "Lexical error at line " << errorLine << " column " << errorColumn
<< ". Encountered: " << curChar << "(" << (int)curChar
<< ") after : \"" << errorAfter.c_str() << "\"";
- return (JAVACC_STRING_TYPE)ss.rdbuf()->str();
+ return (JJString)ss.rdbuf()->str();
#endif
return EMPTY;
}
@@ -38,7 +38,7 @@ namespace parser {
*
* from this method for such cases in the release version of your parser.
*/
- JAVACC_STRING_TYPE TokenMgrError::getMessage() {
+ JJString TokenMgrError::getMessage() {
return message;
}
@@ -51,12 +51,12 @@ namespace parser {
}
/** Constructor with message and reason. */
- TokenMgrError::TokenMgrError(JAVACC_STRING_TYPE message, int reason) {
+ TokenMgrError::TokenMgrError(const JJString& message, int reason) {
errorCode = reason;
}
/** Full Constructor. */
- TokenMgrError::TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) {
+ TokenMgrError::TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, const JJString& errorAfter, JJChar curChar, int reason) {
message = LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar);
errorCode = reason;
}
@@ -73,15 +73,12 @@ char hexChar(int i) {
* Replaces unprintable characters by their escaped (or unicode escaped)
* equivalents in the given string
*/
-JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) {
- JAVACC_SIMPLE_STRING retval;
+JJSimpleString addUnicodeEscapes(const JJString& str) {
+ JJSimpleString retval;
for (size_t i = 0; i < str.size(); i++) {
- JAVACC_CHAR_TYPE ch = str[i];
+ JJChar ch = str[i];
switch (ch)
{
- case 0 :
- retval += EMPTY[0];
- continue;
case '\b':
retval.append("\\b");
continue;
@@ -118,4 +115,4 @@ JAVACC_SIMPLE_STRING addUnicodeEscapes(JAVACC_STRING_TYPE str) {
}
}
-/* JavaCC - OriginalChecksum=2bf63f131c8e60fd30c70d0b4f660016 (do not edit this line) */
+/* JavaCC - OriginalChecksum=ed66d80b94c73435ce2644e44f7b4d49 (do not edit this line) */
diff --git a/vhdlparser/TokenMgrError.h b/vhdlparser/TokenMgrError.h
index 2702b29..90c7530 100644
--- a/vhdlparser/TokenMgrError.h
+++ b/vhdlparser/TokenMgrError.h
@@ -1,14 +1,15 @@
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.h Version 6.0 */
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.h Version 7.0 */
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
-#ifndef _TOKENMGRERROR_H
-#define _TOKENMGRERROR_H
+#ifndef JAVACC_TOKENMGRERROR_H
+#define JAVACC_TOKENMGRERROR_H
+
#include "JavaCC.h"
namespace vhdl {
namespace parser {
- enum LexerErrors {
+enum LexerErrors {
/**
* Lexical error occurred.
*/
@@ -28,11 +29,10 @@ namespace parser {
* Detected (and bailed out of) an infinite loop in the token manager.
*/
LOOP_DETECTED = 3,
- };
+};
-class TokenMgrError
-{
- public:
+class TokenMgrError {
+public:
/*
* Ordinals for various reasons why an Error of this type can be thrown.
*/
@@ -55,9 +55,10 @@ class TokenMgrError
* curchar : the offending character
* Note: You can customize the lexical error message by modifying this method.
*/
- JAVACC_STRING_TYPE LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar);
+ JJString LexicalError(bool EOFSeen, int lexState, int errorLine, int errorColumn, const JJString& errorAfter, JJChar curChar);
- private: JAVACC_STRING_TYPE message;
+private:
+ JJString message;
/**
* You can also modify the body of this method to customize your error messages.
@@ -68,23 +69,25 @@ class TokenMgrError
*
* from this method for such cases in the release version of your parser.
*/
- JAVACC_STRING_TYPE getMessage() ;
+public:
+ JJString getMessage() ;
/*
* Constructors of various flavors follow.
*/
/** No arg constructor. */
- public: TokenMgrError() ;
+ TokenMgrError() ;
/** Constructor with message and reason. */
- public: TokenMgrError(JAVACC_STRING_TYPE message, int reason) ;
+ TokenMgrError(const JJString& message, int reason) ;
/** Full Constructor. */
- public: TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, JAVACC_STRING_TYPE errorAfter, JAVACC_CHAR_TYPE curChar, int reason) ;
+ TokenMgrError(bool EOFSeen, int lexState, int errorLine, int errorColumn, const JJString& errorAfter, JJChar curChar, int reason) ;
};
}
}
+
#endif
-/* JavaCC - OriginalChecksum=c7d825cb4d037b031ae43569d383f738 (do not edit this line) */
+/* JavaCC - OriginalChecksum=4ab4cdcdef6a3feec22fd9c00ba86e07 (do not edit this line) */
diff --git a/vhdlparser/VhdlParser.cc b/vhdlparser/VhdlParser.cc
index aa0847a..35f2ff6 100644
--- a/vhdlparser/VhdlParser.cc
+++ b/vhdlparser/VhdlParser.cc
@@ -1,5 +1,6 @@
/* VhdlParser.cc */
-#include "./VhdlParser.h"
+#include "VhdlParser.h"
+#include "TokenMgrError.h"
namespace vhdl {
namespace parser {
unsigned int jj_la1_0[] = {
@@ -22,37 +23,31 @@ namespace parser {
QCString VhdlParser::abstract_literal() {Token *tok;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case DECIMAL_LITERAL:{if (!hasError) {
-
+ case DECIMAL_LITERAL:{
+ if (!hasError) {
tok = jj_consume_token(DECIMAL_LITERAL);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case INTEGER:{if (!hasError) {
-
+ case INTEGER:{
+ if (!hasError) {
tok = jj_consume_token(INTEGER);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case BASED_LITERAL:{if (!hasError) {
-
+ case BASED_LITERAL:{
+ if (!hasError) {
tok = jj_consume_token(BASED_LITERAL);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -61,122 +56,104 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::access_type_definition() {Token *tok=0;QCString str,str1;if (!hasError) {
-
+QCString VhdlParser::access_type_definition() {Token *tok=0;QCString str,str1;
+ if (!hasError) {
tok = jj_consume_token(ACCESS_T);
}
if (!hasError) {
-
str1 = subtype_indication();
}
-
str=tok->image.c_str(); return str+str1;
assert(false);
- }
+}
QCString VhdlParser::actual_designator() {QCString str;Token *t=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case OPEN_T:{if (!hasError) {
-
+ case OPEN_T:{
+ if (!hasError) {
t = jj_consume_token(OPEN_T);
}
if (!hasError) {
-
return t->image.c_str();
}
-
break;
}
default:
jj_la1[1] = jj_gen;
- if (jj_2_1(2147483647)) {if (!hasError) {
-
+ if (jj_2_1(2147483647)) {
+ if (!hasError) {
str = expression();
}
if (!hasError) {
-
return str;
}
-
- } else if (jj_2_2(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_2(2147483647)) {
+ if (!hasError) {
str = name();
}
if (!hasError) {
-
return str;
}
-
} else {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
assert(false);
- }
+}
-QCString VhdlParser::actual_parameter_part() {QCString s;if (!hasError) {
-
+QCString VhdlParser::actual_parameter_part() {QCString s;
+ if (!hasError) {
s = association_list();
}
-
return s;
assert(false);
- }
+}
QCString VhdlParser::actual_part() {QCString s,s1;
- if (jj_2_3(2147483647)) {if (!hasError) {
-
+ if (jj_2_3(2147483647)) {
+ if (!hasError) {
s = actual_designator();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case BOX_T:{if (!hasError) {
-
+ case BOX_T:{
+ if (!hasError) {
jj_consume_token(BOX_T);
}
if (!hasError) {
-
return "<>";
}
-
break;
}
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = actual_designator();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+="(";s+=s1+")";return s;
}
-
break;
}
default:
@@ -186,42 +163,36 @@ s+="(";s+=s1+")";return s;
}
}
assert(false);
- }
+}
QCString VhdlParser::adding_operator() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PLUS_T:{if (!hasError) {
-
+ case PLUS_T:{
+ if (!hasError) {
jj_consume_token(PLUS_T);
}
if (!hasError) {
-
return "+";
}
-
break;
}
- case MINUS_T:{if (!hasError) {
-
+ case MINUS_T:{
+ if (!hasError) {
jj_consume_token(MINUS_T);
}
if (!hasError) {
-
return "-";
}
-
break;
}
- case AMPERSAND_T:{if (!hasError) {
-
+ case AMPERSAND_T:{
+ if (!hasError) {
jj_consume_token(AMPERSAND_T);
}
if (!hasError) {
-
return "&";
}
-
break;
}
default:
@@ -230,19 +201,17 @@ return "&";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::aggregate() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::aggregate() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s = element_association();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -252,60 +221,49 @@ QCString VhdlParser::aggregate() {QCString s,s1,s2;if (!hasError) {
default:
jj_la1[4] = jj_gen;
goto end_label_1;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = element_association();
}
if (!hasError) {
-
s+=","+s1;
}
-
}
end_label_1: ;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
return "("+s+")";
assert(false);
- }
+}
-QCString VhdlParser::alias_declaration() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::alias_declaration() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(ALIAS_T);
}
if (!hasError) {
-
s2 = alias_designator();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case COLON_T:{if (!hasError) {
-
+ case COLON_T:{
+ if (!hasError) {
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s+=":";
}
if (!hasError) {
-
s1 = subtype_indication();
}
if (!hasError) {
-
s+=s1;
}
-
break;
}
default:
@@ -314,33 +272,26 @@ s+=s1;
}
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
s+=" is ";
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s+=s1;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LBRACKET_T:{if (!hasError) {
-
+ case LBRACKET_T:{
+ if (!hasError) {
s1 = signature();
}
if (!hasError) {
-
s+=s1;
}
-
break;
}
default:
@@ -349,51 +300,43 @@ s+=s1;
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public);
return s2+" "+s+";";
assert(false);
- }
+}
QCString VhdlParser::alias_designator() {Token *tok=0;QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CHARACTER_LITERAL:{if (!hasError) {
-
+ case CHARACTER_LITERAL:{
+ if (!hasError) {
tok = jj_consume_token(CHARACTER_LITERAL);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case STRINGLITERAL:{if (!hasError) {
-
+ case STRINGLITERAL:{
+ if (!hasError) {
s = operator_symbol();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -402,30 +345,26 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
void VhdlParser::allocator() {
- if (jj_2_4(3)) {if (!hasError) {
-
+ if (jj_2_4(3)) {
+ if (!hasError) {
jj_consume_token(NEW_T);
}
if (!hasError) {
-
qualified_expression();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case NEW_T:{if (!hasError) {
-
+ case NEW_T:{
+ if (!hasError) {
jj_consume_token(NEW_T);
}
if (!hasError) {
-
subtype_indication();
}
-
break;
}
default:
@@ -434,31 +373,26 @@ void VhdlParser::allocator() {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
- }
+}
-void VhdlParser::architecture_body() {QCString s,s1;if (!hasError) {
-
+void VhdlParser::architecture_body() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(ARCHITECTURE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(OF_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
QCString t=s1+"::"+s;
genLabels.resize(0);
pushLabel(genLabels,s1);
@@ -466,36 +400,29 @@ QCString t=s1+"::"+s;
addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
}
if (!hasError) {
-
- try {if (!hasError) {
-
+ try {
+ if (!hasError) {
architecture_declarative_part();
}
-
} catch ( ...) {
error_skipto(BEGIN_T);
}
}
if (!hasError) {
-
jj_consume_token(BEGIN_T);
}
if (!hasError) {
-
architecture_statement_part();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ARCHITECTURE_T:{if (!hasError) {
-
+ case ARCHITECTURE_T:{
+ if (!hasError) {
jj_consume_token(ARCHITECTURE_T);
}
-
break;
}
default:
@@ -504,16 +431,14 @@ error_skipto(BEGIN_T);
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -522,16 +447,14 @@ error_skipto(BEGIN_T);
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
lastEntity=0;lastCompound=0; genLabels.resize(0);
- }
+}
-void VhdlParser::architecture_declarative_part() {if (!hasError) {
-
+void VhdlParser::architecture_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -558,20 +481,18 @@ void VhdlParser::architecture_declarative_part() {if (!hasError) {
default:
jj_la1[11] = jj_gen;
goto end_label_2;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
block_declarative_item();
}
-
}
end_label_2: ;
}
-
- }
+}
-void VhdlParser::architecture_statement_part() {if (!hasError) {
-
+void VhdlParser::architecture_statement_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ASSERT_T:
@@ -591,39 +512,33 @@ void VhdlParser::architecture_statement_part() {if (!hasError) {
default:
jj_la1[12] = jj_gen;
goto end_label_3;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
concurrent_statement();
}
-
}
end_label_3: ;
}
-
- }
+}
QCString VhdlParser::array_type_definition() {QCString s;
- if (jj_2_5(2147483647)) {if (!hasError) {
-
+ if (jj_2_5(2147483647)) {
+ if (!hasError) {
s = unconstraint_array_definition();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ARRAY_T:{if (!hasError) {
-
+ case ARRAY_T:{
+ if (!hasError) {
s = constraint_array_definition();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -633,29 +548,25 @@ return s;
}
}
assert(false);
- }
+}
-QCString VhdlParser::assertion() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) {
-
+QCString VhdlParser::assertion() {QCString s,s1,s2;Token *t=0;Token *t1=0;
+ if (!hasError) {
jj_consume_token(ASSERT_T);
}
if (!hasError) {
-
s = condition();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case REPORT_T:{if (!hasError) {
-
+ case REPORT_T:{
+ if (!hasError) {
t = jj_consume_token(REPORT_T);
}
if (!hasError) {
-
s1 = expression();
}
-
break;
}
default:
@@ -664,17 +575,14 @@ QCString VhdlParser::assertion() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!h
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case SEVERITY_T:{if (!hasError) {
-
+ case SEVERITY_T:{
+ if (!hasError) {
t1 = jj_consume_token(SEVERITY_T);
}
if (!hasError) {
-
s2 = expression();
}
-
break;
}
default:
@@ -682,28 +590,25 @@ QCString VhdlParser::assertion() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!h
;
}
}
-
s.prepend("assert ");
if(t) s1.prepend(" report ");
if(t1) s2.prepend(" report ");
return s+s1+s2;
assert(false);
- }
+}
-QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;if (!hasError) {
-
+QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = label();
}
if (!hasError) {
-
t = jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -712,51 +617,43 @@ QCString VhdlParser::assertion_statement() {QCString s,s1,s2;Token *t=0;if (!has
}
}
if (!hasError) {
-
s1 = assertion();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if(t) s+=":";
return s+s1+";";
assert(false);
- }
+}
-QCString VhdlParser::association_element() {QCString s,s1;if (!hasError) {
-
- if (jj_2_6(2147483647)) {if (!hasError) {
-
+QCString VhdlParser::association_element() {QCString s,s1;
+ if (!hasError) {
+ if (jj_2_6(2147483647)) {
+ if (!hasError) {
s = formal_part();
}
if (!hasError) {
-
jj_consume_token(ARROW_T);
}
-
} else {
;
}
}
if (!hasError) {
-
s1 = actual_part();
}
-
return s+" => "+s1;
assert(false);
- }
+}
-QCString VhdlParser::association_list() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::association_list() {QCString s,s1;
+ if (!hasError) {
s = association_element();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -766,78 +663,65 @@ QCString VhdlParser::association_list() {QCString s,s1;if (!hasError) {
default:
jj_la1[17] = jj_gen;
goto end_label_4;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = association_element();
}
if (!hasError) {
-
s+=","+s1;
}
-
}
end_label_4: ;
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::attribute_declaration() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::attribute_declaration() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(ATTRIBUTE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = type_mark();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
return " attribute "+s+":"+s1+";";
assert(false);
- }
+}
QCString VhdlParser::attribute_designator() {QCString s;Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case RANGE_T:{if (!hasError) {
-
+ case RANGE_T:{
+ if (!hasError) {
tok = jj_consume_token(RANGE_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -846,45 +730,37 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::attribute_name() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::attribute_name() {QCString s,s1;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(APOSTROPHE_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s+="'"+s1;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+"("+s1+")";
}
-
break;
}
default:
@@ -892,120 +768,104 @@ s+"("+s1+")";
;
}
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::attribute_specification() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::attribute_specification() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(ATTRIBUTE_T);
}
if (!hasError) {
-
s = attribute_designator();
}
if (!hasError) {
-
jj_consume_token(OF_T);
}
if (!hasError) {
-
s1 = entity_specification();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
s2 = expression();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
QCString t= s1+" is "+s2;
addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public);
return " attribute "+s+" of "+s1+ " is "+s2+";";
assert(false);
- }
+}
-QCString VhdlParser::base() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::base() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(INTEGER);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-QCString VhdlParser::base_specifier() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::base_specifier() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-QCString VhdlParser::base_unit_declaration() {QCString s;if (!hasError) {
-
+QCString VhdlParser::base_unit_declaration() {QCString s;
+ if (!hasError) {
s = identifier();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::based_integer() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::based_integer() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-QCString VhdlParser::based_literal() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::based_literal() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(BASED_LITERAL);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-QCString VhdlParser::basic_identifier() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::basic_identifier() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-void VhdlParser::binding_indication() {if (!hasError) {
-
+void VhdlParser::binding_indication() {
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
jj_consume_token(USE_T);
}
if (!hasError) {
-
entity_aspect();
}
-
break;
}
default:
@@ -1014,13 +874,11 @@ void VhdlParser::binding_indication() {if (!hasError) {
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
generic_map_aspect();
}
-
break;
}
default:
@@ -1029,13 +887,11 @@ void VhdlParser::binding_indication() {if (!hasError) {
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PORT_T:{if (!hasError) {
-
+ case PORT_T:{
+ if (!hasError) {
port_map_aspect();
}
-
break;
}
default:
@@ -1043,40 +899,35 @@ void VhdlParser::binding_indication() {if (!hasError) {
;
}
}
-
- }
+}
-QCString VhdlParser::bit_string_literal() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::bit_string_literal() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(BIT_STRING_LITERAL);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-QCString VhdlParser::bit_value() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::bit_value() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-void VhdlParser::block_configuration() {if (!hasError) {
-
+void VhdlParser::block_configuration() {
+ if (!hasError) {
jj_consume_token(FOR_T);
}
if (!hasError) {
-
block_specification();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case USE_T:{
@@ -1086,16 +937,14 @@ void VhdlParser::block_configuration() {if (!hasError) {
default:
jj_la1[23] = jj_gen;
goto end_label_5;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
use_clause();
}
-
}
end_label_5: ;
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case FOR_T:{
@@ -1105,28 +954,23 @@ void VhdlParser::block_configuration() {if (!hasError) {
default:
jj_la1[24] = jj_gen;
goto end_label_6;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
configuration_item();
}
-
}
end_label_6: ;
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(FOR_T);
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
void VhdlParser::block_declarative_item() {
@@ -1134,121 +978,105 @@ void VhdlParser::block_declarative_item() {
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
type_declaration();
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
subtype_declaration();
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
constant_declaration();
}
-
break;
}
- case SIGNAL_T:{if (!hasError) {
-
+ case SIGNAL_T:{
+ if (!hasError) {
signal_declaration();
}
-
break;
}
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
variable_declaration();
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
file_declaration();
}
-
break;
}
- case ALIAS_T:{if (!hasError) {
-
+ case ALIAS_T:{
+ if (!hasError) {
alias_declaration();
}
-
break;
}
- case COMPONENT_T:{if (!hasError) {
-
+ case COMPONENT_T:{
+ if (!hasError) {
component_declaration();
}
-
break;
}
default:
jj_la1[25] = jj_gen;
- if (jj_2_7(2147483647)) {if (!hasError) {
-
+ if (jj_2_7(2147483647)) {
+ if (!hasError) {
attribute_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
attribute_specification();
}
-
break;
}
- case FOR_T:{if (!hasError) {
-
+ case FOR_T:{
+ if (!hasError) {
configuration_specification();
}
-
break;
}
- case DISCONNECT_T:{if (!hasError) {
-
+ case DISCONNECT_T:{
+ if (!hasError) {
disconnection_specification();
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
default:
jj_la1[26] = jj_gen;
- if (jj_2_8(3)) {if (!hasError) {
-
+ if (jj_2_8(3)) {
+ if (!hasError) {
group_template_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
group_declaration();
}
-
break;
}
default:
@@ -1260,11 +1088,11 @@ void VhdlParser::block_declarative_item() {
}
}
}
- }
+}
-void VhdlParser::block_declarative_part() {if (!hasError) {
-
+void VhdlParser::block_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -1291,36 +1119,31 @@ void VhdlParser::block_declarative_part() {if (!hasError) {
default:
jj_la1[28] = jj_gen;
goto end_label_7;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
block_declarative_item();
}
-
}
end_label_7: ;
}
-
- }
+}
-void VhdlParser::block_header() {if (!hasError) {
-
- if (jj_2_9(2147483647)) {if (!hasError) {
-
+void VhdlParser::block_header() {
+ if (!hasError) {
+ if (jj_2_9(2147483647)) {
+ if (!hasError) {
generic_clause();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
generic_map_aspect();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
break;
}
default:
@@ -1328,30 +1151,25 @@ void VhdlParser::block_header() {if (!hasError) {
;
}
}
-
} else {
;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PORT_T:{if (!hasError) {
-
+ case PORT_T:{
+ if (!hasError) {
port_clause();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PORT_T:{if (!hasError) {
-
+ case PORT_T:{
+ if (!hasError) {
port_map_aspect();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
break;
}
default:
@@ -1359,7 +1177,6 @@ void VhdlParser::block_header() {if (!hasError) {
;
}
}
-
break;
}
default:
@@ -1367,30 +1184,25 @@ void VhdlParser::block_header() {if (!hasError) {
;
}
}
-
- }
+}
-void VhdlParser::block_specification() {if (!hasError) {
-
+void VhdlParser::block_specification() {
+ if (!hasError) {
name();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
index_specification();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
break;
}
default:
@@ -1398,42 +1210,34 @@ void VhdlParser::block_specification() {if (!hasError) {
;
}
}
-
- }
+}
-void VhdlParser::block_statement() {QCString s;if (!hasError) {
-
+void VhdlParser::block_statement() {QCString s;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
jj_consume_token(BLOCK_T);
}
if (!hasError) {
-
pushLabel(genLabels,s);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
break;
}
default:
@@ -1442,13 +1246,11 @@ pushLabel(genLabels,s);
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case IS_T:{if (!hasError) {
-
+ case IS_T:{
+ if (!hasError) {
jj_consume_token(IS_T);
}
-
break;
}
default:
@@ -1457,38 +1259,30 @@ pushLabel(genLabels,s);
}
}
if (!hasError) {
-
block_header();
}
if (!hasError) {
-
block_declarative_part();
}
if (!hasError) {
-
jj_consume_token(BEGIN_T);
}
if (!hasError) {
-
block_statement_part();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(BLOCK_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -1497,16 +1291,14 @@ pushLabel(genLabels,s);
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
genLabels=popLabel(genLabels);
- }
+}
-void VhdlParser::block_statement_part() {if (!hasError) {
-
+void VhdlParser::block_statement_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ASSERT_T:
@@ -1526,31 +1318,27 @@ void VhdlParser::block_statement_part() {if (!hasError) {
default:
jj_la1[36] = jj_gen;
goto end_label_8;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
concurrent_statement();
}
-
}
end_label_8: ;
}
-
- }
+}
-void VhdlParser::case_statement() {QCString s;if (!hasError) {
-
+void VhdlParser::case_statement() {QCString s;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -1559,28 +1347,22 @@ void VhdlParser::case_statement() {QCString s;if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(CASE_T);
}
if (!hasError) {
-
s = expression();
}
if (!hasError) {
-
QCString ca="case "+s;
FlowChart::addFlowChart(FlowChart::CASE_NO,0,ca);
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
case_statement_alternative();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case WHEN_T:{
@@ -1590,31 +1372,26 @@ QCString ca="case "+s;
default:
jj_la1[38] = jj_gen;
goto end_label_9;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
case_statement_alternative();
}
-
}
end_label_9: ;
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(CASE_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -1623,91 +1400,75 @@ QCString ca="case "+s;
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
FlowChart::moveToPrevLevel();
FlowChart::addFlowChart(FlowChart::END_CASE,"end case",0);
- }
+}
-void VhdlParser::case_statement_alternative() {QCString s;if (!hasError) {
-
+void VhdlParser::case_statement_alternative() {QCString s;
+ if (!hasError) {
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
s = choices();
}
if (!hasError) {
-
jj_consume_token(ARROW_T);
}
if (!hasError) {
-
QCString t="when ";
t+=s+"=> ";
FlowChart::addFlowChart(FlowChart::WHEN_NO,s.data(),t);
}
if (!hasError) {
-
sequence_of_statement();
}
-
FlowChart::moveToPrevLevel();
- }
+}
-QCString VhdlParser::character_literal() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::character_literal() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(CHARACTER_LITERAL);
}
-
return tok->image.c_str();
assert(false);
- }
+}
QCString VhdlParser::choice() {QCString s;
- if (jj_2_10(2147483647)) {if (!hasError) {
-
+ if (jj_2_10(2147483647)) {
+ if (!hasError) {
s = discrete_range();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_11(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_11(2147483647)) {
+ if (!hasError) {
s = simple_expression();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_12(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_12(2147483647)) {
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case OTHER_T:{if (!hasError) {
-
+ case OTHER_T:{
+ if (!hasError) {
jj_consume_token(OTHER_T);
}
if (!hasError) {
-
return " others ";
}
-
break;
}
default:
@@ -1717,15 +1478,14 @@ return " others ";
}
}
assert(false);
- }
+}
-QCString VhdlParser::choices() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::choices() {QCString s,s1;
+ if (!hasError) {
s = choice();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BAR_T:{
@@ -1735,51 +1495,43 @@ QCString VhdlParser::choices() {QCString s,s1;if (!hasError) {
default:
jj_la1[41] = jj_gen;
goto end_label_10;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(BAR_T);
}
if (!hasError) {
-
s1 = choice();
}
if (!hasError) {
-
s+="|";s+=s1;
}
-
}
end_label_10: ;
}
-
return s;
assert(false);
- }
+}
-void VhdlParser::component_configuration() {if (!hasError) {
-
+void VhdlParser::component_configuration() {
+ if (!hasError) {
jj_consume_token(FOR_T);
}
if (!hasError) {
-
component_specification();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case GENERIC_T:
case PORT_T:
case USE_T:
- case SEMI_T:{if (!hasError) {
-
+ case SEMI_T:{
+ if (!hasError) {
binding_indication();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
break;
}
default:
@@ -1788,13 +1540,11 @@ void VhdlParser::component_configuration() {if (!hasError) {
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case FOR_T:{if (!hasError) {
-
+ case FOR_T:{
+ if (!hasError) {
block_configuration();
}
-
break;
}
default:
@@ -1803,37 +1553,30 @@ void VhdlParser::component_configuration() {if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(FOR_T);
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::component_declaration() {QCString s;if (!hasError) {
-
+void VhdlParser::component_declaration() {QCString s;
+ if (!hasError) {
jj_consume_token(COMPONENT_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case IS_T:{if (!hasError) {
-
+ case IS_T:{
+ if (!hasError) {
jj_consume_token(IS_T);
}
-
break;
}
default:
@@ -1842,17 +1585,14 @@ void VhdlParser::component_declaration() {QCString s;if (!hasError) {
}
}
if (!hasError) {
-
currP=VhdlDocGen::COMPONENT;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
generic_clause();
}
-
break;
}
default:
@@ -1861,13 +1601,11 @@ currP=VhdlDocGen::COMPONENT;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PORT_T:{if (!hasError) {
-
+ case PORT_T:{
+ if (!hasError) {
port_clause();
}
-
break;
}
default:
@@ -1876,27 +1614,22 @@ currP=VhdlDocGen::COMPONENT;
}
}
if (!hasError) {
-
addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0,Public);
currP=0;
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(COMPONENT_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -1905,27 +1638,22 @@ addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPON
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::component_instantiation_statement() {QCString s,s1;if (!hasError) {
-
+void VhdlParser::component_instantiation_statement() {QCString s,s1;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = instantiation_unit();
}
if (!hasError) {
-
QCString s3;
if (s1.contains("|")) {
s3=VhdlDocGen::getIndexWord(s1.data(),0);
@@ -1935,24 +1663,20 @@ QCString s3;
addCompInst(s.lower().data(),s1.lower().data(),s3.data(),getLine());
}
if (!hasError) {
-
- if (jj_2_13(2147483647)) {if (!hasError) {
-
+ if (jj_2_13(2147483647)) {
+ if (!hasError) {
generic_map_aspect();
}
-
} else {
;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PORT_T:{if (!hasError) {
-
+ case PORT_T:{
+ if (!hasError) {
port_map_aspect();
}
-
break;
}
default:
@@ -1961,51 +1685,42 @@ QCString s3;
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::component_specification() {if (!hasError) {
-
+void VhdlParser::component_specification() {
+ if (!hasError) {
instantiation_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
name();
}
-
- }
+}
QCString VhdlParser::composite_type_definition() {QCString s,s1;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ARRAY_T:{if (!hasError) {
-
+ case ARRAY_T:{
+ if (!hasError) {
s = array_type_definition();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case RECORD_T:{if (!hasError) {
-
+ case RECORD_T:{
+ if (!hasError) {
record_type_definition();
}
if (!hasError) {
-
return s+"#";
}
-
break;
}
default:
@@ -2014,32 +1729,28 @@ return s+"#";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-void VhdlParser::concurrent_assertion_statement() {if (!hasError) {
-
- if (jj_2_14(2)) {if (!hasError) {
-
+void VhdlParser::concurrent_assertion_statement() {
+ if (!hasError) {
+ if (jj_2_14(2)) {
+ if (!hasError) {
identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
-
} else {
;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case POSTPONED_T:{if (!hasError) {
-
+ case POSTPONED_T:{
+ if (!hasError) {
jj_consume_token(POSTPONED_T);
}
-
break;
}
default:
@@ -2048,40 +1759,33 @@ void VhdlParser::concurrent_assertion_statement() {if (!hasError) {
}
}
if (!hasError) {
-
assertion();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::concurrent_procedure_call_statement() {if (!hasError) {
-
- if (jj_2_15(2)) {if (!hasError) {
-
+void VhdlParser::concurrent_procedure_call_statement() {
+ if (!hasError) {
+ if (jj_2_15(2)) {
+ if (!hasError) {
identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
-
} else {
;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case POSTPONED_T:{if (!hasError) {
-
+ case POSTPONED_T:{
+ if (!hasError) {
jj_consume_token(POSTPONED_T);
}
-
break;
}
default:
@@ -2090,40 +1794,33 @@ void VhdlParser::concurrent_procedure_call_statement() {if (!hasError) {
}
}
if (!hasError) {
-
procedure_call();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::concurrent_signal_assignment_statement() {if (!hasError) {
-
- if (jj_2_16(2)) {if (!hasError) {
-
+void VhdlParser::concurrent_signal_assignment_statement() {
+ if (!hasError) {
+ if (jj_2_16(2)) {
+ if (!hasError) {
identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
-
} else {
;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case POSTPONED_T:{if (!hasError) {
-
+ case POSTPONED_T:{
+ if (!hasError) {
jj_consume_token(POSTPONED_T);
}
-
break;
}
default:
@@ -2132,19 +1829,16 @@ void VhdlParser::concurrent_signal_assignment_statement() {if (!hasError) {
}
}
if (!hasError) {
-
- if (jj_2_17(2147483647)) {if (!hasError) {
-
+ if (jj_2_17(2147483647)) {
+ if (!hasError) {
conditional_signal_assignment();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WITH_T:{if (!hasError) {
-
+ case WITH_T:{
+ if (!hasError) {
selected_signal_assignment();
}
-
break;
}
default:
@@ -2154,64 +1848,54 @@ void VhdlParser::concurrent_signal_assignment_statement() {if (!hasError) {
}
}
}
-
- }
+}
void VhdlParser::concurrent_statement() {
- if (jj_2_18(2147483647)) {if (!hasError) {
-
+ if (jj_2_18(2147483647)) {
+ if (!hasError) {
block_statement();
}
-
- } else if (jj_2_19(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_19(2147483647)) {
+ if (!hasError) {
process_statement();
}
-
- } else if (jj_2_20(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_20(2147483647)) {
+ if (!hasError) {
generate_statement();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case CASE_T:{if (!hasError) {
-
+ case CASE_T:{
+ if (!hasError) {
case_scheme();
}
-
break;
}
default:
jj_la1[54] = jj_gen;
- if (jj_2_21(2147483647)) {if (!hasError) {
-
+ if (jj_2_21(2147483647)) {
+ if (!hasError) {
concurrent_assertion_statement();
}
-
- } else if (jj_2_22(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_22(2147483647)) {
+ if (!hasError) {
concurrent_signal_assignment_statement();
}
-
- } else if (jj_2_23(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_23(2147483647)) {
+ if (!hasError) {
component_instantiation_statement();
}
-
- } else if (jj_2_24(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_24(2147483647)) {
+ if (!hasError) {
concurrent_procedure_call_statement();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case VHDL2008TOOLDIR:{if (!hasError) {
-
+ case VHDL2008TOOLDIR:{
+ if (!hasError) {
jj_consume_token(VHDL2008TOOLDIR);
}
-
break;
}
default:
@@ -2222,100 +1906,84 @@ void VhdlParser::concurrent_statement() {
}
}
}
- }
+}
-QCString VhdlParser::condition() {QCString s;if (!hasError) {
-
+QCString VhdlParser::condition() {QCString s;
+ if (!hasError) {
s = expression();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::condition_clause() {QCString s;if (!hasError) {
-
+QCString VhdlParser::condition_clause() {QCString s;
+ if (!hasError) {
jj_consume_token(UNTIL_T);
}
if (!hasError) {
-
s = condition();
}
-
return " until "+s;
assert(false);
- }
+}
-void VhdlParser::conditional_signal_assignment() {if (!hasError) {
-
+void VhdlParser::conditional_signal_assignment() {
+ if (!hasError) {
target();
}
if (!hasError) {
-
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
options();
}
if (!hasError) {
-
conditional_waveforms();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::conditional_waveforms() {if (!hasError) {
-
+void VhdlParser::conditional_waveforms() {
+ if (!hasError) {
waveform();
}
if (!hasError) {
-
while (!hasError) {
if (jj_2_25(2147483647)) {
;
} else {
goto end_label_11;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
condition();
}
if (!hasError) {
-
jj_consume_token(ELSE_T);
}
if (!hasError) {
-
waveform();
}
-
}
end_label_11: ;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WHEN_T:{if (!hasError) {
-
+ case WHEN_T:{
+ if (!hasError) {
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
condition();
}
-
break;
}
default:
@@ -2323,55 +1991,44 @@ void VhdlParser::conditional_waveforms() {if (!hasError) {
;
}
}
-
- }
+}
-void VhdlParser::configuration_declaration() {QCString s,s1;if (!hasError) {
-
+void VhdlParser::configuration_declaration() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(CONFIGURATION_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(OF_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
confName=s+"::"+s1;
addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public);
}
if (!hasError) {
-
configuration_declarative_part();
}
if (!hasError) {
-
block_configuration();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case CONFIGURATION_T:{if (!hasError) {
-
+ case CONFIGURATION_T:{
+ if (!hasError) {
jj_consume_token(CONFIGURATION_T);
}
-
break;
}
default:
@@ -2380,16 +2037,14 @@ confName=s+"::"+s1;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -2398,35 +2053,30 @@ confName=s+"::"+s1;
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
genLabels.resize(0); confName="";
- }
+}
void VhdlParser::configuration_declarative_item() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
attribute_specification();
}
-
break;
}
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
group_declaration();
}
-
break;
}
default:
@@ -2434,11 +2084,11 @@ void VhdlParser::configuration_declarative_item() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-void VhdlParser::configuration_declarative_part() {if (!hasError) {
-
+void VhdlParser::configuration_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ATTRIBUTE_T:
@@ -2450,31 +2100,27 @@ void VhdlParser::configuration_declarative_part() {if (!hasError) {
default:
jj_la1[60] = jj_gen;
goto end_label_12;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
configuration_declarative_item();
}
-
}
end_label_12: ;
}
-
- }
+}
void VhdlParser::configuration_item() {
- if (jj_2_26(2147483647)) {if (!hasError) {
-
+ if (jj_2_26(2147483647)) {
+ if (!hasError) {
component_configuration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case FOR_T:{if (!hasError) {
-
+ case FOR_T:{
+ if (!hasError) {
block_configuration();
}
-
break;
}
default:
@@ -2483,57 +2129,47 @@ void VhdlParser::configuration_item() {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
- }
+}
-void VhdlParser::configuration_specification() {if (!hasError) {
-
+void VhdlParser::configuration_specification() {
+ if (!hasError) {
jj_consume_token(FOR_T);
}
if (!hasError) {
-
component_specification();
}
if (!hasError) {
-
binding_indication();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-QCString VhdlParser::constant_declaration() {QCString s,s1,s2;Token *t=0;if (!hasError) {
-
+QCString VhdlParser::constant_declaration() {QCString s,s1,s2;Token *t=0;
+ if (!hasError) {
jj_consume_token(CONSTANT_T);
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = subtype_indication();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case VARASSIGN_T:{if (!hasError) {
-
+ case VARASSIGN_T:{
+ if (!hasError) {
t = jj_consume_token(VARASSIGN_T);
}
if (!hasError) {
-
s2 = expression();
}
-
break;
}
default:
@@ -2542,10 +2178,8 @@ QCString VhdlParser::constant_declaration() {QCString s,s1,s2;Token *t=0;if (!ha
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if(t)
s2.prepend(":=");
QCString it=s1+s2;
@@ -2553,33 +2187,29 @@ if(t)
it.prepend("constant ");
return it;
assert(false);
- }
+}
-QCString VhdlParser::constraint_array_definition() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::constraint_array_definition() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(ARRAY_T);
}
if (!hasError) {
-
s = index_constraint();
}
if (!hasError) {
-
jj_consume_token(OF_T);
}
if (!hasError) {
-
s1 = subtype_indication();
}
-
return s+" "+s1;
assert(false);
- }
+}
-void VhdlParser::context_clause() {if (!hasError) {
-
+void VhdlParser::context_clause() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case LIBRARY_T:
@@ -2590,59 +2220,51 @@ void VhdlParser::context_clause() {if (!hasError) {
default:
jj_la1[63] = jj_gen;
goto end_label_13;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
context_item();
}
-
}
end_label_13: ;
}
-
- }
+}
QCString VhdlParser::constraint() {QCString s;
- if (jj_2_27(2147483647)) {if (!hasError) {
-
+ if (jj_2_27(2147483647)) {
+ if (!hasError) {
s = range_constraint();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_28(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_28(2147483647)) {
+ if (!hasError) {
s = index_constraint();
}
if (!hasError) {
-
return s;
}
-
} else {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
void VhdlParser::context_item() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LIBRARY_T:{if (!hasError) {
-
+ case LIBRARY_T:{
+ if (!hasError) {
library_clause();
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
default:
@@ -2650,49 +2272,43 @@ void VhdlParser::context_item() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-QCString VhdlParser::decimal_literal() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::decimal_literal() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(DECIMAL_LITERAL);
}
-
return tok->image.c_str();
assert(false);
- }
+}
QCString VhdlParser::delay_mechanism() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case TRANSPORT_T:{if (!hasError) {
-
+ case TRANSPORT_T:{
+ if (!hasError) {
jj_consume_token(TRANSPORT_T);
}
if (!hasError) {
-
return " transport ";
}
-
break;
}
case INERTIAL_T:
- case REJECT_T:{if (!hasError) {
-
+ case REJECT_T:{
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case REJECT_T:{if (!hasError) {
-
+ case REJECT_T:{
+ if (!hasError) {
jj_consume_token(REJECT_T);
}
if (!hasError) {
-
s = expression();
}
if (!hasError) {
-
s.prepend(" reject ");
}
-
break;
}
default:
@@ -2701,14 +2317,11 @@ s.prepend(" reject ");
}
}
if (!hasError) {
-
jj_consume_token(INERTIAL_T);
}
if (!hasError) {
-
return s+" inertial ";
}
-
break;
}
default:
@@ -2717,7 +2330,7 @@ return s+" inertial ";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
void VhdlParser::design_file() {
@@ -2728,13 +2341,12 @@ void VhdlParser::design_file() {
case ENTITY_T:
case LIBRARY_T:
case PACKAGE_T:
- case USE_T:{if (!hasError) {
-
- while (!hasError) {if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
+ while (!hasError) {
+ if (!hasError) {
design_unit();
}
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ARCHITECTURE_T:
case CONFIGURATION_T:
@@ -2754,17 +2366,14 @@ void VhdlParser::design_file() {
end_label_14: ;
}
if (!hasError) {
-
}
-
break;
}
- case 0:{if (!hasError) {
-
+ case 0:{
+ if (!hasError) {
jj_consume_token(0);
}
-
break;
}
default:
@@ -2772,44 +2381,38 @@ void VhdlParser::design_file() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-void VhdlParser::design_unit() {if (!hasError) {
-
+void VhdlParser::design_unit() {
+ if (!hasError) {
context_clause();
}
if (!hasError) {
-
library_unit();
}
-
- }
+}
QCString VhdlParser::designator() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case STRINGLITERAL:{if (!hasError) {
-
+ case STRINGLITERAL:{
+ if (!hasError) {
s = operator_symbol();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -2818,31 +2421,27 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::direction() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case TO_T:{if (!hasError) {
-
+ case TO_T:{
+ if (!hasError) {
tok = jj_consume_token(TO_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case DOWNTO_T:{if (!hasError) {
-
+ case DOWNTO_T:{
+ if (!hasError) {
tok = jj_consume_token(DOWNTO_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -2851,157 +2450,131 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-void VhdlParser::disconnection_specification() {if (!hasError) {
-
+void VhdlParser::disconnection_specification() {
+ if (!hasError) {
jj_consume_token(DISCONNECT_T);
}
if (!hasError) {
-
guarded_signal_specificatio();
}
if (!hasError) {
-
jj_consume_token(AFTER_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::guarded_signal_specificatio() {if (!hasError) {
-
+void VhdlParser::guarded_signal_specificatio() {
+ if (!hasError) {
signal_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
name();
}
-
- }
+}
QCString VhdlParser::discrete_range() {QCString s;
- if (jj_2_29(2147483647)) {if (!hasError) {
-
+ if (jj_2_29(2147483647)) {
+ if (!hasError) {
s = range();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_30(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_30(2147483647)) {
+ if (!hasError) {
s = subtype_indication();
}
if (!hasError) {
-
return s;
}
-
} else {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::element_association() {QCString s,s1;if (!hasError) {
-
- if (jj_2_31(2147483647)) {if (!hasError) {
-
+QCString VhdlParser::element_association() {QCString s,s1;
+ if (!hasError) {
+ if (jj_2_31(2147483647)) {
+ if (!hasError) {
s = choices();
}
if (!hasError) {
-
jj_consume_token(ARROW_T);
}
-
} else {
;
}
}
if (!hasError) {
-
s1 = expression();
}
-
if(!s.isEmpty())
return s+"=>"+s1;
return s1;
assert(false);
- }
+}
-QCString VhdlParser::element_declaration() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::element_declaration() {QCString s,s1;
+ if (!hasError) {
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = subtype_indication();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s1.data(),Public);
//addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
return s+":"+s1;
assert(false);
- }
+}
QCString VhdlParser::entity_aspect() {Token *tok=0;QCString s,s1;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ENTITY_T:{if (!hasError) {
-
+ case ENTITY_T:{
+ if (!hasError) {
tok = jj_consume_token(ENTITY_T);
}
if (!hasError) {
-
s = name();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = identifier();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+="("+s1+")";
}
-
break;
}
default:
@@ -3010,36 +2583,29 @@ s+="("+s1+")";
}
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CONFIGURATION_T:{if (!hasError) {
-
+ case CONFIGURATION_T:{
+ if (!hasError) {
tok = jj_consume_token(CONFIGURATION_T);
}
if (!hasError) {
-
s = name();
}
if (!hasError) {
-
return tok->image.c_str()+s;
}
-
break;
}
- case OPEN_T:{if (!hasError) {
-
+ case OPEN_T:{
+ if (!hasError) {
tok = jj_consume_token(OPEN_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -3048,196 +2614,162 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::entity_class() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ENTITY_T:{if (!hasError) {
-
+ case ENTITY_T:{
+ if (!hasError) {
jj_consume_token(ENTITY_T);
}
if (!hasError) {
-
return "entity";
}
-
break;
}
- case ARCHITECTURE_T:{if (!hasError) {
-
+ case ARCHITECTURE_T:{
+ if (!hasError) {
jj_consume_token(ARCHITECTURE_T);
}
if (!hasError) {
-
return "architecture";
}
-
break;
}
- case CONFIGURATION_T:{if (!hasError) {
-
+ case CONFIGURATION_T:{
+ if (!hasError) {
jj_consume_token(CONFIGURATION_T);
}
if (!hasError) {
-
return "configuration";
}
-
break;
}
- case PROCEDURE_T:{if (!hasError) {
-
+ case PROCEDURE_T:{
+ if (!hasError) {
jj_consume_token(PROCEDURE_T);
}
if (!hasError) {
-
return "procedure";
}
-
break;
}
- case FUNCTION_T:{if (!hasError) {
-
+ case FUNCTION_T:{
+ if (!hasError) {
jj_consume_token(FUNCTION_T);
}
if (!hasError) {
-
return "function";
}
-
break;
}
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
jj_consume_token(PACKAGE_T);
}
if (!hasError) {
-
return "package";
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
jj_consume_token(TYPE_T);
}
if (!hasError) {
-
return "type";
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
jj_consume_token(SUBTYPE_T);
}
if (!hasError) {
-
return "subtype";
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
jj_consume_token(CONSTANT_T);
}
if (!hasError) {
-
return "constant";
}
-
break;
}
- case SIGNAL_T:{if (!hasError) {
-
+ case SIGNAL_T:{
+ if (!hasError) {
jj_consume_token(SIGNAL_T);
}
if (!hasError) {
-
return "signal";
}
-
break;
}
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
jj_consume_token(VARIABLE_T);
}
if (!hasError) {
-
return "variable";
}
-
break;
}
- case COMPONENT_T:{if (!hasError) {
-
+ case COMPONENT_T:{
+ if (!hasError) {
jj_consume_token(COMPONENT_T);
}
if (!hasError) {
-
return "component";
}
-
break;
}
- case LABEL_T:{if (!hasError) {
-
+ case LABEL_T:{
+ if (!hasError) {
jj_consume_token(LABEL_T);
}
if (!hasError) {
-
return "label";
}
-
break;
}
- case LITERAL_T:{if (!hasError) {
-
+ case LITERAL_T:{
+ if (!hasError) {
jj_consume_token(LITERAL_T);
}
if (!hasError) {
-
return "literal";
}
-
break;
}
- case UNITS_T:{if (!hasError) {
-
+ case UNITS_T:{
+ if (!hasError) {
jj_consume_token(UNITS_T);
}
if (!hasError) {
-
return "units";
}
-
break;
}
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
jj_consume_token(GROUP_T);
}
if (!hasError) {
-
return "group";
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
jj_consume_token(FILE_T);
}
if (!hasError) {
-
return "file";
}
-
break;
}
default:
@@ -3246,25 +2778,22 @@ return "file";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::entity_class_entry() {QCString s;if (!hasError) {
-
+QCString VhdlParser::entity_class_entry() {QCString s;
+ if (!hasError) {
s = entity_class();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case BOX_T:{if (!hasError) {
-
+ case BOX_T:{
+ if (!hasError) {
jj_consume_token(BOX_T);
}
if (!hasError) {
-
s+="<>";
}
-
break;
}
default:
@@ -3272,25 +2801,21 @@ s+="<>";
;
}
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::entity_class_entry_list() {QCString s,s1,s2;if (!hasError) {
+QCString VhdlParser::entity_class_entry_list() {QCString s,s1,s2;
+ if (!hasError) {
if (!hasError) {
-
s1 = entity_class_entry();
}
if (!hasError) {
-
s+=s1;
}
-
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -3300,66 +2825,54 @@ s+=s1;
default:
jj_la1[75] = jj_gen;
goto end_label_15;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s = entity_class_entry();
}
if (!hasError) {
-
s2+=",";s2+=s;
}
-
}
end_label_15: ;
}
-
return s1+s2;
assert(false);
- }
+}
-void VhdlParser::entity_declaration() {QCString s;if (!hasError) {
-
+void VhdlParser::entity_declaration() {QCString s;
+ if (!hasError) {
jj_consume_token(ENTITY_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
lastEntity=current.get();
lastCompound=0;
addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
}
if (!hasError) {
-
entity_header();
}
if (!hasError) {
-
entity_declarative_part();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case BEGIN_T:{if (!hasError) {
-
+ case BEGIN_T:{
+ if (!hasError) {
jj_consume_token(BEGIN_T);
}
if (!hasError) {
-
entity_statement_part();
}
-
break;
}
default:
@@ -3368,17 +2881,14 @@ lastEntity=current.get();
}
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ENTITY_T:{if (!hasError) {
-
+ case ENTITY_T:{
+ if (!hasError) {
jj_consume_token(ENTITY_T);
}
-
break;
}
default:
@@ -3387,16 +2897,14 @@ lastEntity=current.get();
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -3405,12 +2913,10 @@ lastEntity=current.get();
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
lastEntity=0;lastCompound=0; genLabels.resize(0);
- }
+}
void VhdlParser::entity_declarative_item() {
@@ -3418,130 +2924,113 @@ void VhdlParser::entity_declarative_item() {
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
type_declaration();
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
subtype_declaration();
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
constant_declaration();
}
-
break;
}
- case SIGNAL_T:{if (!hasError) {
-
+ case SIGNAL_T:{
+ if (!hasError) {
signal_declaration();
}
-
break;
}
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
variable_declaration();
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
file_declaration();
}
-
break;
}
- case ALIAS_T:{if (!hasError) {
-
+ case ALIAS_T:{
+ if (!hasError) {
alias_declaration();
}
-
break;
}
default:
jj_la1[79] = jj_gen;
- if (jj_2_32(2147483647)) {if (!hasError) {
-
+ if (jj_2_32(2147483647)) {
+ if (!hasError) {
attribute_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
attribute_specification();
}
-
break;
}
- case DISCONNECT_T:{if (!hasError) {
-
+ case DISCONNECT_T:{
+ if (!hasError) {
disconnection_specification();
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
default:
jj_la1[80] = jj_gen;
- if (jj_2_33(3)) {if (!hasError) {
-
+ if (jj_2_33(3)) {
+ if (!hasError) {
group_template_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
group_declaration();
}
-
break;
}
default:
jj_la1[81] = jj_gen;
- if (jj_2_34(5)) {if (!hasError) {
-
+ if (jj_2_34(5)) {
+ if (!hasError) {
package_instantiation_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
package_declaration();
}
-
break;
}
- case VHDL2008TOOLDIR:{if (!hasError) {
-
+ case VHDL2008TOOLDIR:{
+ if (!hasError) {
jj_consume_token(VHDL2008TOOLDIR);
}
-
break;
}
default:
@@ -3555,11 +3044,11 @@ void VhdlParser::entity_declarative_item() {
}
}
}
- }
+}
-void VhdlParser::entity_declarative_part() {if (!hasError) {
-
+void VhdlParser::entity_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -3586,30 +3075,26 @@ void VhdlParser::entity_declarative_part() {if (!hasError) {
default:
jj_la1[83] = jj_gen;
goto end_label_16;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
entity_declarative_item();
}
-
}
end_label_16: ;
}
-
- }
+}
-QCString VhdlParser::entity_designator() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::entity_designator() {QCString s,s1;
+ if (!hasError) {
s = entity_tag();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LBRACKET_T:{if (!hasError) {
-
+ case LBRACKET_T:{
+ if (!hasError) {
s1 = signature();
}
-
break;
}
default:
@@ -3617,24 +3102,21 @@ QCString VhdlParser::entity_designator() {QCString s,s1;if (!hasError) {
;
}
}
-
return s+s1;
assert(false);
- }
+}
-void VhdlParser::entity_header() {if (!hasError) {
-
+void VhdlParser::entity_header() {
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC;
}
if (!hasError) {
-
generic_clause();
}
-
break;
}
default:
@@ -3643,17 +3125,14 @@ currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PORT_T:{if (!hasError) {
-
+ case PORT_T:{
+ if (!hasError) {
currP=VhdlDocGen::PORT;
}
if (!hasError) {
-
port_clause();
}
-
break;
}
default:
@@ -3661,8 +3140,7 @@ currP=VhdlDocGen::PORT;
;
}
}
-
- }
+}
QCString VhdlParser::entity_name_list() {QCString s,s1;
@@ -3671,17 +3149,15 @@ QCString VhdlParser::entity_name_list() {QCString s,s1;
case STRINGLITERAL:
case BASIC_IDENTIFIER:
case EXTENDED_CHARACTER:
- case CHARACTER_LITERAL:{if (!hasError) {
-
- while (!hasError) {if (!hasError) {
-
+ case CHARACTER_LITERAL:{
+ if (!hasError) {
+ while (!hasError) {
+ if (!hasError) {
s1 = entity_designator();
}
if (!hasError) {
-
s+=s1;
}
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
@@ -3699,32 +3175,26 @@ s+=s1;
end_label_17: ;
}
if (!hasError) {
-
return s;
}
-
break;
}
- case OTHER_T:{if (!hasError) {
-
+ case OTHER_T:{
+ if (!hasError) {
jj_consume_token(OTHER_T);
}
if (!hasError) {
-
return "other";
}
-
break;
}
- case ALL_T:{if (!hasError) {
-
+ case ALL_T:{
+ if (!hasError) {
jj_consume_token(ALL_T);
}
if (!hasError) {
-
return "all";
}
-
break;
}
default:
@@ -3733,49 +3203,43 @@ return "all";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::entity_specification() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::entity_specification() {QCString s,s1;
+ if (!hasError) {
s = entity_name_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = entity_class();
}
-
return s+":"+s1;
assert(false);
- }
+}
void VhdlParser::entity_statement() {
- if (jj_2_35(2147483647)) {if (!hasError) {
-
+ if (jj_2_35(2147483647)) {
+ if (!hasError) {
concurrent_assertion_statement();
}
-
- } else if (jj_2_36(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_36(2147483647)) {
+ if (!hasError) {
process_statement();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case POSTPONED_T:
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
concurrent_procedure_call_statement();
}
-
break;
}
default:
@@ -3784,11 +3248,11 @@ void VhdlParser::entity_statement() {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
- }
+}
-void VhdlParser::entity_statement_part() {if (!hasError) {
-
+void VhdlParser::entity_statement_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ASSERT_T:
@@ -3804,16 +3268,14 @@ void VhdlParser::entity_statement_part() {if (!hasError) {
default:
jj_la1[90] = jj_gen;
goto end_label_18;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
entity_statement();
}
-
}
end_label_18: ;
}
-
- }
+}
QCString VhdlParser::entity_tag() {QCString s;
@@ -3821,26 +3283,22 @@ QCString VhdlParser::entity_tag() {QCString s;
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CHARACTER_LITERAL:{if (!hasError) {
-
+ case CHARACTER_LITERAL:{
+ if (!hasError) {
s = character_literal();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -3849,32 +3307,28 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::enumeration_literal() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CHARACTER_LITERAL:{if (!hasError) {
-
+ case CHARACTER_LITERAL:{
+ if (!hasError) {
s = character_literal();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -3883,19 +3337,17 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::enumeration_type_definition() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::enumeration_type_definition() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s = enumeration_literal();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -3905,45 +3357,38 @@ QCString VhdlParser::enumeration_type_definition() {QCString s,s1;if (!hasError)
default:
jj_la1[93] = jj_gen;
goto end_label_19;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = enumeration_literal();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_19: ;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
return "("+s+")";
assert(false);
- }
+}
-QCString VhdlParser::exit_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) {
-
+QCString VhdlParser::exit_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
t = jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -3952,18 +3397,15 @@ QCString VhdlParser::exit_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;i
}
}
if (!hasError) {
-
jj_consume_token(EXIT_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s1 = identifier();
}
-
break;
}
default:
@@ -3972,17 +3414,14 @@ QCString VhdlParser::exit_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;i
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WHEN_T:{if (!hasError) {
-
+ case WHEN_T:{
+ if (!hasError) {
t1 = jj_consume_token(WHEN_T);
}
if (!hasError) {
-
s2 = condition();
}
-
break;
}
default:
@@ -3991,10 +3430,8 @@ QCString VhdlParser::exit_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;i
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
lab.resize(0);
if(t) s+=":";
if(t1) s2.prepend(" when ");
@@ -4002,15 +3439,14 @@ lab.resize(0);
return s+s1+s2+";";
assert(false);
- }
+}
-QCString VhdlParser::expression() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::expression() {QCString s,s1,s2;
+ if (!hasError) {
s = relation();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case AND_T:
@@ -4025,94 +3461,78 @@ QCString VhdlParser::expression() {QCString s,s1,s2;if (!hasError) {
default:
jj_la1[97] = jj_gen;
goto end_label_20;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = logop();
}
if (!hasError) {
-
s2 = relation();
}
if (!hasError) {
-
s+=s1;s+=s2;
}
-
}
end_label_20: ;
}
-
return s;
assert(false);
- }
+}
QCString VhdlParser::logop() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case AND_T:{if (!hasError) {
-
+ case AND_T:{
+ if (!hasError) {
jj_consume_token(AND_T);
}
if (!hasError) {
-
return "and" ;
}
-
break;
}
- case NAND_T:{if (!hasError) {
-
+ case NAND_T:{
+ if (!hasError) {
jj_consume_token(NAND_T);
}
if (!hasError) {
-
return "nand" ;
}
-
break;
}
- case NOR_T:{if (!hasError) {
-
+ case NOR_T:{
+ if (!hasError) {
jj_consume_token(NOR_T);
}
if (!hasError) {
-
return "nor" ;
}
-
break;
}
- case XNOR_T:{if (!hasError) {
-
+ case XNOR_T:{
+ if (!hasError) {
jj_consume_token(XNOR_T);
}
if (!hasError) {
-
return "xnor" ;
}
-
break;
}
- case XOR_T:{if (!hasError) {
-
+ case XOR_T:{
+ if (!hasError) {
jj_consume_token(XOR_T);
}
if (!hasError) {
-
return "xor" ;
}
-
break;
}
- case OR_T:{if (!hasError) {
-
+ case OR_T:{
+ if (!hasError) {
jj_consume_token(OR_T);
}
if (!hasError) {
-
return "or" ;
}
-
break;
}
default:
@@ -4121,17 +3541,16 @@ return "or" ;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::extended_identifier() {Token *t;if (!hasError) {
-
+QCString VhdlParser::extended_identifier() {Token *t;
+ if (!hasError) {
t = jj_consume_token(EXTENDED_CHARACTER);
}
-
return t->image.c_str();
assert(false);
- }
+}
QCString VhdlParser::factor() {QCString s,s1;
@@ -4147,26 +3566,22 @@ QCString VhdlParser::factor() {QCString s,s1;
case CHARACTER_LITERAL:
case DECIMAL_LITERAL:
case BASED_LITERAL:
- case BIT_STRING_LITERAL:{if (!hasError) {
-
+ case BIT_STRING_LITERAL:{
+ if (!hasError) {
s = primary();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case DOUBLEMULT_T:{if (!hasError) {
-
+ case DOUBLEMULT_T:{
+ if (!hasError) {
jj_consume_token(DOUBLEMULT_T);
}
if (!hasError) {
-
s1 = primary();
}
if (!hasError) {
-
s+="**";s+=s1;
}
-
break;
}
default:
@@ -4175,40 +3590,32 @@ s+="**";s+=s1;
}
}
if (!hasError) {
-
return s;
}
-
break;
}
- case ABS_T:{if (!hasError) {
-
+ case ABS_T:{
+ if (!hasError) {
jj_consume_token(ABS_T);
}
if (!hasError) {
-
s = primary();
}
if (!hasError) {
-
s1 = "abs "; return s1+s;
}
-
break;
}
- case NOT_T:{if (!hasError) {
-
+ case NOT_T:{
+ if (!hasError) {
jj_consume_token(NOT_T);
}
if (!hasError) {
-
s = primary();
}
if (!hasError) {
-
s1="not ";return s1+s;
}
-
break;
}
default:
@@ -4217,34 +3624,29 @@ s1="not ";return s1+s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::file_declaration() {QCString s,s1,s2,s3;if (!hasError) {
-
+QCString VhdlParser::file_declaration() {QCString s,s1,s2,s3;
+ if (!hasError) {
jj_consume_token(FILE_T);
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s2 = subtype_indication();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IS_T:
- case OPEN_T:{if (!hasError) {
-
+ case OPEN_T:{
+ if (!hasError) {
s3 = file_open_information();
}
-
break;
}
default:
@@ -4253,39 +3655,34 @@ QCString VhdlParser::file_declaration() {QCString s,s1,s2,s3;if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
QCString t1=s2+" "+s3;
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);
return " file "+s+":"+s2+" "+s3+";";
assert(false);
- }
+}
-QCString VhdlParser::file_logical_name() {QCString s;if (!hasError) {
-
+QCString VhdlParser::file_logical_name() {QCString s;
+ if (!hasError) {
s = expression();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::file_open_information() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::file_open_information() {QCString s,s1,s2;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case OPEN_T:{if (!hasError) {
-
+ case OPEN_T:{
+ if (!hasError) {
jj_consume_token(OPEN_T);
}
if (!hasError) {
-
s = expression();
}
-
break;
}
default:
@@ -4294,45 +3691,38 @@ QCString VhdlParser::file_open_information() {QCString s,s1,s2;if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
s1 = file_logical_name();
}
-
s2="open "+s+" is "+s1; return s2;
assert(false);
- }
+}
-QCString VhdlParser::file_type_definition() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::file_type_definition() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(FILE_T);
}
if (!hasError) {
-
jj_consume_token(OF_T);
}
if (!hasError) {
-
s = type_mark();
}
-
s1=" file of "+s; return s1;
assert(false);
- }
+}
-QCString VhdlParser::floating_type_definition() {QCString s;if (!hasError) {
-
+QCString VhdlParser::floating_type_definition() {QCString s;
+ if (!hasError) {
s = range_constraint();
}
-
return s;
assert(false);
- }
+}
QCString VhdlParser::formal_designator() {QCString s;Token *tok=0;
@@ -4340,26 +3730,22 @@ QCString VhdlParser::formal_designator() {QCString s;Token *tok=0;
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case INTEGER:{if (!hasError) {
-
+ case INTEGER:{
+ if (!hasError) {
tok = jj_consume_token(INTEGER);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -4368,43 +3754,37 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::formal_parameter_list() {QCString s;if (!hasError) {
-
+QCString VhdlParser::formal_parameter_list() {QCString s;
+ if (!hasError) {
s = interface_list();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::formal_part() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::formal_part() {QCString s,s1;
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
formal_designator();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+"("+s1+")";
}
-
break;
}
default:
@@ -4412,45 +3792,37 @@ s+"("+s1+")";
;
}
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::full_type_declaration() {Entry *tmpEntry;QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::full_type_declaration() {Entry *tmpEntry;QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(TYPE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
tmpEntry=current.get();
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,0,Public);
}
if (!hasError) {
-
- try {if (!hasError) {
-
+ try {
+ if (!hasError) {
s2 = type_definition();
}
-
} catch ( ...) {
error_skipto(SEMI_T);
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if (s2.contains("#")) {
VhdlDocGen::deleteAllChars(s2,'#');
tmpEntry->spec=VhdlDocGen::RECORD;
@@ -4471,79 +3843,65 @@ if (s2.contains("#")) {
tmpEntry=0;
return "type "+s+" is "+s2+";";
assert(false);
- }
+}
-QCString VhdlParser::function_call() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::function_call() {QCString s,s1;
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = actual_parameter_part();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
return s+"("+s1+")";
assert(false);
- }
+}
-void VhdlParser::generate_statement() {QCString s;if (!hasError) {
-
+void VhdlParser::generate_statement() {QCString s;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
- try {if (!hasError) {
-
+ try {
+ if (!hasError) {
generate_scheme();
}
if (!hasError) {
-
jj_consume_token(GENERATE_T);
}
if (!hasError) {
-
pushLabel(genLabels,s);
}
if (!hasError) {
-
generate_statement_body1();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
-
} catch ( ...) {
error_skipto(GENERATE_T);
}
}
if (!hasError) {
-
jj_consume_token(GENERATE_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -4552,36 +3910,30 @@ error_skipto(GENERATE_T);
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
genLabels=popLabel(genLabels);
- }
+}
void VhdlParser::generate_scheme() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case FOR_T:{if (!hasError) {
-
+ case FOR_T:{
+ if (!hasError) {
jj_consume_token(FOR_T);
}
if (!hasError) {
-
parameter_specification();
}
-
break;
}
- case IF_T:{if (!hasError) {
-
+ case IF_T:{
+ if (!hasError) {
jj_consume_token(IF_T);
}
if (!hasError) {
-
condition();
}
-
break;
}
default:
@@ -4589,70 +3941,58 @@ void VhdlParser::generate_scheme() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-void VhdlParser::generic_clause() {QCString s;if (!hasError) {
-
+void VhdlParser::generic_clause() {QCString s;
+ if (!hasError) {
jj_consume_token(GENERIC_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
parse_sec=GEN_SEC;
}
if (!hasError) {
-
s = generic_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
parse_sec=0;
- }
+}
-QCString VhdlParser::generic_list() {QCString s;if (!hasError) {
-
+QCString VhdlParser::generic_list() {QCString s;
+ if (!hasError) {
s = interface_list();
}
-
return s;
assert(false);
- }
+}
-void VhdlParser::generic_map_aspect() {if (!hasError) {
-
+void VhdlParser::generic_map_aspect() {
+ if (!hasError) {
jj_consume_token(GENERIC_T);
}
if (!hasError) {
-
jj_consume_token(MAP_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
association_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
- }
+}
QCString VhdlParser::group_constituent() {QCString s;
@@ -4660,26 +4000,22 @@ QCString VhdlParser::group_constituent() {QCString s;
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CHARACTER_LITERAL:{if (!hasError) {
-
+ case CHARACTER_LITERAL:{
+ if (!hasError) {
s = character_literal();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -4688,18 +4024,16 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::group_constituent_list() {QCString s,s1,s2;if (!hasError) {
+QCString VhdlParser::group_constituent_list() {QCString s,s1,s2;
+ if (!hasError) {
if (!hasError) {
-
s1 = group_constituent();
}
-
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -4709,138 +4043,112 @@ QCString VhdlParser::group_constituent_list() {QCString s,s1,s2;if (!hasError) {
default:
jj_la1[108] = jj_gen;
goto end_label_21;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s = group_constituent();
}
if (!hasError) {
-
s2+=",";s2+=s1;
}
-
}
end_label_21: ;
}
-
return s+s2;
assert(false);
- }
+}
-QCString VhdlParser::group_declaration() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::group_declaration() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(GROUP_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = identifier();
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s2 = group_constituent_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
return "group "+s+":"+s1+"("+s2+");";
assert(false);
- }
+}
-QCString VhdlParser::group_template_declaration() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::group_template_declaration() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(GROUP_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = entity_class_entry_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
return "group "+s+ "is ("+s1+");";
assert(false);
- }
+}
-void VhdlParser::guarded_signal_specification() {if (!hasError) {
-
+void VhdlParser::guarded_signal_specification() {
+ if (!hasError) {
signal_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
type_mark();
}
-
- }
+}
QCString VhdlParser::identifier() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
tok = jj_consume_token(EXTENDED_CHARACTER);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case BASIC_IDENTIFIER:{if (!hasError) {
-
+ case BASIC_IDENTIFIER:{
+ if (!hasError) {
tok = jj_consume_token(BASIC_IDENTIFIER);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -4849,15 +4157,14 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::identifier_list() {QCString str,str1;if (!hasError) {
-
+QCString VhdlParser::identifier_list() {QCString str,str1;
+ if (!hasError) {
str = identifier();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -4867,41 +4174,35 @@ QCString VhdlParser::identifier_list() {QCString str,str1;if (!hasError) {
default:
jj_la1[110] = jj_gen;
goto end_label_22;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
str1 = identifier();
}
if (!hasError) {
-
str+=",";str+=str1;
}
-
}
end_label_22: ;
}
-
return str;
assert(false);
- }
+}
-void VhdlParser::if_statement() {QCString s,s1;if (!hasError) {
-
+void VhdlParser::if_statement() {QCString s,s1;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -4910,28 +4211,22 @@ void VhdlParser::if_statement() {QCString s,s1;if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(IF_T);
}
if (!hasError) {
-
s = condition();
}
if (!hasError) {
-
jj_consume_token(THEN_T);
}
if (!hasError) {
-
s.prepend("if ");
FlowChart::addFlowChart(FlowChart::IF_NO,0,s);
}
if (!hasError) {
-
sequence_of_statement();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ELSIF_T:{
@@ -4941,47 +4236,38 @@ s.prepend("if ");
default:
jj_la1[112] = jj_gen;
goto end_label_23;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(ELSIF_T);
}
if (!hasError) {
-
s1 = condition();
}
if (!hasError) {
-
jj_consume_token(THEN_T);
}
if (!hasError) {
-
s1.prepend("elsif ");
FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data());
}
if (!hasError) {
-
sequence_of_statement();
}
-
}
end_label_23: ;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ELSE_T:{if (!hasError) {
-
+ case ELSE_T:{
+ if (!hasError) {
jj_consume_token(ELSE_T);
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
}
if (!hasError) {
-
sequence_of_statement();
}
-
break;
}
default:
@@ -4990,22 +4276,18 @@ FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
}
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(IF_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -5014,47 +4296,39 @@ FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
FlowChart::moveToPrevLevel();
FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0);
- }
+}
-QCString VhdlParser::incomplete_type_declaration() {QCString s;if (!hasError) {
-
+QCString VhdlParser::incomplete_type_declaration() {QCString s;
+ if (!hasError) {
jj_consume_token(TYPE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
return "type "+s+";";
assert(false);
- }
+}
-QCString VhdlParser::index_constraint() {QCString s="("; QCString s1,s2;if (!hasError) {
-
+QCString VhdlParser::index_constraint() {QCString s="("; QCString s1,s2;
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s2 = discrete_range();
}
if (!hasError) {
-
s+=s2;
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -5064,42 +4338,35 @@ s+=s2;
default:
jj_la1[115] = jj_gen;
goto end_label_24;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = discrete_range();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_24: ;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
return s+")";
assert(false);
- }
+}
QCString VhdlParser::index_specification() {QCString s;
- if (jj_2_37(2147483647)) {if (!hasError) {
-
+ if (jj_2_37(2147483647)) {
+ if (!hasError) {
s = discrete_range();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ABS_T:
@@ -5117,15 +4384,13 @@ return s;
case CHARACTER_LITERAL:
case DECIMAL_LITERAL:
case BASED_LITERAL:
- case BIT_STRING_LITERAL:{if (!hasError) {
-
+ case BIT_STRING_LITERAL:{
+ if (!hasError) {
s = expression();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -5135,39 +4400,35 @@ return s;
}
}
assert(false);
- }
+}
-QCString VhdlParser::index_subtype_definition() {QCString s;if (!hasError) {
-
+QCString VhdlParser::index_subtype_definition() {QCString s;
+ if (!hasError) {
s = type_mark();
}
if (!hasError) {
-
jj_consume_token(RANGE_T);
}
if (!hasError) {
-
jj_consume_token(BOX_T);
}
-
return s+" range <> ";
assert(false);
- }
+}
QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMPONENT_T:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case COMPONENT_T:{if (!hasError) {
-
+ case COMPONENT_T:{
+ if (!hasError) {
jj_consume_token(COMPONENT_T);
}
-
break;
}
default:
@@ -5176,63 +4437,50 @@ QCString VhdlParser::instantiation_unit() {QCString s,s1,s2;Token *tok;
}
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
s1="component "; return s;
}
-
break;
}
- case ENTITY_T:{if (!hasError) {
-
+ case ENTITY_T:{
+ if (!hasError) {
jj_consume_token(ENTITY_T);
}
if (!hasError) {
-
- if (jj_2_38(2)) {if (!hasError) {
-
+ if (jj_2_38(2)) {
+ if (!hasError) {
jj_consume_token(BASIC_IDENTIFIER);
}
if (!hasError) {
-
jj_consume_token(DOT_T);
}
-
} else {
;
}
}
if (!hasError) {
-
s2 = name();
}
if (!hasError) {
-
s="entity|"+s2;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = identifier();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+="(";s+=s1;s+=")" ;
}
-
break;
}
default:
@@ -5241,25 +4489,20 @@ s+="(";s+=s1;s+=")" ;
}
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CONFIGURATION_T:{if (!hasError) {
-
+ case CONFIGURATION_T:{
+ if (!hasError) {
jj_consume_token(CONFIGURATION_T);
}
if (!hasError) {
-
s = name();
}
if (!hasError) {
-
s1="configuration ";return s;
}
-
break;
}
default:
@@ -5268,43 +4511,37 @@ s1="configuration ";return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::instantiation_list() {QCString s;Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier_list();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case OTHER_T:{if (!hasError) {
-
+ case OTHER_T:{
+ if (!hasError) {
tok = jj_consume_token(OTHER_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case ALL_T:{if (!hasError) {
-
+ case ALL_T:{
+ if (!hasError) {
tok = jj_consume_token(ALL_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -5313,81 +4550,69 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::integer() {Token *t;if (!hasError) {
-
+QCString VhdlParser::integer() {Token *t;
+ if (!hasError) {
t = jj_consume_token(INTEGER);
}
-
return t->image.c_str();
assert(false);
- }
+}
-QCString VhdlParser::integer_type_definition() {QCString s;if (!hasError) {
-
+QCString VhdlParser::integer_type_definition() {QCString s;
+ if (!hasError) {
s = range_constraint();
}
-
return s;
assert(false);
- }
+}
QCString VhdlParser::interface_declaration() {QCString s,s1;
- if (jj_2_39(5)) {if (!hasError) {
-
+ if (jj_2_39(5)) {
+ if (!hasError) {
s = interface_subprogram_declaration();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
interface_package_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
jj_la1[121] = jj_gen;
- if (jj_2_40(5)) {if (!hasError) {
-
+ if (jj_2_40(5)) {
+ if (!hasError) {
s = interface_variable_declaration();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_41(5)) {if (!hasError) {
-
+ } else if (jj_2_41(5)) {
+ if (!hasError) {
interface_file_declaration();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_42(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_42(2147483647)) {
+ if (!hasError) {
subprogram_declaration();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case CONSTANT_T:
@@ -5395,22 +4620,19 @@ return s;
case SIGNAL_T:
case SHARED_T:
case TYPE_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
s = object_class();
}
if (!hasError) {
-
s1 = identifier();
}
if (!hasError) {
-
if (parse_sec==GEN_SEC)
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public);
return s;
}
-
break;
}
default:
@@ -5422,48 +4644,42 @@ if (parse_sec==GEN_SEC)
}
}
assert(false);
- }
+}
-QCString VhdlParser::interface_element() {QCString s;if (!hasError) {
-
+QCString VhdlParser::interface_element() {QCString s;
+ if (!hasError) {
s = interface_declaration();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::interface_file_declaration() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::interface_file_declaration() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(FILE_T);
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = subtype_indication();
}
-
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
return " file "+s+":"+s1;
assert(false);
- }
+}
-QCString VhdlParser::interface_list() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::interface_list() {QCString s,s1,s2;
+ if (!hasError) {
s = interface_element();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SEMI_T:{
@@ -5473,63 +4689,55 @@ QCString VhdlParser::interface_list() {QCString s,s1,s2;if (!hasError) {
default:
jj_la1[123] = jj_gen;
goto end_label_25;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(SEMI_T);
}
if (!hasError) {
-
s1 = interface_element();
}
if (!hasError) {
-
s2+=";";s2+=s1;
}
-
}
end_label_25: ;
}
-
return s+s2;
assert(false);
- }
+}
-QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;if (!hasError) {
-
+QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case CONSTANT_T:
case SIGNAL_T:
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
tok = jj_consume_token(VARIABLE_T);
}
-
break;
}
- case SIGNAL_T:{if (!hasError) {
-
+ case SIGNAL_T:{
+ if (!hasError) {
tok = jj_consume_token(SIGNAL_T);
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
tok = jj_consume_token(CONSTANT_T);
}
-
break;
}
- case SHARED_T:{if (!hasError) {
-
+ case SHARED_T:{
+ if (!hasError) {
tok = jj_consume_token(SHARED_T);
}
-
break;
}
default:
@@ -5538,7 +4746,6 @@ QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
-
break;
}
default:
@@ -5547,25 +4754,21 @@ QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=
}
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BUFFER_T:
case IN_T:
case INOUT_T:
case LINKAGE_T:
- case OUT_T:{if (!hasError) {
-
+ case OUT_T:{
+ if (!hasError) {
s1 = mode();
}
-
break;
}
default:
@@ -5574,17 +4777,14 @@ QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=
}
}
if (!hasError) {
-
s2 = subtype_indication();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case BUS_T:{if (!hasError) {
-
+ case BUS_T:{
+ if (!hasError) {
tok1 = jj_consume_token(BUS_T);
}
-
break;
}
default:
@@ -5593,17 +4793,14 @@ QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case VARASSIGN_T:{if (!hasError) {
-
+ case VARASSIGN_T:{
+ if (!hasError) {
tok2 = jj_consume_token(VARASSIGN_T);
}
if (!hasError) {
-
s4 = expression();
}
-
break;
}
default:
@@ -5611,7 +4808,6 @@ QCString VhdlParser::interface_variable_declaration() {Token *tok=0;Token *tok1=
;
}
}
-
if(tok)
s5=tok->image.c_str();
@@ -5640,45 +4836,39 @@ if(tok)
} // if component
return it;
assert(false);
- }
+}
QCString VhdlParser::iteration_scheme() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WHILE_T:{if (!hasError) {
-
+ case WHILE_T:{
+ if (!hasError) {
jj_consume_token(WHILE_T);
}
if (!hasError) {
-
s = condition();
}
if (!hasError) {
-
s.prepend("while ");
FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),lab.data());
lab="";
return s;
}
-
break;
}
- case FOR_T:{if (!hasError) {
-
+ case FOR_T:{
+ if (!hasError) {
jj_consume_token(FOR_T);
}
if (!hasError) {
-
s = parameter_specification();
}
if (!hasError) {
-
QCString q=lab+" for "+s;
FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
lab="";
return q;
}
-
break;
}
default:
@@ -5687,35 +4877,30 @@ QCString q=lab+" for "+s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::label() {QCString s;if (!hasError) {
-
+QCString VhdlParser::label() {QCString s;
+ if (!hasError) {
s = identifier();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::library_clause() {QCString s;if (!hasError) {
+QCString VhdlParser::library_clause() {QCString s;
+ if (!hasError) {
if (!hasError) {
-
jj_consume_token(LIBRARY_T);
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
}
-
if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
{
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
@@ -5723,38 +4908,33 @@ if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
QCString s1="library "+s;
return s1;
assert(false);
- }
+}
QCString VhdlParser::library_unit() {QCString s;
- if (jj_2_43(2)) {if (!hasError) {
-
+ if (jj_2_43(2)) {
+ if (!hasError) {
primary_unit();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ARCHITECTURE_T:
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
secondary_unit();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CONTEXT_T:{if (!hasError) {
-
+ case CONTEXT_T:{
+ if (!hasError) {
context_declaration();
}
-
break;
}
default:
@@ -5764,59 +4944,49 @@ return s;
}
}
assert(false);
- }
+}
QCString VhdlParser::literal() {QCString s;
- if (jj_2_44(2147483647)) {if (!hasError) {
-
+ if (jj_2_44(2147483647)) {
+ if (!hasError) {
s = bit_string_literal();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_45(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_45(2147483647)) {
+ if (!hasError) {
s = numeric_literal();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_46(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_46(2147483647)) {
+ if (!hasError) {
s = enumeration_literal();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case STRINGLITERAL:{if (!hasError) {
-
+ case STRINGLITERAL:{
+ if (!hasError) {
s = string_literal();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case NULL_T:{if (!hasError) {
-
+ case NULL_T:{
+ if (!hasError) {
jj_consume_token(NULL_T);
}
if (!hasError) {
-
return "null";
}
-
break;
}
default:
@@ -5826,36 +4996,32 @@ return "null";
}
}
assert(false);
- }
+}
-QCString VhdlParser::logical_operator() {QCString s;if (!hasError) {
-
+QCString VhdlParser::logical_operator() {QCString s;
+ if (!hasError) {
s = logop();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::loop_statement() {QCString s,s1,s2,s3;if (!hasError) {
-
+QCString VhdlParser::loop_statement() {QCString s,s1,s2,s3;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s+=":";
}
-
break;
}
default:
@@ -5864,14 +5030,12 @@ s+=":";
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case FOR_T:
- case WHILE_T:{if (!hasError) {
-
+ case WHILE_T:{
+ if (!hasError) {
s1 = iteration_scheme();
}
-
break;
}
default:
@@ -5880,35 +5044,28 @@ s+=":";
}
}
if (!hasError) {
-
if(s1.isEmpty())
FlowChart::addFlowChart(FlowChart::LOOP_NO,0,"infinite");
}
if (!hasError) {
-
jj_consume_token(LOOP_T);
}
if (!hasError) {
-
s2 = sequence_of_statement();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(LOOP_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s3 = identifier();
}
-
break;
}
default:
@@ -5917,52 +5074,44 @@ if(s1.isEmpty())
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
QCString q = s+" loop "+s2+" end loop" +s3;
QCString endLoop="end loop" + s3;
FlowChart::moveToPrevLevel();
FlowChart::addFlowChart(FlowChart::END_LOOP,endLoop.data(),0);
return q;
assert(false);
- }
+}
QCString VhdlParser::miscellaneous_operator() {Token *t=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case DOUBLEMULT_T:{if (!hasError) {
-
+ case DOUBLEMULT_T:{
+ if (!hasError) {
jj_consume_token(DOUBLEMULT_T);
}
if (!hasError) {
-
return "**";
}
-
break;
}
- case ABS_T:{if (!hasError) {
-
+ case ABS_T:{
+ if (!hasError) {
jj_consume_token(ABS_T);
}
if (!hasError) {
-
return "abs";
}
-
break;
}
- case NOT_T:{if (!hasError) {
-
+ case NOT_T:{
+ if (!hasError) {
jj_consume_token(NOT_T);
}
if (!hasError) {
-
return "not";
}
-
break;
}
default:
@@ -5971,64 +5120,54 @@ return "not";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::mode() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case IN_T:{if (!hasError) {
-
+ case IN_T:{
+ if (!hasError) {
tok = jj_consume_token(IN_T);
}
if (!hasError) {
-
return "in";
}
-
break;
}
- case OUT_T:{if (!hasError) {
-
+ case OUT_T:{
+ if (!hasError) {
tok = jj_consume_token(OUT_T);
}
if (!hasError) {
-
return "out";
}
-
break;
}
- case INOUT_T:{if (!hasError) {
-
+ case INOUT_T:{
+ if (!hasError) {
tok = jj_consume_token(INOUT_T);
}
if (!hasError) {
-
return "inout";
}
-
break;
}
- case BUFFER_T:{if (!hasError) {
-
+ case BUFFER_T:{
+ if (!hasError) {
tok = jj_consume_token(BUFFER_T);
}
if (!hasError) {
-
return "buffer";
}
-
break;
}
- case LINKAGE_T:{if (!hasError) {
-
+ case LINKAGE_T:{
+ if (!hasError) {
tok = jj_consume_token(LINKAGE_T);
}
if (!hasError) {
-
return "linkage";
}
-
break;
}
default:
@@ -6037,53 +5176,45 @@ return "linkage";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::multiplying_operation() {Token *tok=0;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case MULT_T:{if (!hasError) {
-
+ case MULT_T:{
+ if (!hasError) {
tok = jj_consume_token(MULT_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case SLASH_T:{if (!hasError) {
-
+ case SLASH_T:{
+ if (!hasError) {
tok = jj_consume_token(SLASH_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case MOD_T:{if (!hasError) {
-
+ case MOD_T:{
+ if (!hasError) {
tok = jj_consume_token(MOD_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
- case REM_T:{if (!hasError) {
-
+ case REM_T:{
+ if (!hasError) {
tok = jj_consume_token(REM_T);
}
if (!hasError) {
-
return tok->image.c_str();
}
-
break;
}
default:
@@ -6092,32 +5223,29 @@ return tok->image.c_str();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::name() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::name() {QCString s,s1;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case STRINGLITERAL:{if (!hasError) {
-
+ case STRINGLITERAL:{
+ if (!hasError) {
s = operator_symbol();
}
-
break;
}
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
-
break;
}
- case SLSL_T:{if (!hasError) {
-
+ case SLSL_T:{
+ if (!hasError) {
s = external_name();
}
-
break;
}
default:
@@ -6127,110 +5255,90 @@ QCString VhdlParser::name() {QCString s,s1;if (!hasError) {
}
}
if (!hasError) {
-
- if (jj_2_47(2147483647)) {if (!hasError) {
-
+ if (jj_2_47(2147483647)) {
+ if (!hasError) {
s1 = name_ext1();
}
if (!hasError) {
-
s+=s1;
}
-
} else {
;
}
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::name_ext1() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::name_ext1() {QCString s,s1,s2;
+ if (!hasError) {
s = name_ext();
}
if (!hasError) {
-
while (!hasError) {
if (jj_2_48(2147483647)) {
;
} else {
goto end_label_26;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = name_ext();
}
if (!hasError) {
-
s+=s1;
}
-
}
end_label_26: ;
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::name_ext() {QCString s,s1,s2;if (!hasError) {
-
- if (jj_2_49(2147483647)) {if (!hasError) {
-
+QCString VhdlParser::name_ext() {QCString s,s1,s2;
+ if (!hasError) {
+ if (jj_2_49(2147483647)) {
+ if (!hasError) {
jj_consume_token(DOT_T);
}
if (!hasError) {
-
s1 = suffix();
}
if (!hasError) {
-
s+=".";s+=s1;
}
-
- } else if (jj_2_50(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_50(2147483647)) {
+ if (!hasError) {
s1 = test_att_name();
}
if (!hasError) {
-
s+=s1;
}
-
- } else if (jj_2_51(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_51(2147483647)) {
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = discrete_range();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+="(";s+=s1;s+=")";
}
-
- } else if (jj_2_52(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_52(2147483647)) {
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
s+="(";s+=s1;
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -6240,89 +5348,72 @@ s+="(";s+=s1;
default:
jj_la1[139] = jj_gen;
goto end_label_27;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_27: ;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+=")";
}
-
} else {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::test_att_name() {QCString s,s1;if (!hasError) {
-
- if (jj_2_53(2147483647)) {if (!hasError) {
-
+QCString VhdlParser::test_att_name() {QCString s,s1;
+ if (!hasError) {
+ if (jj_2_53(2147483647)) {
+ if (!hasError) {
s1 = signature();
}
if (!hasError) {
-
s=s1;
}
-
} else {
;
}
}
if (!hasError) {
-
jj_consume_token(APOSTROPHE_T);
}
if (!hasError) {
-
s1 = attribute_designator();
}
if (!hasError) {
-
s+="'";s+=s1;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+="(";s+=s1;s+=")";
}
-
break;
}
default:
@@ -6330,30 +5421,25 @@ s+="(";s+=s1;s+=")";
;
}
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::indexed_name() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::indexed_name() {QCString s,s1,s2;
+ if (!hasError) {
s2 = identifier();
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
s=s2+"("+s1;
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -6363,45 +5449,38 @@ s=s2+"("+s1;
default:
jj_la1[141] = jj_gen;
goto end_label_28;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_28: ;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
return s+")";
assert(false);
- }
+}
-QCString VhdlParser::next_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;if (!hasError) {
-
+QCString VhdlParser::next_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
t = jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -6410,18 +5489,15 @@ QCString VhdlParser::next_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;i
}
}
if (!hasError) {
-
jj_consume_token(NEXT_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s1 = identifier();
}
-
break;
}
default:
@@ -6430,17 +5506,14 @@ QCString VhdlParser::next_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;i
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WHEN_T:{if (!hasError) {
-
+ case WHEN_T:{
+ if (!hasError) {
t1 = jj_consume_token(WHEN_T);
}
if (!hasError) {
-
s2 = condition();
}
-
break;
}
default:
@@ -6449,36 +5522,31 @@ QCString VhdlParser::next_statement() {QCString s,s1,s2;Token *t=0;Token *t1=0;i
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if(t) s+=":";
FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
lab.resize(0);
if(t1) s2.prepend("when ");
return s+s1+s2+";";
assert(false);
- }
+}
-QCString VhdlParser::null_statement() {QCString s;if (!hasError) {
-
+QCString VhdlParser::null_statement() {QCString s;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s+=":";
}
-
break;
}
default:
@@ -6487,42 +5555,35 @@ s+=":";
}
}
if (!hasError) {
-
jj_consume_token(NULL_T);
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
return s+="null";
assert(false);
- }
+}
QCString VhdlParser::numeric_literal() {QCString s;
- if (jj_2_54(2147483647)) {if (!hasError) {
-
+ if (jj_2_54(2147483647)) {
+ if (!hasError) {
s = physical_literal();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case INTEGER:
case DECIMAL_LITERAL:
- case BASED_LITERAL:{if (!hasError) {
-
+ case BASED_LITERAL:{
+ if (!hasError) {
s = abstract_literal();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -6532,79 +5593,66 @@ return s;
}
}
assert(false);
- }
+}
QCString VhdlParser::object_class() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
jj_consume_token(CONSTANT_T);
}
if (!hasError) {
-
return "constant";
}
-
break;
}
- case SIGNAL_T:{if (!hasError) {
-
+ case SIGNAL_T:{
+ if (!hasError) {
jj_consume_token(SIGNAL_T);
}
if (!hasError) {
-
return "signal";
}
-
break;
}
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
jj_consume_token(VARIABLE_T);
}
if (!hasError) {
-
return "variable";
}
-
break;
}
- case SHARED_T:{if (!hasError) {
-
+ case SHARED_T:{
+ if (!hasError) {
jj_consume_token(SHARED_T);
}
if (!hasError) {
-
jj_consume_token(VARIABLE_T);
}
if (!hasError) {
-
return "shared variable";
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
jj_consume_token(FILE_T);
}
if (!hasError) {
-
return "file";
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
jj_consume_token(TYPE_T);
}
if (!hasError) {
-
return "type";
}
-
break;
}
default:
@@ -6613,27 +5661,25 @@ return "type";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::operator_symbol() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::operator_symbol() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(STRINGLITERAL);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-void VhdlParser::options() {if (!hasError) {
-
+void VhdlParser::options() {
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GUARDED_T:{if (!hasError) {
-
+ case GUARDED_T:{
+ if (!hasError) {
jj_consume_token(GUARDED_T);
}
-
break;
}
default:
@@ -6642,15 +5688,13 @@ void VhdlParser::options() {if (!hasError) {
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case INERTIAL_T:
case REJECT_T:
- case TRANSPORT_T:{if (!hasError) {
-
+ case TRANSPORT_T:{
+ if (!hasError) {
delay_mechanism();
}
-
break;
}
default:
@@ -6658,52 +5702,42 @@ void VhdlParser::options() {if (!hasError) {
;
}
}
-
- }
+}
-void VhdlParser::package_body() {QCString s;if (!hasError) {
-
+void VhdlParser::package_body() {QCString s;
+ if (!hasError) {
jj_consume_token(PACKAGE_T);
}
if (!hasError) {
-
jj_consume_token(BODY_T);
}
if (!hasError) {
-
s = name();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
lastCompound=current.get();
s.prepend("_");
addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
}
if (!hasError) {
-
package_body_declarative_part();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
jj_consume_token(PACKAGE_T);
}
if (!hasError) {
-
jj_consume_token(BODY_T);
}
-
break;
}
default:
@@ -6712,16 +5746,14 @@ lastCompound=current.get();
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -6730,12 +5762,10 @@ lastCompound=current.get();
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
lastCompound=0; genLabels.resize(0);
- }
+}
void VhdlParser::package_body_declarative_item() {
@@ -6743,77 +5773,67 @@ void VhdlParser::package_body_declarative_item() {
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
type_declaration();
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
subtype_declaration();
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
constant_declaration();
}
-
break;
}
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
variable_declaration();
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
file_declaration();
}
-
break;
}
- case ALIAS_T:{if (!hasError) {
-
+ case ALIAS_T:{
+ if (!hasError) {
alias_declaration();
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
default:
jj_la1[152] = jj_gen;
- if (jj_2_55(3)) {if (!hasError) {
-
+ if (jj_2_55(3)) {
+ if (!hasError) {
group_template_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
group_declaration();
}
-
break;
}
default:
@@ -6823,11 +5843,11 @@ void VhdlParser::package_body_declarative_item() {
}
}
}
- }
+}
-void VhdlParser::package_body_declarative_part() {if (!hasError) {
-
+void VhdlParser::package_body_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -6849,34 +5869,29 @@ void VhdlParser::package_body_declarative_part() {if (!hasError) {
default:
jj_la1[154] = jj_gen;
goto end_label_29;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
package_body_declarative_item();
}
-
}
end_label_29: ;
}
-
- }
+}
-void VhdlParser::package_declaration() {QCString s;if (!hasError) {
-
+void VhdlParser::package_declaration() {QCString s;
+ if (!hasError) {
jj_consume_token(PACKAGE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
lastCompound=current.get();
- std::unique_ptr<Entry> clone=std::make_unique<Entry>(*current);
+ std::shared_ptr<Entry> clone=std::make_shared<Entry>(*current);
clone->section=Entry::NAMESPACE_SEC;
clone->spec=VhdlDocGen::PACKAGE;
clone->name=s;
@@ -6887,21 +5902,17 @@ lastCompound=current.get();
addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
}
if (!hasError) {
-
package_declarative_part();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
jj_consume_token(PACKAGE_T);
}
-
break;
}
default:
@@ -6910,16 +5921,14 @@ lastCompound=current.get();
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -6928,37 +5937,31 @@ lastCompound=current.get();
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
lastEntity=0;lastCompound=0; genLabels.resize(0);
- }
+}
-void VhdlParser::geninter() {if (!hasError) {
-
+void VhdlParser::geninter() {
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
gen_interface_list();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
gen_assoc_list();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
break;
}
default:
@@ -6966,7 +5969,6 @@ void VhdlParser::geninter() {if (!hasError) {
;
}
}
-
break;
}
default:
@@ -6974,8 +5976,7 @@ void VhdlParser::geninter() {if (!hasError) {
;
}
}
-
- }
+}
void VhdlParser::package_declarative_item() {
@@ -6983,130 +5984,113 @@ void VhdlParser::package_declarative_item() {
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
type_declaration();
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
subtype_declaration();
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
constant_declaration();
}
-
break;
}
- case SIGNAL_T:{if (!hasError) {
-
+ case SIGNAL_T:{
+ if (!hasError) {
signal_declaration();
}
-
break;
}
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
variable_declaration();
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
file_declaration();
}
-
break;
}
- case ALIAS_T:{if (!hasError) {
-
+ case ALIAS_T:{
+ if (!hasError) {
alias_declaration();
}
-
break;
}
- case COMPONENT_T:{if (!hasError) {
-
+ case COMPONENT_T:{
+ if (!hasError) {
component_declaration();
}
-
break;
}
default:
jj_la1[159] = jj_gen;
- if (jj_2_56(2147483647)) {if (!hasError) {
-
+ if (jj_2_56(2147483647)) {
+ if (!hasError) {
attribute_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
attribute_specification();
}
-
break;
}
- case DISCONNECT_T:{if (!hasError) {
-
+ case DISCONNECT_T:{
+ if (!hasError) {
disconnection_specification();
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
default:
jj_la1[160] = jj_gen;
- if (jj_2_57(3)) {if (!hasError) {
-
+ if (jj_2_57(3)) {
+ if (!hasError) {
group_template_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
group_declaration();
}
-
break;
}
default:
jj_la1[161] = jj_gen;
- if (jj_2_58(5)) {if (!hasError) {
-
+ if (jj_2_58(5)) {
+ if (!hasError) {
package_instantiation_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
package_declaration();
}
-
break;
}
default:
@@ -7120,11 +6104,11 @@ void VhdlParser::package_declarative_item() {
}
}
}
- }
+}
-void VhdlParser::package_declarative_part() {if (!hasError) {
-
+void VhdlParser::package_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -7151,75 +6135,63 @@ void VhdlParser::package_declarative_part() {if (!hasError) {
default:
jj_la1[163] = jj_gen;
goto end_label_30;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
package_declarative_item();
}
-
}
end_label_30: ;
}
-
- }
+}
-QCString VhdlParser::parameter_specification() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::parameter_specification() {QCString s,s1;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IN_T);
}
if (!hasError) {
-
s1 = discrete_range();
}
-
return s+" in "+s1;
assert(false);
- }
+}
-QCString VhdlParser::physical_literal() {QCString s,s1;if (!hasError) {
-
- if (jj_2_59(2147483647)) {if (!hasError) {
-
+QCString VhdlParser::physical_literal() {QCString s,s1;
+ if (!hasError) {
+ if (jj_2_59(2147483647)) {
+ if (!hasError) {
s = abstract_literal();
}
-
} else {
;
}
}
if (!hasError) {
-
s1 = name();
}
-
s+=" ";s+=s1;s.prepend(" "); return s;
assert(false);
- }
+}
-QCString VhdlParser::physical_type_definition() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::physical_type_definition() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(UNITS_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
if (!hasError) {
-
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,0,Public);
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
@@ -7230,33 +6202,28 @@ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,0,Public)
default:
jj_la1[164] = jj_gen;
goto end_label_31;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = secondary_unit_declaration();
}
-
}
end_label_31: ;
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(UNITS_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -7264,156 +6231,126 @@ addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,0,Public)
;
}
}
-
return s+"%";
assert(false);
- }
+}
-void VhdlParser::port_clause() {if (!hasError) {
-
+void VhdlParser::port_clause() {
+ if (!hasError) {
jj_consume_token(PORT_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
port_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
currP=0;
- }
+}
-QCString VhdlParser::port_list() {QCString s;if (!hasError) {
-
+QCString VhdlParser::port_list() {QCString s;
+ if (!hasError) {
s = interface_list();
}
-
return s;
assert(false);
- }
+}
-void VhdlParser::port_map_aspect() {if (!hasError) {
-
+void VhdlParser::port_map_aspect() {
+ if (!hasError) {
jj_consume_token(PORT_T);
}
if (!hasError) {
-
jj_consume_token(MAP_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
association_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
- }
+}
QCString VhdlParser::primary() {QCString s,s1;
- if (jj_2_60(2147483647)) {if (!hasError) {
-
+ if (jj_2_60(2147483647)) {
+ if (!hasError) {
s = function_call();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_61(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_61(2147483647)) {
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s="("+s1+")"; return s;
}
-
- } else if (jj_2_62(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_62(2147483647)) {
+ if (!hasError) {
s = qualified_expression();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_63(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_63(2147483647)) {
+ if (!hasError) {
s = type_conversion();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_64(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_64(2147483647)) {
+ if (!hasError) {
s = literal();
}
if (!hasError) {
-
s.prepend(" ");return s;
}
-
- } else if (jj_2_65(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_65(2147483647)) {
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case NEW_T:{if (!hasError) {
-
+ case NEW_T:{
+ if (!hasError) {
allocator();
}
if (!hasError) {
-
return "";
}
-
break;
}
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
s = aggregate();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -7423,44 +6360,39 @@ return s;
}
}
assert(false);
- }
+}
void VhdlParser::primary_unit() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ENTITY_T:{if (!hasError) {
-
+ case ENTITY_T:{
+ if (!hasError) {
entity_declaration();
}
-
break;
}
- case CONFIGURATION_T:{if (!hasError) {
-
+ case CONFIGURATION_T:{
+ if (!hasError) {
configuration_declaration();
}
-
break;
}
default:
jj_la1[167] = jj_gen;
- if (jj_2_66(2147483647)) {if (!hasError) {
-
+ if (jj_2_66(2147483647)) {
+ if (!hasError) {
package_instantiation_declaration();
}
-
- } else if (jj_2_67(4)) {if (!hasError) {
-
+ } else if (jj_2_67(4)) {
+ if (!hasError) {
interface_package_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
package_declaration();
}
-
break;
}
default:
@@ -7470,33 +6402,28 @@ void VhdlParser::primary_unit() {
}
}
}
- }
+}
-QCString VhdlParser::procedure_call() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::procedure_call() {QCString s,s1;
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = actual_parameter_part();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s1.prepend("("); s1.append(")");
}
-
break;
}
default:
@@ -7504,43 +6431,36 @@ s1.prepend("("); s1.append(")");
;
}
}
-
return s+s1;
assert(false);
- }
+}
-QCString VhdlParser::procedure_call_statement() {QCString s,s1;if (!hasError) {
-
- if (jj_2_68(2)) {if (!hasError) {
-
+QCString VhdlParser::procedure_call_statement() {QCString s,s1;
+ if (!hasError) {
+ if (jj_2_68(2)) {
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s+=":";
}
-
} else {
;
}
}
if (!hasError) {
-
s1 = procedure_call();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
return s+s1+";";
assert(false);
- }
+}
QCString VhdlParser::process_declarative_item() {QCString s;
@@ -7548,141 +6468,117 @@ QCString VhdlParser::process_declarative_item() {QCString s;
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
if (!hasError) {
-
return "";
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
s = type_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
s = subtype_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
s = constant_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
s = variable_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
s = file_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case ALIAS_T:{if (!hasError) {
-
+ case ALIAS_T:{
+ if (!hasError) {
s = alias_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
jj_la1[170] = jj_gen;
- if (jj_2_69(3)) {if (!hasError) {
-
+ if (jj_2_69(3)) {
+ if (!hasError) {
s = attribute_declaration();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
s = attribute_specification();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
s = use_clause();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
jj_la1[171] = jj_gen;
- if (jj_2_70(3)) {if (!hasError) {
-
+ if (jj_2_70(3)) {
+ if (!hasError) {
s = group_template_declaration();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
s = group_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -7695,11 +6591,11 @@ return s;
}
}
assert(false);
- }
+}
-QCString VhdlParser::process_declarative_part() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::process_declarative_part() {QCString s,s1;
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -7722,37 +6618,32 @@ QCString VhdlParser::process_declarative_part() {QCString s,s1;if (!hasError) {
default:
jj_la1[173] = jj_gen;
goto end_label_32;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = process_declarative_item();
}
if (!hasError) {
-
s+=s1;
}
-
}
end_label_32: ;
}
-
return s;
assert(false);
- }
+}
-void VhdlParser::process_statement() {QCString s,s1,s2;Token *tok=0;if (!hasError) {
-
+void VhdlParser::process_statement() {QCString s,s1,s2;Token *tok=0;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -7761,13 +6652,11 @@ void VhdlParser::process_statement() {QCString s,s1,s2;Token *tok=0;if (!hasErro
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case POSTPONED_T:{if (!hasError) {
-
+ case POSTPONED_T:{
+ if (!hasError) {
jj_consume_token(POSTPONED_T);
}
-
break;
}
default:
@@ -7776,40 +6665,34 @@ void VhdlParser::process_statement() {QCString s,s1,s2;Token *tok=0;if (!hasErro
}
}
if (!hasError) {
-
currP=VhdlDocGen::PROCESS;
current->startLine=getLine();
current->bodyLine=getLine();
}
if (!hasError) {
-
jj_consume_token(PROCESS_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ALL_T:{if (!hasError) {
-
+ case ALL_T:{
+ if (!hasError) {
tok = jj_consume_token(ALL_T);
}
-
break;
}
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s1 = sensitivity_list();
}
-
break;
}
default:
@@ -7819,10 +6702,8 @@ currP=VhdlDocGen::PROCESS;
}
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
break;
}
default:
@@ -7831,13 +6712,11 @@ currP=VhdlDocGen::PROCESS;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case IS_T:{if (!hasError) {
-
+ case IS_T:{
+ if (!hasError) {
jj_consume_token(IS_T);
}
-
break;
}
default:
@@ -7846,35 +6725,28 @@ currP=VhdlDocGen::PROCESS;
}
}
if (!hasError) {
-
s2 = process_declarative_part();
}
if (!hasError) {
-
if (s2.data())
FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s2.data(),0);
FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
}
if (!hasError) {
-
jj_consume_token(BEGIN_T);
}
if (!hasError) {
-
process_statement_part();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case POSTPONED_T:{if (!hasError) {
-
+ case POSTPONED_T:{
+ if (!hasError) {
jj_consume_token(POSTPONED_T);
}
-
break;
}
default:
@@ -7883,18 +6755,15 @@ if (s2.data())
}
}
if (!hasError) {
-
jj_consume_token(PROCESS_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -7903,10 +6772,8 @@ if (s2.data())
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if(s.isEmpty())
currName=VhdlDocGen::getProcessNumber();
else
@@ -7922,11 +6789,11 @@ if(s.isEmpty())
createFlow();
currName="";
newEntry();
- }
+}
-void VhdlParser::process_statement_part() {if (!hasError) {
-
+void VhdlParser::process_statement_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ASSERT_T:
@@ -7953,60 +6820,49 @@ void VhdlParser::process_statement_part() {if (!hasError) {
default:
jj_la1[181] = jj_gen;
goto end_label_33;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
sequential_statement();
}
-
}
end_label_33: ;
}
-
- }
+}
-QCString VhdlParser::qualified_expression() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::qualified_expression() {QCString s,s1;
+ if (!hasError) {
s1 = identifier();
}
if (!hasError) {
-
jj_consume_token(APOSTROPHE_T);
}
if (!hasError) {
-
s=s1+"'";
}
if (!hasError) {
-
- if (jj_2_71(2147483647)) {if (!hasError) {
-
+ if (jj_2_71(2147483647)) {
+ if (!hasError) {
s1 = aggregate();
}
if (!hasError) {
-
s+=s1;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
s+="(";s+=s1;s+=")";
}
-
break;
}
default:
@@ -8016,72 +6872,61 @@ s+="(";s+=s1;s+=")";
}
}
}
-
return s;
assert(false);
- }
+}
QCString VhdlParser::range() {QCString s,s1,s2;
- if (jj_2_72(2147483647)) {if (!hasError) {
-
+ if (jj_2_72(2147483647)) {
+ if (!hasError) {
s = simple_expression();
}
if (!hasError) {
-
s1 = direction();
}
if (!hasError) {
-
s2 = simple_expression();
}
if (!hasError) {
-
return s+" "+s1+" "+s2;
}
-
- } else if (jj_2_73(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_73(2147483647)) {
+ if (!hasError) {
s = attribute_name();
}
if (!hasError) {
-
return s;
}
-
} else {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::range_constraint() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::range_constraint() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(RANGE_T);
}
if (!hasError) {
-
s = range();
}
-
return " range "+s;
assert(false);
- }
+}
-void VhdlParser::record_type_definition() {if (!hasError) {
-
+void VhdlParser::record_type_definition() {
+ if (!hasError) {
jj_consume_token(RECORD_T);
}
if (!hasError) {
-
- while (!hasError) {if (!hasError) {
-
+ while (!hasError) {
+ if (!hasError) {
element_declaration();
}
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
case EXTENDED_CHARACTER:{
@@ -8096,24 +6941,20 @@ void VhdlParser::record_type_definition() {if (!hasError) {
end_label_34: ;
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(RECORD_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -8121,31 +6962,27 @@ void VhdlParser::record_type_definition() {if (!hasError) {
;
}
}
-
- }
+}
-QCString VhdlParser::relation() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::relation() {QCString s,s1,s2;
+ if (!hasError) {
s = shift_expression();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case LESSTHAN_T:
case GREATERTHAN_T:
case LT_T:
case GT_T:
case EQU_T:
- case NOTEQU_T:{if (!hasError) {
-
+ case NOTEQU_T:{
+ if (!hasError) {
s1 = relation_operator();
}
if (!hasError) {
-
s2 = shift_expression();
}
-
break;
}
default:
@@ -8153,78 +6990,65 @@ QCString VhdlParser::relation() {QCString s,s1,s2;if (!hasError) {
;
}
}
-
return s+s1+s2;
assert(false);
- }
+}
QCString VhdlParser::relation_operator() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LT_T:{if (!hasError) {
-
+ case LT_T:{
+ if (!hasError) {
jj_consume_token(LT_T);
}
if (!hasError) {
-
return "<";
}
-
break;
}
- case GT_T:{if (!hasError) {
-
+ case GT_T:{
+ if (!hasError) {
jj_consume_token(GT_T);
}
if (!hasError) {
-
return ">";
}
-
break;
}
- case EQU_T:{if (!hasError) {
-
+ case EQU_T:{
+ if (!hasError) {
jj_consume_token(EQU_T);
}
if (!hasError) {
-
return "=";
}
-
break;
}
- case GREATERTHAN_T:{if (!hasError) {
-
+ case GREATERTHAN_T:{
+ if (!hasError) {
jj_consume_token(GREATERTHAN_T);
}
if (!hasError) {
-
return ">=";
}
-
break;
}
- case LESSTHAN_T:{if (!hasError) {
-
+ case LESSTHAN_T:{
+ if (!hasError) {
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
return "<=";
}
-
break;
}
- case NOTEQU_T:{if (!hasError) {
-
+ case NOTEQU_T:{
+ if (!hasError) {
jj_consume_token(NOTEQU_T);
}
if (!hasError) {
-
return "/=";
}
-
break;
}
default:
@@ -8233,22 +7057,20 @@ return "/=";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
t = jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -8257,25 +7079,20 @@ QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2
}
}
if (!hasError) {
-
jj_consume_token(REPORT_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case SEVERITY_T:{if (!hasError) {
-
+ case SEVERITY_T:{
+ if (!hasError) {
t1 = jj_consume_token(SEVERITY_T);
}
if (!hasError) {
-
s2 = expression();
}
-
break;
}
default:
@@ -8284,35 +7101,30 @@ QCString VhdlParser::report_statement() {Token *t=0;Token *t1=0;QCString s,s1,s2
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if(t) s.append(":");
s1.prepend(" report ");
if(t1) s2.prepend(" severity ");
return s+s1+s2+";";
assert(false);
- }
+}
-QCString VhdlParser::return_statement() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::return_statement() {QCString s,s1;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s+=":";
}
-
break;
}
default:
@@ -8321,11 +7133,9 @@ s+=":";
}
}
if (!hasError) {
-
jj_consume_token(RETURN_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ABS_T:
case NEW_T:
@@ -8342,11 +7152,10 @@ s+=":";
case CHARACTER_LITERAL:
case DECIMAL_LITERAL:
case BASED_LITERAL:
- case BIT_STRING_LITERAL:{if (!hasError) {
-
+ case BIT_STRING_LITERAL:{
+ if (!hasError) {
s1 = expression();
}
-
break;
}
default:
@@ -8355,48 +7164,40 @@ s+=":";
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
return s+" return "+s1+";";
assert(false);
- }
+}
QCString VhdlParser::scalar_type_definition() {QCString s,s1;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
s = enumeration_type_definition();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case RANGE_T:{if (!hasError) {
-
+ case RANGE_T:{
+ if (!hasError) {
s = range_constraint();
}
if (!hasError) {
-
- if (jj_2_74(2147483647)) {if (!hasError) {
-
+ if (jj_2_74(2147483647)) {
+ if (!hasError) {
s1 = physical_type_definition();
}
-
} else {
;
}
}
if (!hasError) {
-
return s+" "+s1+"%";
}
-
break;
}
default:
@@ -8405,23 +7206,21 @@ return s+" "+s1+"%";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
void VhdlParser::secondary_unit() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ARCHITECTURE_T:{if (!hasError) {
-
+ case ARCHITECTURE_T:{
+ if (!hasError) {
architecture_body();
}
-
break;
}
- case PACKAGE_T:{if (!hasError) {
-
+ case PACKAGE_T:{
+ if (!hasError) {
package_body();
}
-
break;
}
default:
@@ -8429,102 +7228,84 @@ void VhdlParser::secondary_unit() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-QCString VhdlParser::secondary_unit_declaration() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::secondary_unit_declaration() {QCString s,s1;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(EQU_T);
}
if (!hasError) {
-
s1 = physical_literal();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
//printf("\n %s %s [%d]",s.data(),s1.data(),getLine());
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,s1.data(),Public);
return s+"="+s1;
assert(false);
- }
+}
-QCString VhdlParser::selected_name() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::selected_name() {QCString s,s1;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(DOT_T);
}
if (!hasError) {
-
s1 = suffix();
}
-
return s+"."+s1;
assert(false);
- }
+}
-void VhdlParser::selected_signal_assignment() {if (!hasError) {
-
+void VhdlParser::selected_signal_assignment() {
+ if (!hasError) {
jj_consume_token(WITH_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(SELECT_T);
}
if (!hasError) {
-
target();
}
if (!hasError) {
-
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
options();
}
if (!hasError) {
-
selected_waveforms();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::selected_waveforms() {if (!hasError) {
-
+void VhdlParser::selected_waveforms() {
+ if (!hasError) {
waveform();
}
if (!hasError) {
-
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
choices();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -8534,51 +7315,43 @@ void VhdlParser::selected_waveforms() {if (!hasError) {
default:
jj_la1[193] = jj_gen;
goto end_label_35;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
waveform();
}
if (!hasError) {
-
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
choices();
}
-
}
end_label_35: ;
}
-
- }
+}
-QCString VhdlParser::sensitivity_clause() {QCString s;if (!hasError) {
-
+QCString VhdlParser::sensitivity_clause() {QCString s;
+ if (!hasError) {
jj_consume_token(ON_T);
}
if (!hasError) {
-
s = sensitivity_list();
}
-
s.prepend(" on ");
return s;
assert(false);
- }
+}
-QCString VhdlParser::sensitivity_list() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::sensitivity_list() {QCString s,s1;
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -8588,175 +7361,142 @@ QCString VhdlParser::sensitivity_list() {QCString s,s1;if (!hasError) {
default:
jj_la1[194] = jj_gen;
goto end_label_36;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_36: ;
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::sequence_of_statement() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::sequence_of_statement() {QCString s,s1;
+ if (!hasError) {
while (!hasError) {
if (jj_2_75(3)) {
;
} else {
goto end_label_37;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = sequential_statement();
}
if (!hasError) {
-
s+=s1;
}
-
}
end_label_37: ;
}
-
return s;
assert(false);
- }
+}
QCString VhdlParser::sequential_statement() {QCString s;
- if (jj_2_76(2147483647)) {if (!hasError) {
-
+ if (jj_2_76(2147483647)) {
+ if (!hasError) {
s = signal_assignment_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
-
- } else if (jj_2_77(3)) {if (!hasError) {
-
+ } else if (jj_2_77(3)) {
+ if (!hasError) {
s = assertion_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
-
- } else if (jj_2_78(3)) {if (!hasError) {
-
+ } else if (jj_2_78(3)) {
+ if (!hasError) {
s = report_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
-
- } else if (jj_2_79(3)) {if (!hasError) {
-
+ } else if (jj_2_79(3)) {
+ if (!hasError) {
s = wait_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
-
- } else if (jj_2_80(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_80(2147483647)) {
+ if (!hasError) {
s = variable_assignment_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
-
- } else if (jj_2_81(3)) {if (!hasError) {
-
+ } else if (jj_2_81(3)) {
+ if (!hasError) {
s = procedure_call_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
-
- } else if (jj_2_82(3)) {if (!hasError) {
-
+ } else if (jj_2_82(3)) {
+ if (!hasError) {
if_statement();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_83(3)) {if (!hasError) {
-
+ } else if (jj_2_83(3)) {
+ if (!hasError) {
case_statement();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_84(3)) {if (!hasError) {
-
+ } else if (jj_2_84(3)) {
+ if (!hasError) {
loop_statement();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_85(3)) {if (!hasError) {
-
+ } else if (jj_2_85(3)) {
+ if (!hasError) {
s = next_statement();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_86(3)) {if (!hasError) {
-
+ } else if (jj_2_86(3)) {
+ if (!hasError) {
s = exit_statement();
}
if (!hasError) {
-
return s;
}
-
- } else if (jj_2_87(3)) {if (!hasError) {
-
+ } else if (jj_2_87(3)) {
+ if (!hasError) {
s = return_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::RETURN_NO,s.data(),0);return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case NULL_T:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = null_statement();
}
if (!hasError) {
-
FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
-
break;
}
default:
@@ -8766,30 +7506,27 @@ FlowChart::addFlowChart(FlowChart::TEXT_NO,s.data(),0);return s;
}
}
assert(false);
- }
+}
-QCString VhdlParser::shift_expression() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::shift_expression() {QCString s,s1,s2;
+ if (!hasError) {
s = simple_expression();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ROL_T:
case ROR_T:
case SLA_T:
case SLL_T:
case SRA_T:
- case SRL_T:{if (!hasError) {
-
+ case SRL_T:{
+ if (!hasError) {
s1 = shift_operator();
}
if (!hasError) {
-
s2 = simple_expression();
}
-
break;
}
default:
@@ -8797,78 +7534,65 @@ QCString VhdlParser::shift_expression() {QCString s,s1,s2;if (!hasError) {
;
}
}
-
return s+s1+s2;
assert(false);
- }
+}
QCString VhdlParser::shift_operator() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case SLL_T:{if (!hasError) {
-
+ case SLL_T:{
+ if (!hasError) {
jj_consume_token(SLL_T);
}
if (!hasError) {
-
return "sll";
}
-
break;
}
- case SRL_T:{if (!hasError) {
-
+ case SRL_T:{
+ if (!hasError) {
jj_consume_token(SRL_T);
}
if (!hasError) {
-
return "srl";
}
-
break;
}
- case SLA_T:{if (!hasError) {
-
+ case SLA_T:{
+ if (!hasError) {
jj_consume_token(SLA_T);
}
if (!hasError) {
-
return "sla";
}
-
break;
}
- case SRA_T:{if (!hasError) {
-
+ case SRA_T:{
+ if (!hasError) {
jj_consume_token(SRA_T);
}
if (!hasError) {
-
return "sra";
}
-
break;
}
- case ROL_T:{if (!hasError) {
-
+ case ROL_T:{
+ if (!hasError) {
jj_consume_token(ROL_T);
}
if (!hasError) {
-
return "rol";
}
-
break;
}
- case ROR_T:{if (!hasError) {
-
+ case ROR_T:{
+ if (!hasError) {
jj_consume_token(ROR_T);
}
if (!hasError) {
-
return "ror";
}
-
break;
}
default:
@@ -8877,31 +7601,27 @@ return "ror";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::sign() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PLUS_T:{if (!hasError) {
-
+ case PLUS_T:{
+ if (!hasError) {
jj_consume_token(PLUS_T);
}
if (!hasError) {
-
return "+";
}
-
break;
}
- case MINUS_T:{if (!hasError) {
-
+ case MINUS_T:{
+ if (!hasError) {
jj_consume_token(MINUS_T);
}
if (!hasError) {
-
return "-";
}
-
break;
}
default:
@@ -8910,71 +7630,60 @@ return "-";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::signal_assignment_statement() {QCString s,s1,s2,s3;
- if (jj_2_89(2147483647)) {if (!hasError) {
-
+ if (jj_2_89(2147483647)) {
+ if (!hasError) {
conditional_signal_assignment_wave();
}
if (!hasError) {
-
return "";
}
-
- } else if (jj_2_90(2147483647)) {if (!hasError) {
-
+ } else if (jj_2_90(2147483647)) {
+ if (!hasError) {
selected_signal_assignment_wave();
}
if (!hasError) {
-
return "";
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case LPAREN_T:
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
- if (jj_2_88(2)) {if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
+ if (jj_2_88(2)) {
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s+=":";
}
-
} else {
;
}
}
if (!hasError) {
-
s1 = target();
}
if (!hasError) {
-
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case INERTIAL_T:
case REJECT_T:
- case TRANSPORT_T:{if (!hasError) {
-
+ case TRANSPORT_T:{
+ if (!hasError) {
s2 = delay_mechanism();
}
-
break;
}
default:
@@ -8983,18 +7692,14 @@ s+=":";
}
}
if (!hasError) {
-
s3 = waveform();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
if (!hasError) {
-
return s+s1+"<="+s2+s3+";";
}
-
break;
}
default:
@@ -9004,42 +7709,36 @@ return s+s1+"<="+s2+s3+";";
}
}
assert(false);
- }
+}
-void VhdlParser::semi() {if (!hasError) {
-
+void VhdlParser::semi() {
+ if (!hasError) {
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::signal_declaration() {Token* tok=0;QCString s,s1,s2,s3,s4;if (!hasError) {
-
+void VhdlParser::signal_declaration() {Token* tok=0;QCString s,s1,s2,s3,s4;
+ if (!hasError) {
jj_consume_token(SIGNAL_T);
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = subtype_indication();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BUS_T:
- case REGISTER_T:{if (!hasError) {
-
+ case REGISTER_T:{
+ if (!hasError) {
s2 = signal_kind();
}
-
break;
}
default:
@@ -9048,17 +7747,14 @@ void VhdlParser::signal_declaration() {Token* tok=0;QCString s,s1,s2,s3,s4;if (!
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case VARASSIGN_T:{if (!hasError) {
-
+ case VARASSIGN_T:{
+ if (!hasError) {
tok = jj_consume_token(VARASSIGN_T);
}
if (!hasError) {
-
s3 = expression();
}
-
break;
}
default:
@@ -9067,39 +7763,33 @@ void VhdlParser::signal_declaration() {Token* tok=0;QCString s,s1,s2,s3,s4;if (!
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if(tok)
s3.prepend(":=");
s4=s1+s2+s3;
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
- }
+}
QCString VhdlParser::signal_kind() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case REGISTER_T:{if (!hasError) {
-
+ case REGISTER_T:{
+ if (!hasError) {
jj_consume_token(REGISTER_T);
}
if (!hasError) {
-
return "register";
}
-
break;
}
- case BUS_T:{if (!hasError) {
-
+ case BUS_T:{
+ if (!hasError) {
jj_consume_token(BUS_T);
}
if (!hasError) {
-
return "bus";
}
-
break;
}
default:
@@ -9108,7 +7798,7 @@ return "bus";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::signal_list() {QCString s,s1;
@@ -9116,12 +7806,11 @@ QCString VhdlParser::signal_list() {QCString s,s1;
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -9131,45 +7820,37 @@ QCString VhdlParser::signal_list() {QCString s,s1;
default:
jj_la1[204] = jj_gen;
goto end_label_38;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_38: ;
}
-
break;
}
- case OTHER_T:{if (!hasError) {
-
+ case OTHER_T:{
+ if (!hasError) {
jj_consume_token(OTHER_T);
}
if (!hasError) {
-
return "other";
}
-
break;
}
- case ALL_T:{if (!hasError) {
-
+ case ALL_T:{
+ if (!hasError) {
jj_consume_token(ALL_T);
}
if (!hasError) {
-
return "all";
}
-
break;
}
default:
@@ -9178,25 +7859,23 @@ return "all";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::signature() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::signature() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(LBRACKET_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -9206,23 +7885,19 @@ QCString VhdlParser::signature() {QCString s,s1,s2;if (!hasError) {
default:
jj_la1[206] = jj_gen;
goto end_label_39;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_39: ;
}
-
break;
}
default:
@@ -9231,21 +7906,17 @@ s+=",";s+=s1;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case RETURN_T:{if (!hasError) {
-
+ case RETURN_T:{
+ if (!hasError) {
jj_consume_token(RETURN_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s+="return ";s+=s1;
}
-
break;
}
default:
@@ -9254,24 +7925,21 @@ s+="return ";s+=s1;
}
}
if (!hasError) {
-
jj_consume_token(RBRACKET_T);
}
-
s1="["+s+"]";return s1;
assert(false);
- }
+}
-QCString VhdlParser::simple_expression() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::simple_expression() {QCString s,s1,s2;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case PLUS_T:
- case MINUS_T:{if (!hasError) {
-
+ case MINUS_T:{
+ if (!hasError) {
s = sign();
}
-
break;
}
default:
@@ -9280,93 +7948,78 @@ QCString VhdlParser::simple_expression() {QCString s,s1,s2;if (!hasError) {
}
}
if (!hasError) {
-
s1 = term();
}
if (!hasError) {
-
s+=s1;
}
if (!hasError) {
-
while (!hasError) {
if (jj_2_91(2147483647)) {
;
} else {
goto end_label_40;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = adding_operator();
}
if (!hasError) {
-
s2 = term();
}
if (!hasError) {
-
s+=s1;s+=s2;
}
-
}
end_label_40: ;
}
-
return s;
assert(false);
- }
+}
-void VhdlParser::simple_name() {if (!hasError) {
-
+void VhdlParser::simple_name() {
+ if (!hasError) {
name();
}
-
- }
+}
-QCString VhdlParser::slice_name() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::slice_name() {QCString s,s1;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = discrete_range();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
return s+"("+s1+")";
assert(false);
- }
+}
-QCString VhdlParser::string_literal() {Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::string_literal() {Token *tok=0;
+ if (!hasError) {
tok = jj_consume_token(STRINGLITERAL);
}
-
return tok->image.c_str();
assert(false);
- }
+}
-void VhdlParser::subprogram_body() {QCString s;if (!hasError) {
-
+void VhdlParser::subprogram_body() {QCString s;
+ if (!hasError) {
jj_consume_token(IS_T);
}
if (!hasError) {
-
//try{
s = subprogram_declarative_part();
}
if (!hasError) {
-
if (s.data())
{
FlowChart::addFlowChart(FlowChart::VARIABLE_NO,s,0);
@@ -9374,26 +8027,21 @@ if (s.data())
FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
}
if (!hasError) {
-
jj_consume_token(BEGIN_T);
}
if (!hasError) {
-
subprogram_statement_part();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case FUNCTION_T:
- case PROCEDURE_T:{if (!hasError) {
-
+ case PROCEDURE_T:{
+ if (!hasError) {
subprogram_kind();
}
-
break;
}
default:
@@ -9402,15 +8050,13 @@ if (s.data())
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
designator();
}
-
break;
}
default:
@@ -9419,40 +8065,34 @@ if (s.data())
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
tempEntry->endBodyLine=getLine(END_T);
createFlow();
currP=0;
- }
+}
void VhdlParser::subprogram_declaration() {
- if (jj_2_92(2147483647)) {if (!hasError) {
-
+ if (jj_2_92(2147483647)) {
+ if (!hasError) {
subprogram_instantiation_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_specification();
}
if (!hasError) {
-
subprogram_1();
}
if (!hasError) {
-
currP=0;
}
-
break;
}
default:
@@ -9461,23 +8101,21 @@ currP=0;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
- }
+}
void VhdlParser::subprogram_1() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case IS_T:{if (!hasError) {
-
+ case IS_T:{
+ if (!hasError) {
subprogram_body();
}
-
break;
}
- case SEMI_T:{if (!hasError) {
-
+ case SEMI_T:{
+ if (!hasError) {
jj_consume_token(SEMI_T);
}
-
break;
}
default:
@@ -9485,7 +8123,7 @@ void VhdlParser::subprogram_1() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
QCString VhdlParser::subprogram_declarative_item() {QCString s;
@@ -9493,152 +8131,126 @@ QCString VhdlParser::subprogram_declarative_item() {QCString s;
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
if (!hasError) {
-
return "";
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
s = type_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case IS_T:{if (!hasError) {
-
+ case IS_T:{
+ if (!hasError) {
subprogram_body();
}
if (!hasError) {
-
return "";
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
s = subtype_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
s = constant_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
s = variable_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
s = file_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case ALIAS_T:{if (!hasError) {
-
+ case ALIAS_T:{
+ if (!hasError) {
s = alias_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
jj_la1[214] = jj_gen;
- if (jj_2_93(2147483647)) {if (!hasError) {
-
+ if (jj_2_93(2147483647)) {
+ if (!hasError) {
s = attribute_declaration();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
s = attribute_specification();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
s = use_clause();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
jj_la1[215] = jj_gen;
- if (jj_2_94(3)) {if (!hasError) {
-
+ if (jj_2_94(3)) {
+ if (!hasError) {
s = group_template_declaration();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
s = group_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -9651,11 +8263,11 @@ return s;
}
}
assert(false);
- }
+}
-QCString VhdlParser::subprogram_declarative_part() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::subprogram_declarative_part() {QCString s,s1;
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -9679,38 +8291,33 @@ QCString VhdlParser::subprogram_declarative_part() {QCString s,s1;if (!hasError)
default:
jj_la1[217] = jj_gen;
goto end_label_41;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = subprogram_declarative_item();
}
if (!hasError) {
-
s+=s1;
}
-
}
end_label_41: ;
}
-
return s;
assert(false);
- }
+}
void VhdlParser::subprogram_kind() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case FUNCTION_T:{if (!hasError) {
-
+ case FUNCTION_T:{
+ if (!hasError) {
jj_consume_token(FUNCTION_T);
}
-
break;
}
- case PROCEDURE_T:{if (!hasError) {
-
+ case PROCEDURE_T:{
+ if (!hasError) {
jj_consume_token(PROCEDURE_T);
}
-
break;
}
default:
@@ -9718,21 +8325,19 @@ void VhdlParser::subprogram_kind() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
void VhdlParser::subprogram_specification() {QCString s;Token *tok=0;Token *t;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PROCEDURE_T:{if (!hasError) {
-
+ case PROCEDURE_T:{
+ if (!hasError) {
jj_consume_token(PROCEDURE_T);
}
if (!hasError) {
-
s = designator();
}
if (!hasError) {
-
currP=VhdlDocGen::PROCEDURE;
createFunction(s.data(),currP,0);
tempEntry=current.get();
@@ -9740,29 +8345,23 @@ currP=VhdlDocGen::PROCEDURE;
current->bodyLine=getLine(PROCEDURE_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
param_sec=PARAM_SEC;
}
if (!hasError) {
-
interface_list();
}
if (!hasError) {
-
param_sec=0;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
break;
}
default:
@@ -9771,59 +8370,50 @@ param_sec=0;
}
}
if (!hasError) {
-
- if (jj_2_95(2)) {if (!hasError) {
-
+ if (jj_2_95(2)) {
+ if (!hasError) {
gen_interface_list();
}
-
} else {
;
}
}
if (!hasError) {
-
- if (jj_2_96(2)) {if (!hasError) {
-
+ if (jj_2_96(2)) {
+ if (!hasError) {
gen_assoc_list();
}
-
} else {
;
}
}
if (!hasError) {
-
param();
}
if (!hasError) {
-
newEntry();
}
-
break;
}
case FUNCTION_T:
case IMPURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IMPURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
tok = jj_consume_token(PURE_T);
}
-
break;
}
- case IMPURE_T:{if (!hasError) {
-
+ case IMPURE_T:{
+ if (!hasError) {
tok = jj_consume_token(IMPURE_T);
}
-
break;
}
default:
@@ -9832,7 +8422,6 @@ newEntry();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
-
break;
}
default:
@@ -9841,15 +8430,12 @@ newEntry();
}
}
if (!hasError) {
-
t = jj_consume_token(FUNCTION_T);
}
if (!hasError) {
-
s = designator();
}
if (!hasError) {
-
currP=VhdlDocGen::FUNCTION;
if(tok)
createFunction(tok->image.c_str(),currP,s.data());
@@ -9860,29 +8446,23 @@ currP=VhdlDocGen::FUNCTION;
current->bodyLine=getLine(FUNCTION_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
param_sec=PARAM_SEC;
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
formal_parameter_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
param_sec=0;
}
-
break;
}
default:
@@ -9891,20 +8471,16 @@ param_sec=0;
}
}
if (!hasError) {
-
jj_consume_token(RETURN_T);
}
if (!hasError) {
-
s = type_mark();
}
if (!hasError) {
-
tempEntry=current.get();
current->type=s;
newEntry();
}
-
break;
}
default:
@@ -9912,11 +8488,11 @@ tempEntry=current.get();
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-void VhdlParser::subprogram_statement_part() {if (!hasError) {
-
+void VhdlParser::subprogram_statement_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ASSERT_T:
@@ -9943,120 +8519,100 @@ void VhdlParser::subprogram_statement_part() {if (!hasError) {
default:
jj_la1[224] = jj_gen;
goto end_label_42;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
sequential_statement();
}
-
}
end_label_42: ;
}
-
- }
+}
-QCString VhdlParser::subtype_declaration() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::subtype_declaration() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(SUBTYPE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
s1 = subtype_indication();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,s1.data(),Public);
return " subtype "+s+" is "+s1+";";
assert(false);
- }
+}
-QCString VhdlParser::subtype_indication() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::subtype_indication() {QCString s,s1,s2;
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
- if (jj_2_97(2147483647)) {if (!hasError) {
-
+ if (jj_2_97(2147483647)) {
+ if (!hasError) {
s1 = name();
}
-
} else {
;
}
}
if (!hasError) {
-
- if (jj_2_98(2147483647)) {if (!hasError) {
-
+ if (jj_2_98(2147483647)) {
+ if (!hasError) {
s2 = constraint();
}
-
} else {
;
}
}
-
return s+" "+s1+" "+s2;
assert(false);
- }
+}
QCString VhdlParser::suffix() {QCString s;
- if (jj_2_99(2147483647)) {if (!hasError) {
-
+ if (jj_2_99(2147483647)) {
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case CHARACTER_LITERAL:{if (!hasError) {
-
+ case CHARACTER_LITERAL:{
+ if (!hasError) {
s = character_literal();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case STRINGLITERAL:{if (!hasError) {
-
+ case STRINGLITERAL:{
+ if (!hasError) {
s = operator_symbol();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case ALL_T:{if (!hasError) {
-
+ case ALL_T:{
+ if (!hasError) {
jj_consume_token(ALL_T);
}
if (!hasError) {
-
return " all ";
}
-
break;
}
default:
@@ -10066,7 +8622,7 @@ return " all ";
}
}
assert(false);
- }
+}
QCString VhdlParser::target() {QCString s;
@@ -10074,26 +8630,22 @@ QCString VhdlParser::target() {QCString s;
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
s = aggregate();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -10102,99 +8654,84 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::term() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::term() {QCString s,s1,s2;
+ if (!hasError) {
s = factor();
}
if (!hasError) {
-
while (!hasError) {
if (jj_2_100(2)) {
;
} else {
goto end_label_43;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = multiplying_operation();
}
if (!hasError) {
-
s2 = factor();
}
if (!hasError) {
-
s+=s1;s+=s2;
}
-
}
end_label_43: ;
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::timeout_clause() {QCString s;if (!hasError) {
-
+QCString VhdlParser::timeout_clause() {QCString s;
+ if (!hasError) {
jj_consume_token(FOR_T);
}
if (!hasError) {
-
s = expression();
}
-
return " for "+s;
assert(false);
- }
+}
-QCString VhdlParser::type_conversion() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::type_conversion() {QCString s,s1;
+ if (!hasError) {
s = name();
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
return s+"("+s1+")";
assert(false);
- }
+}
QCString VhdlParser::type_declaration() {QCString s;
- if (jj_2_101(3)) {if (!hasError) {
-
+ if (jj_2_101(3)) {
+ if (!hasError) {
s = full_type_declaration();
}
if (!hasError) {
-
return s;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
s = incomplete_type_declaration();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -10204,80 +8741,68 @@ return s;
}
}
assert(false);
- }
+}
QCString VhdlParser::type_definition() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case RANGE_T:
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
//try{
s = scalar_type_definition();
}
if (!hasError) {
-
return s;
}
-
break;
}
case ARRAY_T:
- case RECORD_T:{if (!hasError) {
-
+ case RECORD_T:{
+ if (!hasError) {
s = composite_type_definition();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case ACCESS_T:{if (!hasError) {
-
+ case ACCESS_T:{
+ if (!hasError) {
s = access_type_definition();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
s = file_type_definition();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
jj_la1[228] = jj_gen;
- if (jj_2_102(2)) {if (!hasError) {
-
+ if (jj_2_102(2)) {
+ if (!hasError) {
protected_type_body();
}
if (!hasError) {
-
return "";
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PROTECTED_T:{if (!hasError) {
-
+ case PROTECTED_T:{
+ if (!hasError) {
protected_type_declaration();
}
if (!hasError) {
-
return "";
}
-
break;
}
default:
@@ -10288,33 +8813,29 @@ return "";
}
}
assert(false);
- }
+}
-QCString VhdlParser::type_mark() {QCString s;if (!hasError) {
-
+QCString VhdlParser::type_mark() {QCString s;
+ if (!hasError) {
s = name();
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::unconstraint_array_definition() {QCString s,s1,s2,s3;if (!hasError) {
-
+QCString VhdlParser::unconstraint_array_definition() {QCString s,s1,s2,s3;
+ if (!hasError) {
jj_consume_token(ARRAY_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s = index_subtype_definition();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -10324,50 +8845,41 @@ QCString VhdlParser::unconstraint_array_definition() {QCString s,s1,s2,s3;if (!h
default:
jj_la1[230] = jj_gen;
goto end_label_44;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = index_subtype_definition();
}
if (!hasError) {
-
s3+=",";s3+=s1;
}
-
}
end_label_44: ;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
if (!hasError) {
-
jj_consume_token(OF_T);
}
if (!hasError) {
-
s2 = subtype_indication();
}
-
return "array("+s+s3+") of "+s2;
assert(false);
- }
+}
-QCString VhdlParser::use_clause() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::use_clause() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(USE_T);
}
if (!hasError) {
-
s = selected_name();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -10377,27 +8889,22 @@ QCString VhdlParser::use_clause() {QCString s,s1;if (!hasError) {
default:
jj_la1[231] = jj_gen;
goto end_label_45;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = selected_name();
}
if (!hasError) {
-
s+=",";s+=s1;
}
-
}
end_label_45: ;
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
QCStringList ql1=QCStringList::split(",",s);
for (uint j=0;j<ql1.count();j++)
{
@@ -10411,7 +8918,7 @@ QCStringList ql1=QCStringList::split(",",s);
s1="use "+s;
return s1;
assert(false);
- }
+}
QCString VhdlParser::variable_assignment_statement() {QCString s,s1,s2;
@@ -10420,57 +8927,46 @@ QCString VhdlParser::variable_assignment_statement() {QCString s,s1,s2;
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
- if (jj_2_103(2)) {if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
+ if (jj_2_103(2)) {
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s+=":";
}
-
} else {
;
}
}
if (!hasError) {
-
s1 = target();
}
if (!hasError) {
-
jj_consume_token(VARASSIGN_T);
}
if (!hasError) {
-
s2 = expression();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
if (!hasError) {
-
return s+s1+":="+s2+";";
}
-
break;
}
- case WITH_T:{if (!hasError) {
-
+ case WITH_T:{
+ if (!hasError) {
selected_variable_assignment();
}
if (!hasError) {
-
return "";
}
-
break;
}
default:
@@ -10479,17 +8975,16 @@ return "";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=0;QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=0;QCString s,s1,s2;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case SHARED_T:{if (!hasError) {
-
+ case SHARED_T:{
+ if (!hasError) {
tok = jj_consume_token(SHARED_T);
}
-
break;
}
default:
@@ -10498,33 +8993,26 @@ QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=0;QCString s
}
}
if (!hasError) {
-
jj_consume_token(VARIABLE_T);
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s1 = subtype_indication();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case VARASSIGN_T:{if (!hasError) {
-
+ case VARASSIGN_T:{
+ if (!hasError) {
t1 = jj_consume_token(VARASSIGN_T);
}
if (!hasError) {
-
s2 = expression();
}
-
break;
}
default:
@@ -10533,10 +9021,8 @@ QCString VhdlParser::variable_declaration() {Token *tok=0;Token *t1=0;QCString s
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
int spec;
if(t1)
s2.prepend(":=");
@@ -10558,22 +9044,20 @@ int spec;
addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
return val;
assert(false);
- }
+}
-QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasError) {
-
+QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
t = jj_consume_token(COLON_T);
}
-
break;
}
default:
@@ -10582,17 +9066,14 @@ QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasEr
}
}
if (!hasError) {
-
jj_consume_token(WAIT_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ON_T:{if (!hasError) {
-
+ case ON_T:{
+ if (!hasError) {
s1 = sensitivity_clause();
}
-
break;
}
default:
@@ -10601,13 +9082,11 @@ QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasEr
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case UNTIL_T:{if (!hasError) {
-
+ case UNTIL_T:{
+ if (!hasError) {
s2 = condition_clause();
}
-
break;
}
default:
@@ -10616,13 +9095,11 @@ QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasEr
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case FOR_T:{if (!hasError) {
-
+ case FOR_T:{
+ if (!hasError) {
s3 = timeout_clause();
}
-
break;
}
default:
@@ -10631,14 +9108,12 @@ QCString VhdlParser::wait_statement() {QCString s,s1,s2,s3;Token *t=0;if (!hasEr
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
if(t) s.append(":");
return s+" wait "+s1+s2+s3+";";
assert(false);
- }
+}
QCString VhdlParser::waveform() {QCString s,s1;
@@ -10658,12 +9133,11 @@ QCString VhdlParser::waveform() {QCString s,s1;
case CHARACTER_LITERAL:
case DECIMAL_LITERAL:
case BASED_LITERAL:
- case BIT_STRING_LITERAL:{if (!hasError) {
-
+ case BIT_STRING_LITERAL:{
+ if (!hasError) {
s = waveform_element();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -10673,38 +9147,31 @@ QCString VhdlParser::waveform() {QCString s,s1;
default:
jj_la1[239] = jj_gen;
goto end_label_46;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
s1 = waveform_element();
}
if (!hasError) {
-
s+=","; s+=s1;
}
-
}
end_label_46: ;
}
if (!hasError) {
-
return s;
}
-
break;
}
- case UNAFFECTED_T:{if (!hasError) {
-
+ case UNAFFECTED_T:{
+ if (!hasError) {
jj_consume_token(UNAFFECTED_T);
}
if (!hasError) {
-
return " unaffected ";
}
-
break;
}
default:
@@ -10713,29 +9180,25 @@ return " unaffected ";
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::waveform_element() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::waveform_element() {QCString s,s1;
+ if (!hasError) {
s = expression();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case AFTER_T:{if (!hasError) {
-
+ case AFTER_T:{
+ if (!hasError) {
jj_consume_token(AFTER_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
s1.prepend(" after ");
}
-
break;
}
default:
@@ -10743,45 +9206,37 @@ s1.prepend(" after ");
;
}
}
-
return s+s1;
assert(false);
- }
+}
-QCString VhdlParser::protected_type_body() {if (!hasError) {
-
+QCString VhdlParser::protected_type_body() {
+ if (!hasError) {
jj_consume_token(PROTECTED_T);
}
if (!hasError) {
-
jj_consume_token(BODY_T);
}
if (!hasError) {
-
protected_type_body_declarative_part();
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(PROTECTED_T);
}
if (!hasError) {
-
jj_consume_token(BODY_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -10789,10 +9244,9 @@ QCString VhdlParser::protected_type_body() {if (!hasError) {
;
}
}
-
return "";
assert(false);
- }
+}
void VhdlParser::protected_type_body_declarative_item() {
@@ -10800,100 +9254,87 @@ void VhdlParser::protected_type_body_declarative_item() {
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
-
break;
}
- case IS_T:{if (!hasError) {
-
+ case IS_T:{
+ if (!hasError) {
subprogram_body();
}
-
break;
}
- case TYPE_T:{if (!hasError) {
-
+ case TYPE_T:{
+ if (!hasError) {
type_declaration();
}
-
break;
}
- case SUBTYPE_T:{if (!hasError) {
-
+ case SUBTYPE_T:{
+ if (!hasError) {
subtype_declaration();
}
-
break;
}
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
constant_declaration();
}
-
break;
}
case SHARED_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
variable_declaration();
}
-
break;
}
- case FILE_T:{if (!hasError) {
-
+ case FILE_T:{
+ if (!hasError) {
file_declaration();
}
-
break;
}
- case ALIAS_T:{if (!hasError) {
-
+ case ALIAS_T:{
+ if (!hasError) {
alias_declaration();
}
-
break;
}
default:
jj_la1[243] = jj_gen;
- if (jj_2_104(2147483647)) {if (!hasError) {
-
+ if (jj_2_104(2147483647)) {
+ if (!hasError) {
attribute_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
attribute_specification();
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
default:
jj_la1[244] = jj_gen;
- if (jj_2_105(3)) {if (!hasError) {
-
+ if (jj_2_105(3)) {
+ if (!hasError) {
group_template_declaration();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GROUP_T:{if (!hasError) {
-
+ case GROUP_T:{
+ if (!hasError) {
group_declaration();
}
-
break;
}
default:
@@ -10905,11 +9346,11 @@ void VhdlParser::protected_type_body_declarative_item() {
}
}
}
- }
+}
-void VhdlParser::protected_type_body_declarative_part() {if (!hasError) {
-
+void VhdlParser::protected_type_body_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
@@ -10933,50 +9374,42 @@ void VhdlParser::protected_type_body_declarative_part() {if (!hasError) {
default:
jj_la1[246] = jj_gen;
goto end_label_47;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
protected_type_body_declarative_item();
}
-
}
end_label_47: ;
}
-
- }
+}
-QCString VhdlParser::protected_type_declaration() {if (!hasError) {
-
+QCString VhdlParser::protected_type_declaration() {
+ if (!hasError) {
jj_consume_token(PROTECTED_T);
}
if (!hasError) {
-
- try {if (!hasError) {
-
+ try {
+ if (!hasError) {
protected_type_declarative_part();
}
-
} catch ( ...) {
error_skipto(END_T);
}
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(PROTECTED_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -10984,10 +9417,9 @@ error_skipto(END_T);
;
}
}
-
return "";
assert(false);
- }
+}
void VhdlParser::protected_type_declarative_item() {
@@ -10995,25 +9427,22 @@ void VhdlParser::protected_type_declarative_item() {
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_specification();
}
-
break;
}
- case ATTRIBUTE_T:{if (!hasError) {
-
+ case ATTRIBUTE_T:{
+ if (!hasError) {
attribute_specification();
}
-
break;
}
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
use_clause();
}
-
break;
}
default:
@@ -11021,11 +9450,11 @@ void VhdlParser::protected_type_declarative_item() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-void VhdlParser::protected_type_declarative_part() {if (!hasError) {
-
+void VhdlParser::protected_type_declarative_part() {
+ if (!hasError) {
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ATTRIBUTE_T:
@@ -11040,58 +9469,48 @@ void VhdlParser::protected_type_declarative_part() {if (!hasError) {
default:
jj_la1[249] = jj_gen;
goto end_label_48;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
protected_type_declarative_item();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
}
end_label_48: ;
}
-
- }
+}
-QCString VhdlParser::context_ref() {QCString s;if (!hasError) {
-
+QCString VhdlParser::context_ref() {QCString s;
+ if (!hasError) {
jj_consume_token(CONTEXT_T);
}
if (!hasError) {
-
s = identifier_list();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
return "context "+s ;
assert(false);
- }
+}
-void VhdlParser::context_declaration() {QCString s,s1;if (!hasError) {
-
+void VhdlParser::context_declaration() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(CONTEXT_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
parse_sec=CONTEXT_SEC;
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case CONTEXT_T:
@@ -11103,26 +9522,22 @@ parse_sec=CONTEXT_SEC;
default:
jj_la1[250] = jj_gen;
goto end_label_49;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = libustcont_stats();
}
-
}
end_label_49: ;
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case CONTEXT_T:{if (!hasError) {
-
+ case CONTEXT_T:{
+ if (!hasError) {
jj_consume_token(CONTEXT_T);
}
-
break;
}
default:
@@ -11131,14 +9546,12 @@ parse_sec=CONTEXT_SEC;
}
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -11147,48 +9560,40 @@ parse_sec=CONTEXT_SEC;
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
parse_sec=0;
addVhdlType(s.data(),getLine(LIBRARY_T),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",s1.data(),Public);
- }
+}
QCString VhdlParser::libustcont_stats() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case USE_T:{if (!hasError) {
-
+ case USE_T:{
+ if (!hasError) {
s = use_clause();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case LIBRARY_T:{if (!hasError) {
-
+ case LIBRARY_T:{
+ if (!hasError) {
s = library_clause();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case CONTEXT_T:{if (!hasError) {
-
+ case CONTEXT_T:{
+ if (!hasError) {
s = context_ref();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -11197,41 +9602,34 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-void VhdlParser::package_instantiation_declaration() {QCString s,s1,s2;if (!hasError) {
-
+void VhdlParser::package_instantiation_declaration() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(PACKAGE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
jj_consume_token(NEW_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s2 = signature();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
gen_assoc_list();
}
-
break;
}
default:
@@ -11240,43 +9638,35 @@ void VhdlParser::package_instantiation_declaration() {QCString s,s1,s2;if (!hasE
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
QCString q=" is new "+s1+s2;
addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public);
- }
+}
-QCString VhdlParser::interface_package_declaration() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::interface_package_declaration() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(PACKAGE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
jj_consume_token(NEW_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
gen_assoc_list();
}
-
break;
}
default:
@@ -11284,45 +9674,37 @@ QCString VhdlParser::interface_package_declaration() {QCString s,s1;if (!hasErro
;
}
}
-
current->name=s;
return "package "+s+" is new "+s1;
assert(false);
- }
+}
-QCString VhdlParser::subprogram_instantiation_declaration() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::subprogram_instantiation_declaration() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(FUNCTION_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
jj_consume_token(IS_T);
}
if (!hasError) {
-
jj_consume_token(NEW_T);
}
if (!hasError) {
-
s1 = name();
}
if (!hasError) {
-
s2 = signature();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case GENERIC_T:{if (!hasError) {
-
+ case GENERIC_T:{
+ if (!hasError) {
gen_assoc_list();
}
-
break;
}
default:
@@ -11331,152 +9713,122 @@ QCString VhdlParser::subprogram_instantiation_declaration() {QCString s,s1,s2;if
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
QCString q= " is new "+s1+s2;
addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public);
return q;
assert(false);
- }
+}
-void VhdlParser::gen_assoc_list() {if (!hasError) {
-
+void VhdlParser::gen_assoc_list() {
+ if (!hasError) {
jj_consume_token(GENERIC_T);
}
if (!hasError) {
-
jj_consume_token(MAP_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
association_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
- }
+}
-void VhdlParser::gen_interface_list() {if (!hasError) {
-
+void VhdlParser::gen_interface_list() {
+ if (!hasError) {
jj_consume_token(GENERIC_T);
}
if (!hasError) {
-
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
//int u=s_str.iLine;
parse_sec=GEN_SEC;
}
if (!hasError) {
-
interface_list();
}
if (!hasError) {
-
// QCString vo=$3;
parse_sec=0;
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
- }
+}
-void VhdlParser::case_scheme() {if (!hasError) {
-
+void VhdlParser::case_scheme() {
+ if (!hasError) {
jj_consume_token(CASE_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(GENERATE_T);
}
if (!hasError) {
-
when_stats();
}
if (!hasError) {
-
- if (jj_2_106(3)) {if (!hasError) {
-
+ if (jj_2_106(3)) {
+ if (!hasError) {
ttend();
}
-
} else {
;
}
}
if (!hasError) {
-
jj_consume_token(END_T);
}
if (!hasError) {
-
jj_consume_token(GENERATE_T);
}
if (!hasError) {
-
generate_statement_body();
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::when_stats() {if (!hasError) {
-
- while (!hasError) {if (!hasError) {
-
+void VhdlParser::when_stats() {
+ if (!hasError) {
+ while (!hasError) {
+ if (!hasError) {
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
- if (jj_2_107(2)) {if (!hasError) {
-
+ if (jj_2_107(2)) {
+ if (!hasError) {
label();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
-
} else {
;
}
}
if (!hasError) {
-
choices();
}
if (!hasError) {
-
jj_consume_token(ARROW_T);
}
if (!hasError) {
-
generate_statement_body();
}
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case WHEN_T:{
;
@@ -11489,23 +9841,20 @@ void VhdlParser::when_stats() {if (!hasError) {
}
end_label_50: ;
}
-
- }
+}
-void VhdlParser::ttend() {if (!hasError) {
-
+void VhdlParser::ttend() {
+ if (!hasError) {
jj_consume_token(END_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
identifier();
}
-
break;
}
default:
@@ -11514,27 +9863,23 @@ void VhdlParser::ttend() {if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::generate_statement_body() {if (!hasError) {
-
+void VhdlParser::generate_statement_body() {
+ if (!hasError) {
jj_consume_token(BEGIN_T);
}
if (!hasError) {
-
generate_statement_body();
}
-
- }
+}
-void VhdlParser::generate_statement_body1() {if (!hasError) {
-
+void VhdlParser::generate_statement_body1() {
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ALIAS_T:
case ATTRIBUTE_T:
@@ -11554,26 +9899,23 @@ void VhdlParser::generate_statement_body1() {if (!hasError) {
case SUBTYPE_T:
case TYPE_T:
case USE_T:
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
while (!hasError) {
if (jj_2_108(2147483647)) {
;
} else {
goto end_label_51;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
block_declarative_item();
}
-
}
end_label_51: ;
}
if (!hasError) {
-
jj_consume_token(BEGIN_T);
}
-
break;
}
default:
@@ -11582,7 +9924,6 @@ void VhdlParser::generate_statement_body1() {if (!hasError) {
}
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ASSERT_T:
@@ -11602,83 +9943,69 @@ void VhdlParser::generate_statement_body1() {if (!hasError) {
default:
jj_la1[260] = jj_gen;
goto end_label_52;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
concurrent_statement();
}
-
}
end_label_52: ;
}
-
- }
+}
-QCString VhdlParser::external_name() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::external_name() {QCString s,s1,s2;
+ if (!hasError) {
jj_consume_token(SLSL_T);
}
if (!hasError) {
-
s = sig_stat();
}
if (!hasError) {
-
s1 = external_pathname();
}
if (!hasError) {
-
jj_consume_token(COLON_T);
}
if (!hasError) {
-
s2 = subtype_indication();
}
if (!hasError) {
-
jj_consume_token(RSRS_T);
}
-
QCString t="<<"+s;
QCString t1=s1+":"+s2+">>";
return s+s1;
assert(false);
- }
+}
QCString VhdlParser::sig_stat() {Token *t;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case CONSTANT_T:{if (!hasError) {
-
+ case CONSTANT_T:{
+ if (!hasError) {
t = jj_consume_token(CONSTANT_T);
}
if (!hasError) {
-
return t->image.data();
}
-
break;
}
- case SIGNAL_T:{if (!hasError) {
-
+ case SIGNAL_T:{
+ if (!hasError) {
t = jj_consume_token(SIGNAL_T);
}
if (!hasError) {
-
return t->image.data();
}
-
break;
}
- case VARIABLE_T:{if (!hasError) {
-
+ case VARIABLE_T:{
+ if (!hasError) {
t = jj_consume_token(VARIABLE_T);
}
if (!hasError) {
-
return t->image.data();
}
-
break;
}
default:
@@ -11687,42 +10014,36 @@ return t->image.data();
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::external_pathname() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case DOT_T:{if (!hasError) {
-
+ case DOT_T:{
+ if (!hasError) {
s = absolute_pathname();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case NEG_T:{if (!hasError) {
-
+ case NEG_T:{
+ if (!hasError) {
s = relative_pathname();
}
if (!hasError) {
-
return s;
}
-
break;
}
- case AT_T:{if (!hasError) {
-
+ case AT_T:{
+ if (!hasError) {
s = package_path_name();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -11731,42 +10052,35 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
QCString VhdlParser::absolute_pathname() {QCString s,s1;
- if (jj_2_109(2147483647)) {if (!hasError) {
-
+ if (jj_2_109(2147483647)) {
+ if (!hasError) {
jj_consume_token(DOT_T);
}
if (!hasError) {
-
s = pathname_element_list();
}
if (!hasError) {
-
s1 = identifier();
}
if (!hasError) {
-
return "."+s+s1;
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case DOT_T:{if (!hasError) {
-
+ case DOT_T:{
+ if (!hasError) {
jj_consume_token(DOT_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
return "."+s;
}
-
break;
}
default:
@@ -11776,49 +10090,42 @@ return "."+s;
}
}
assert(false);
- }
+}
-QCString VhdlParser::relative_pathname() {QCString s,s1,s2;if (!hasError) {
-
+QCString VhdlParser::relative_pathname() {QCString s,s1,s2;
+ if (!hasError) {
s = neg_list();
}
if (!hasError) {
-
- if (jj_2_110(2147483647)) {if (!hasError) {
-
+ if (jj_2_110(2147483647)) {
+ if (!hasError) {
s1 = pathname_element_list();
}
-
} else {
;
}
}
if (!hasError) {
-
s2 = identifier();
}
-
return s+s1+s2;
assert(false);
- }
+}
-QCString VhdlParser::neg_list() {QCString s;if (!hasError) {
-
- while (!hasError) {if (!hasError) {
-
+QCString VhdlParser::neg_list() {QCString s;
+ if (!hasError) {
+ while (!hasError) {
+ if (!hasError) {
jj_consume_token(NEG_T);
}
if (!hasError) {
-
jj_consume_token(DOT_T);
}
if (!hasError) {
-
s+="^.";
}
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case NEG_T:{
;
@@ -11831,32 +10138,27 @@ s+="^.";
}
end_label_53: ;
}
-
return s;
assert(false);
- }
+}
-QCString VhdlParser::pathname_element() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::pathname_element() {QCString s,s1;
+ if (!hasError) {
s = identifier();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = expression();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
break;
}
default:
@@ -11864,90 +10166,77 @@ QCString VhdlParser::pathname_element() {QCString s,s1;if (!hasError) {
;
}
}
-
if(!s1.isEmpty())
return s+"("+s1+")";
return s;
assert(false);
- }
+}
-QCString VhdlParser::pathname_element_list() {QCString s,s1,s2;if (!hasError) {
+QCString VhdlParser::pathname_element_list() {QCString s,s1,s2;
+ if (!hasError) {
if (!hasError) {
-
s = pathname_element();
}
if (!hasError) {
-
jj_consume_token(DOT_T);
}
-
}
if (!hasError) {
-
s+=".";
}
if (!hasError) {
-
while (!hasError) {
if (jj_2_111(2147483647)) {
;
} else {
goto end_label_54;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
s1 = pathname_element();
}
if (!hasError) {
-
jj_consume_token(DOT_T);
}
if (!hasError) {
-
s2+=s1;s2+=".";
}
-
}
end_label_54: ;
}
-
return s+s2;
assert(false);
- }
+}
-QCString VhdlParser::package_path_name() {QCString s;if (!hasError) {
-
+QCString VhdlParser::package_path_name() {QCString s;
+ if (!hasError) {
jj_consume_token(AT_T);
}
if (!hasError) {
-
s = name();
}
-
return "@"+s;
assert(false);
- }
+}
void VhdlParser::conditional_signal_assignment_wave() {
- if (jj_2_112(2147483647)) {if (!hasError) {
-
+ if (jj_2_112(2147483647)) {
+ if (!hasError) {
conditional_force_assignment();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case LPAREN_T:
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
conditional_waveform_assignment();
}
-
break;
}
default:
@@ -11956,27 +10245,24 @@ void VhdlParser::conditional_signal_assignment_wave() {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
- }
+}
-void VhdlParser::conditional_waveform_assignment() {if (!hasError) {
-
+void VhdlParser::conditional_waveform_assignment() {
+ if (!hasError) {
target();
}
if (!hasError) {
-
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case INERTIAL_T:
case REJECT_T:
- case TRANSPORT_T:{if (!hasError) {
-
+ case TRANSPORT_T:{
+ if (!hasError) {
delay_mechanism();
}
-
break;
}
default:
@@ -11985,25 +10271,20 @@ void VhdlParser::conditional_waveform_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
waveform_element();
}
if (!hasError) {
-
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case ELSE_T:{if (!hasError) {
-
+ case ELSE_T:{
+ if (!hasError) {
else_wave_list();
}
-
break;
}
default:
@@ -12012,33 +10293,27 @@ void VhdlParser::conditional_waveform_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
-void VhdlParser::else_wave_list() {if (!hasError) {
-
+void VhdlParser::else_wave_list() {
+ if (!hasError) {
jj_consume_token(ELSE_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WHEN_T:{if (!hasError) {
-
+ case WHEN_T:{
+ if (!hasError) {
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
expression();
}
-
break;
}
default:
@@ -12046,31 +10321,26 @@ void VhdlParser::else_wave_list() {if (!hasError) {
;
}
}
-
- }
+}
-void VhdlParser::conditional_force_assignment() {if (!hasError) {
-
+void VhdlParser::conditional_force_assignment() {
+ if (!hasError) {
target();
}
if (!hasError) {
-
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
jj_consume_token(FORCE_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IN_T:
- case OUT_T:{if (!hasError) {
-
+ case OUT_T:{
+ if (!hasError) {
inout_stat();
}
-
break;
}
default:
@@ -12079,15 +10349,12 @@ void VhdlParser::conditional_force_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ABS_T:
case NEW_T:
@@ -12104,15 +10371,13 @@ void VhdlParser::conditional_force_assignment() {if (!hasError) {
case CHARACTER_LITERAL:
case DECIMAL_LITERAL:
case BASED_LITERAL:
- case BIT_STRING_LITERAL:{if (!hasError) {
-
+ case BIT_STRING_LITERAL:{
+ if (!hasError) {
expression();
}
if (!hasError) {
-
else_stat();
}
-
break;
}
default:
@@ -12121,26 +10386,22 @@ void VhdlParser::conditional_force_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
void VhdlParser::selected_signal_assignment_wave() {
- if (jj_2_113(2147483647)) {if (!hasError) {
-
+ if (jj_2_113(2147483647)) {
+ if (!hasError) {
selected_force_assignment();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WITH_T:{if (!hasError) {
-
+ case WITH_T:{
+ if (!hasError) {
selected_waveform_assignment();
}
-
break;
}
default:
@@ -12149,29 +10410,25 @@ void VhdlParser::selected_signal_assignment_wave() {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
- }
+}
-void VhdlParser::selected_variable_assignment() {if (!hasError) {
-
+void VhdlParser::selected_variable_assignment() {
+ if (!hasError) {
jj_consume_token(WITH_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(SELECT_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case Q_T:{if (!hasError) {
-
+ case Q_T:{
+ if (!hasError) {
jj_consume_token(Q_T);
}
-
break;
}
default:
@@ -12180,37 +10437,31 @@ void VhdlParser::selected_variable_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
select_name();
}
if (!hasError) {
-
jj_consume_token(VARASSIGN_T);
}
if (!hasError) {
-
sel_var_list();
}
-
- }
+}
void VhdlParser::select_name() {
- if (jj_2_114(2147483647)) {if (!hasError) {
-
+ if (jj_2_114(2147483647)) {
+ if (!hasError) {
aggregate();
}
-
} else {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case SLSL_T:
case STRINGLITERAL:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
name();
}
-
break;
}
default:
@@ -12219,29 +10470,25 @@ void VhdlParser::select_name() {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
- }
+}
-void VhdlParser::selected_waveform_assignment() {if (!hasError) {
-
+void VhdlParser::selected_waveform_assignment() {
+ if (!hasError) {
jj_consume_token(WITH_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(SELECT_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case Q_T:{if (!hasError) {
-
+ case Q_T:{
+ if (!hasError) {
jj_consume_token(Q_T);
}
-
break;
}
default:
@@ -12250,23 +10497,19 @@ void VhdlParser::selected_waveform_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
target();
}
if (!hasError) {
-
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case INERTIAL_T:
case REJECT_T:
- case TRANSPORT_T:{if (!hasError) {
-
+ case TRANSPORT_T:{
+ if (!hasError) {
delay_mechanism();
}
-
break;
}
default:
@@ -12275,33 +10518,27 @@ void VhdlParser::selected_waveform_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
sel_wave_list();
}
-
- }
+}
-void VhdlParser::selected_force_assignment() {if (!hasError) {
-
+void VhdlParser::selected_force_assignment() {
+ if (!hasError) {
jj_consume_token(WITH_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(SELECT_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case Q_T:{if (!hasError) {
-
+ case Q_T:{
+ if (!hasError) {
jj_consume_token(Q_T);
}
-
break;
}
default:
@@ -12310,26 +10547,21 @@ void VhdlParser::selected_force_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
target();
}
if (!hasError) {
-
jj_consume_token(LESSTHAN_T);
}
if (!hasError) {
-
jj_consume_token(FORCE_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IN_T:
- case OUT_T:{if (!hasError) {
-
+ case OUT_T:{
+ if (!hasError) {
inout_stat();
}
-
break;
}
default:
@@ -12338,41 +10570,34 @@ void VhdlParser::selected_force_assignment() {if (!hasError) {
}
}
if (!hasError) {
-
sel_var_list();
}
-
- }
+}
-void VhdlParser::sel_var_list() {if (!hasError) {
+void VhdlParser::sel_var_list() {
+ if (!hasError) {
if (!hasError) {
-
expression();
}
if (!hasError) {
-
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
choices();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case COMMA_T:{if (!hasError) {
-
+ case COMMA_T:{
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
-
break;
}
- case SEMI_T:{if (!hasError) {
-
+ case SEMI_T:{
+ if (!hasError) {
jj_consume_token(SEMI_T);
}
-
break;
}
default:
@@ -12381,42 +10606,35 @@ void VhdlParser::sel_var_list() {if (!hasError) {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
-
}
if (!hasError) {
-
while (!hasError) {
if (jj_2_115(2147483647)) {
;
} else {
goto end_label_55;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
expression();
}
if (!hasError) {
-
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
choices();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case COMMA_T:{if (!hasError) {
-
+ case COMMA_T:{
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
-
break;
}
- case SEMI_T:{if (!hasError) {
-
+ case SEMI_T:{
+ if (!hasError) {
jj_consume_token(SEMI_T);
}
-
break;
}
default:
@@ -12425,28 +10643,23 @@ void VhdlParser::sel_var_list() {if (!hasError) {
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
-
}
end_label_55: ;
}
-
- }
+}
-void VhdlParser::sel_wave_list() {if (!hasError) {
-
+void VhdlParser::sel_wave_list() {
+ if (!hasError) {
waveform_element();
}
if (!hasError) {
-
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
choices();
}
if (!hasError) {
-
while (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case COMMA_T:{
@@ -12456,40 +10669,34 @@ void VhdlParser::sel_wave_list() {if (!hasError) {
default:
jj_la1[281] = jj_gen;
goto end_label_56;
- }if (!hasError) {
-
+ }
+ if (!hasError) {
jj_consume_token(COMMA_T);
}
if (!hasError) {
-
sel_wave_list();
}
-
}
end_label_56: ;
}
if (!hasError) {
-
jj_consume_token(SEMI_T);
}
-
- }
+}
void VhdlParser::inout_stat() {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case IN_T:{if (!hasError) {
-
+ case IN_T:{
+ if (!hasError) {
jj_consume_token(IN_T);
}
-
break;
}
- case OUT_T:{if (!hasError) {
-
+ case OUT_T:{
+ if (!hasError) {
jj_consume_token(OUT_T);
}
-
break;
}
default:
@@ -12497,31 +10704,27 @@ void VhdlParser::inout_stat() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
-void VhdlParser::else_stat() {if (!hasError) {
-
- while (!hasError) {if (!hasError) {
-
+void VhdlParser::else_stat() {
+ if (!hasError) {
+ while (!hasError) {
+ if (!hasError) {
jj_consume_token(ELSE_T);
}
if (!hasError) {
-
expression();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case WHEN_T:{if (!hasError) {
-
+ case WHEN_T:{
+ if (!hasError) {
jj_consume_token(WHEN_T);
}
if (!hasError) {
-
expression();
}
-
break;
}
default:
@@ -12529,7 +10732,6 @@ void VhdlParser::else_stat() {if (!hasError) {
;
}
}
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case ELSE_T:{
;
@@ -12542,34 +10744,29 @@ void VhdlParser::else_stat() {if (!hasError) {
}
end_label_57: ;
}
-
- }
+}
QCString VhdlParser::interface_subprogram_declaration() {QCString s;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PROCEDURE_T:{if (!hasError) {
-
+ case PROCEDURE_T:{
+ if (!hasError) {
s = iproc();
}
if (!hasError) {
-
return s;
}
-
break;
}
case FUNCTION_T:
case IMPURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
s = ifunc();
}
if (!hasError) {
-
return s;
}
-
break;
}
default:
@@ -12578,46 +10775,41 @@ return s;
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
assert(false);
- }
+}
-QCString VhdlParser::iproc() {QCString s,s1;if (!hasError) {
-
+QCString VhdlParser::iproc() {QCString s,s1;
+ if (!hasError) {
jj_consume_token(PROCEDURE_T);
}
if (!hasError) {
-
s = identifier();
}
if (!hasError) {
-
s1 = param();
}
-
current->name=s;
return "procedure "+s+s1;
assert(false);
- }
+}
-QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;if (!hasError) {
-
+QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IMPURE_T:
case PURE_T:{
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
t = jj_consume_token(PURE_T);
}
-
break;
}
- case IMPURE_T:{if (!hasError) {
-
+ case IMPURE_T:{
+ if (!hasError) {
t = jj_consume_token(IMPURE_T);
}
-
break;
}
default:
@@ -12633,48 +10825,39 @@ QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *
}
}
if (!hasError) {
-
jj_consume_token(FUNCTION_T);
}
if (!hasError) {
-
s = name();
}
if (!hasError) {
-
s1 = param();
}
if (!hasError) {
-
jj_consume_token(RETURN_T);
}
if (!hasError) {
-
s2 = name();
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case IS_T:{if (!hasError) {
-
+ case IS_T:{
+ if (!hasError) {
t1 = jj_consume_token(IS_T);
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
s3 = identifier();
}
-
break;
}
- case BOX_T:{if (!hasError) {
-
+ case BOX_T:{
+ if (!hasError) {
t2 = jj_consume_token(BOX_T);
}
-
break;
}
default:
@@ -12683,7 +10866,6 @@ QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
}
-
break;
}
default:
@@ -12691,7 +10873,6 @@ QCString VhdlParser::ifunc() {QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *
;
}
}
-
QCString q;
if(t) q=t->image.data();
if(t2) s3="<>";
@@ -12711,17 +10892,16 @@ QCString q;
}
currP=0;return "";
assert(false);
- }
+}
-QCString VhdlParser::param() {QCString s,s1;Token *tok=0;if (!hasError) {
-
+QCString VhdlParser::param() {QCString s,s1;Token *tok=0;
+ if (!hasError) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PARAMETER_T:{if (!hasError) {
-
+ case PARAMETER_T:{
+ if (!hasError) {
tok = jj_consume_token(PARAMETER_T);
}
-
break;
}
default:
@@ -12730,25 +10910,20 @@ QCString VhdlParser::param() {QCString s,s1;Token *tok=0;if (!hasError) {
}
}
if (!hasError) {
-
param_sec=PARAM_SEC;
}
if (!hasError) {
-
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LPAREN_T:{if (!hasError) {
-
+ case LPAREN_T:{
+ if (!hasError) {
jj_consume_token(LPAREN_T);
}
if (!hasError) {
-
s1 = interface_list();
}
if (!hasError) {
-
jj_consume_token(RPAREN_T);
}
-
break;
}
default:
@@ -12756,7 +10931,6 @@ param_sec=PARAM_SEC;
;
}
}
-
if(tok)
{
s = tok->image.data();
@@ -12765,7 +10939,7 @@ if(tok)
param_sec=0;
return s+"("+s1+")";
assert(false);
- }
+}
void VhdlParser::parseInline() {
@@ -12773,21 +10947,19 @@ void VhdlParser::parseInline() {
case POSTPONED_T:
case PROCESS_T:
case BASIC_IDENTIFIER:
- case EXTENDED_CHARACTER:{if (!hasError) {
-
+ case EXTENDED_CHARACTER:{
+ if (!hasError) {
process_statement();
}
-
break;
}
case FUNCTION_T:
case IMPURE_T:
case PROCEDURE_T:
- case PURE_T:{if (!hasError) {
-
+ case PURE_T:{
+ if (!hasError) {
subprogram_declaration();
}
-
break;
}
default:
@@ -12795,55 +10967,61 @@ void VhdlParser::parseInline() {
jj_consume_token(-1);
errorHandler->handleParseError(token, getToken(1), __FUNCTION__, this), hasError = true;
}
- }
+}
- VhdlParser::VhdlParser(TokenManager *tm){
- head = NULL;
- ReInit(tm);
+ VhdlParser::VhdlParser(TokenManager *tokenManager){
+ head = nullptr;
+ ReInit(tokenManager);
}
- VhdlParser::~VhdlParser()
+VhdlParser::~VhdlParser()
{
- if (token_source) delete token_source;
- if (head) {
- Token *next, *t = head;
- while (t) {
- next = t->next;
- delete t;
- t = next;
- }
- }
- if (errorHandlerCreated) {
- delete errorHandler;
- }
+ clear();
}
-void VhdlParser::ReInit(TokenManager *tm){
- if (head) delete head;
+void VhdlParser::ReInit(TokenManager* tokenManager){
+ clear();
errorHandler = new ErrorHandler();
- errorHandlerCreated = true;
hasError = false;
- token_source = tm;
+ token_source = tokenManager;
head = token = new Token();
token->kind = 0;
- token->next = NULL;
+ token->next = nullptr;
jj_lookingAhead = false;
jj_rescan = false;
jj_done = false;
- jj_scanpos = jj_lastpos = NULL;
+ jj_scanpos = jj_lastpos = nullptr;
jj_gc = 0;
jj_kind = -1;
- trace_indent = 0;
- trace_enabled = false;
+ indent = 0;
+ trace = false;
jj_ntk = -1;
jj_gen = 0;
for (int i = 0; i < 293; i++) jj_la1[i] = -1;
}
+void VhdlParser::clear(){
+ //Since token manager was generate from outside,
+ //parser should not take care of deleting
+ //if (token_source) delete token_source;
+ if (head) {
+ Token *next, *t = head;
+ while (t) {
+ next = t->next;
+ delete t;
+ t = next;
+ }
+ }
+ if (errorHandler) {
+ delete errorHandler, errorHandler = nullptr;
+ }
+}
+
+
Token * VhdlParser::jj_consume_token(int kind) {
Token *oldToken;
- if ((oldToken = token)->next != NULL) token = token->next;
+ if ((oldToken = token)->next != nullptr) token = token->next;
else token = token->next = token_source->getNextToken();
jj_ntk = -1;
if (token->kind == kind) {
@@ -12852,8 +11030,8 @@ Token * VhdlParser::jj_consume_token(int kind) {
jj_gc = 0;
for (int i = 0; i < 115; i++) {
JJCalls *c = &jj_2_rtns[i];
- while (c != NULL) {
- if (c->gen < jj_gen) c->first = NULL;
+ while (c != nullptr) {
+ if (c->gen < jj_gen) c->first = nullptr;
c = c->next;
}
}
@@ -12862,8 +11040,9 @@ Token * VhdlParser::jj_consume_token(int kind) {
}
token = oldToken;
jj_kind = kind;
- JAVACC_STRING_TYPE image = kind >= 0 ? tokenImage[kind] : tokenImage[0];
- errorHandler->handleUnexpectedToken(kind, image.substr(1, image.size() - 2), getToken(1), this), hasError = true;
+ JJString image = kind >= 0 ? tokenImage[kind] : tokenImage[0];
+ errorHandler->handleUnexpectedToken(kind, image.substr(1, image.size() - 2), getToken(1), this);
+ hasError = true;
return token;
}
@@ -12871,7 +11050,7 @@ Token * VhdlParser::jj_consume_token(int kind) {
bool VhdlParser::jj_scan_token(int kind){
if (jj_scanpos == jj_lastpos) {
jj_la--;
- if (jj_scanpos->next == NULL) {
+ if (jj_scanpos->next == nullptr) {
jj_lastpos = jj_scanpos = jj_scanpos->next = token_source->getNextToken();
} else {
jj_lastpos = jj_scanpos = jj_scanpos->next;
@@ -12881,8 +11060,8 @@ bool VhdlParser::jj_scan_token(int kind){
}
if (jj_rescan) {
int i = 0; Token *tok = token;
- while (tok != NULL && tok != jj_scanpos) { i++; tok = tok->next; }
- if (tok != NULL) jj_add_error_token(kind, i);
+ while (tok != nullptr && tok != jj_scanpos) { i++; tok = tok->next; }
+ if (tok != nullptr) jj_add_error_token(kind, i);
}
if (jj_scanpos->kind != kind) return true;
if (jj_la == 0 && jj_scanpos == jj_lastpos) { return jj_done = true; }
@@ -12893,7 +11072,7 @@ bool VhdlParser::jj_scan_token(int kind){
/** Get the next Token. */
Token * VhdlParser::getNextToken(){
- if (token->next != NULL) token = token->next;
+ if (token->next != nullptr) token = token->next;
else token = token->next = token_source->getNextToken();
jj_ntk = -1;
jj_gen++;
@@ -12905,7 +11084,7 @@ Token * VhdlParser::getNextToken(){
Token * VhdlParser::getToken(int index){
Token *t = token;
for (int i = 0; i < index; i++) {
- if (t->next != NULL) t = t->next;
+ if (t->next != nullptr) t = t->next;
else t = t->next = token_source->getNextToken();
}
return t;
@@ -12913,33 +11092,35 @@ Token * VhdlParser::getToken(int index){
int VhdlParser::jj_ntk_f(){
- if ((jj_nt=token->next) == NULL)
+ if ((jj_nt=token->next) == nullptr)
return (jj_ntk = (token->next=token_source->getNextToken())->kind);
else
return (jj_ntk = jj_nt->kind);
}
-void VhdlParser::jj_add_error_token(int kind, int pos) {
+ void VhdlParser::jj_add_error_token(int kind, int pos) {
}
- /** Generate ParseException. */
void VhdlParser::parseError() {
fprintf(stderr, "Parse error at: %d:%d, after token: %s encountered: %s\n", token->beginLine, token->beginColumn, addUnicodeEscapes(token->image).c_str(), addUnicodeEscapes(getToken(1)->image).c_str());
}
- void VhdlParser::enable_tracing() {
+ bool VhdlParser::trace_enabled() {
+ return trace;
}
- /** Disable tracing. */
- void VhdlParser::disable_tracing() {
+ void VhdlParser::enable_tracing() {
+ }
+
+ void VhdlParser::disable_tracing() {
}
-void VhdlParser::jj_rescan_token(){
+ void VhdlParser::jj_rescan_token(){
jj_rescan = true;
for (int i = 0; i < 115; i++) {
JJCalls *p = &jj_2_rtns[i];
@@ -13065,16 +11246,16 @@ void VhdlParser::jj_rescan_token(){
}
}
p = p->next;
- } while (p != NULL);
+ } while (p != nullptr);
}
jj_rescan = false;
}
-void VhdlParser::jj_save(int index, int xla){
+ void VhdlParser::jj_save(int index, int xla){
JJCalls *p = &jj_2_rtns[index];
while (p->gen > jj_gen) {
- if (p->next == NULL) { p = p->next = new JJCalls(); break; }
+ if (p->next == nullptr) { p = p->next = new JJCalls(); break; }
p = p->next;
}
p->gen = jj_gen + xla - jj_la; p->first = token; p->arg = xla;
diff --git a/vhdlparser/VhdlParser.h b/vhdlparser/VhdlParser.h
index 3cd383a..b88f156 100644
--- a/vhdlparser/VhdlParser.h
+++ b/vhdlparser/VhdlParser.h
@@ -4,585 +4,305 @@
#include "CharStream.h"
#include "Token.h"
#include "TokenManager.h"
-#include "VhdlParserTokenManager.h"
#include "vhdljjparser.h"
-
#include "VhdlParserConstants.h"
#include "ErrorHandler.h"
namespace vhdl {
namespace parser {
struct JJCalls {
- int gen;
- Token *first;
- int arg;
- JJCalls *next;
+ int gen;
+ int arg;
+ JJCalls* next;
+ Token* first;
~JJCalls() { if (next) delete next; }
- JJCalls() { next = NULL; arg = 0; gen = -1; first = NULL; }
+ JJCalls() { next = nullptr; arg = 0; gen = -1; first = nullptr; }
};
class VhdlParser {
- public:
-
+public:
QCString abstract_literal();
-
QCString access_type_definition();
-
QCString actual_designator();
-
QCString actual_parameter_part();
-
QCString actual_part();
-
QCString adding_operator();
-
QCString aggregate();
-
QCString alias_declaration();
-
QCString alias_designator();
-
void allocator();
-
void architecture_body();
-
void architecture_declarative_part();
-
void architecture_statement_part();
-
QCString array_type_definition();
-
QCString assertion();
-
QCString assertion_statement();
-
QCString association_element();
-
QCString association_list();
-
QCString attribute_declaration();
-
QCString attribute_designator();
-
QCString attribute_name();
-
QCString attribute_specification();
-
QCString base();
-
QCString base_specifier();
-
QCString base_unit_declaration();
-
QCString based_integer();
-
QCString based_literal();
-
QCString basic_identifier();
-
void binding_indication();
-
QCString bit_string_literal();
-
QCString bit_value();
-
void block_configuration();
-
void block_declarative_item();
-
void block_declarative_part();
-
void block_header();
-
void block_specification();
-
void block_statement();
-
void block_statement_part();
-
void case_statement();
-
void case_statement_alternative();
-
QCString character_literal();
-
QCString choice();
-
QCString choices();
-
void component_configuration();
-
void component_declaration();
-
void component_instantiation_statement();
-
void component_specification();
-
QCString composite_type_definition();
-
void concurrent_assertion_statement();
-
void concurrent_procedure_call_statement();
-
void concurrent_signal_assignment_statement();
-
void concurrent_statement();
-
QCString condition();
-
QCString condition_clause();
-
void conditional_signal_assignment();
-
void conditional_waveforms();
-
void configuration_declaration();
-
void configuration_declarative_item();
-
void configuration_declarative_part();
-
void configuration_item();
-
void configuration_specification();
-
QCString constant_declaration();
-
QCString constraint_array_definition();
-
void context_clause();
-
QCString constraint();
-
void context_item();
-
QCString decimal_literal();
-
QCString delay_mechanism();
-
void design_file();
-
void design_unit();
-
QCString designator();
-
QCString direction();
-
void disconnection_specification();
-
void guarded_signal_specificatio();
-
QCString discrete_range();
-
QCString element_association();
-
QCString element_declaration();
-
QCString entity_aspect();
-
QCString entity_class();
-
QCString entity_class_entry();
-
QCString entity_class_entry_list();
-
void entity_declaration();
-
void entity_declarative_item();
-
void entity_declarative_part();
-
QCString entity_designator();
-
void entity_header();
-
QCString entity_name_list();
-
QCString entity_specification();
-
void entity_statement();
-
void entity_statement_part();
-
QCString entity_tag();
-
QCString enumeration_literal();
-
QCString enumeration_type_definition();
-
QCString exit_statement();
-
QCString expression();
-
QCString logop();
-
QCString extended_identifier();
-
QCString factor();
-
QCString file_declaration();
-
QCString file_logical_name();
-
QCString file_open_information();
-
QCString file_type_definition();
-
QCString floating_type_definition();
-
QCString formal_designator();
-
QCString formal_parameter_list();
-
QCString formal_part();
-
QCString full_type_declaration();
-
QCString function_call();
-
void generate_statement();
-
void generate_scheme();
-
void generic_clause();
-
QCString generic_list();
-
void generic_map_aspect();
-
QCString group_constituent();
-
QCString group_constituent_list();
-
QCString group_declaration();
-
QCString group_template_declaration();
-
void guarded_signal_specification();
-
QCString identifier();
-
QCString identifier_list();
-
void if_statement();
-
QCString incomplete_type_declaration();
-
QCString index_constraint();
-
QCString index_specification();
-
QCString index_subtype_definition();
-
QCString instantiation_unit();
-
QCString instantiation_list();
-
QCString integer();
-
QCString integer_type_definition();
-
QCString interface_declaration();
-
QCString interface_element();
-
QCString interface_file_declaration();
-
QCString interface_list();
-
QCString interface_variable_declaration();
-
QCString iteration_scheme();
-
QCString label();
-
QCString library_clause();
-
QCString library_unit();
-
QCString literal();
-
QCString logical_operator();
-
QCString loop_statement();
-
QCString miscellaneous_operator();
-
QCString mode();
-
QCString multiplying_operation();
-
QCString name();
-
QCString name_ext1();
-
QCString name_ext();
-
QCString test_att_name();
-
QCString indexed_name();
-
QCString next_statement();
-
QCString null_statement();
-
QCString numeric_literal();
-
QCString object_class();
-
QCString operator_symbol();
-
void options();
-
void package_body();
-
void package_body_declarative_item();
-
void package_body_declarative_part();
-
void package_declaration();
-
void geninter();
-
void package_declarative_item();
-
void package_declarative_part();
-
QCString parameter_specification();
-
QCString physical_literal();
-
QCString physical_type_definition();
-
void port_clause();
-
QCString port_list();
-
void port_map_aspect();
-
QCString primary();
-
void primary_unit();
-
QCString procedure_call();
-
QCString procedure_call_statement();
-
QCString process_declarative_item();
-
QCString process_declarative_part();
-
void process_statement();
-
void process_statement_part();
-
QCString qualified_expression();
-
QCString range();
-
QCString range_constraint();
-
void record_type_definition();
-
QCString relation();
-
QCString relation_operator();
-
QCString report_statement();
-
QCString return_statement();
-
QCString scalar_type_definition();
-
void secondary_unit();
-
QCString secondary_unit_declaration();
-
QCString selected_name();
-
void selected_signal_assignment();
-
void selected_waveforms();
-
QCString sensitivity_clause();
-
QCString sensitivity_list();
-
QCString sequence_of_statement();
-
QCString sequential_statement();
-
QCString shift_expression();
-
QCString shift_operator();
-
QCString sign();
-
QCString signal_assignment_statement();
-
void semi();
-
void signal_declaration();
-
QCString signal_kind();
-
QCString signal_list();
-
QCString signature();
-
QCString simple_expression();
-
void simple_name();
-
QCString slice_name();
-
QCString string_literal();
-
void subprogram_body();
-
void subprogram_declaration();
-
void subprogram_1();
-
QCString subprogram_declarative_item();
-
QCString subprogram_declarative_part();
-
void subprogram_kind();
-
void subprogram_specification();
-
void subprogram_statement_part();
-
QCString subtype_declaration();
-
QCString subtype_indication();
-
QCString suffix();
-
QCString target();
-
QCString term();
-
QCString timeout_clause();
-
QCString type_conversion();
-
QCString type_declaration();
-
QCString type_definition();
-
QCString type_mark();
-
QCString unconstraint_array_definition();
-
QCString use_clause();
-
QCString variable_assignment_statement();
-
QCString variable_declaration();
-
QCString wait_statement();
-
QCString waveform();
-
QCString waveform_element();
-
QCString protected_type_body();
-
void protected_type_body_declarative_item();
-
void protected_type_body_declarative_part();
-
QCString protected_type_declaration();
-
void protected_type_declarative_item();
-
void protected_type_declarative_part();
-
QCString context_ref();
-
void context_declaration();
-
QCString libustcont_stats();
-
void package_instantiation_declaration();
-
QCString interface_package_declaration();
-
QCString subprogram_instantiation_declaration();
-
void gen_assoc_list();
-
void gen_interface_list();
-
void case_scheme();
-
void when_stats();
-
void ttend();
-
void generate_statement_body();
-
void generate_statement_body1();
-
QCString external_name();
-
QCString sig_stat();
-
QCString external_pathname();
-
QCString absolute_pathname();
-
QCString relative_pathname();
-
QCString neg_list();
-
QCString pathname_element();
-
QCString pathname_element_list();
-
QCString package_path_name();
-
void conditional_signal_assignment_wave();
-
void conditional_waveform_assignment();
-
void else_wave_list();
-
void conditional_force_assignment();
-
void selected_signal_assignment_wave();
-
void selected_variable_assignment();
-
void select_name();
-
void selected_waveform_assignment();
-
void selected_force_assignment();
-
void sel_var_list();
-
void sel_wave_list();
-
void inout_stat();
-
void else_stat();
-
QCString interface_subprogram_declaration();
-
QCString iproc();
-
QCString ifunc();
-
QCString param();
-
void parseInline();
inline bool jj_2_1(int xla)
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_1() || jj_done;
+ return (!jj_3_1() || jj_done);
{ jj_save(0, xla); }
}
@@ -590,7 +310,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_2() || jj_done;
+ return (!jj_3_2() || jj_done);
{ jj_save(1, xla); }
}
@@ -598,7 +318,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_3() || jj_done;
+ return (!jj_3_3() || jj_done);
{ jj_save(2, xla); }
}
@@ -606,7 +326,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_4() || jj_done;
+ return (!jj_3_4() || jj_done);
{ jj_save(3, xla); }
}
@@ -614,7 +334,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_5() || jj_done;
+ return (!jj_3_5() || jj_done);
{ jj_save(4, xla); }
}
@@ -622,7 +342,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_6() || jj_done;
+ return (!jj_3_6() || jj_done);
{ jj_save(5, xla); }
}
@@ -630,7 +350,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_7() || jj_done;
+ return (!jj_3_7() || jj_done);
{ jj_save(6, xla); }
}
@@ -638,7 +358,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_8() || jj_done;
+ return (!jj_3_8() || jj_done);
{ jj_save(7, xla); }
}
@@ -646,7 +366,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_9() || jj_done;
+ return (!jj_3_9() || jj_done);
{ jj_save(8, xla); }
}
@@ -654,7 +374,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_10() || jj_done;
+ return (!jj_3_10() || jj_done);
{ jj_save(9, xla); }
}
@@ -662,7 +382,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_11() || jj_done;
+ return (!jj_3_11() || jj_done);
{ jj_save(10, xla); }
}
@@ -670,7 +390,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_12() || jj_done;
+ return (!jj_3_12() || jj_done);
{ jj_save(11, xla); }
}
@@ -678,7 +398,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_13() || jj_done;
+ return (!jj_3_13() || jj_done);
{ jj_save(12, xla); }
}
@@ -686,7 +406,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_14() || jj_done;
+ return (!jj_3_14() || jj_done);
{ jj_save(13, xla); }
}
@@ -694,7 +414,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_15() || jj_done;
+ return (!jj_3_15() || jj_done);
{ jj_save(14, xla); }
}
@@ -702,7 +422,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_16() || jj_done;
+ return (!jj_3_16() || jj_done);
{ jj_save(15, xla); }
}
@@ -710,7 +430,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_17() || jj_done;
+ return (!jj_3_17() || jj_done);
{ jj_save(16, xla); }
}
@@ -718,7 +438,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_18() || jj_done;
+ return (!jj_3_18() || jj_done);
{ jj_save(17, xla); }
}
@@ -726,7 +446,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_19() || jj_done;
+ return (!jj_3_19() || jj_done);
{ jj_save(18, xla); }
}
@@ -734,7 +454,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_20() || jj_done;
+ return (!jj_3_20() || jj_done);
{ jj_save(19, xla); }
}
@@ -742,7 +462,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_21() || jj_done;
+ return (!jj_3_21() || jj_done);
{ jj_save(20, xla); }
}
@@ -750,7 +470,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_22() || jj_done;
+ return (!jj_3_22() || jj_done);
{ jj_save(21, xla); }
}
@@ -758,7 +478,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_23() || jj_done;
+ return (!jj_3_23() || jj_done);
{ jj_save(22, xla); }
}
@@ -766,7 +486,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_24() || jj_done;
+ return (!jj_3_24() || jj_done);
{ jj_save(23, xla); }
}
@@ -774,7 +494,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_25() || jj_done;
+ return (!jj_3_25() || jj_done);
{ jj_save(24, xla); }
}
@@ -782,7 +502,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_26() || jj_done;
+ return (!jj_3_26() || jj_done);
{ jj_save(25, xla); }
}
@@ -790,7 +510,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_27() || jj_done;
+ return (!jj_3_27() || jj_done);
{ jj_save(26, xla); }
}
@@ -798,7 +518,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_28() || jj_done;
+ return (!jj_3_28() || jj_done);
{ jj_save(27, xla); }
}
@@ -806,7 +526,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_29() || jj_done;
+ return (!jj_3_29() || jj_done);
{ jj_save(28, xla); }
}
@@ -814,7 +534,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_30() || jj_done;
+ return (!jj_3_30() || jj_done);
{ jj_save(29, xla); }
}
@@ -822,7 +542,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_31() || jj_done;
+ return (!jj_3_31() || jj_done);
{ jj_save(30, xla); }
}
@@ -830,7 +550,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_32() || jj_done;
+ return (!jj_3_32() || jj_done);
{ jj_save(31, xla); }
}
@@ -838,7 +558,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_33() || jj_done;
+ return (!jj_3_33() || jj_done);
{ jj_save(32, xla); }
}
@@ -846,7 +566,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_34() || jj_done;
+ return (!jj_3_34() || jj_done);
{ jj_save(33, xla); }
}
@@ -854,7 +574,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_35() || jj_done;
+ return (!jj_3_35() || jj_done);
{ jj_save(34, xla); }
}
@@ -862,7 +582,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_36() || jj_done;
+ return (!jj_3_36() || jj_done);
{ jj_save(35, xla); }
}
@@ -870,7 +590,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_37() || jj_done;
+ return (!jj_3_37() || jj_done);
{ jj_save(36, xla); }
}
@@ -878,7 +598,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_38() || jj_done;
+ return (!jj_3_38() || jj_done);
{ jj_save(37, xla); }
}
@@ -886,7 +606,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_39() || jj_done;
+ return (!jj_3_39() || jj_done);
{ jj_save(38, xla); }
}
@@ -894,7 +614,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_40() || jj_done;
+ return (!jj_3_40() || jj_done);
{ jj_save(39, xla); }
}
@@ -902,7 +622,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_41() || jj_done;
+ return (!jj_3_41() || jj_done);
{ jj_save(40, xla); }
}
@@ -910,7 +630,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_42() || jj_done;
+ return (!jj_3_42() || jj_done);
{ jj_save(41, xla); }
}
@@ -918,7 +638,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_43() || jj_done;
+ return (!jj_3_43() || jj_done);
{ jj_save(42, xla); }
}
@@ -926,7 +646,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_44() || jj_done;
+ return (!jj_3_44() || jj_done);
{ jj_save(43, xla); }
}
@@ -934,7 +654,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_45() || jj_done;
+ return (!jj_3_45() || jj_done);
{ jj_save(44, xla); }
}
@@ -942,7 +662,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_46() || jj_done;
+ return (!jj_3_46() || jj_done);
{ jj_save(45, xla); }
}
@@ -950,7 +670,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_47() || jj_done;
+ return (!jj_3_47() || jj_done);
{ jj_save(46, xla); }
}
@@ -958,7 +678,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_48() || jj_done;
+ return (!jj_3_48() || jj_done);
{ jj_save(47, xla); }
}
@@ -966,7 +686,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_49() || jj_done;
+ return (!jj_3_49() || jj_done);
{ jj_save(48, xla); }
}
@@ -974,7 +694,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_50() || jj_done;
+ return (!jj_3_50() || jj_done);
{ jj_save(49, xla); }
}
@@ -982,7 +702,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_51() || jj_done;
+ return (!jj_3_51() || jj_done);
{ jj_save(50, xla); }
}
@@ -990,7 +710,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_52() || jj_done;
+ return (!jj_3_52() || jj_done);
{ jj_save(51, xla); }
}
@@ -998,7 +718,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_53() || jj_done;
+ return (!jj_3_53() || jj_done);
{ jj_save(52, xla); }
}
@@ -1006,7 +726,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_54() || jj_done;
+ return (!jj_3_54() || jj_done);
{ jj_save(53, xla); }
}
@@ -1014,7 +734,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_55() || jj_done;
+ return (!jj_3_55() || jj_done);
{ jj_save(54, xla); }
}
@@ -1022,7 +742,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_56() || jj_done;
+ return (!jj_3_56() || jj_done);
{ jj_save(55, xla); }
}
@@ -1030,7 +750,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_57() || jj_done;
+ return (!jj_3_57() || jj_done);
{ jj_save(56, xla); }
}
@@ -1038,7 +758,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_58() || jj_done;
+ return (!jj_3_58() || jj_done);
{ jj_save(57, xla); }
}
@@ -1046,7 +766,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_59() || jj_done;
+ return (!jj_3_59() || jj_done);
{ jj_save(58, xla); }
}
@@ -1054,7 +774,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_60() || jj_done;
+ return (!jj_3_60() || jj_done);
{ jj_save(59, xla); }
}
@@ -1062,7 +782,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_61() || jj_done;
+ return (!jj_3_61() || jj_done);
{ jj_save(60, xla); }
}
@@ -1070,7 +790,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_62() || jj_done;
+ return (!jj_3_62() || jj_done);
{ jj_save(61, xla); }
}
@@ -1078,7 +798,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_63() || jj_done;
+ return (!jj_3_63() || jj_done);
{ jj_save(62, xla); }
}
@@ -1086,7 +806,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_64() || jj_done;
+ return (!jj_3_64() || jj_done);
{ jj_save(63, xla); }
}
@@ -1094,7 +814,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_65() || jj_done;
+ return (!jj_3_65() || jj_done);
{ jj_save(64, xla); }
}
@@ -1102,7 +822,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_66() || jj_done;
+ return (!jj_3_66() || jj_done);
{ jj_save(65, xla); }
}
@@ -1110,7 +830,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_67() || jj_done;
+ return (!jj_3_67() || jj_done);
{ jj_save(66, xla); }
}
@@ -1118,7 +838,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_68() || jj_done;
+ return (!jj_3_68() || jj_done);
{ jj_save(67, xla); }
}
@@ -1126,7 +846,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_69() || jj_done;
+ return (!jj_3_69() || jj_done);
{ jj_save(68, xla); }
}
@@ -1134,7 +854,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_70() || jj_done;
+ return (!jj_3_70() || jj_done);
{ jj_save(69, xla); }
}
@@ -1142,7 +862,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_71() || jj_done;
+ return (!jj_3_71() || jj_done);
{ jj_save(70, xla); }
}
@@ -1150,7 +870,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_72() || jj_done;
+ return (!jj_3_72() || jj_done);
{ jj_save(71, xla); }
}
@@ -1158,7 +878,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_73() || jj_done;
+ return (!jj_3_73() || jj_done);
{ jj_save(72, xla); }
}
@@ -1166,7 +886,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_74() || jj_done;
+ return (!jj_3_74() || jj_done);
{ jj_save(73, xla); }
}
@@ -1174,7 +894,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_75() || jj_done;
+ return (!jj_3_75() || jj_done);
{ jj_save(74, xla); }
}
@@ -1182,7 +902,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_76() || jj_done;
+ return (!jj_3_76() || jj_done);
{ jj_save(75, xla); }
}
@@ -1190,7 +910,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_77() || jj_done;
+ return (!jj_3_77() || jj_done);
{ jj_save(76, xla); }
}
@@ -1198,7 +918,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_78() || jj_done;
+ return (!jj_3_78() || jj_done);
{ jj_save(77, xla); }
}
@@ -1206,7 +926,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_79() || jj_done;
+ return (!jj_3_79() || jj_done);
{ jj_save(78, xla); }
}
@@ -1214,7 +934,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_80() || jj_done;
+ return (!jj_3_80() || jj_done);
{ jj_save(79, xla); }
}
@@ -1222,7 +942,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_81() || jj_done;
+ return (!jj_3_81() || jj_done);
{ jj_save(80, xla); }
}
@@ -1230,7 +950,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_82() || jj_done;
+ return (!jj_3_82() || jj_done);
{ jj_save(81, xla); }
}
@@ -1238,7 +958,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_83() || jj_done;
+ return (!jj_3_83() || jj_done);
{ jj_save(82, xla); }
}
@@ -1246,7 +966,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_84() || jj_done;
+ return (!jj_3_84() || jj_done);
{ jj_save(83, xla); }
}
@@ -1254,7 +974,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_85() || jj_done;
+ return (!jj_3_85() || jj_done);
{ jj_save(84, xla); }
}
@@ -1262,7 +982,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_86() || jj_done;
+ return (!jj_3_86() || jj_done);
{ jj_save(85, xla); }
}
@@ -1270,7 +990,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_87() || jj_done;
+ return (!jj_3_87() || jj_done);
{ jj_save(86, xla); }
}
@@ -1278,7 +998,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_88() || jj_done;
+ return (!jj_3_88() || jj_done);
{ jj_save(87, xla); }
}
@@ -1286,7 +1006,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_89() || jj_done;
+ return (!jj_3_89() || jj_done);
{ jj_save(88, xla); }
}
@@ -1294,7 +1014,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_90() || jj_done;
+ return (!jj_3_90() || jj_done);
{ jj_save(89, xla); }
}
@@ -1302,7 +1022,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_91() || jj_done;
+ return (!jj_3_91() || jj_done);
{ jj_save(90, xla); }
}
@@ -1310,7 +1030,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_92() || jj_done;
+ return (!jj_3_92() || jj_done);
{ jj_save(91, xla); }
}
@@ -1318,7 +1038,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_93() || jj_done;
+ return (!jj_3_93() || jj_done);
{ jj_save(92, xla); }
}
@@ -1326,7 +1046,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_94() || jj_done;
+ return (!jj_3_94() || jj_done);
{ jj_save(93, xla); }
}
@@ -1334,7 +1054,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_95() || jj_done;
+ return (!jj_3_95() || jj_done);
{ jj_save(94, xla); }
}
@@ -1342,7 +1062,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_96() || jj_done;
+ return (!jj_3_96() || jj_done);
{ jj_save(95, xla); }
}
@@ -1350,7 +1070,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_97() || jj_done;
+ return (!jj_3_97() || jj_done);
{ jj_save(96, xla); }
}
@@ -1358,7 +1078,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_98() || jj_done;
+ return (!jj_3_98() || jj_done);
{ jj_save(97, xla); }
}
@@ -1366,7 +1086,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_99() || jj_done;
+ return (!jj_3_99() || jj_done);
{ jj_save(98, xla); }
}
@@ -1374,7 +1094,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_100() || jj_done;
+ return (!jj_3_100() || jj_done);
{ jj_save(99, xla); }
}
@@ -1382,7 +1102,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_101() || jj_done;
+ return (!jj_3_101() || jj_done);
{ jj_save(100, xla); }
}
@@ -1390,7 +1110,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_102() || jj_done;
+ return (!jj_3_102() || jj_done);
{ jj_save(101, xla); }
}
@@ -1398,7 +1118,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_103() || jj_done;
+ return (!jj_3_103() || jj_done);
{ jj_save(102, xla); }
}
@@ -1406,7 +1126,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_104() || jj_done;
+ return (!jj_3_104() || jj_done);
{ jj_save(103, xla); }
}
@@ -1414,7 +1134,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_105() || jj_done;
+ return (!jj_3_105() || jj_done);
{ jj_save(104, xla); }
}
@@ -1422,7 +1142,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_106() || jj_done;
+ return (!jj_3_106() || jj_done);
{ jj_save(105, xla); }
}
@@ -1430,7 +1150,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_107() || jj_done;
+ return (!jj_3_107() || jj_done);
{ jj_save(106, xla); }
}
@@ -1438,7 +1158,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_108() || jj_done;
+ return (!jj_3_108() || jj_done);
{ jj_save(107, xla); }
}
@@ -1446,7 +1166,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_109() || jj_done;
+ return (!jj_3_109() || jj_done);
{ jj_save(108, xla); }
}
@@ -1454,7 +1174,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_110() || jj_done;
+ return (!jj_3_110() || jj_done);
{ jj_save(109, xla); }
}
@@ -1462,7 +1182,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_111() || jj_done;
+ return (!jj_3_111() || jj_done);
{ jj_save(110, xla); }
}
@@ -1470,7 +1190,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_112() || jj_done;
+ return (!jj_3_112() || jj_done);
{ jj_save(111, xla); }
}
@@ -1478,7 +1198,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_113() || jj_done;
+ return (!jj_3_113() || jj_done);
{ jj_save(112, xla); }
}
@@ -1486,7 +1206,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_114() || jj_done;
+ return (!jj_3_114() || jj_done);
{ jj_save(113, xla); }
}
@@ -1494,7 +1214,7 @@ void parseInline();
{
jj_la = xla; jj_lastpos = jj_scanpos = token;
jj_done = false;
- return !jj_3_115() || jj_done;
+ return (!jj_3_115() || jj_done);
{ jj_save(114, xla); }
}
@@ -1533,10 +1253,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_441()) {
+ if (!jj_3R_441()) return false;
jj_scanpos = xsp;
if (jj_3R_442()) return true;
- }
return false;
}
@@ -1577,16 +1296,13 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(116)) {
+ if (!jj_scan_token(116)) return false;
jj_scanpos = xsp;
- if (jj_scan_token(100)) {
+ if (!jj_scan_token(100)) return false;
jj_scanpos = xsp;
- if (jj_scan_token(31)) {
+ if (!jj_scan_token(31)) return false;
jj_scanpos = xsp;
if (jj_scan_token(101)) return true;
- }
- }
- }
return false;
}
@@ -1692,22 +1408,17 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3_39()) {
+ if (!jj_3_39()) return false;
jj_scanpos = xsp;
- if (jj_3R_555()) {
+ if (!jj_3R_555()) return false;
jj_scanpos = xsp;
- if (jj_3_40()) {
+ if (!jj_3_40()) return false;
jj_scanpos = xsp;
- if (jj_3_41()) {
+ if (!jj_3_41()) return false;
jj_scanpos = xsp;
- if (jj_3R_556()) {
+ if (!jj_3R_556()) return false;
jj_scanpos = xsp;
if (jj_3R_557()) return true;
- }
- }
- }
- }
- }
return false;
}
@@ -1760,13 +1471,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_412()) {
+ if (!jj_3R_412()) return false;
jj_scanpos = xsp;
- if (jj_3R_413()) {
+ if (!jj_3R_413()) return false;
jj_scanpos = xsp;
if (jj_3R_414()) return true;
- }
- }
return false;
}
@@ -1803,13 +1512,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_325()) {
+ if (!jj_3R_325()) return false;
jj_scanpos = xsp;
- if (jj_3R_326()) {
+ if (!jj_3R_326()) return false;
jj_scanpos = xsp;
if (jj_3R_327()) return true;
- }
- }
return false;
}
@@ -1836,10 +1543,9 @@ void parseInline();
if (jj_scan_token(IS_T)) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_695()) {
+ if (!jj_3R_695()) return false;
jj_scanpos = xsp;
if (jj_scan_token(145)) return true;
- }
return false;
}
@@ -1871,10 +1577,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_620()) {
+ if (!jj_3R_620()) return false;
jj_scanpos = xsp;
if (jj_3R_621()) return true;
- }
return false;
}
@@ -2018,10 +1723,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_163()) {
+ if (!jj_3R_163()) return false;
jj_scanpos = xsp;
if (jj_3R_164()) return true;
- }
return false;
}
@@ -2041,10 +1745,9 @@ void parseInline();
if (jj_3R_85()) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(134)) {
+ if (!jj_scan_token(134)) return false;
jj_scanpos = xsp;
if (jj_scan_token(137)) return true;
- }
return false;
}
@@ -2110,10 +1813,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(84)) {
+ if (!jj_scan_token(84)) return false;
jj_scanpos = xsp;
if (jj_scan_token(52)) return true;
- }
return false;
}
@@ -2181,10 +1883,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_606()) {
+ if (!jj_3R_606()) return false;
jj_scanpos = xsp;
if (jj_3R_607()) return true;
- }
return false;
}
@@ -2225,10 +1926,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_193()) {
+ if (!jj_3R_193()) return false;
jj_scanpos = xsp;
if (jj_3R_194()) return true;
- }
return false;
}
@@ -2278,10 +1978,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(53)) {
+ if (!jj_scan_token(53)) return false;
jj_scanpos = xsp;
if (jj_scan_token(75)) return true;
- }
return false;
}
@@ -2305,10 +2004,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_320()) {
+ if (!jj_3R_320()) return false;
jj_scanpos = xsp;
if (jj_3R_321()) return true;
- }
return false;
}
@@ -2343,10 +2041,9 @@ void parseInline();
if (jj_3R_85()) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(134)) {
+ if (!jj_scan_token(134)) return false;
jj_scanpos = xsp;
if (jj_scan_token(137)) return true;
- }
while (true) {
xsp = jj_scanpos;
if (jj_3R_385()) { jj_scanpos = xsp; break; }
@@ -2473,10 +2170,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_685()) {
+ if (!jj_3R_685()) return false;
jj_scanpos = xsp;
if (jj_3R_686()) return true;
- }
return false;
}
@@ -2528,10 +2224,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_269()) {
+ if (!jj_3R_269()) return false;
jj_scanpos = xsp;
if (jj_3R_270()) return true;
- }
return false;
}
@@ -2657,10 +2352,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_267()) {
+ if (!jj_3R_267()) return false;
jj_scanpos = xsp;
if (jj_3R_268()) return true;
- }
return false;
}
@@ -2676,10 +2370,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_396()) {
+ if (!jj_3R_396()) return false;
jj_scanpos = xsp;
if (jj_3R_397()) return true;
- }
return false;
}
@@ -2885,10 +2578,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_608()) {
+ if (!jj_3R_608()) return false;
jj_scanpos = xsp;
if (jj_3R_609()) return true;
- }
return false;
}
@@ -2897,13 +2589,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_281()) {
+ if (!jj_3R_281()) return false;
jj_scanpos = xsp;
- if (jj_3R_282()) {
+ if (!jj_3R_282()) return false;
jj_scanpos = xsp;
if (jj_3R_283()) return true;
- }
- }
return false;
}
@@ -2936,13 +2626,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_486()) {
+ if (!jj_3R_486()) return false;
jj_scanpos = xsp;
- if (jj_3R_487()) {
+ if (!jj_3R_487()) return false;
jj_scanpos = xsp;
if (jj_3R_488()) return true;
- }
- }
return false;
}
@@ -3030,13 +2718,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_483()) {
+ if (!jj_3R_483()) return false;
jj_scanpos = xsp;
- if (jj_3R_484()) {
+ if (!jj_3R_484()) return false;
jj_scanpos = xsp;
if (jj_3R_485()) return true;
- }
- }
return false;
}
@@ -3052,22 +2738,17 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_388()) {
+ if (!jj_3R_388()) return false;
jj_scanpos = xsp;
- if (jj_3R_389()) {
+ if (!jj_3R_389()) return false;
jj_scanpos = xsp;
- if (jj_3R_390()) {
+ if (!jj_3R_390()) return false;
jj_scanpos = xsp;
- if (jj_3R_391()) {
+ if (!jj_3R_391()) return false;
jj_scanpos = xsp;
- if (jj_3R_392()) {
+ if (!jj_3R_392()) return false;
jj_scanpos = xsp;
if (jj_3R_393()) return true;
- }
- }
- }
- }
- }
return false;
}
@@ -3273,10 +2954,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_207()) {
+ if (!jj_3R_207()) return false;
jj_scanpos = xsp;
if (jj_3R_208()) return true;
- }
return false;
}
@@ -3311,10 +2991,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_693()) {
+ if (!jj_3R_693()) return false;
jj_scanpos = xsp;
if (jj_3R_694()) return true;
- }
return false;
}
@@ -3417,13 +3096,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_582()) {
+ if (!jj_3R_582()) return false;
jj_scanpos = xsp;
- if (jj_3R_583()) {
+ if (!jj_3R_583()) return false;
jj_scanpos = xsp;
if (jj_3R_584()) return true;
- }
- }
return false;
}
@@ -3586,13 +3263,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_717()) {
+ if (!jj_3R_717()) return false;
jj_scanpos = xsp;
- if (jj_3R_718()) {
+ if (!jj_3R_718()) return false;
jj_scanpos = xsp;
if (jj_3R_719()) return true;
- }
- }
return false;
}
@@ -3887,55 +3562,39 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_585()) {
+ if (!jj_3R_585()) return false;
jj_scanpos = xsp;
- if (jj_3R_586()) {
+ if (!jj_3R_586()) return false;
jj_scanpos = xsp;
- if (jj_3R_587()) {
+ if (!jj_3R_587()) return false;
jj_scanpos = xsp;
- if (jj_3R_588()) {
+ if (!jj_3R_588()) return false;
jj_scanpos = xsp;
- if (jj_3R_589()) {
+ if (!jj_3R_589()) return false;
jj_scanpos = xsp;
- if (jj_3R_590()) {
+ if (!jj_3R_590()) return false;
jj_scanpos = xsp;
- if (jj_3R_591()) {
+ if (!jj_3R_591()) return false;
jj_scanpos = xsp;
- if (jj_3R_592()) {
+ if (!jj_3R_592()) return false;
jj_scanpos = xsp;
- if (jj_3R_593()) {
+ if (!jj_3R_593()) return false;
jj_scanpos = xsp;
- if (jj_3R_594()) {
+ if (!jj_3R_594()) return false;
jj_scanpos = xsp;
- if (jj_3R_595()) {
+ if (!jj_3R_595()) return false;
jj_scanpos = xsp;
- if (jj_3R_596()) {
+ if (!jj_3R_596()) return false;
jj_scanpos = xsp;
- if (jj_3R_597()) {
+ if (!jj_3R_597()) return false;
jj_scanpos = xsp;
- if (jj_3R_598()) {
+ if (!jj_3R_598()) return false;
jj_scanpos = xsp;
- if (jj_3R_599()) {
+ if (!jj_3R_599()) return false;
jj_scanpos = xsp;
- if (jj_3R_600()) {
+ if (!jj_3R_600()) return false;
jj_scanpos = xsp;
if (jj_3R_601()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -3951,43 +3610,31 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_705()) {
+ if (!jj_3R_705()) return false;
jj_scanpos = xsp;
- if (jj_3R_706()) {
+ if (!jj_3R_706()) return false;
jj_scanpos = xsp;
- if (jj_3R_707()) {
+ if (!jj_3R_707()) return false;
jj_scanpos = xsp;
- if (jj_3R_708()) {
+ if (!jj_3R_708()) return false;
jj_scanpos = xsp;
- if (jj_3R_709()) {
+ if (!jj_3R_709()) return false;
jj_scanpos = xsp;
- if (jj_3R_710()) {
+ if (!jj_3R_710()) return false;
jj_scanpos = xsp;
- if (jj_3R_711()) {
+ if (!jj_3R_711()) return false;
jj_scanpos = xsp;
- if (jj_3R_712()) {
+ if (!jj_3R_712()) return false;
jj_scanpos = xsp;
- if (jj_3R_713()) {
+ if (!jj_3R_713()) return false;
jj_scanpos = xsp;
- if (jj_3R_714()) {
+ if (!jj_3R_714()) return false;
jj_scanpos = xsp;
- if (jj_3R_715()) {
+ if (!jj_3R_715()) return false;
jj_scanpos = xsp;
- if (jj_3_105()) {
+ if (!jj_3_105()) return false;
jj_scanpos = xsp;
if (jj_3R_716()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -4029,13 +3676,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_561()) {
+ if (!jj_3R_561()) return false;
jj_scanpos = xsp;
- if (jj_3R_562()) {
+ if (!jj_3R_562()) return false;
jj_scanpos = xsp;
if (jj_3R_563()) return true;
- }
- }
return false;
}
@@ -4156,10 +3801,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_159()) {
+ if (!jj_3R_159()) return false;
jj_scanpos = xsp;
if (jj_3R_160()) return true;
- }
return false;
}
@@ -4168,10 +3812,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_405()) {
+ if (!jj_3R_405()) return false;
jj_scanpos = xsp;
if (jj_3R_406()) return true;
- }
return false;
}
@@ -4252,10 +3895,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_237()) {
+ if (!jj_3R_237()) return false;
jj_scanpos = xsp;
if (jj_3R_238()) return true;
- }
return false;
}
@@ -4293,10 +3935,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_567()) {
+ if (!jj_3R_567()) return false;
jj_scanpos = xsp;
if (jj_3R_568()) return true;
- }
return false;
}
@@ -4355,10 +3996,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_493()) {
+ if (!jj_3R_493()) return false;
jj_scanpos = xsp;
if (jj_3R_494()) return true;
- }
return false;
}
@@ -4396,10 +4036,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_438()) {
+ if (!jj_3R_438()) return false;
jj_scanpos = xsp;
if (jj_3R_439()) return true;
- }
return false;
}
@@ -4435,10 +4074,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_275()) {
+ if (!jj_3R_275()) return false;
jj_scanpos = xsp;
if (jj_3R_276()) return true;
- }
return false;
}
@@ -4565,22 +4203,17 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_632()) {
+ if (!jj_3R_632()) return false;
jj_scanpos = xsp;
- if (jj_3R_633()) {
+ if (!jj_3R_633()) return false;
jj_scanpos = xsp;
- if (jj_3R_634()) {
+ if (!jj_3R_634()) return false;
jj_scanpos = xsp;
- if (jj_3R_635()) {
+ if (!jj_3R_635()) return false;
jj_scanpos = xsp;
- if (jj_3_102()) {
+ if (!jj_3_102()) return false;
jj_scanpos = xsp;
if (jj_3R_636()) return true;
- }
- }
- }
- }
- }
return false;
}
@@ -4627,10 +4260,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_565()) {
+ if (!jj_3R_565()) return false;
jj_scanpos = xsp;
if (jj_3R_566()) return true;
- }
return false;
}
@@ -4646,10 +4278,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3_101()) {
+ if (!jj_3_101()) return false;
jj_scanpos = xsp;
if (jj_3R_457()) return true;
- }
return false;
}
@@ -4710,10 +4341,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_245()) {
+ if (!jj_3R_245()) return false;
jj_scanpos = xsp;
if (jj_3R_246()) return true;
- }
return false;
}
@@ -4796,16 +4426,13 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_214()) {
+ if (!jj_3R_214()) return false;
jj_scanpos = xsp;
- if (jj_3R_215()) {
+ if (!jj_3R_215()) return false;
jj_scanpos = xsp;
- if (jj_3R_216()) {
+ if (!jj_3R_216()) return false;
jj_scanpos = xsp;
if (jj_3R_217()) return true;
- }
- }
- }
return false;
}
@@ -4973,10 +4600,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(84)) {
+ if (!jj_scan_token(84)) return false;
jj_scanpos = xsp;
if (jj_scan_token(52)) return true;
- }
return false;
}
@@ -5099,10 +4725,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_431()) {
+ if (!jj_3R_431()) return false;
jj_scanpos = xsp;
if (jj_3R_432()) return true;
- }
return false;
}
@@ -5134,31 +4759,23 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_496()) {
+ if (!jj_3R_496()) return false;
jj_scanpos = xsp;
- if (jj_3R_497()) {
+ if (!jj_3R_497()) return false;
jj_scanpos = xsp;
- if (jj_3R_498()) {
+ if (!jj_3R_498()) return false;
jj_scanpos = xsp;
- if (jj_3R_499()) {
+ if (!jj_3R_499()) return false;
jj_scanpos = xsp;
- if (jj_3R_500()) {
+ if (!jj_3R_500()) return false;
jj_scanpos = xsp;
- if (jj_3R_501()) {
+ if (!jj_3R_501()) return false;
jj_scanpos = xsp;
- if (jj_3R_502()) {
+ if (!jj_3R_502()) return false;
jj_scanpos = xsp;
- if (jj_3R_503()) {
+ if (!jj_3R_503()) return false;
jj_scanpos = xsp;
if (jj_scan_token(189)) return true;
- }
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -5174,10 +4791,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(46)) {
+ if (!jj_scan_token(46)) return false;
jj_scanpos = xsp;
if (jj_scan_token(80)) return true;
- }
return false;
}
@@ -5251,10 +4867,9 @@ void parseInline();
xsp = jj_scanpos;
if (jj_scan_token(79)) jj_scanpos = xsp;
xsp = jj_scanpos;
- if (jj_3R_171()) {
+ if (!jj_3R_171()) return false;
jj_scanpos = xsp;
if (jj_3R_172()) return true;
- }
return false;
}
@@ -5417,10 +5032,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_677()) {
+ if (!jj_3R_677()) return false;
jj_scanpos = xsp;
if (jj_3R_678()) return true;
- }
return false;
}
@@ -5429,43 +5043,31 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_663()) {
+ if (!jj_3R_663()) return false;
jj_scanpos = xsp;
- if (jj_3R_664()) {
+ if (!jj_3R_664()) return false;
jj_scanpos = xsp;
- if (jj_3R_665()) {
+ if (!jj_3R_665()) return false;
jj_scanpos = xsp;
- if (jj_3R_666()) {
+ if (!jj_3R_666()) return false;
jj_scanpos = xsp;
- if (jj_3R_667()) {
+ if (!jj_3R_667()) return false;
jj_scanpos = xsp;
- if (jj_3R_668()) {
+ if (!jj_3R_668()) return false;
jj_scanpos = xsp;
- if (jj_3R_669()) {
+ if (!jj_3R_669()) return false;
jj_scanpos = xsp;
- if (jj_3R_670()) {
+ if (!jj_3R_670()) return false;
jj_scanpos = xsp;
- if (jj_3R_671()) {
+ if (!jj_3R_671()) return false;
jj_scanpos = xsp;
- if (jj_3R_672()) {
+ if (!jj_3R_672()) return false;
jj_scanpos = xsp;
- if (jj_3R_673()) {
+ if (!jj_3R_673()) return false;
jj_scanpos = xsp;
- if (jj_3_94()) {
+ if (!jj_3_94()) return false;
jj_scanpos = xsp;
if (jj_3R_674()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -5510,10 +5112,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_433()) {
+ if (!jj_3R_433()) return false;
jj_scanpos = xsp;
if (jj_scan_token(137)) return true;
- }
return false;
}
@@ -5560,10 +5161,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_199()) {
+ if (!jj_3R_199()) return false;
jj_scanpos = xsp;
if (jj_3R_200()) return true;
- }
return false;
}
@@ -5797,16 +5397,13 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_333()) {
+ if (!jj_3R_333()) return false;
jj_scanpos = xsp;
- if (jj_3R_334()) {
+ if (!jj_3R_334()) return false;
jj_scanpos = xsp;
- if (jj_3R_335()) {
+ if (!jj_3R_335()) return false;
jj_scanpos = xsp;
if (jj_3R_336()) return true;
- }
- }
- }
return false;
}
@@ -5905,13 +5502,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_602()) {
+ if (!jj_3R_602()) return false;
jj_scanpos = xsp;
- if (jj_3R_603()) {
+ if (!jj_3R_603()) return false;
jj_scanpos = xsp;
if (jj_3R_604()) return true;
- }
- }
return false;
}
@@ -5958,10 +5553,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_577()) {
+ if (!jj_3R_577()) return false;
jj_scanpos = xsp;
if (jj_3R_578()) return true;
- }
return false;
}
@@ -6118,13 +5712,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_435()) {
+ if (!jj_3R_435()) return false;
jj_scanpos = xsp;
- if (jj_3R_436()) {
+ if (!jj_3R_436()) return false;
jj_scanpos = xsp;
if (jj_3R_437()) return true;
- }
- }
return false;
}
@@ -6187,10 +5779,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_400()) {
+ if (!jj_3R_400()) return false;
jj_scanpos = xsp;
if (jj_3R_401()) return true;
- }
return false;
}
@@ -6297,22 +5888,17 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_546()) {
+ if (!jj_3R_546()) return false;
jj_scanpos = xsp;
- if (jj_3R_547()) {
+ if (!jj_3R_547()) return false;
jj_scanpos = xsp;
- if (jj_3R_548()) {
+ if (!jj_3R_548()) return false;
jj_scanpos = xsp;
- if (jj_3R_549()) {
+ if (!jj_3R_549()) return false;
jj_scanpos = xsp;
- if (jj_3R_550()) {
+ if (!jj_3R_550()) return false;
jj_scanpos = xsp;
if (jj_3R_551()) return true;
- }
- }
- }
- }
- }
return false;
}
@@ -6525,52 +6111,37 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_285()) {
+ if (!jj_3R_285()) return false;
jj_scanpos = xsp;
- if (jj_3R_286()) {
+ if (!jj_3R_286()) return false;
jj_scanpos = xsp;
- if (jj_3R_287()) {
+ if (!jj_3R_287()) return false;
jj_scanpos = xsp;
- if (jj_3R_288()) {
+ if (!jj_3R_288()) return false;
jj_scanpos = xsp;
- if (jj_3R_289()) {
+ if (!jj_3R_289()) return false;
jj_scanpos = xsp;
- if (jj_3R_290()) {
+ if (!jj_3R_290()) return false;
jj_scanpos = xsp;
- if (jj_3R_291()) {
+ if (!jj_3R_291()) return false;
jj_scanpos = xsp;
- if (jj_3R_292()) {
+ if (!jj_3R_292()) return false;
jj_scanpos = xsp;
- if (jj_3R_293()) {
+ if (!jj_3R_293()) return false;
jj_scanpos = xsp;
- if (jj_3R_294()) {
+ if (!jj_3R_294()) return false;
jj_scanpos = xsp;
- if (jj_3R_295()) {
+ if (!jj_3R_295()) return false;
jj_scanpos = xsp;
- if (jj_3R_296()) {
+ if (!jj_3R_296()) return false;
jj_scanpos = xsp;
- if (jj_3R_297()) {
+ if (!jj_3R_297()) return false;
jj_scanpos = xsp;
- if (jj_3R_298()) {
+ if (!jj_3R_298()) return false;
jj_scanpos = xsp;
- if (jj_3_8()) {
+ if (!jj_3_8()) return false;
jj_scanpos = xsp;
if (jj_3R_299()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -6670,43 +6241,31 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_242()) {
+ if (!jj_3R_242()) return false;
jj_scanpos = xsp;
- if (jj_3_77()) {
+ if (!jj_3_77()) return false;
jj_scanpos = xsp;
- if (jj_3_78()) {
+ if (!jj_3_78()) return false;
jj_scanpos = xsp;
- if (jj_3_79()) {
+ if (!jj_3_79()) return false;
jj_scanpos = xsp;
- if (jj_3R_243()) {
+ if (!jj_3R_243()) return false;
jj_scanpos = xsp;
- if (jj_3_81()) {
+ if (!jj_3_81()) return false;
jj_scanpos = xsp;
- if (jj_3_82()) {
+ if (!jj_3_82()) return false;
jj_scanpos = xsp;
- if (jj_3_83()) {
+ if (!jj_3_83()) return false;
jj_scanpos = xsp;
- if (jj_3_84()) {
+ if (!jj_3_84()) return false;
jj_scanpos = xsp;
- if (jj_3_85()) {
+ if (!jj_3_85()) return false;
jj_scanpos = xsp;
- if (jj_3_86()) {
+ if (!jj_3_86()) return false;
jj_scanpos = xsp;
- if (jj_3_87()) {
+ if (!jj_3_87()) return false;
jj_scanpos = xsp;
if (jj_3R_244()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -6952,10 +6511,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_675()) {
+ if (!jj_3R_675()) return false;
jj_scanpos = xsp;
if (jj_3R_676()) return true;
- }
return false;
}
@@ -6964,10 +6522,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_353()) {
+ if (!jj_3R_353()) return false;
jj_scanpos = xsp;
if (jj_3R_354()) return true;
- }
return false;
}
@@ -7160,22 +6717,17 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_477()) {
+ if (!jj_3R_477()) return false;
jj_scanpos = xsp;
- if (jj_3R_478()) {
+ if (!jj_3R_478()) return false;
jj_scanpos = xsp;
- if (jj_3R_479()) {
+ if (!jj_3R_479()) return false;
jj_scanpos = xsp;
- if (jj_3R_480()) {
+ if (!jj_3R_480()) return false;
jj_scanpos = xsp;
- if (jj_3R_481()) {
+ if (!jj_3R_481()) return false;
jj_scanpos = xsp;
if (jj_3R_482()) return true;
- }
- }
- }
- }
- }
return false;
}
@@ -7275,10 +6827,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_697()) {
+ if (!jj_3R_697()) return false;
jj_scanpos = xsp;
if (jj_3R_698()) return true;
- }
return false;
}
@@ -7318,10 +6869,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_181()) {
+ if (!jj_3R_181()) return false;
jj_scanpos = xsp;
if (jj_3R_182()) return true;
- }
return false;
}
@@ -7355,10 +6905,9 @@ void parseInline();
if (jj_scan_token(APOSTROPHE_T)) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_226()) {
+ if (!jj_3R_226()) return false;
jj_scanpos = xsp;
if (jj_3R_227()) return true;
- }
return false;
}
@@ -7415,10 +6964,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3_4()) {
+ if (!jj_3_4()) return false;
jj_scanpos = xsp;
if (jj_3R_575()) return true;
- }
return false;
}
@@ -7456,13 +7004,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_534()) {
+ if (!jj_3R_534()) return false;
jj_scanpos = xsp;
- if (jj_3R_535()) {
+ if (!jj_3R_535()) return false;
jj_scanpos = xsp;
if (jj_3R_536()) return true;
- }
- }
return false;
}
@@ -7472,10 +7018,9 @@ void parseInline();
if (jj_scan_token(LPAREN_T)) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_scan_token(15)) {
+ if (!jj_scan_token(15)) return false;
jj_scanpos = xsp;
if (jj_3R_339()) return true;
- }
if (jj_scan_token(RPAREN_T)) return true;
return false;
}
@@ -7578,13 +7123,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_271()) {
+ if (!jj_3R_271()) return false;
jj_scanpos = xsp;
- if (jj_3R_272()) {
+ if (!jj_3R_272()) return false;
jj_scanpos = xsp;
if (jj_3R_273()) return true;
- }
- }
return false;
}
@@ -7663,13 +7206,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_490()) {
+ if (!jj_3R_490()) return false;
jj_scanpos = xsp;
- if (jj_3R_491()) {
+ if (!jj_3R_491()) return false;
jj_scanpos = xsp;
if (jj_3R_492()) return true;
- }
- }
return false;
}
@@ -7755,40 +7296,29 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_509()) {
+ if (!jj_3R_509()) return false;
jj_scanpos = xsp;
- if (jj_3R_510()) {
+ if (!jj_3R_510()) return false;
jj_scanpos = xsp;
- if (jj_3R_511()) {
+ if (!jj_3R_511()) return false;
jj_scanpos = xsp;
- if (jj_3R_512()) {
+ if (!jj_3R_512()) return false;
jj_scanpos = xsp;
- if (jj_3R_513()) {
+ if (!jj_3R_513()) return false;
jj_scanpos = xsp;
- if (jj_3R_514()) {
+ if (!jj_3R_514()) return false;
jj_scanpos = xsp;
- if (jj_3R_515()) {
+ if (!jj_3R_515()) return false;
jj_scanpos = xsp;
- if (jj_3_69()) {
+ if (!jj_3_69()) return false;
jj_scanpos = xsp;
- if (jj_3R_516()) {
+ if (!jj_3R_516()) return false;
jj_scanpos = xsp;
- if (jj_3R_517()) {
+ if (!jj_3R_517()) return false;
jj_scanpos = xsp;
- if (jj_3_70()) {
+ if (!jj_3_70()) return false;
jj_scanpos = xsp;
if (jj_3R_518()) return true;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -7853,13 +7383,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_151()) {
+ if (!jj_3R_151()) return false;
jj_scanpos = xsp;
- if (jj_3R_152()) {
+ if (!jj_3R_152()) return false;
jj_scanpos = xsp;
if (jj_3R_153()) return true;
- }
- }
return false;
}
@@ -7921,13 +7449,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_222()) {
+ if (!jj_3R_222()) return false;
jj_scanpos = xsp;
- if (jj_3R_223()) {
+ if (!jj_3R_223()) return false;
jj_scanpos = xsp;
if (jj_3R_224()) return true;
- }
- }
return false;
}
@@ -7964,19 +7490,15 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_201()) {
+ if (!jj_3R_201()) return false;
jj_scanpos = xsp;
- if (jj_3R_202()) {
+ if (!jj_3R_202()) return false;
jj_scanpos = xsp;
- if (jj_3R_203()) {
+ if (!jj_3R_203()) return false;
jj_scanpos = xsp;
- if (jj_3_67()) {
+ if (!jj_3_67()) return false;
jj_scanpos = xsp;
if (jj_3R_204()) return true;
- }
- }
- }
- }
return false;
}
@@ -8087,28 +7609,21 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_449()) {
+ if (!jj_3R_449()) return false;
jj_scanpos = xsp;
- if (jj_3R_450()) {
+ if (!jj_3R_450()) return false;
jj_scanpos = xsp;
- if (jj_3R_451()) {
+ if (!jj_3R_451()) return false;
jj_scanpos = xsp;
- if (jj_3R_452()) {
+ if (!jj_3R_452()) return false;
jj_scanpos = xsp;
- if (jj_3R_453()) {
+ if (!jj_3R_453()) return false;
jj_scanpos = xsp;
- if (jj_3R_454()) {
+ if (!jj_3R_454()) return false;
jj_scanpos = xsp;
- if (jj_3R_455()) {
+ if (!jj_3R_455()) return false;
jj_scanpos = xsp;
if (jj_3R_456()) return true;
- }
- }
- }
- }
- }
- }
- }
return false;
}
@@ -8329,22 +7844,17 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_641()) {
+ if (!jj_3R_641()) return false;
jj_scanpos = xsp;
- if (jj_3R_642()) {
+ if (!jj_3R_642()) return false;
jj_scanpos = xsp;
- if (jj_3R_643()) {
+ if (!jj_3R_643()) return false;
jj_scanpos = xsp;
- if (jj_3R_644()) {
+ if (!jj_3R_644()) return false;
jj_scanpos = xsp;
- if (jj_3R_645()) {
+ if (!jj_3R_645()) return false;
jj_scanpos = xsp;
if (jj_3R_646()) return true;
- }
- }
- }
- }
- }
return false;
}
@@ -8375,10 +7885,9 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_205()) {
+ if (!jj_3R_205()) return false;
jj_scanpos = xsp;
if (jj_3R_206()) return true;
- }
return false;
}
@@ -8578,16 +8087,13 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_210()) {
+ if (!jj_3R_210()) return false;
jj_scanpos = xsp;
- if (jj_3R_211()) {
+ if (!jj_3R_211()) return false;
jj_scanpos = xsp;
- if (jj_3R_212()) {
+ if (!jj_3R_212()) return false;
jj_scanpos = xsp;
if (jj_3R_213()) return true;
- }
- }
- }
return false;
}
@@ -8636,13 +8142,11 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_147()) {
+ if (!jj_3R_147()) return false;
jj_scanpos = xsp;
- if (jj_3R_148()) {
+ if (!jj_3R_148()) return false;
jj_scanpos = xsp;
if (jj_3R_149()) return true;
- }
- }
xsp = jj_scanpos;
if (jj_3R_150()) jj_scanpos = xsp;
return false;
@@ -8674,16 +8178,13 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_277()) {
+ if (!jj_3R_277()) return false;
jj_scanpos = xsp;
- if (jj_3R_278()) {
+ if (!jj_3R_278()) return false;
jj_scanpos = xsp;
- if (jj_3R_279()) {
+ if (!jj_3R_279()) return false;
jj_scanpos = xsp;
if (jj_3R_280()) return true;
- }
- }
- }
return false;
}
@@ -8734,19 +8235,15 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_426()) {
+ if (!jj_3R_426()) return false;
jj_scanpos = xsp;
- if (jj_3R_427()) {
+ if (!jj_3R_427()) return false;
jj_scanpos = xsp;
- if (jj_3R_428()) {
+ if (!jj_3R_428()) return false;
jj_scanpos = xsp;
- if (jj_3R_429()) {
+ if (!jj_3R_429()) return false;
jj_scanpos = xsp;
if (jj_3R_430()) return true;
- }
- }
- }
- }
return false;
}
@@ -8851,89 +8348,85 @@ void parseInline();
if (jj_done) return true;
Token * xsp;
xsp = jj_scanpos;
- if (jj_3R_228()) {
+ if (!jj_3R_228()) return false;
jj_scanpos = xsp;
- if (jj_3R_229()) {
+ if (!jj_3R_229()) return false;
jj_scanpos = xsp;
- if (jj_3R_230()) {
+ if (!jj_3R_230()) return false;
jj_scanpos = xsp;
- if (jj_3R_231()) {
+ if (!jj_3R_231()) return false;
jj_scanpos = xsp;
if (jj_3R_232()) return true;
- }
- }
- }
- }
return false;
}
- public: TokenManager *token_source;
- public: CharStream *jj_input_stream;
- /** Current token. */
- public: Token *token;
- /** Next token. */
- public: Token *jj_nt;
- private: int jj_ntk;
- private: JJCalls jj_2_rtns[116];
- private: bool jj_rescan;
- private: int jj_gc;
- private: Token *jj_scanpos, *jj_lastpos;
- private: int jj_la;
- /** Whether we are looking ahead. */
- private: bool jj_lookingAhead;
- private: bool jj_semLA;
- private: int jj_gen;
- private: int jj_la1[294];
- private: ErrorHandler *errorHandler;
- private: bool errorHandlerCreated;
- protected: bool hasError;
- public: void setErrorHandler(ErrorHandler *eh) {
- if (errorHandlerCreated) delete errorHandler;
+
+public:
+ void setErrorHandler(ErrorHandler *eh) {
+ if (errorHandler) delete errorHandler;
errorHandler = eh;
- errorHandlerCreated = false;
}
- Token *head;
- public:
-
- VhdlParser(TokenManager *tm);
- public: virtual ~VhdlParser();
-
-void ReInit(TokenManager *tm);
+ TokenManager *token_source = nullptr;
+ CharStream *jj_input_stream = nullptr;
+ /** Current token. */
+ Token *token = nullptr;
+ /** Next token. */
+ Token *jj_nt = nullptr;
+
+private:
+ int jj_ntk;
+ JJCalls jj_2_rtns[116];
+ bool jj_rescan;
+ int jj_gc;
+ Token *jj_scanpos, *jj_lastpos;
+ int jj_la;
+ /** Whether we are looking ahead. */
+ bool jj_lookingAhead;
+ bool jj_semLA;
+ int jj_gen;
+ int jj_la1[294];
+ ErrorHandler *errorHandler = nullptr;
+
+protected:
+ bool hasError;
+
+ Token *head;
+public:
+ VhdlParser(TokenManager *tokenManager);
+ virtual ~VhdlParser();
+void ReInit(TokenManager* tokenManager);
+void clear();
Token * jj_consume_token(int kind);
-
bool jj_scan_token(int kind);
-
Token * getNextToken();
-
Token * getToken(int index);
-
int jj_ntk_f();
- private: int jj_kind;
+private:
+ int jj_kind;
int **jj_expentries;
int *jj_expentry;
-
-void jj_add_error_token(int kind, int pos);
-
-protected: virtual void parseError();
- private: int trace_indent;
- private: bool trace_enabled;
- /** Enable tracing. */
-
-public: void enable_tracing();
-
-public: void disable_tracing();
-
-void jj_rescan_token();
-
-void jj_save(int index, int xla);
+ void jj_add_error_token(int kind, int pos);
+protected:
+ /** Generate ParseException. */
+ virtual void parseError();
+private:
+ int indent; // trace indentation
+ bool trace = false; // trace enabled if true
+
+public:
+ bool trace_enabled();
+ void enable_tracing();
+ void disable_tracing();
+ void jj_rescan_token();
+ void jj_save(int index, int xla);
typedef unsigned long long uint64;
static Entry* current_root;
static Entry* tempEntry;
static Entry* lastEntity ;
static Entry* lastCompound ;
-static std::unique_ptr<Entry> current;
+static std::shared_ptr<Entry> current;
static QCString compSpec;
static QCString currName;
static int levelCounter;
@@ -8944,7 +8437,6 @@ static QCString forL;
static int param_sec ;
static int parse_sec;
static int currP;
-static Entry* currentCompound;
//----------------------------------------
@@ -8970,8 +8462,10 @@ static void mapLibPackage( Entry* root);
static void createFlow();
static void error_skipto(int kind);
static void oneLineComment(QCString qcs);
-static void setMultCommentLine();private: bool jj_done;
+static void setMultCommentLine();
+private:
+ bool jj_done;
};
}
}
diff --git a/vhdlparser/VhdlParserConstants.h b/vhdlparser/VhdlParserConstants.h
index 8d4b417..fe51270 100644
--- a/vhdlparser/VhdlParserConstants.h
+++ b/vhdlparser/VhdlParserConstants.h
@@ -2,7 +2,7 @@
/**
* Token literal values and constants.
- * Generated by org.javacc.parser.OtherFilesGen#start()
+ * Generated by org.javacc.parser.OtherFilesGenCPP#start()
*/
#ifndef VHDLPARSERCONSTANTS_H
#define VHDLPARSERCONSTANTS_H
@@ -387,387 +387,387 @@ const int VHDL2008TOOLDIR = 189;
const int DEFAULT = 0;
/** Literal token values. */
- static JAVACC_CHAR_TYPE tokenImage_arr_0[] =
+ static const JJChar tokenImage_arr_0[] =
{0x3c, 0x45, 0x4f, 0x46, 0x3e, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_1[] =
+ static const JJChar tokenImage_arr_1[] =
{0x22, 0x20, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_2[] =
+ static const JJChar tokenImage_arr_2[] =
{0x22, 0x9, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_3[] =
+ static const JJChar tokenImage_arr_3[] =
{0x22, 0xa, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_4[] =
+ static const JJChar tokenImage_arr_4[] =
{0x22, 0xd, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_5[] =
+ static const JJChar tokenImage_arr_5[] =
{0x22, 0x3c, 0x44, 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e, 0x5f, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_6[] =
+ static const JJChar tokenImage_arr_6[] =
{0x22, 0x3c, 0x4d, 0x55, 0x4c, 0x54, 0x5f, 0x44, 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_7[] =
+ static const JJChar tokenImage_arr_7[] =
{0x22, 0x3c, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x46, 0x4c, 0x4f, 0x57, 0x43, 0x48, 0x41, 0x52, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_8[] =
+ static const JJChar tokenImage_arr_8[] =
{0x22, 0x3c, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_9[] =
+ static const JJChar tokenImage_arr_9[] =
{0x22, 0x3c, 0x4d, 0x55, 0x4c, 0x54, 0x5f, 0x44, 0x4f, 0x58, 0x59, 0x47, 0x45, 0x4e, 0x5f, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x32, 0x30, 0x30, 0x38, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_10[] =
+ static const JJChar tokenImage_arr_10[] =
{0x22, 0x3c, 0x4d, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x48, 0x44, 0x4c, 0x5f, 0x32, 0x30, 0x30, 0x38, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_11[] =
+ static const JJChar tokenImage_arr_11[] =
{0x22, 0x61, 0x62, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_12[] =
+ static const JJChar tokenImage_arr_12[] =
{0x22, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_13[] =
+ static const JJChar tokenImage_arr_13[] =
{0x22, 0x61, 0x66, 0x74, 0x65, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_14[] =
+ static const JJChar tokenImage_arr_14[] =
{0x22, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_15[] =
+ static const JJChar tokenImage_arr_15[] =
{0x22, 0x61, 0x6c, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_16[] =
+ static const JJChar tokenImage_arr_16[] =
{0x22, 0x61, 0x6e, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_17[] =
+ static const JJChar tokenImage_arr_17[] =
{0x22, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_18[] =
+ static const JJChar tokenImage_arr_18[] =
{0x22, 0x61, 0x72, 0x72, 0x61, 0x79, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_19[] =
+ static const JJChar tokenImage_arr_19[] =
{0x22, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_20[] =
+ static const JJChar tokenImage_arr_20[] =
{0x22, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_21[] =
-{0x22, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x67, 0x75, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x65, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_22[] =
+ static const JJChar tokenImage_arr_21[] =
+{0x22, 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x22, 0};
+ static const JJChar tokenImage_arr_22[] =
{0x22, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_23[] =
+ static const JJChar tokenImage_arr_23[] =
{0x22, 0x62, 0x65, 0x67, 0x69, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_24[] =
+ static const JJChar tokenImage_arr_24[] =
{0x22, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_25[] =
+ static const JJChar tokenImage_arr_25[] =
{0x22, 0x62, 0x6f, 0x64, 0x79, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_26[] =
+ static const JJChar tokenImage_arr_26[] =
{0x22, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_27[] =
+ static const JJChar tokenImage_arr_27[] =
{0x22, 0x62, 0x75, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_28[] =
+ static const JJChar tokenImage_arr_28[] =
{0x22, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_29[] =
+ static const JJChar tokenImage_arr_29[] =
{0x22, 0x63, 0x61, 0x73, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_30[] =
+ static const JJChar tokenImage_arr_30[] =
{0x22, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_31[] =
+ static const JJChar tokenImage_arr_31[] =
{0x22, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_32[] =
+ static const JJChar tokenImage_arr_32[] =
{0x22, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_33[] =
+ static const JJChar tokenImage_arr_33[] =
{0x22, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_34[] =
+ static const JJChar tokenImage_arr_34[] =
{0x22, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_35[] =
+ static const JJChar tokenImage_arr_35[] =
{0x22, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_36[] =
+ static const JJChar tokenImage_arr_36[] =
{0x22, 0x64, 0x6f, 0x77, 0x6e, 0x74, 0x6f, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_37[] =
+ static const JJChar tokenImage_arr_37[] =
{0x22, 0x65, 0x6c, 0x73, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_38[] =
+ static const JJChar tokenImage_arr_38[] =
{0x22, 0x65, 0x6c, 0x73, 0x69, 0x66, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_39[] =
+ static const JJChar tokenImage_arr_39[] =
{0x22, 0x65, 0x6e, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_40[] =
+ static const JJChar tokenImage_arr_40[] =
{0x22, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_41[] =
+ static const JJChar tokenImage_arr_41[] =
{0x22, 0x65, 0x78, 0x69, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_42[] =
+ static const JJChar tokenImage_arr_42[] =
{0x22, 0x66, 0x61, 0x69, 0x72, 0x6e, 0x65, 0x73, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_43[] =
+ static const JJChar tokenImage_arr_43[] =
{0x22, 0x66, 0x69, 0x6c, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_44[] =
+ static const JJChar tokenImage_arr_44[] =
{0x22, 0x66, 0x6f, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_45[] =
+ static const JJChar tokenImage_arr_45[] =
{0x22, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_46[] =
+ static const JJChar tokenImage_arr_46[] =
{0x22, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_47[] =
+ static const JJChar tokenImage_arr_47[] =
{0x22, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_48[] =
+ static const JJChar tokenImage_arr_48[] =
{0x22, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_49[] =
+ static const JJChar tokenImage_arr_49[] =
{0x22, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_50[] =
+ static const JJChar tokenImage_arr_50[] =
{0x22, 0x67, 0x75, 0x61, 0x72, 0x64, 0x65, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_51[] =
+ static const JJChar tokenImage_arr_51[] =
{0x22, 0x69, 0x66, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_52[] =
+ static const JJChar tokenImage_arr_52[] =
{0x22, 0x69, 0x6d, 0x70, 0x75, 0x72, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_53[] =
+ static const JJChar tokenImage_arr_53[] =
{0x22, 0x69, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_54[] =
+ static const JJChar tokenImage_arr_54[] =
{0x22, 0x69, 0x6e, 0x65, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_55[] =
+ static const JJChar tokenImage_arr_55[] =
{0x22, 0x69, 0x6e, 0x6f, 0x75, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_56[] =
+ static const JJChar tokenImage_arr_56[] =
{0x22, 0x69, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_57[] =
+ static const JJChar tokenImage_arr_57[] =
{0x22, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_58[] =
+ static const JJChar tokenImage_arr_58[] =
{0x22, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_59[] =
+ static const JJChar tokenImage_arr_59[] =
{0x22, 0x6c, 0x69, 0x6e, 0x6b, 0x61, 0x67, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_60[] =
+ static const JJChar tokenImage_arr_60[] =
{0x22, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_61[] =
+ static const JJChar tokenImage_arr_61[] =
{0x22, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_62[] =
+ static const JJChar tokenImage_arr_62[] =
{0x22, 0x6d, 0x61, 0x70, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_63[] =
+ static const JJChar tokenImage_arr_63[] =
{0x22, 0x6d, 0x6f, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_64[] =
+ static const JJChar tokenImage_arr_64[] =
{0x22, 0x6e, 0x61, 0x6e, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_65[] =
+ static const JJChar tokenImage_arr_65[] =
{0x22, 0x6e, 0x65, 0x77, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_66[] =
+ static const JJChar tokenImage_arr_66[] =
{0x22, 0x6e, 0x65, 0x78, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_67[] =
+ static const JJChar tokenImage_arr_67[] =
{0x22, 0x6e, 0x6f, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_68[] =
+ static const JJChar tokenImage_arr_68[] =
{0x22, 0x6e, 0x6f, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_69[] =
+ static const JJChar tokenImage_arr_69[] =
{0x22, 0x6e, 0x75, 0x6c, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_70[] =
+ static const JJChar tokenImage_arr_70[] =
{0x22, 0x6f, 0x66, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_71[] =
+ static const JJChar tokenImage_arr_71[] =
{0x22, 0x6f, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_72[] =
+ static const JJChar tokenImage_arr_72[] =
{0x22, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_73[] =
+ static const JJChar tokenImage_arr_73[] =
{0x22, 0x6f, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_74[] =
+ static const JJChar tokenImage_arr_74[] =
{0x22, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_75[] =
+ static const JJChar tokenImage_arr_75[] =
{0x22, 0x6f, 0x75, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_76[] =
+ static const JJChar tokenImage_arr_76[] =
{0x22, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_77[] =
+ static const JJChar tokenImage_arr_77[] =
{0x22, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_78[] =
+ static const JJChar tokenImage_arr_78[] =
{0x22, 0x70, 0x6f, 0x72, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_79[] =
+ static const JJChar tokenImage_arr_79[] =
{0x22, 0x70, 0x6f, 0x73, 0x74, 0x70, 0x6f, 0x6e, 0x65, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_80[] =
+ static const JJChar tokenImage_arr_80[] =
{0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_81[] =
+ static const JJChar tokenImage_arr_81[] =
{0x22, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_82[] =
+ static const JJChar tokenImage_arr_82[] =
{0x22, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_83[] =
+ static const JJChar tokenImage_arr_83[] =
{0x22, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_84[] =
+ static const JJChar tokenImage_arr_84[] =
{0x22, 0x70, 0x75, 0x72, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_85[] =
+ static const JJChar tokenImage_arr_85[] =
{0x22, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_86[] =
+ static const JJChar tokenImage_arr_86[] =
{0x22, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_87[] =
+ static const JJChar tokenImage_arr_87[] =
{0x22, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_88[] =
+ static const JJChar tokenImage_arr_88[] =
{0x22, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_89[] =
+ static const JJChar tokenImage_arr_89[] =
{0x22, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_90[] =
+ static const JJChar tokenImage_arr_90[] =
{0x22, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_91[] =
+ static const JJChar tokenImage_arr_91[] =
{0x22, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x5f, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_92[] =
+ static const JJChar tokenImage_arr_92[] =
{0x22, 0x72, 0x65, 0x6d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_93[] =
+ static const JJChar tokenImage_arr_93[] =
{0x22, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_94[] =
+ static const JJChar tokenImage_arr_94[] =
{0x22, 0x72, 0x6f, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_95[] =
+ static const JJChar tokenImage_arr_95[] =
{0x22, 0x72, 0x6f, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_96[] =
+ static const JJChar tokenImage_arr_96[] =
{0x22, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_97[] =
+ static const JJChar tokenImage_arr_97[] =
{0x22, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_98[] =
+ static const JJChar tokenImage_arr_98[] =
{0x22, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_99[] =
+ static const JJChar tokenImage_arr_99[] =
{0x22, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_100[] =
+ static const JJChar tokenImage_arr_100[] =
{0x22, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_101[] =
+ static const JJChar tokenImage_arr_101[] =
{0x22, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_102[] =
+ static const JJChar tokenImage_arr_102[] =
{0x22, 0x73, 0x6c, 0x61, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_103[] =
+ static const JJChar tokenImage_arr_103[] =
{0x22, 0x73, 0x6c, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_104[] =
+ static const JJChar tokenImage_arr_104[] =
{0x22, 0x73, 0x72, 0x61, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_105[] =
+ static const JJChar tokenImage_arr_105[] =
{0x22, 0x73, 0x72, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_106[] =
+ static const JJChar tokenImage_arr_106[] =
{0x22, 0x73, 0x74, 0x72, 0x6f, 0x6e, 0x67, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_107[] =
+ static const JJChar tokenImage_arr_107[] =
{0x22, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_108[] =
+ static const JJChar tokenImage_arr_108[] =
{0x22, 0x74, 0x68, 0x65, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_109[] =
+ static const JJChar tokenImage_arr_109[] =
{0x22, 0x74, 0x6f, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_110[] =
+ static const JJChar tokenImage_arr_110[] =
{0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_111[] =
+ static const JJChar tokenImage_arr_111[] =
{0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_112[] =
+ static const JJChar tokenImage_arr_112[] =
{0x22, 0x75, 0x6e, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_113[] =
+ static const JJChar tokenImage_arr_113[] =
{0x22, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_114[] =
+ static const JJChar tokenImage_arr_114[] =
{0x22, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_115[] =
+ static const JJChar tokenImage_arr_115[] =
{0x22, 0x75, 0x73, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_116[] =
+ static const JJChar tokenImage_arr_116[] =
{0x22, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_117[] =
+ static const JJChar tokenImage_arr_117[] =
{0x22, 0x76, 0x6d, 0x6f, 0x64, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_118[] =
+ static const JJChar tokenImage_arr_118[] =
{0x22, 0x76, 0x70, 0x72, 0x6f, 0x70, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_119[] =
+ static const JJChar tokenImage_arr_119[] =
{0x22, 0x76, 0x75, 0x6e, 0x69, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_120[] =
+ static const JJChar tokenImage_arr_120[] =
{0x22, 0x77, 0x61, 0x69, 0x74, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_121[] =
+ static const JJChar tokenImage_arr_121[] =
{0x22, 0x77, 0x68, 0x65, 0x6e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_122[] =
+ static const JJChar tokenImage_arr_122[] =
{0x22, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_123[] =
+ static const JJChar tokenImage_arr_123[] =
{0x22, 0x77, 0x69, 0x74, 0x68, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_124[] =
+ static const JJChar tokenImage_arr_124[] =
{0x22, 0x78, 0x6f, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_125[] =
+ static const JJChar tokenImage_arr_125[] =
{0x22, 0x78, 0x6e, 0x6f, 0x72, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_126[] =
+ static const JJChar tokenImage_arr_126[] =
{0x22, 0x26, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_127[] =
+ static const JJChar tokenImage_arr_127[] =
{0x22, 0x27, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_128[] =
+ static const JJChar tokenImage_arr_128[] =
{0x22, 0x28, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_129[] =
+ static const JJChar tokenImage_arr_129[] =
{0x22, 0x29, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_130[] =
+ static const JJChar tokenImage_arr_130[] =
{0x22, 0x2a, 0x2a, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_131[] =
+ static const JJChar tokenImage_arr_131[] =
{0x22, 0x2a, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_132[] =
+ static const JJChar tokenImage_arr_132[] =
{0x22, 0x2b, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_133[] =
+ static const JJChar tokenImage_arr_133[] =
{0x22, 0x2d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_134[] =
+ static const JJChar tokenImage_arr_134[] =
{0x22, 0x2c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_135[] =
+ static const JJChar tokenImage_arr_135[] =
{0x22, 0x3a, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_136[] =
+ static const JJChar tokenImage_arr_136[] =
{0x22, 0x3a, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_137[] =
+ static const JJChar tokenImage_arr_137[] =
{0x22, 0x3b, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_138[] =
+ static const JJChar tokenImage_arr_138[] =
{0x22, 0x3c, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_139[] =
+ static const JJChar tokenImage_arr_139[] =
{0x22, 0x3e, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_140[] =
+ static const JJChar tokenImage_arr_140[] =
{0x22, 0x3c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_141[] =
+ static const JJChar tokenImage_arr_141[] =
{0x22, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_142[] =
+ static const JJChar tokenImage_arr_142[] =
{0x22, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_143[] =
+ static const JJChar tokenImage_arr_143[] =
{0x22, 0x2f, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_144[] =
+ static const JJChar tokenImage_arr_144[] =
{0x22, 0x3d, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_145[] =
+ static const JJChar tokenImage_arr_145[] =
{0x22, 0x3c, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_146[] =
+ static const JJChar tokenImage_arr_146[] =
{0x22, 0x3c, 0x3c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_147[] =
+ static const JJChar tokenImage_arr_147[] =
{0x22, 0x3e, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_148[] =
+ static const JJChar tokenImage_arr_148[] =
{0x22, 0x3f, 0x3f, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_149[] =
+ static const JJChar tokenImage_arr_149[] =
{0x22, 0x3f, 0x3e, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_150[] =
+ static const JJChar tokenImage_arr_150[] =
{0x22, 0x3f, 0x3c, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_151[] =
+ static const JJChar tokenImage_arr_151[] =
{0x22, 0x3f, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_152[] =
+ static const JJChar tokenImage_arr_152[] =
{0x22, 0x3f, 0x3c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_153[] =
+ static const JJChar tokenImage_arr_153[] =
{0x22, 0x3f, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_154[] =
+ static const JJChar tokenImage_arr_154[] =
{0x22, 0x3f, 0x2f, 0x3d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_155[] =
+ static const JJChar tokenImage_arr_155[] =
{0x22, 0x3f, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_156[] =
+ static const JJChar tokenImage_arr_156[] =
{0x22, 0x7c, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_157[] =
+ static const JJChar tokenImage_arr_157[] =
{0x22, 0x2e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_158[] =
+ static const JJChar tokenImage_arr_158[] =
{0x22, 0x2f, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_159[] =
+ static const JJChar tokenImage_arr_159[] =
{0x22, 0x40, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_160[] =
+ static const JJChar tokenImage_arr_160[] =
{0x22, 0x5e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_161[] =
+ static const JJChar tokenImage_arr_161[] =
{0x22, 0x5b, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_162[] =
+ static const JJChar tokenImage_arr_162[] =
{0x22, 0x5d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_163[] =
+ static const JJChar tokenImage_arr_163[] =
{0x22, 0x7b, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_164[] =
+ static const JJChar tokenImage_arr_164[] =
{0x22, 0x7d, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_165[] =
+ static const JJChar tokenImage_arr_165[] =
{0x22, 0x3c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_166[] =
+ static const JJChar tokenImage_arr_166[] =
{0x22, 0x3c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_167[] =
+ static const JJChar tokenImage_arr_167[] =
{0x22, 0x3c, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_168[] =
+ static const JJChar tokenImage_arr_168[] =
{0x22, 0x3c, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_169[] =
+ static const JJChar tokenImage_arr_169[] =
{0x22, 0x3c, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_170[] =
+ static const JJChar tokenImage_arr_170[] =
{0x22, 0x3c, 0x44, 0x45, 0x43, 0x49, 0x4d, 0x41, 0x4c, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_171[] =
+ static const JJChar tokenImage_arr_171[] =
{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_172[] =
+ static const JJChar tokenImage_arr_172[] =
{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_173[] =
+ static const JJChar tokenImage_arr_173[] =
{0x22, 0x3c, 0x45, 0x58, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_174[] =
+ static const JJChar tokenImage_arr_174[] =
{0x22, 0x3c, 0x42, 0x41, 0x53, 0x49, 0x43, 0x5f, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_175[] =
+ static const JJChar tokenImage_arr_175[] =
{0x22, 0x3c, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_176[] =
+ static const JJChar tokenImage_arr_176[] =
{0x22, 0x3c, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x5f, 0x4f, 0x52, 0x5f, 0x44, 0x49, 0x47, 0x49, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_177[] =
+ static const JJChar tokenImage_arr_177[] =
{0x22, 0x3c, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x5f, 0x4f, 0x52, 0x5f, 0x44, 0x49, 0x47, 0x49, 0x54, 0x5f, 0x4f, 0x52, 0x5f, 0x53, 0x54, 0x44, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_178[] =
+ static const JJChar tokenImage_arr_178[] =
{0x22, 0x3c, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_179[] =
+ static const JJChar tokenImage_arr_179[] =
{0x22, 0x3c, 0x55, 0x50, 0x50, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_180[] =
+ static const JJChar tokenImage_arr_180[] =
{0x22, 0x3c, 0x42, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x49, 0x54, 0x45, 0x52, 0x41, 0x4c, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_181[] =
+ static const JJChar tokenImage_arr_181[] =
{0x22, 0x3c, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_182[] =
+ static const JJChar tokenImage_arr_182[] =
{0x22, 0x3c, 0x53, 0x54, 0x44, 0x5f, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_183[] =
+ static const JJChar tokenImage_arr_183[] =
{0x22, 0x3c, 0x44, 0x49, 0x47, 0x49, 0x54, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_184[] =
+ static const JJChar tokenImage_arr_184[] =
{0x22, 0x3c, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_185[] =
+ static const JJChar tokenImage_arr_185[] =
{0x22, 0x3c, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_186[] =
+ static const JJChar tokenImage_arr_186[] =
{0x22, 0x3c, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_187[] =
+ static const JJChar tokenImage_arr_187[] =
{0x22, 0x3c, 0x4c, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x53, 0x45, 0x5f, 0x4c, 0x45, 0x54, 0x54, 0x45, 0x52, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_188[] =
+ static const JJChar tokenImage_arr_188[] =
{0x22, 0x3c, 0x51, 0x55, 0x4f, 0x54, 0x45, 0x3e, 0x22, 0};
- static JAVACC_CHAR_TYPE tokenImage_arr_189[] =
+ static const JJChar tokenImage_arr_189[] =
{0x22, 0x3c, 0x56, 0x48, 0x44, 0x4c, 0x32, 0x30, 0x30, 0x38, 0x54, 0x4f, 0x4f, 0x4c, 0x44, 0x49, 0x52, 0x3e, 0x22, 0};
- static JAVACC_STRING_TYPE tokenImage[] = {
+ static const JJChar* const tokenImage[] = {
tokenImage_arr_0,
tokenImage_arr_1,
tokenImage_arr_2,
diff --git a/vhdlparser/VhdlParserIF.cpp b/vhdlparser/VhdlParserIF.cpp
index 3a6746f..676546b 100644
--- a/vhdlparser/VhdlParserIF.cpp
+++ b/vhdlparser/VhdlParserIF.cpp
@@ -34,8 +34,6 @@ void VhdlParserIF::parseVhdlfile(const char* inputBuffer,bool inLine)
// fprintf(stderr,"\n\nparsed lines: %d\n",yyLineNr);
// fprintf(stderr,"\n\nerrors : %d\n\n",myErr->getErrorCount());
delete myParser;
- delete myErr;
-
}
void VhdlParser::error_skipto(int kind)
diff --git a/vhdlparser/VhdlParserTokenManager.cc b/vhdlparser/VhdlParserTokenManager.cc
index a696fa6..7187449 100644
--- a/vhdlparser/VhdlParserTokenManager.cc
+++ b/vhdlparser/VhdlParserTokenManager.cc
@@ -1,5 +1,6 @@
/* VhdlParserTokenManager.cc */
-#include "./VhdlParserTokenManager.h"
+#include "VhdlParserTokenManager.h"
+#include "TokenMgrError.h"
namespace vhdl {
namespace parser {
static const unsigned long long jjbitVec0[] = {
@@ -17,227 +18,227 @@ static const int jjnextStates[] = {
40, 42, 56, 57, 58, 61, 60, 59, 61, 65, 66, 67, 68, 69, 71, 9,
10, 28, 29, 45, 47, 50, 52, 27, 30,
};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_0[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_1[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_2[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_3[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_4[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_5[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_6[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_7[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_8[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_9[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_10[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_11[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_12[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_13[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_14[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_15[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_16[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_17[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_18[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_19[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_20[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_21[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_22[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_23[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_24[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_25[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_26[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_27[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_28[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_29[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_30[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_31[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_32[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_33[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_34[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_35[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_36[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_37[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_38[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_39[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_40[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_41[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_42[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_43[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_44[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_45[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_46[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_47[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_48[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_49[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_50[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_51[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_52[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_53[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_54[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_55[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_56[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_57[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_58[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_59[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_60[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_61[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_62[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_63[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_64[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_65[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_66[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_67[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_68[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_69[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_70[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_71[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_72[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_73[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_74[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_75[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_76[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_77[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_78[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_79[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_80[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_81[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_82[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_83[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_84[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_85[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_86[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_87[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_88[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_89[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_90[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_91[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_92[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_93[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_94[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_95[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_96[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_97[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_98[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_99[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_100[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_101[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_102[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_103[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_104[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_105[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_106[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_107[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_108[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_109[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_110[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_111[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_112[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_113[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_114[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_115[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_116[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_117[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_118[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_119[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_120[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_121[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_122[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_123[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_124[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_125[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_126[] = {0x26, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_127[] = {0x27, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_128[] = {0x28, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_129[] = {0x29, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_130[] = {0x2a, 0x2a, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_131[] = {0x2a, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_132[] = {0x2b, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_133[] = {0x2d, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_134[] = {0x2c, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_135[] = {0x3a, 0x3d, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_136[] = {0x3a, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_137[] = {0x3b, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_138[] = {0x3c, 0x3d, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_139[] = {0x3e, 0x3d, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_140[] = {0x3c, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_141[] = {0x3e, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_142[] = {0x3d, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_143[] = {0x2f, 0x3d, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_144[] = {0x3d, 0x3e, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_145[] = {0x3c, 0x3e, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_146[] = {0x3c, 0x3c, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_147[] = {0x3e, 0x3e, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_148[] = {0x3f, 0x3f, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_149[] = {0x3f, 0x3e, 0x3d, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_150[] = {0x3f, 0x3c, 0x3d, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_151[] = {0x3f, 0x3e, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_152[] = {0x3f, 0x3c, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_153[] = {0x3f, 0x3d, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_154[] = {0x3f, 0x2f, 0x3d, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_155[] = {0x3f, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_156[] = {0x7c, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_157[] = {0x2e, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_158[] = {0x2f, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_159[] = {0x40, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_160[] = {0x5e, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_161[] = {0x5b, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_162[] = {0x5d, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_163[] = {0x7b, 0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_164[] = {0x7d, 0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_165[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_166[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_167[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_168[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_169[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_170[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_171[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_172[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_173[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_174[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_175[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_176[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_177[] = {0};
-
-static JAVACC_CHAR_TYPE jjstrLiteralChars_178[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_179[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_180[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_181[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_182[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_183[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_184[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_185[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_186[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_187[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_188[] = {0};
-static JAVACC_CHAR_TYPE jjstrLiteralChars_189[] = {0};
-static const JAVACC_STRING_TYPE jjstrLiteralImages[] = {
+static JJChar jjstrLiteralChars_0[] = {0};
+static JJChar jjstrLiteralChars_1[] = {0};
+static JJChar jjstrLiteralChars_2[] = {0};
+static JJChar jjstrLiteralChars_3[] = {0};
+static JJChar jjstrLiteralChars_4[] = {0};
+static JJChar jjstrLiteralChars_5[] = {0};
+static JJChar jjstrLiteralChars_6[] = {0};
+
+static JJChar jjstrLiteralChars_7[] = {0};
+static JJChar jjstrLiteralChars_8[] = {0};
+static JJChar jjstrLiteralChars_9[] = {0};
+static JJChar jjstrLiteralChars_10[] = {0};
+static JJChar jjstrLiteralChars_11[] = {0};
+static JJChar jjstrLiteralChars_12[] = {0};
+static JJChar jjstrLiteralChars_13[] = {0};
+static JJChar jjstrLiteralChars_14[] = {0};
+static JJChar jjstrLiteralChars_15[] = {0};
+static JJChar jjstrLiteralChars_16[] = {0};
+static JJChar jjstrLiteralChars_17[] = {0};
+static JJChar jjstrLiteralChars_18[] = {0};
+static JJChar jjstrLiteralChars_19[] = {0};
+static JJChar jjstrLiteralChars_20[] = {0};
+
+static JJChar jjstrLiteralChars_21[] = {0};
+static JJChar jjstrLiteralChars_22[] = {0};
+static JJChar jjstrLiteralChars_23[] = {0};
+static JJChar jjstrLiteralChars_24[] = {0};
+static JJChar jjstrLiteralChars_25[] = {0};
+static JJChar jjstrLiteralChars_26[] = {0};
+static JJChar jjstrLiteralChars_27[] = {0};
+static JJChar jjstrLiteralChars_28[] = {0};
+static JJChar jjstrLiteralChars_29[] = {0};
+static JJChar jjstrLiteralChars_30[] = {0};
+static JJChar jjstrLiteralChars_31[] = {0};
+static JJChar jjstrLiteralChars_32[] = {0};
+static JJChar jjstrLiteralChars_33[] = {0};
+static JJChar jjstrLiteralChars_34[] = {0};
+
+static JJChar jjstrLiteralChars_35[] = {0};
+static JJChar jjstrLiteralChars_36[] = {0};
+static JJChar jjstrLiteralChars_37[] = {0};
+static JJChar jjstrLiteralChars_38[] = {0};
+static JJChar jjstrLiteralChars_39[] = {0};
+static JJChar jjstrLiteralChars_40[] = {0};
+static JJChar jjstrLiteralChars_41[] = {0};
+static JJChar jjstrLiteralChars_42[] = {0};
+static JJChar jjstrLiteralChars_43[] = {0};
+static JJChar jjstrLiteralChars_44[] = {0};
+static JJChar jjstrLiteralChars_45[] = {0};
+static JJChar jjstrLiteralChars_46[] = {0};
+static JJChar jjstrLiteralChars_47[] = {0};
+static JJChar jjstrLiteralChars_48[] = {0};
+
+static JJChar jjstrLiteralChars_49[] = {0};
+static JJChar jjstrLiteralChars_50[] = {0};
+static JJChar jjstrLiteralChars_51[] = {0};
+static JJChar jjstrLiteralChars_52[] = {0};
+static JJChar jjstrLiteralChars_53[] = {0};
+static JJChar jjstrLiteralChars_54[] = {0};
+static JJChar jjstrLiteralChars_55[] = {0};
+static JJChar jjstrLiteralChars_56[] = {0};
+static JJChar jjstrLiteralChars_57[] = {0};
+static JJChar jjstrLiteralChars_58[] = {0};
+static JJChar jjstrLiteralChars_59[] = {0};
+static JJChar jjstrLiteralChars_60[] = {0};
+static JJChar jjstrLiteralChars_61[] = {0};
+static JJChar jjstrLiteralChars_62[] = {0};
+
+static JJChar jjstrLiteralChars_63[] = {0};
+static JJChar jjstrLiteralChars_64[] = {0};
+static JJChar jjstrLiteralChars_65[] = {0};
+static JJChar jjstrLiteralChars_66[] = {0};
+static JJChar jjstrLiteralChars_67[] = {0};
+static JJChar jjstrLiteralChars_68[] = {0};
+static JJChar jjstrLiteralChars_69[] = {0};
+static JJChar jjstrLiteralChars_70[] = {0};
+static JJChar jjstrLiteralChars_71[] = {0};
+static JJChar jjstrLiteralChars_72[] = {0};
+static JJChar jjstrLiteralChars_73[] = {0};
+static JJChar jjstrLiteralChars_74[] = {0};
+static JJChar jjstrLiteralChars_75[] = {0};
+static JJChar jjstrLiteralChars_76[] = {0};
+
+static JJChar jjstrLiteralChars_77[] = {0};
+static JJChar jjstrLiteralChars_78[] = {0};
+static JJChar jjstrLiteralChars_79[] = {0};
+static JJChar jjstrLiteralChars_80[] = {0};
+static JJChar jjstrLiteralChars_81[] = {0};
+static JJChar jjstrLiteralChars_82[] = {0};
+static JJChar jjstrLiteralChars_83[] = {0};
+static JJChar jjstrLiteralChars_84[] = {0};
+static JJChar jjstrLiteralChars_85[] = {0};
+static JJChar jjstrLiteralChars_86[] = {0};
+static JJChar jjstrLiteralChars_87[] = {0};
+static JJChar jjstrLiteralChars_88[] = {0};
+static JJChar jjstrLiteralChars_89[] = {0};
+static JJChar jjstrLiteralChars_90[] = {0};
+
+static JJChar jjstrLiteralChars_91[] = {0};
+static JJChar jjstrLiteralChars_92[] = {0};
+static JJChar jjstrLiteralChars_93[] = {0};
+static JJChar jjstrLiteralChars_94[] = {0};
+static JJChar jjstrLiteralChars_95[] = {0};
+static JJChar jjstrLiteralChars_96[] = {0};
+static JJChar jjstrLiteralChars_97[] = {0};
+static JJChar jjstrLiteralChars_98[] = {0};
+static JJChar jjstrLiteralChars_99[] = {0};
+static JJChar jjstrLiteralChars_100[] = {0};
+static JJChar jjstrLiteralChars_101[] = {0};
+static JJChar jjstrLiteralChars_102[] = {0};
+static JJChar jjstrLiteralChars_103[] = {0};
+static JJChar jjstrLiteralChars_104[] = {0};
+
+static JJChar jjstrLiteralChars_105[] = {0};
+static JJChar jjstrLiteralChars_106[] = {0};
+static JJChar jjstrLiteralChars_107[] = {0};
+static JJChar jjstrLiteralChars_108[] = {0};
+static JJChar jjstrLiteralChars_109[] = {0};
+static JJChar jjstrLiteralChars_110[] = {0};
+static JJChar jjstrLiteralChars_111[] = {0};
+static JJChar jjstrLiteralChars_112[] = {0};
+static JJChar jjstrLiteralChars_113[] = {0};
+static JJChar jjstrLiteralChars_114[] = {0};
+static JJChar jjstrLiteralChars_115[] = {0};
+static JJChar jjstrLiteralChars_116[] = {0};
+static JJChar jjstrLiteralChars_117[] = {0};
+static JJChar jjstrLiteralChars_118[] = {0};
+
+static JJChar jjstrLiteralChars_119[] = {0};
+static JJChar jjstrLiteralChars_120[] = {0};
+static JJChar jjstrLiteralChars_121[] = {0};
+static JJChar jjstrLiteralChars_122[] = {0};
+static JJChar jjstrLiteralChars_123[] = {0};
+static JJChar jjstrLiteralChars_124[] = {0};
+static JJChar jjstrLiteralChars_125[] = {0};
+
+static JJChar jjstrLiteralChars_126[] = {0x26, 0};
+static JJChar jjstrLiteralChars_127[] = {0x27, 0};
+
+static JJChar jjstrLiteralChars_128[] = {0x28, 0};
+static JJChar jjstrLiteralChars_129[] = {0x29, 0};
+
+static JJChar jjstrLiteralChars_130[] = {0x2a, 0x2a, 0};
+static JJChar jjstrLiteralChars_131[] = {0x2a, 0};
+
+static JJChar jjstrLiteralChars_132[] = {0x2b, 0};
+static JJChar jjstrLiteralChars_133[] = {0x2d, 0};
+
+static JJChar jjstrLiteralChars_134[] = {0x2c, 0};
+static JJChar jjstrLiteralChars_135[] = {0x3a, 0x3d, 0};
+
+static JJChar jjstrLiteralChars_136[] = {0x3a, 0};
+static JJChar jjstrLiteralChars_137[] = {0x3b, 0};
+
+static JJChar jjstrLiteralChars_138[] = {0x3c, 0x3d, 0};
+static JJChar jjstrLiteralChars_139[] = {0x3e, 0x3d, 0};
+
+static JJChar jjstrLiteralChars_140[] = {0x3c, 0};
+static JJChar jjstrLiteralChars_141[] = {0x3e, 0};
+
+static JJChar jjstrLiteralChars_142[] = {0x3d, 0};
+static JJChar jjstrLiteralChars_143[] = {0x2f, 0x3d, 0};
+
+static JJChar jjstrLiteralChars_144[] = {0x3d, 0x3e, 0};
+static JJChar jjstrLiteralChars_145[] = {0x3c, 0x3e, 0};
+
+static JJChar jjstrLiteralChars_146[] = {0x3c, 0x3c, 0};
+static JJChar jjstrLiteralChars_147[] = {0x3e, 0x3e, 0};
+
+static JJChar jjstrLiteralChars_148[] = {0x3f, 0x3f, 0};
+static JJChar jjstrLiteralChars_149[] = {0x3f, 0x3e, 0x3d, 0};
+
+static JJChar jjstrLiteralChars_150[] = {0x3f, 0x3c, 0x3d, 0};
+static JJChar jjstrLiteralChars_151[] = {0x3f, 0x3e, 0};
+
+static JJChar jjstrLiteralChars_152[] = {0x3f, 0x3c, 0};
+static JJChar jjstrLiteralChars_153[] = {0x3f, 0x3d, 0};
+
+static JJChar jjstrLiteralChars_154[] = {0x3f, 0x2f, 0x3d, 0};
+static JJChar jjstrLiteralChars_155[] = {0x3f, 0};
+
+static JJChar jjstrLiteralChars_156[] = {0x7c, 0};
+static JJChar jjstrLiteralChars_157[] = {0x2e, 0};
+
+static JJChar jjstrLiteralChars_158[] = {0x2f, 0};
+static JJChar jjstrLiteralChars_159[] = {0x40, 0};
+
+static JJChar jjstrLiteralChars_160[] = {0x5e, 0};
+static JJChar jjstrLiteralChars_161[] = {0x5b, 0};
+
+static JJChar jjstrLiteralChars_162[] = {0x5d, 0};
+static JJChar jjstrLiteralChars_163[] = {0x7b, 0};
+
+static JJChar jjstrLiteralChars_164[] = {0x7d, 0};
+static JJChar jjstrLiteralChars_165[] = {0};
+static JJChar jjstrLiteralChars_166[] = {0};
+static JJChar jjstrLiteralChars_167[] = {0};
+static JJChar jjstrLiteralChars_168[] = {0};
+static JJChar jjstrLiteralChars_169[] = {0};
+static JJChar jjstrLiteralChars_170[] = {0};
+static JJChar jjstrLiteralChars_171[] = {0};
+static JJChar jjstrLiteralChars_172[] = {0};
+static JJChar jjstrLiteralChars_173[] = {0};
+static JJChar jjstrLiteralChars_174[] = {0};
+static JJChar jjstrLiteralChars_175[] = {0};
+static JJChar jjstrLiteralChars_176[] = {0};
+static JJChar jjstrLiteralChars_177[] = {0};
+
+static JJChar jjstrLiteralChars_178[] = {0};
+static JJChar jjstrLiteralChars_179[] = {0};
+static JJChar jjstrLiteralChars_180[] = {0};
+static JJChar jjstrLiteralChars_181[] = {0};
+static JJChar jjstrLiteralChars_182[] = {0};
+static JJChar jjstrLiteralChars_183[] = {0};
+static JJChar jjstrLiteralChars_184[] = {0};
+static JJChar jjstrLiteralChars_185[] = {0};
+static JJChar jjstrLiteralChars_186[] = {0};
+static JJChar jjstrLiteralChars_187[] = {0};
+static JJChar jjstrLiteralChars_188[] = {0};
+static JJChar jjstrLiteralChars_189[] = {0};
+static const JJString jjstrLiteralImages[] = {
jjstrLiteralChars_0,
jjstrLiteralChars_1,
jjstrLiteralChars_2,
@@ -431,9 +432,9 @@ jjstrLiteralChars_189,
};
/** Lexer state names. */
-static const JAVACC_CHAR_TYPE lexStateNames_arr_0[] =
+static const JJChar lexStateNames_arr_0[] =
{0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0};
-static const JAVACC_STRING_TYPE lexStateNames[] = {
+static const JJString lexStateNames[] = {
lexStateNames_arr_0,
};
static const unsigned long long jjtoToken[] = {
@@ -443,7 +444,7 @@ static const unsigned long long jjtoSkip[] = {
0x7deULL, 0x0ULL, 0x0ULL,
};
-void VhdlParserTokenManager::setDebugStream(FILE *ds){ debugStream = ds; }
+ void VhdlParserTokenManager::setDebugStream(FILE *ds){ debugStream = ds; }
int VhdlParserTokenManager::jjStopAtPos(int pos, int kind){
jjmatchedKind = kind;
@@ -2490,25 +2491,25 @@ void VhdlParserTokenManager::setDebugStream(FILE *ds){ debugStream = ds; }
switch(curChar)
{
case 65:
- return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x8000000ULL);
+ return jjMoveStringLiteralDfa12_0(active0, 0x200000ULL, active1, 0x8000000ULL);
case 69:
if ((active0 & 0x20000ULL) != 0L)
{
jjmatchedKind = 17;
jjmatchedPos = 11;
}
- return jjMoveStringLiteralDfa12_0(active0, 0x200000ULL, active1, 0L);
+ break;
case 79:
return jjMoveStringLiteralDfa12_0(active0, 0x40000000ULL, active1, 0L);
case 97:
- return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0x8000000ULL);
+ return jjMoveStringLiteralDfa12_0(active0, 0x200000ULL, active1, 0x8000000ULL);
case 101:
if ((active0 & 0x20000ULL) != 0L)
{
jjmatchedKind = 17;
jjmatchedPos = 11;
}
- return jjMoveStringLiteralDfa12_0(active0, 0x200000ULL, active1, 0L);
+ break;
case 111:
return jjMoveStringLiteralDfa12_0(active0, 0x40000000ULL, active1, 0L);
default :
@@ -3036,7 +3037,7 @@ int VhdlParserTokenManager::jjMoveNfa_0(int startState, int curPos){
}
} while(i != startsAt);
}
- else if ((int)curChar < 128)
+ else if (curChar < 128)
{
unsigned long long l = 1ULL << (curChar & 077);
(void)l;
@@ -3320,12 +3321,12 @@ bool VhdlParserTokenManager::jjCanMove_1(int hiByte, int i1, int i2, unsigned lo
Token * VhdlParserTokenManager::jjFillToken(){
Token *t;
- JAVACC_STRING_TYPE curTokenImage;
- int beginLine;
- int endLine;
- int beginColumn;
- int endColumn;
- JAVACC_STRING_TYPE im = jjstrLiteralImages[jjmatchedKind];
+ JJString curTokenImage;
+ int beginLine = -1;
+ int endLine = -1;
+ int beginColumn = -1;
+ int endColumn = -1;
+ JJString im = jjstrLiteralImages[jjmatchedKind];
curTokenImage = (im.length() == 0) ? input_stream->GetImage() : im;
if (input_stream->getTrackLineColumn()) {
beginLine = input_stream->getBeginLine();
@@ -3333,9 +3334,11 @@ Token * VhdlParserTokenManager::jjFillToken(){
endLine = input_stream->getEndLine();
endColumn = input_stream->getEndColumn();
}
- t = Token::newToken(jjmatchedKind, curTokenImage);
- t->specialToken = NULL;
- t->next = NULL;
+ t = Token::newToken(jjmatchedKind);
+ t->kind = jjmatchedKind;
+ t->image = curTokenImage;
+ t->specialToken = nullptr;
+ t->next = nullptr;
if (input_stream->getTrackLineColumn()) {
t->beginLine = beginLine;
@@ -3350,7 +3353,7 @@ const int defaultLexState = 0;
/** Get the next Token. */
Token * VhdlParserTokenManager::getNextToken(){
- Token *matchedToken;
+ Token *matchedToken = nullptr;
int curPos = 0;
for (;;)
@@ -3383,13 +3386,13 @@ Token * VhdlParserTokenManager::getNextToken(){
}
else
{
- SkipLexicalActions(NULL);
+ SkipLexicalActions(nullptr);
goto EOFLoop;
}
}
int error_line = input_stream->getEndLine();
int error_column = input_stream->getEndColumn();
- JAVACC_STRING_TYPE error_after;
+ JJString error_after;
bool EOFSeen = false;
if (input_stream->endOfInput()) {
EOFSeen = true;
@@ -3590,17 +3593,15 @@ void VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
}
}
/** Reinitialise parser. */
- void VhdlParserTokenManager::ReInit(JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg) {
- if (input_stream) delete input_stream;
+ void VhdlParserTokenManager::ReInit(JAVACC_CHARSTREAM *stream, int lexState) {
+ clear();
jjmatchedPos = jjnewStateCnt = 0;
curLexState = lexState;
input_stream = stream;
ReInitRounds();
debugStream = stdout; // init
SwitchTo(lexState);
- parser = parserArg;
errorHandler = new TokenManagerErrorHandler();
- errorHandlerCreated = true;
}
void VhdlParserTokenManager::ReInitRounds() {
@@ -3612,25 +3613,40 @@ void VhdlParserTokenManager::TokenLexicalActions(Token *matchedToken){
/** Switch to specified lex state. */
void VhdlParserTokenManager::SwitchTo(int lexState) {
- if (lexState >= 1 || lexState < 0)
- assert(false);
- //throw 1;//new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
- else
+ if (lexState >= 1 || lexState < 0) {
+ JJString message;
+#ifdef WIDE_CHAR
+ message += L"Error: Ignoring invalid lexical state : ";
+ message += lexState; message += L". State unchanged.";
+#else
+ message += "Error: Ignoring invalid lexical state : ";
+ message += lexState; message += ". State unchanged.";
+#endif
+ throw new TokenMgrError(message, INVALID_LEXICAL_STATE);
+ } else
curLexState = lexState;
}
/** Constructor. */
- VhdlParserTokenManager::VhdlParserTokenManager (JAVACC_CHARSTREAM *stream, int lexState, VhdlParser *parserArg)
+ VhdlParserTokenManager::VhdlParserTokenManager (JAVACC_CHARSTREAM *stream, int lexState)
{
- input_stream = NULL;
- ReInit(stream, lexState, parserArg);
+ input_stream = nullptr;
+ ReInit(stream, lexState);
}
// Destructor
VhdlParserTokenManager::~VhdlParserTokenManager () {
- if (input_stream) delete input_stream;
- if (errorHandlerCreated) delete errorHandler;
+ clear();
}
+ // clear
+ void VhdlParserTokenManager::clear() {
+ //Since input_stream was generated outside of TokenManager
+ //TokenManager should not take care of deleting it
+ //if (input_stream) delete input_stream;
+ if (errorHandler) delete errorHandler, errorHandler = nullptr;
+ }
+
+
}
}
diff --git a/vhdlparser/VhdlParserTokenManager.h b/vhdlparser/VhdlParserTokenManager.h
index e6a7245..5100369 100644
--- a/vhdlparser/VhdlParserTokenManager.h
+++ b/vhdlparser/VhdlParserTokenManager.h
@@ -1,5 +1,6 @@
#ifndef VHDLPARSERTOKENMANAGER_H
#define VHDLPARSERTOKENMANAGER_H
+#include "stdio.h"
#include "JavaCC.h"
#include "CharStream.h"
#include "Token.h"
@@ -8,77 +9,50 @@
#include "VhdlParserConstants.h"
#include "VhdlParser.h"
+
namespace vhdl {
namespace parser {
class VhdlParser;
/** Token Manager. */
class VhdlParserTokenManager : public TokenManager {
- public:
+public:
- /** Debug output. */
FILE *debugStream;
- /** Set debug output. */
-
-void setDebugStream(FILE *ds);
-
+ void setDebugStream(FILE *ds);
int jjStopAtPos(int pos, int kind);
-
int jjMoveStringLiteralDfa0_0();
-
int jjMoveStringLiteralDfa1_0(unsigned long long active0, unsigned long long active1, unsigned long long active2);
-
int jjMoveStringLiteralDfa2_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2);
-
int jjMoveStringLiteralDfa3_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1, unsigned long long old2, unsigned long long active2);
-
int jjMoveStringLiteralDfa4_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa5_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa6_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa7_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa8_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa9_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa10_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa11_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa12_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa13_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa14_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa15_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa16_0(unsigned long long old0, unsigned long long active0, unsigned long long old1, unsigned long long active1);
-
int jjMoveStringLiteralDfa17_0(unsigned long long old1, unsigned long long active1);
-
int jjMoveNfa_0(int startState, int curPos);
-
bool jjCanMove_0(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2);
-
bool jjCanMove_1(int hiByte, int i1, int i2, unsigned long long l1, unsigned long long l2);
-
Token * jjFillToken();
-public: int curLexState;
-public: int jjnewStateCnt;
-public: int jjround;
-public: int jjmatchedPos;
-public: int jjmatchedKind;
-
+public:
+ int curLexState;
+ int jjnewStateCnt;
+ int jjround;
+ int jjmatchedPos;
+ int jjmatchedKind;
Token * getNextToken();
-
void SkipLexicalActions(Token *matchedToken);
-
void TokenLexicalActions(Token *matchedToken);
#define jjCheckNAdd(state)\
{\
@@ -110,29 +84,35 @@ void TokenLexicalActions(Token *matchedToken);
#ifndef JAVACC_CHARSTREAM
#define JAVACC_CHARSTREAM CharStream
#endif
- private: VhdlParser*parser;
- private: void ReInitRounds();
- public: VhdlParserTokenManager(JAVACC_CHARSTREAM *stream, int lexState = 0, VhdlParser *parserArg = NULL);
- public: virtual ~VhdlParserTokenManager();
- void ReInit(JAVACC_CHARSTREAM *stream, int lexState = 0, VhdlParser *parserArg = NULL);
+
+private:
+ void ReInitRounds();
+
+public:
+ VhdlParserTokenManager(JAVACC_CHARSTREAM *stream, int lexState = 0);
+ virtual ~VhdlParserTokenManager();
+ void ReInit(JAVACC_CHARSTREAM *stream, int lexState = 0);
void SwitchTo(int lexState);
- const JAVACC_SIMPLE_STRING jjKindsForBitVector(int i, unsigned long long vec);
- const JAVACC_SIMPLE_STRING jjKindsForStateVector(int lexState, int vec[], int start, int end);
- JAVACC_CHARSTREAM *input_stream;
- int jjrounds[77];
- int jjstateSet[2 * 77];
- JAVACC_STRING_TYPE jjimage;
- JAVACC_STRING_TYPE image;
- int jjimageLen;
- int lengthOfMatch;
- JAVACC_CHAR_TYPE curChar;
- TokenManagerErrorHandler *errorHandler;
- bool errorHandlerCreated;
- public: void setErrorHandler(TokenManagerErrorHandler *eh) {
- if (errorHandlerCreated && errorHandler != NULL) delete errorHandler;
+ void clear();
+ const JJSimpleString jjKindsForBitVector(int i, unsigned long long vec);
+ const JJSimpleString jjKindsForStateVector(int lexState, int vec[], int start, int end);
+
+ JAVACC_CHARSTREAM* input_stream;
+ int jjrounds[77];
+ int jjstateSet[2 * 77];
+ JJString jjimage;
+ JJString image;
+ int jjimageLen;
+ int lengthOfMatch;
+ JJChar curChar;
+ TokenManagerErrorHandler* errorHandler = nullptr;
+
+public:
+ void setErrorHandler(TokenManagerErrorHandler *eh) {
+ if (errorHandler) delete errorHandler, errorHandler = nullptr;
errorHandler = eh;
- errorHandlerCreated = false;
}
+
};
}
}
diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj
index 2f0c466..8a76bc6 100644
--- a/vhdlparser/vhdlparser.jj
+++ b/vhdlparser/vhdlparser.jj
@@ -31,7 +31,7 @@ static Entry* current_root;
static Entry* tempEntry;
static Entry* lastEntity ;
static Entry* lastCompound ;
-static std::unique_ptr<Entry> current;
+static std::shared_ptr<Entry> current;
static QCString compSpec;
static QCString currName;
static int levelCounter;
@@ -42,7 +42,6 @@ static QCString forL;
static int param_sec ;
static int parse_sec;
static int currP;
-static Entry* currentCompound;
//----------------------------------------
@@ -134,7 +133,7 @@ TOKEN [IGNORE_CASE] :
| <ARRAY_T: "array"> {VhdlParser::setLineParsed(ARRAY_T);}
| <ASSERT_T: "assert">
| <ASSUME_T: "assume">
-| <ASSUME_GUARANTEE_T: "assume_guarentee">
+| <ASSUME_GUARANTEE_T: "assume_guarantee">
| <ATTRIBUTE_T: "attribute"> {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);}
| <BEGIN_T: "begin">
| <BLOCK_T: "block">
@@ -1733,7 +1732,7 @@ void package_declaration(): {QCString s;}
<PACKAGE_T> s=identifier() <IS_T>
{
lastCompound=current.get();
- std::unique_ptr<Entry> clone=std::make_unique<Entry>(*current);
+ std::shared_ptr<Entry> clone=std::make_shared<Entry>(*current);
clone->section=Entry::NAMESPACE_SEC;
clone->spec=VhdlDocGen::PACKAGE;
clone->name=s;