diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2021-04-28 18:49:08 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2021-04-28 18:49:08 (GMT) |
commit | a9f40a48c99af952836a3871e60ff6ca17ecdecf (patch) | |
tree | e1294059ef40afa1c13da366f57dbde4736ba74a /src | |
parent | 0b6a0750198ef214c33aec43fd9533b90f9641df (diff) | |
parent | 91f735e7c57a855bab0f18c72700cb06f961b9ba (diff) | |
download | Doxygen-a9f40a48c99af952836a3871e60ff6ca17ecdecf.zip Doxygen-a9f40a48c99af952836a3871e60ff6ca17ecdecf.tar.gz Doxygen-a9f40a48c99af952836a3871e60ff6ca17ecdecf.tar.bz2 |
Merge branch 'master' of github.com:doxygen/doxygen
Diffstat (limited to 'src')
-rw-r--r-- | src/constexp.l | 3 | ||||
-rw-r--r-- | src/constexp.y | 6 | ||||
-rw-r--r-- | src/cppvalue.cpp | 10 | ||||
-rw-r--r-- | src/cppvalue.h | 1 | ||||
-rw-r--r-- | src/qcstring.h | 2 |
5 files changed, 21 insertions, 1 deletions
diff --git a/src/constexp.l b/src/constexp.l index a26d517..889626c 100644 --- a/src/constexp.l +++ b/src/constexp.l @@ -90,6 +90,9 @@ CONSTSUFFIX ([uU][lL]?[lL]?)|([lL][lL]?[uU]?) (0x|0X)[0-9a-fA-F]+{CONSTSUFFIX}? { yyextra->strToken=yytext+2; return TOK_HEXADECIMALINT; } +(0b|0B)[01]+{CONSTSUFFIX}? { yyextra->strToken=yytext+2; + return TOK_BINARYINT; + } (([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+))([eE]([\-\+])?[0-9]+)?([fFlL])? { yyextra->strToken=yytext; return TOK_FLOAT; } diff --git a/src/constexp.y b/src/constexp.y index 560b3c3..4ebbc79 100644 --- a/src/constexp.y +++ b/src/constexp.y @@ -64,6 +64,7 @@ int constexpYYerror(yyscan_t yyscanner, const char *s) %token TOK_OCTALINT %token TOK_DECIMALINT %token TOK_HEXADECIMALINT +%token TOK_BINARYINT %token TOK_CHARACTER %token TOK_FLOAT @@ -276,6 +277,11 @@ constant: TOK_OCTALINT struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner); $$ = parseHexadecimal(yyextra->strToken); } + | TOK_BINARYINT + { + struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner); + $$ = parseBinary(yyextra->strToken); + } | TOK_CHARACTER { struct constexpYY_state* yyextra = constexpYYget_extra(yyscanner); diff --git a/src/cppvalue.cpp b/src/cppvalue.cpp index 77677d9..8cd7c5c 100644 --- a/src/cppvalue.cpp +++ b/src/cppvalue.cpp @@ -51,6 +51,16 @@ CPPValue parseHexadecimal(const std::string& token) return CPPValue(val); } +CPPValue parseBinary(const std::string& token) +{ + long val = 0; + for (const char *p = token.c_str(); *p != 0; p++) + { + if (*p >= '0' && *p <= '1') val = val * 2 + *p - '0'; + } + return CPPValue(val); +} + CPPValue parseCharacter(const std::string& token) // does not work for '\n' and the alike { if (token[1]=='\\') diff --git a/src/cppvalue.h b/src/cppvalue.h index 7732068..74fe4d7 100644 --- a/src/cppvalue.h +++ b/src/cppvalue.h @@ -52,6 +52,7 @@ class CPPValue extern CPPValue parseOctal(const std::string& token); extern CPPValue parseDecimal(const std::string& token); extern CPPValue parseHexadecimal(const std::string& token); +extern CPPValue parseBinary(const std::string& token); extern CPPValue parseCharacter(const std::string& token); extern CPPValue parseFloat(const std::string& token); diff --git a/src/qcstring.h b/src/qcstring.h index f7cccb7..886573a 100644 --- a/src/qcstring.h +++ b/src/qcstring.h @@ -42,7 +42,7 @@ typedef unsigned long ulong; typedef int64_t int64; typedef uint64_t uint64; #define ASSERT(x) if ( !(x) )\ - fprintf(stderr,"ASSERT: \"%s\" in %s (%d)",#x,__FILE__,__LINE__) + fprintf(stderr,"ASSERT: \"%s\" in %s (%d)\n",#x,__FILE__,__LINE__) /***************************************************************************** |