[all-commits] [llvm/llvm-project] b3b411: [demangler] Add operator precedence
Nathan Sidwell via All-commits
all-commits at lists.llvm.org
Mon Mar 28 06:18:17 PDT 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: b3b4113a23756eb5f519ff473295483874d8e164
https://github.com/llvm/llvm-project/commit/b3b4113a23756eb5f519ff473295483874d8e164
Author: Nathan Sidwell <nathan at acm.org>
Date: 2022-03-28 (Mon, 28 Mar 2022)
Changed paths:
M libcxxabi/src/demangle/ItaniumDemangle.h
M libcxxabi/src/demangle/Utility.h
M libcxxabi/test/test_demangle.pass.cpp
M llvm/include/llvm/Demangle/ItaniumDemangle.h
M llvm/include/llvm/Demangle/Utility.h
Log Message:
-----------
[demangler] Add operator precedence
The demangler had no concept of operator precendence, and would
parenthesize many more subexpressions than necessary. In particular
it would parenthesize primary-expressions, such as '4', which just
looks strange. It would also parenthesize '>' expressions, just in
case they were inside a template parameter list.
This patch fixes both issues.
* Add operator precedence to the OpInfo structure, and add a
subexpression helper that will parenthesize a lower precedence
subexpression.
* Add a 'greater-than is greater-than' indicator to the output buffer,
so the expression printer knows whether it is immediately inside a
template parameter list (and must therefore parenthesize 'expr >
expr'). This is a counter, so that ...
* Add open and close printers to the output buffer, that increment and
decrement the gt-is-gt indicator.
* Parenthesize comma operators inside comma-separated lists. (probably
a rare case, but still).
This dramatically reduces the extraneous parentheses being printed.
Reviewed By: dblaikie, bruno
Differential Revision: https://reviews.llvm.org/D120905
More information about the All-commits
mailing list