[comp.lang.c] A tool which can intelligently augment C source

scottl@mercury.sybase.com (Scott Luebking) (09/25/90)

We were wondering if anyone knows of a tool which can intelligently
augment C source files.  One thing we would like the tool to do
is add arbitrary function calls to the beginning of functions, regardless of
pre-processor, formatting or declaration considerations, e.g.,:

foo()				foo()
{           			{
   declarations			   declarations
      .				       .
      .				       .
      .				       .
   statements			    NEW_FUNCTION("foo");
				    statements

Another thing would be to preceed return statements with functions, e.g.:

     return some_expression	FLAG_RETURN("foo",(long) (some_expression));
				return some_expression

without worrying about 'return' in comments.

Since we work with a wide range of platforms, it would be very helpful
that the tool be very portable.  Has anyone heard of a tool like this?

Thanks very much
Scott Luebking
{mtxinu,sun,pyramid,pacbell}!sybase!scottl
scottl@sybase.com

ok@goanna.cs.rmit.oz.au (Richard A. O'Keefe) (09/25/90)

In article <11054@sybase.sybase.com>, scottl@mercury.sybase.com (Scott Luebking) writes:
> Another thing would be to preceed[sic] return statements with functions, e.g.:

>      return some_expression	FLAG_RETURN("foo",(long) (some_expression));
> 				return some_expression

Um, do you _really_ want to evaluate "some_expression" twice?
And how do you expect this to work when I have
	struct complex Cadd(x, y) struct complex x, y; {
	    struct complex s; ... return s;
	}

If it's just for your own use, you could pick up the sources of Alan Holub's
C compiler for US$60 and modify it to act as the processor you want.
You really do want your tool to understand C types so that it doesn't try
to cast structs to longs.  And if you want to catch all returns, you don't
want to miss the implicit one at the end of a void function.
-- 
Heuer's Law:  Any feature is a bug unless it can be turned off.