/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Copyright (c) 1989-1999 Microsoft Corporation Module Name: output.cxx Abstract: Low level output routines for midl. Notes: History: Sep-18-1993 VibhasC Created. ----------------------------------------------------------------------------*/ #pragma warning ( disable : 4127 ) /**************************************************************************** * include files ***************************************************************************/ #include "becls.hxx" #pragma hdrstop #if 0 Notes A few general rules followed throughout the file. 1. Never emit tab other than thru the stream. 2. Never emit a new line other than thru the stream. 3. Emitting a new line is the responsibility of the entity that wants itself to be emitted on a new line. Therefore, say each local variable in the stub needs to be on a new line, then the routine responsible for emitting the local variable will be responsible for setting the new line. #endif // 0 /**************************************************************************** * local definitions ***************************************************************************/ #define NDR_UP_DECISION_RTN_NAME "NdrSH_UPDecision" #define NDR_TLUP_DECISION_RTN_NAME "NdrSH_TLUPDecision" #define NDR_TLUP_DECISION_RTN_B_ONLY "NdrSH_TLUPDecisionBuffer" #define NDR_IF_ALLOC_RTN_NAME "NdrSH_IfAlloc" #define NDR_IF_ALLOC_REF_RTN_NAME "NdrSH_IfAllocRef" #define NDR_IF_ALLOC_COPY_RTN_NAME "NdrSH_IfAllocCopy" #define NDR_IF_ALLOC_SET_RTN_NAME "NdrSH_IfAllocSet" #define NDR_IF_COPY_RTN_NAME "NdrSH_IfCopy" #define NDR_COPY_RTN_NAME "NdrSH_Copy" #define NDR_CONF_STRING_HDR_MARSHALL "NdrSH_MarshConfStringHdr" #define NDR_CONF_STRING_HDR_UNMARSHALL "NdrSH_UnMarshConfStringHdr" #define NDR_C_CTXT_HDL_MARSHALL "NdrSH_MarshCCtxtHdl" #define NDR_C_CTXT_HDL_UNMARSHALL "NdrSH_UnMarshCCtxtHdl" #define NDR_S_CTXT_HDL_MARSHALL "NdrSH_MarshSCtxtHdl" #define NDR_S_CTXT_HDL_UNMARSHALL "NdrSH_UnMarshSCtxtHdl" #define NDR_IF_FREE_RTN_NAME "NdrSH_IfFree" #define NDR_CONF_STR_M_RTN_NAME "NdrSH_ConfStringMarshall" #define NDR_CONF_STR_UN_RTN_NAME "NdrSH_ConfStringUnMarshall" #define NDR_MAP_COMM_FAULT_RTN_NAME "NdrMapCommAndFaultStatus" /**************************************************************************** * local data ***************************************************************************/ /**************************************************************************** * externs ***************************************************************************/ void Out_UPDecision( CCB * pCCB, expr_node * pPtrInBuffer, expr_node * pPtrInMemory ) { expr_proc_call * pProc = new expr_proc_call( NDR_UP_DECISION_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pPtrInBuffer = MakeRefExprOutOfDeref( pPtrInBuffer ); pProc->SetParam( new expr_param( pPtrInBuffer ) ); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar(pPtrInMemory) ) ); Out_If( pCCB, pProc ); } void Out_TLUPDecision( CCB * pCCB, expr_node * , expr_node * pPtrInMemory ) { expr_proc_call * pProc = new expr_proc_call( NDR_TLUP_DECISION_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg ) ); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory) ) ); Out_If( pCCB, pProc ); } void Out_TLUPDecisionBufferOnly( CCB * pCCB, expr_node * , expr_node * pPtrInMemory ) { expr_proc_call * pProc = new expr_proc_call( NDR_TLUP_DECISION_RTN_B_ONLY ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg ) ); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory ) ) ); Out_If( pCCB, pProc ); } void Out_IfAlloc( CCB * pCCB, expr_node * pPtrInMemory, expr_node * , expr_node * pExprCount ) { expr_proc_call * pProc = new expr_proc_call( NDR_IF_ALLOC_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pPtrInMemory = MakeAddressExpressionNoMatterWhat( pPtrInMemory ); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory ) )); pProc->SetParam( new expr_param( pExprCount )); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_If_IfAlloc( CCB * pCCB, expr_node * pPtrInMemory, expr_node * , expr_node * pExprCount ) { expr_proc_call * pProc = new expr_proc_call( NDR_IF_ALLOC_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pPtrInMemory = MakeAddressExpressionNoMatterWhat( pPtrInMemory ); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory ) )); pProc->SetParam( new expr_param( pExprCount )); pCCB->GetStream()->NewLine(); Out_If( pCCB, pProc ); // pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_If_IfAllocRef( CCB * pCCB, expr_node * pPtrInMemory, expr_node * , expr_node * pExprCount ) { expr_proc_call * pProc = new expr_proc_call( NDR_IF_ALLOC_REF_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pPtrInMemory = MakeAddressExpressionNoMatterWhat( pPtrInMemory ); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory ) )); pProc->SetParam( new expr_param( pExprCount )); pCCB->GetStream()->NewLine(); Out_If( pCCB, pProc ); // pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_Alloc( CCB * pCCB, expr_node * pPtrInMemory, expr_node * , expr_node * pExprCount ) { expr_proc_call * pProc; expr_node * pExpr; if( pCCB->MustCheckAllocationError() ) { expr_node * pStubMsg = pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc = new expr_proc_call( ENGINE_CHECKED_ALLOC_RTN_NAME ); pProc->SetParam( new expr_param( pStubMsg ) ); } else pProc = new expr_proc_call( STUB_MSG_ALLOCATE_RTN_NAME ); pProc->SetParam( new expr_param( pExprCount )); pExpr = new expr_assign( pPtrInMemory, pProc ); pCCB->GetStream()->NewLine(); pExpr->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_IfAllocSet( CCB * pCCB, expr_node * pPtrInMemory, expr_node * , expr_node * pExprCount ) { expr_proc_call * pProc = new expr_proc_call( NDR_IF_ALLOC_SET_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory ))); pProc->SetParam( new expr_param( pExprCount )); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_AllocSet( CCB * pCCB, expr_node * pPtrInMemory, expr_node * pBuffer, expr_node * pExprCount ) { expr_proc_call * pProc = new expr_proc_call( MIDL_MEMSET_RTN_NAME ); expr_node * pExpr; Out_Alloc( pCCB, pPtrInMemory, pBuffer, pExprCount ); pExpr = new expr_u_deref( pPtrInMemory ); pProc->SetParam( new expr_param( pExpr ) ); pProc->SetParam( new expr_param( pExprCount ) ); pProc->SetParam( new expr_param( new expr_constant(0L) ) ); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_IfCopy( CCB * pCCB, expr_node * pPtrInMemory, expr_node * , expr_node * pExprCount ) { expr_proc_call * pProc = new expr_proc_call( NDR_IF_COPY_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory ) )); pProc->SetParam( new expr_param( pExprCount )); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_IfAllocCopy( CCB * pCCB, expr_node * pPtrInMemory, expr_node * , expr_node * pExprCount ) { expr_proc_call * pProc = new expr_proc_call( NDR_IF_ALLOC_COPY_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pProc->SetParam( new expr_param( MakeCastExprPtrToPtrToUChar( pPtrInMemory ))); pProc->SetParam( new expr_param( pExprCount )); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_Copy( CCB * pCCB, expr_node * pDest, expr_node * pSource, expr_node * pExprCount, expr_node * pAssign ) { expr_proc_call * pProc = new expr_proc_call( NDR_COPY_RTN_NAME ); pProc->SetParam( new expr_param( pDest )); pProc->SetParam( new expr_param( pSource )); pProc->SetParam( new expr_param( pExprCount )); pCCB->GetStream()->NewLine(); if( pAssign ) { Out_PlusEquals( pCCB, pAssign, pProc ); } else { pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } } void Out_IfFree( CCB * pCCB, expr_node * pSrc ) { expr_proc_call * pProc = new expr_proc_call( NDR_IF_FREE_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg ) ); pProc->SetParam( new expr_param( MakeCastExprPtrToUChar( pSrc ) ) ); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_ConfStringHdr( CCB * pCCB, expr_node * pDest, expr_node * pSize, expr_node * pLength, BOOL fMarsh ) { PNAME pName; if( fMarsh == TRUE ) { pName = NDR_CONF_STRING_HDR_MARSHALL; } else pName = NDR_CONF_STRING_HDR_UNMARSHALL; expr_proc_call * pProc = new expr_proc_call( pName ); pProc->SetParam( new expr_param( pDest ) ); pProc->SetParam( new expr_param( pSize ) ); pProc->SetParam( new expr_param( pLength ) ); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_CContextMarshall( CCB * pCCB, expr_node * pDest, expr_node * pSource ) { expr_proc_call * pProc = new expr_proc_call( NDR_C_CTXT_HDL_MARSHALL ); expr_node * pExpr; pProc->SetParam( new expr_param( pSource ) ); pProc->SetParam( new expr_param( pDest ) ); pExpr = new expr_assign( pDest, pProc ); pCCB->GetStream()->NewLine(); pExpr->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_SContextMarshall( CCB * pCCB, expr_node * pDest, expr_node * pSource, expr_node * pRDRtn ) { expr_proc_call * pProc = new expr_proc_call( NDR_S_CTXT_HDL_MARSHALL ); expr_node * pExpr; pProc->SetParam( new expr_param( pSource ) ); pProc->SetParam( new expr_param( pDest ) ); pProc->SetParam( new expr_param( pRDRtn ) ); pExpr = new expr_assign( pDest, pProc ); pCCB->GetStream()->NewLine(); pExpr->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_CContextUnMarshall( CCB * pCCB, expr_node * pDest, expr_node * pSource, expr_node * pHandle, expr_node * pDRep ) { expr_proc_call * pProc = new expr_proc_call( NDR_C_CTXT_HDL_UNMARSHALL ); expr_node * pExpr; pProc->SetParam( new expr_param( pDest ) ); pProc->SetParam( new expr_param( pHandle ) ); pProc->SetParam( new expr_param( pSource ) ); pProc->SetParam( new expr_param( pDRep ) ); pExpr = new expr_assign( pSource, pProc ); pCCB->GetStream()->NewLine(); pExpr->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_SContextUnMarshall( CCB * pCCB, expr_node * pDest, expr_node * pSource, expr_node * pDRep ) { expr_proc_call * pProc = new expr_proc_call( NDR_S_CTXT_HDL_UNMARSHALL ); expr_node * pExpr; pProc->SetParam( new expr_param( pSource ) ); pProc->SetParam( new expr_param( pDRep ) ); pExpr = new expr_assign( pDest, pProc ); pCCB->GetStream()->NewLine(); pExpr->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_RaiseException( CCB * pCCB, PNAME pExceptionName) { expr_proc_call * pProc = new expr_proc_call( "RpcRaiseException" ); pProc->SetParam( new expr_param( new expr_variable( pExceptionName ) ) ); pCCB->GetStream()->NewLine(); pProc->PrintCall( pCCB->GetStream(), 0, 0 ); } void Out_RpcTryFinally( CCB * pCCB ) { ISTREAM * pStream = pCCB->GetStream(); pStream->NewLine(); pStream->Write( "RpcTryFinally" ); pStream->IndentInc(); pStream->NewLine(); pStream->Write( '{' ); } void Out_RpcFinally( CCB * pCCB ) { ISTREAM * pStream = pCCB->GetStream(); pStream->NewLine(); pStream->Write( '}' ); pStream->IndentDec(); pStream->NewLine(); pStream->Write( "RpcFinally" ); pStream->IndentInc(); pStream->NewLine(); pStream->Write('{'); } void Out_RpcEndFinally( CCB * pCCB ) { ISTREAM * pStream = pCCB->GetStream(); pStream->NewLine(); pStream->Write( '}' ); pStream->IndentDec(); pStream->NewLine(); pStream->Write( "RpcEndFinally" ); pStream->NewLine(); } void Out_RpcTryExcept( CCB * pCCB ) { ISTREAM * pStream = pCCB->GetStream(); pStream->NewLine(); pStream->Write( "RpcTryExcept" ); pStream->IndentInc(); pStream->NewLine(); pStream->Write( '{' ); } void Out_RpcExcept( CCB * pCCB, char * pFilterString ) { ISTREAM * pStream = pCCB->GetStream(); pStream->NewLine(); pStream->Write('}'); pStream->IndentDec(); pStream->NewLine(); pStream->Write( "RpcExcept( " ); pStream->Write( pFilterString ); pStream->Write( " )" ); pStream->IndentInc(); pStream->NewLine(); pStream->Write( '{' ); } void Out_RpcEndExcept( CCB * pCCB ) { ISTREAM * pStream = pCCB->GetStream(); pStream->NewLine(); pStream->Write( '}' ); pStream->IndentDec(); pStream->NewLine(); pStream->Write( "RpcEndExcept" ); } void Out_CallNdrMapCommAndFaultStatus( CCB * pCCB, expr_node * pAddrOfStubMsg, expr_node * StatRes, expr_node * pCommExpr, expr_node * pFaultExpr ) { node_skl * pType; expr_proc_call * pProc = new expr_proc_call( NDR_MAP_COMM_FAULT_RTN_NAME ); expr_node * pExpr; expr_variable * pExceptionCode = new expr_variable( "RpcExceptionCode()",0); pAddrOfStubMsg = MakeExpressionOfCastToTypeName( PSTUB_MESSAGE_TYPE_NAME, pAddrOfStubMsg ); GetBaseTypeNode( &pType, SIGN_UNSIGNED, SIZE_LONG, TYPE_INT ); pCommExpr = MakeExpressionOfCastPtrToType( pType, pCommExpr ); pFaultExpr = MakeExpressionOfCastPtrToType( pType, pFaultExpr ); pProc->SetParam( new expr_param( pAddrOfStubMsg )); pProc->SetParam( new expr_param( pCommExpr )); pProc->SetParam( new expr_param( pFaultExpr )); pProc->SetParam( new expr_param( pExceptionCode )); pExpr = new expr_assign( StatRes, pProc ); Out_If( pCCB, pExpr ); Out_RaiseException( pCCB, ((RESOURCE * )StatRes)->GetResourceName() ); Out_Endif(pCCB); } void Out_CallToXmit( CCB * pCCB, PNAME XmittedTypeName, expr_node * pPresented, expr_node * pTransmitted ) { ISTREAM * pStream = pCCB->GetStream(); char * p = new char [strlen( XmittedTypeName )+10+1]; strcpy( p, XmittedTypeName ); strcat( p, "_to_xmit" ); expr_proc_call * pProc = new expr_proc_call( p ); pProc->SetParam( new expr_param( pPresented ) ); pProc->SetParam( new expr_param( MakeAddressExpressionNoMatterWhat( pTransmitted ) )); pStream->NewLine(); pProc->PrintCall( pStream, 0, 0 ); } void Out_CallFromXmit( CCB * pCCB, PNAME XmittedTypeName, expr_node * pPresented, expr_node * pTransmitted ) { ISTREAM * pStream = pCCB->GetStream(); char * p = new char [strlen( XmittedTypeName )+10+1]; strcpy( p, XmittedTypeName ); strcat( p, "_from_xmit" ); expr_proc_call * pProc = new expr_proc_call( p ); pProc->SetParam( new expr_param( pTransmitted )); pProc->SetParam( new expr_param( pPresented ) ); pStream->NewLine(); pProc->PrintCall( pStream, 0, 0 ); } void Out_CallFreeXmit( CCB * pCCB, PNAME XmittedTypeName, expr_node * pTransmitted ) { ISTREAM * pStream = pCCB->GetStream(); char * p = new char [strlen( XmittedTypeName )+15+1]; strcpy( p, XmittedTypeName ); strcat( p, "_free_xmit" ); expr_proc_call * pProc = new expr_proc_call( p ); pProc->SetParam( new expr_param( pTransmitted ) ); pStream->NewLine(); pProc->PrintCall( pStream, 0, 0 ); } void Out_CallFreeInst( CCB * pCCB, PNAME XmittedTypeName, expr_node * pPresented ) { ISTREAM * pStream = pCCB->GetStream(); char * p = new char [strlen( XmittedTypeName )+15+1]; strcpy( p, XmittedTypeName ); strcat( p, "_free_inst" ); expr_proc_call * pProc = new expr_proc_call( p ); pProc->SetParam( new expr_param( pPresented ) ); pStream->NewLine(); pProc->PrintCall( pStream, 0, 0 ); } void Out_StringMarshall( CCB * pCCB, expr_node * pMemory, expr_node * pCount, expr_node * pSize ) { expr_proc_call * pProc = new expr_proc_call( NDR_CONF_STR_M_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); ISTREAM * pStream = pCCB->GetStream(); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pProc->SetParam( new expr_param( MakeCastExprPtrToUChar( pMemory ) ) ); pProc->SetParam( new expr_param( pCount ) ); pProc->SetParam( new expr_param( pSize ) ); pStream->NewLine(); pProc->PrintCall( pStream, 0, 0 ); } void Out_StringUnMarshall( CCB * pCCB, expr_node * pMemory, expr_node * pSize ) { expr_proc_call * pProc = new expr_proc_call( NDR_CONF_STR_UN_RTN_NAME ); expr_node * pStubMsg= pCCB->GetStandardResource( ST_RES_STUB_MESSAGE_VARIABLE ); ISTREAM * pStream = pCCB->GetStream(); pStubMsg = MakeAddressExpressionNoMatterWhat( pStubMsg ); pProc->SetParam( new expr_param( pStubMsg )); pProc->SetParam( new expr_param( MakeAddressExpressionNoMatterWhat( MakeCastExprPtrToPtrToUChar( pMemory ) )) ); pProc->SetParam( new expr_param( pSize ) ); pStream->NewLine(); pProc->PrintCall( pStream, 0, 0 ); } char * MakeRtnName( char * pBuffer, // if 0 it means allocate anew buffer and return. char * pName, int Code ) { char * p; switch( Code ) { case NC_SIZE_RTN_NAME: p = "Sizing"; break; case NC_MARSHALL_RTN_NAME: p = "Marshall"; break; case NC_UNMARSHALL_RTN_NAME: p = "UnMarshall"; break; case NC_MEMSIZE_RTN_NAME: p = "MemSize"; break; case NC_FREE_RTN_NAME: p = "Free"; break; } if( !pBuffer ) { pBuffer = new char[ strlen( pName ) + // name of structure 1 + // underscore. strlen( p ) + // name of rtn 1 // 0 terminator. ]; } sprintf( pBuffer, "%s_%s", pName, p ); return pBuffer; } void Out_TypeAlignSizePrototypes( CCB * pCCB, ITERATOR& I ) { TYPE_ENCODE_INFO *p; ISTREAM * pStream = pCCB->GetStream(); // The iterator items are really a set of name pointers. pStream->NewLine(); while( ITERATOR_GETNEXT( I, p ) ) { GenStdMesPrototype( pCCB, p->pName, TYPE_ALIGN_SIZE_CODE, (p->Flags == TYPE_ENCODE_WITH_IMPL_HANDLE)); pStream->Write(';'); pStream->NewLine(); } } void Out_TypeEncodePrototypes( CCB * pCCB, ITERATOR& I ) { TYPE_ENCODE_INFO *p; ISTREAM * pStream = pCCB->GetStream(); // The iterator items are really a set of name pointers. pStream->NewLine(); while( ITERATOR_GETNEXT( I, p ) ) { GenStdMesPrototype( pCCB, p->pName, TYPE_ENCODE_CODE, (p->Flags == TYPE_ENCODE_WITH_IMPL_HANDLE)); pStream->Write(';'); pStream->NewLine(); } } void Out_TypeDecodePrototypes( CCB * pCCB, ITERATOR& I ) { TYPE_ENCODE_INFO *p; ISTREAM * pStream = pCCB->GetStream(); // The iterator items are really a set of name pointers. pStream->NewLine(); while( ITERATOR_GETNEXT( I, p ) ) { GenStdMesPrototype( pCCB, p->pName, TYPE_DECODE_CODE, (p->Flags == TYPE_ENCODE_WITH_IMPL_HANDLE)); pStream->Write(';'); pStream->NewLine(); } } void Out_TypeFreePrototypes( CCB * pCCB, ITERATOR& I ) { // Freeing is not supported for the v1 interpreter if ( ! ( pCCB->GetOptimOption() & OPTIMIZE_INTERPRETER_V2 ) ) return; TYPE_ENCODE_INFO *p; ISTREAM * pStream = pCCB->GetStream(); // The iterator items are really a set of name pointers. pStream->NewLine(); while( ITERATOR_GETNEXT( I, p ) ) { GenStdMesPrototype( pCCB, p->pName, TYPE_FREE_CODE, (p->Flags == TYPE_ENCODE_WITH_IMPL_HANDLE)); pStream->Write(';'); pStream->NewLine(); } }