summaryrefslogtreecommitdiffstats
path: root/src/code.l
diff options
context:
space:
mode:
authoralbert-github <albert.tests@gmail.com>2020-08-24 11:13:59 (GMT)
committeralbert-github <albert.tests@gmail.com>2020-08-24 11:13:59 (GMT)
commit942fcfaf391d1213bee26e43249fea8da723d714 (patch)
tree033c33b0a8f9f2e58a0332354c75393b933ec8ba /src/code.l
parent8578e6bead66cae44b61214b3a43f776ed008362 (diff)
downloadDoxygen-942fcfaf391d1213bee26e43249fea8da723d714.zip
Doxygen-942fcfaf391d1213bee26e43249fea8da723d714.tar.gz
Doxygen-942fcfaf391d1213bee26e43249fea8da723d714.tar.bz2
bug_786382 Unmatched single quote in C++ source breaks aliases
Based on the definition in the (informative) Annex A of the C++ draft 2020 standard (N4849, part [gram.lex]), the definitions have been made for the lexer. Now integer and floating point constants wit a single quote are seen as numbers and not as part of character constants. (also tested on CGAL)
Diffstat (limited to 'src/code.l')
-rw-r--r--src/code.l30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/code.l b/src/code.l
index 6627498..b3e7e4b 100644
--- a/src/code.l
+++ b/src/code.l
@@ -402,6 +402,32 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
RAWEND ")"[^ \t\(\)\\]{0,16}\"
+ //Note same defines in commentcnv.l
+DECIMAL_INTEGER [1-9][0-9']*[0-9]?[uU]?[lL]?[lL]?
+HEXADECIMAL_INTEGER "0"[xX][0-9a-zA-Z']+[0-9a-zA-Z]?
+OCTAL_INTEGER "0"[0-7][0-7']+[0-7]?
+BINARY_INTEGER "0"[bB][01][01']*[01]?
+INTEGER_NUMBER {DECIMAL_INTEGER}|{HEXADECIMAL_INTEGER}|{OCTAL_INTEGER}|{BINARY_INTEGER}
+
+FP_SUF [fFlL]
+
+DIGIT_SEQ [0-9][0-9']*[0-9]?
+FRAC_CONST {DIGIT_SEQ}"."|{DIGIT_SEQ}?"."{DIGIT_SEQ}
+FP_EXP [eE][+-]?{DIGIT_SEQ}
+DEC_FP1 {FRAC_CONST}{FP_EXP}?{FP_SUF}?
+DEC_FP2 {DIGIT_SEQ}{FP_EXP}{FP_SUF}
+
+HEX_DIGIT_SEQ [0-9a-fA-F][0-9a-fA-F']*[0-9a-fA-F]?
+HEX_FRAC_CONST {HEX_DIGIT_SEQ}"."|{HEX_DIGIT_SEQ}?"."{HEX_DIGIT_SEQ}
+BIN_EXP [pP][+-]?{DIGIT_SEQ}
+HEX_FP1 "0"[xX]{HEX_FRAC_CONST}{BIN_EXP}{FP_SUF}?
+HEX_FP2 "0"[xX]{HEX_DIGIT_SEQ}{BIN_EXP}{FP_SUF}?
+
+FLOAT_DECIMAL {DEC_FP1}|{DEC_FP2}
+FLOAT_HEXADECIMAL {HEX_FP1}|{HEX_FP2}
+FLOAT_NUMBER {FLOAT_DECIMAL}|{FLOAT_HEXADECIMAL}
+NUMBER {INTEGER_NUMBER}|{FLOAT_NUMBER}
+
%option noyywrap
%x SkipString
@@ -1245,6 +1271,10 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
yyextra->inForEachExpression = FALSE;
BEGIN( SkipString );
}
+<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>{NUMBER} { //Note similar code in commentcnv.l
+ if (yyextra->lang!=SrcLangExt_Cpp) REJECT;
+ yyextra->code->codify(yytext);
+ }
<FuncCall,Body,MemberCall,MemberCall2,SkipInits,InlineInit>\' {
startFontClass(yyscanner,"stringliteral");
yyextra->code->codify(yytext);