cp-tree.h (cp_operator_id, [...]): Document.
authorMartin Sebor <msebor@redhat.com>
Mon, 10 Jul 2017 21:08:04 +0000 (21:08 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Mon, 10 Jul 2017 21:08:04 +0000 (15:08 -0600)
gcc/cp/ChangeLog:

* cp-tree.h (cp_operator_id, cp_assignment_operator_id): Document.

From-SVN: r250105

gcc/cp/ChangeLog
gcc/cp/cp-tree.h

index 3af0c432718c8ff7b8635f60657e82f4b63a8fe0..56c2448833f539bdc0a19a471a7710e1264a2a4b 100644 (file)
@@ -1,3 +1,7 @@
+2017-07-10  Martin Sebor  <msebor@redhat.com>
+
+       * cp-tree.h (cp_operator_id, cp_assignment_operator_id): Document.
+
 2017-07-06  Jason Merrill  <jason@redhat.com>
 
        PR c++/81204 - parse error with dependent template-name
index 50f4235e4b825fb08dfc38c97ad0b9eb6511e7fc..b58cfcecc6e417f801723b7e3a504ece1ba0abd4 100644 (file)
@@ -206,8 +206,19 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
 /* std::align_val_t */
 #define align_type_node                        cp_global_trees[CPTI_ALIGN_TYPE]
 
-/* We cache these tree nodes so as to call get_identifier less
-   frequently.  */
+/* We cache these tree nodes so as to call get_identifier less frequently.
+   For identifiers for functions, including special member functions such
+   as ctors and assignment operators, the nodes can be used (among other
+   things) to iterate over their overloads defined by/for a type.  For
+   example:
+
+     tree ovlid = cp_assignment_operator_id (NOP_EXPR);
+     tree overloads = lookup_fnfields_slot (type, ovlid);
+     for (ovl_iterator it (overloads); it; ++it) { ... }
+
+   iterates over the set of implicitly and explicitly defined overloads
+   of the assignment operator for type (including the copy and move
+   assignment operators, whether deleted or not).  */
 
 /* The name of a constructor that takes an in-charge parameter to
    decide whether or not to construct virtual base classes.  */
@@ -228,6 +239,18 @@ extern GTY(()) tree cp_global_trees[CPTI_MAX];
 /* The name of a destructor that destroys virtual base classes, and
    then deletes the entire object.  */
 #define deleting_dtor_identifier       cp_global_trees[CPTI_DELETING_DTOR_IDENTIFIER]
+
+/* The name of the identifier used internally to represent operator CODE.  */
+#define cp_operator_id(CODE) \
+  (operator_name_info[(int) (CODE)].identifier)
+
+/* The name of the identifier used to represent assignment operator CODE,
+   both simple (i.e., operator= with CODE == NOP_EXPR) and compound (e.g.,
+   operator+= with CODE == PLUS_EXPR).  Includes copy and move assignment.
+   Use copy_fn_p() to test specifically for copy assignment.  */
+#define cp_assignment_operator_id(CODE)                                \
+  (assignment_operator_name_info[(int) (CODE)].identifier)
+
 #define delta_identifier               cp_global_trees[CPTI_DELTA_IDENTIFIER]
 #define in_charge_identifier           cp_global_trees[CPTI_IN_CHARGE_IDENTIFIER]
 /* The name of the parameter that contains a pointer to the VTT to use
@@ -1768,11 +1791,6 @@ struct GTY(()) language_function {
 #define current_function_auto_return_pattern \
   (cp_function_chain->x_auto_return_pattern)
 
-#define cp_operator_id(CODE) \
-  (operator_name_info[(int) (CODE)].identifier)
-#define cp_assignment_operator_id(CODE) \
-  (assignment_operator_name_info[(int) (CODE)].identifier)
-
 /* In parser.c.  */
 extern tree cp_literal_operator_id (const char *);