On Jul 1, 2009, at 2:05 PM, Fariborz Jahanian wrote: > Author: fjahanian > Date: Wed Jul 1 16:05:43 2009 > New Revision: 74639 > > URL: http://llvm.org/viewvc/llvm-project?rev=74639&view=rev > Log: > Updated CXXConstructorDecl AST node for ctor-initilaizer list. > No change in functionality. > > [snip] > + /// arg_iterator - Iterates through the member/base initializer > list. > + typedef CXXBaseOrMemberInitializer **arg_iterator; > + > + /// arg_const_iterator - Iterates through the memberbase > initializer list. > + typedef CXXBaseOrMemberInitializer * const * arg_const_iterator; > + > + /// begin() - Retrieve an iterator to the first initializer. > + arg_iterator begin() { return > BaseOrMemberInitializers; } > + /// begin() - Retrieve an iterator to the first initializer. > + arg_const_iterator begin() const { return > BaseOrMemberInitializers; } > + > + /// end() - Retrieve an iterator past the last initializer. > + arg_iterator end() { > + return BaseOrMemberInitializers + NumBaseOrMemberInitializers; > + } > + /// end() - Retrieve an iterator past the last initializer. > + arg_const_iterator end() const { > + return BaseOrMemberInitializers + NumBaseOrMemberInitializers; > + } > + > + /// getNumArgs - Determine the number of arguments used to > + /// initialize the member or base. > + unsigned getNumBaseOrMemberInitializers() const { > + return NumBaseOrMemberInitializers; > + } > + > + void setBaseOrMemberInitializers(CXXBaseOrMemberInitializer > **Initializers, > + unsigned NumInitializers); > +
arg_iterator/begin/end are the wrong names for this functionality. I suggest init_iterator/init_begin/init_end. > /// isDefaultConstructor - Whether this constructor is a default > /// constructor (C++ [class.ctor]p5), which can be used to > /// default-initialize a class of this type. > > Modified: cfe/trunk/lib/AST/DeclCXX.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclCXX.cpp?rev=74639&r1=74638&r2=74639&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/AST/DeclCXX.cpp (original) > +++ cfe/trunk/lib/AST/DeclCXX.cpp Wed Jul 1 16:05:43 2009 > @@ -407,6 +407,19 @@ > isImplicitlyDeclared); > } > > +void > +CXXConstructorDecl::setBaseOrMemberInitializers( > + CXXBaseOrMemberInitializer > **Initializers, > + unsigned NumInitializers) { > + if (NumInitializers > 0) { > + NumBaseOrMemberInitializers = NumInitializers; > + BaseOrMemberInitializers = > + new CXXBaseOrMemberInitializer*[NumInitializers]; > + for (unsigned Idx = 0; Idx < NumInitializers; ++Idx) > + BaseOrMemberInitializers[Idx] = Initializers[Idx]; > + } > +} This should allocate memory using an ASTContext rather than the normal heap. Also, a Destroy method should be added to free this memory. - Doug _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
