|
|
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1989-1999 Microsoft Corporation
Module Name: cgmain.cxx
Abstract:
The main entry point for the code generator.
Notes:
History:
VibhasC Aug-13-1993 Created. ----------------------------------------------------------------------------*/
/****************************************************************************
* include files ***************************************************************************/
#include "becls.hxx"
#pragma hdrstop
#include "control.hxx"
#include "ilreg.hxx"
/****************************************************************************
* local definitions ***************************************************************************/ /****************************************************************************
* local data ***************************************************************************/
/****************************************************************************
* externs ***************************************************************************/
extern node_interface * pBaseInterfaceNode; extern CMD_ARG * pCommand; extern ccontrol * pCompiler;
extern CG_CLASS * Transform( node_skl * pIL ); extern void print_memstats();
/****************************************************************************/
void CGMain( node_skl * pNode ) /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine Description:
The main code generator entry point.
Arguments: pNode - A pointer to the type graph source node.
Return Value:
Code generation status. Notes:
----------------------------------------------------------------------------*/ { CG_CLASS * pCGSource;
//
// Transform the type graph into the Code generation IL.
//
pCompiler->SetPassNumber( ILXLAT_PASS );
pCGSource = Transform( pNode );
#ifdef MIDL_INTERNAL
printf("ILxlate done\n"); if(pCommand->IsSwitchDefined( SWITCH_DUMP ) ) { print_memstats(); }; #endif // MIDL_INTERNAL
//
// This is temporary initialization code. The final code may differ.
//
CCB CCB( DEFAULT_GB_RTN_NAME, DEFAULT_SR_RTN_NAME, DEFAULT_FB_RTN_NAME, pCommand->GetOptimizationFlags(), pCommand->IsSwitchDefined( SWITCH_USE_EPV ), pCommand->IsSwitchDefined( SWITCH_NO_DEFAULT_EPV ), pCommand->IsSwitchDefined( SWITCH_OLDNAMES ), pCommand->IsSwitchDefined( SWITCH_MS_EXT ) ? 1 : 0, pCommand->IsRpcSSAllocateEnabled(), ((pCommand->GetErrorOption() & ERROR_ALLOCATION) == ERROR_ALLOCATION), ((pCommand->GetErrorOption() & ERROR_REF) == ERROR_REF), ((pCommand->GetErrorOption() & ERROR_ENUM) == ERROR_ENUM), ((pCommand->GetErrorOption() & ERROR_BOUNDS_CHECK) == ERROR_BOUNDS_CHECK), ((pCommand->GetErrorOption() & ERROR_STUB_DATA) == ERROR_STUB_DATA) );
//
// Do the code generation.
//
#ifdef MIDL_INTERNAL
if( pCommand->IsSwitchDefined( SWITCH_DUMP ) ) { printf("dumping IL\n"); pCGSource->Dump(0); } #endif // MIDL_INTERNAL
pCompiler->SetPassNumber( CODEGEN_PASS );
// define NO_CODEGEN to stop after IL translation
#ifndef NO_CODEGEN
pCGSource->GenCode( &CCB ); #endif
}
CG_CLASS* ILSecondGenTransform( CG_CLASS *pClass );
void Ndr64CGMain( node_skl * pNode ) /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Routine Description:
The main code generator entry point.
Arguments: pNode - A pointer to the type graph source node.
Return Value:
Code generation status. Notes:
----------------------------------------------------------------------------*/ { CG_CLASS * pCGSource;
//
// Transform the type graph into the Code generation IL.
//
pCompiler->SetPassNumber( NDR64_ILXLAT_PASS );
pCGSource = Transform( pNode );
#ifdef MIDL_INTERNAL
printf("\nStage1 of ILxlate done\n"); if(pCommand->IsSwitchDefined( SWITCH_DUMP ) ) { printf("\n"); printf("dumping stage 1 IL\n"); pCGSource->Dump(); }; #endif // MIDL_INTERNAL
pCGSource = ILSecondGenTransform( pCGSource );
#ifdef MIDL_INTERNAL
printf("\nStage2 of ILxlate done\n"); if(pCommand->IsSwitchDefined( SWITCH_DUMP ) ) { printf("\n"); printf("dumping stage 2 IL\n"); pCGSource->Dump(); }; #endif // MIDL_INTERNAL
//
// This is temporary initialization code. The final code may differ.
//
CCB CCB( DEFAULT_GB_RTN_NAME, DEFAULT_SR_RTN_NAME, DEFAULT_FB_RTN_NAME, pCommand->GetOptimizationFlags(), pCommand->IsSwitchDefined( SWITCH_USE_EPV ), pCommand->IsSwitchDefined( SWITCH_NO_DEFAULT_EPV ), pCommand->IsSwitchDefined( SWITCH_OLDNAMES ), pCommand->IsSwitchDefined( SWITCH_MS_EXT ) ? 1 : 0, pCommand->IsRpcSSAllocateEnabled(), ((pCommand->GetErrorOption() & ERROR_ALLOCATION) == ERROR_ALLOCATION), ((pCommand->GetErrorOption() & ERROR_REF) == ERROR_REF), ((pCommand->GetErrorOption() & ERROR_ENUM) == ERROR_ENUM), ((pCommand->GetErrorOption() & ERROR_BOUNDS_CHECK) == ERROR_BOUNDS_CHECK), ((pCommand->GetErrorOption() & ERROR_STUB_DATA) == ERROR_STUB_DATA) );
//
// Do the code generation.
//
pCompiler->SetPassNumber( NDR64_CODEGEN_PASS );
// define NO_CODEGEN to stop after IL translation
#ifndef NO_CODEGEN
pCGSource->GenCode( &CCB ); #endif
}
|