[comp.newprod] cback C to C Translator

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