zeev@cybvax0.UU.NET (Zeev Mehler) (03/20/91)
Newcode is announcing the release of cback, a companion product to cfront based C++ translators. cback processes cfront C output and creates easy to read, smaller, faster and more portable C code. cback C output is often quite smaller than cfront generated code, resulting in smaller object files and smaller programs. cback is a fast, rule driven, C to C translator that in addition to producing human readable C code, CAREFULLY eliminates unreferenced declarations, unreferenced static functions, redundant assignments to vptr and performs many other cfront specific cleanups. Each of cback's rules can be turned on or off to suit a variety of different needs. cback does a thorough job of simplifying cfront's complicated statements and expressions. Complex cfront output that your local C compiler rejects, will compile without fault. cback's output is maintainable and will readily cross compile to systems that currently do not support C++. On the average, cback does not increase elapsed compile times. Time spent in cback is made up by shorter C compilation times. Program link times are shorter becuase individual object files do not contain extraneous symbols. cback fits seamlessly into standard debugging environments. It recreates appropriate line numbers and symbol table information. cback has been tested successfully on millions of lines of cfront output both from 1.2 and 2.0 versions. It is available on SUN3 and SUN4 machines, IBM RS6000, Interactive Unix and SCO Unix/Xenix. Ports are planned for DEC workstations and DOS. Following is some sample output: C++ CODE ------------------------------------------------------------------------------- inline klink::klink (int m, int c) : kaboom (m), link (c) { } CFRONT OUTPUT ------------------------------------------------------------------------------- static struct klink *__ct__5klinkFiT1 (__0this , __0link , __0m , __0c ) struct klink *__0this ; struct link *__0link ; int __0m ; int __0c ; { if (__0this || (__0this = (struct klink *)__nw__FUi ( sizeof (struct klink)) ) )( ( (__0this -> Plink= ((__0link == 0 )?( (__0link = (((struct link *)((((char *)__0this ))+ 12)))), __ct__4linkFi ( ((str uct link *)((((char *)__0this ))+ 12)), __0c ) ) :__0link )), __ct__6kaboomFi ( ((struct kaboom *)__0this ), __0m ) ) , (__0this -> __vptr__6kaboom = (struct __ mptr *) __ptbl__5klink)) ; return __0this ; } CBACK OUTPUT ------------------------------------------------------------------------------- static struct klink *__ct__5klinkFiT1 (this, link, m, c) struct klink *this; struct link *link; int m; int c; { if (this || (this = (struct klink *) __nw__FUi (sizeof (struct klink)))) { this->Plink = link ? link : (link = &this->Olink, __ct__4linkFi (&this->Olink, c)); __ct__6kaboomFi (this, m); this->__vptr = __vtbl__5klink; } return this; } ------------------------------------------------------------------------------- -- Newcode Technology, Ltd., 200 Boston Ave., Medford, MA 02155 Tel: (617) 396-3009 Fax: (617) 395-9452 Network: uunet!cybvax0!zeev