On 09/26/2011 11:50 AM, Mike Spertus wrote:
This patch consists intrinsics to properly create the bases and direct_bases of a class
Looks pretty good. Some comments:
#define GCC_TREE_H - #include "hashtab.h"
I don't see any reason to remove this blank line.
+ if (TREE_CODE (parm_pack) == BASES) + { + return calculate_bases(tsubst_expr(BASES_TYPE(parm_pack), + args, complain, in_decl, false)); + } + if (TREE_CODE (parm_pack) == DIRECT_BASES) + { + return calculate_direct_bases(tsubst_expr(DIRECT_BASES_TYPE(parm_pack), + args, complain, in_decl, false)); + }
Need spaces before '(' in C code. And we usually don't put braces around a single statement.
+/* Implement the __direct_bases keyword: Return the direct base classes + of type */ +tree
Add a blank line between comment and return type.
+ if (!NON_UNION_CLASS_TYPE_P (type)) + { + return bases_vec; + }
More braces.
+ /* Virtual bases are initialized first */ + vector = VEC_copy (tree, gc, CLASSTYPE_VBASECLASSES (type));
This will get you indirect virtual bases as well as direct.
+ base_binfos = BINFO_BASE_BINFOS(TYPE_BINFO (complete_type (TYPE_MAIN_VARIANT (type))));
Another missing space. And you don't need either complete_type or TYPE_MAIN_VARIANT here; all variants get completed together by the complete_type earlier in the function, and TYPE_BINFO is the same for all variants.
+ /* First go through virtual base classes */ + for (vbases = CLASSTYPE_VBASECLASSES (type), i = 0; + VEC_iterate (tree, vbases, i, binfo); i++) + { + VEC_safe_splice (tree, gc, vector, calculate_bases_helper (BINFO_TYPE (binfo))); + }
Looks like you'll get duplicates if a virtual base itself has virtual bases. Let's release_tree_vector the returned vector after we've spliced it on.
+ dfs_walk_all (TYPE_BINFO (complete_type (TYPE_MAIN_VARIANT (type))),
Again, TYPE_BINFO (type) should be enough.
+DEFTREECODE (BASES, "bases", tcc_type, 0) +DEFTREECODE (DIRECT_BASES, "direct_bases", tcc_type, 0)
Instead of two tree codes, let's use one and a flag. Also combine finish_bases and finish_direct_bases.
Jason