Limitations:
- Does not handle expressions which mutate values as arguments
- May produce name clashes between identifiers in the caller and callee code
- Produces ugly transformed code
- Only tested on toy programs so far
Run the tool and compile the test programs:
python tree_cutter/inline.py test.c foo > test_inline.c
gcc test.c -o test
gcc test_inline.c -o test_inline
Expected output:
$ ./test
1 + 2 = 3
$ ./test_inline
1 + 2 = 3
You can apply multiple transformations at once:
$ cat test_comment.c
#include "stdlib.h"
int main()
{
/*foo*/
foo();
//bar or baz
#ifdef BAR
bar();
#else
baz();
#endif
}
$ python main.py test_comment.c remove_comments remove_preprocessor_directives remove_blank_lines
int main()
{
foo();
}