[aspectc-user] Small API addition request.

Matthias Urban matthias.urban at pure-systems.com
Tue Nov 14 17:42:50 CET 2006

Hi Robert,

> I've come up against the first piece of API magick I don't know if I can do 
> without. I am writing classes that build a master database of an entire 
> project, and along the way I'm dealing with eradication of duplicates and 
> merging of classes that contain function members in more than one source 
> file. I'm having to do a bit of re-jigging of the classes to make the graph 
> remain consistent.
> What I really need to be able to do is re-assign pointers by numbers to 
> objectinfos. i.e. Wherever you can do a call in the style of 
> int FunctionInfos ();
> CFunctionInfo * FunctionInfo ( int );
>  ( the current ones I'm working with are BaseClasses (), FunctionInfos (), 
> Friends () ) 
> I need to be able to re-point the entries along the lines of
> void setFunctionInfo ( int , CFunctionInfo * );
> The alternative is keeping a complex register of what's been removed and 
> readded (thus changing the numbering) while iterating over the functions or 
> maybe even doing some horrible horrible memory tricks to copy my desired 
> CObjectInfo into the space already pointed to.
> Thoughts?

Why do you need to re-assign the n-th function info? The order has no 
meaning. It's true that it usually reflects the order in the source 
file, but that is not guaranteed. A semantic object (like an info for a 
function, class etc) is identified by the point-of-declaration of the 
corresponding syntactic object.

Semantic objects that represent the same function, class etc. are 
connected to each other. For instance:

   class X {
     void foo();      // connected with implementation of foo

   void X::foo() {    // connected with declaration of foo

You can connect two object infos using the NextObject(info) method of 
CObjectInfo. If two objects are connected, a call to DefObject() always 
returns the object info representing the implementation (if there is 
any). So you can have several declarations of the same entity. Maybe you 
can use this to build your master database.

I don't know if this was very helpful for you. But replacing semantic 
objects is a delicate issue. Btw, we are currently working exactly on 
this interface and the data structures behind it to improve the 
performance (memory and runtime).

Best regards,

Matthias Urban                          Phone: +49-391-544569-32
pure-systems GmbH                       Fax:   +49-391-544569-90

More information about the aspectc-user mailing list