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