windows-nt/Source/XPSP1/NT/com/rpc/midl/codegen/output.hxx
2020-09-26 16:20:57 +08:00

582 lines
25 KiB
C++

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 1989-1999 Microsoft Corporation
Module Name:
output.hxx
Abstract:
Prototypes for all output routines.
Notes:
History:
Sep-18-1993 VibhasC Created.
----------------------------------------------------------------------------*/
#ifndef __OUTPUT_HXX__
#define __OUTPUT_HXX__
#include "nodeskl.hxx"
#include "ccb.hxx"
#include "analysis.hxx"
#include "expr.hxx"
#include "makexpr.hxx"
#include "prttype.hxx"
#include "sdesc.hxx"
#include "misccls.hxx"
/*****************************************************************************
local defines and includes.
*****************************************************************************/
#define STANDARD_STUB_TAB (4)
#define NC_SIZE_RTN_NAME 0
#define NC_MARSHALL_RTN_NAME 1
#define NC_UNMARSHALL_RTN_NAME 2
#define NC_MEMSIZE_RTN_NAME 3
#define NC_FREE_RTN_NAME 4
enum GUIDFORMAT
{
GUIDFORMAT_RAW = 0, // Raw values (e.g. 0x0000,0x0000,...)
GUIDFORMAT_STRUCT = 1 // Struct init (e.g. {0x0000,0x0000,...})
};
/*****************************************************************************
prototypes.
*****************************************************************************/
inline
void Out_IndentInc( CCB * pCCB )
{
pCCB->GetStream()->IndentInc();
}
inline
void Out_IndentDec( CCB * pCCB )
{
pCCB->GetStream()->IndentDec();
}
void Out_AddToBufferPointer(
CCB * pCCB,
expr_node * pResource,
expr_node * pAmountExpr );
void Out_MarshallSimple( CCB * pCCB,
RESOURCE * pResource,
node_skl * pType,
expr_node * pSource,
BOOL fIncr,
unsigned short Size
);
void Out_ClientProcedureProlog( CCB * pCCB, node_skl * pType );
void Out_ServerProcedureProlog( CCB * pCCB,
node_skl * pType,
ITERATOR& LocalsList,
ITERATOR& ParamsList,
ITERATOR& TransientList
);
void Out_ProcedureProlog( CCB * pCCB,
PNAME pProcName,
node_skl * pType,
ITERATOR& LocalsList,
ITERATOR& ParamsList,
ITERATOR& TransientList
);
void Out_CallManager( CCB * pCCB,
expr_proc_call * pExpr,
expr_node * pReturn,
BOOL fIsCallback );
inline
void Out_ProcClosingBrace( CCB * pCCB )
{
pCCB->GetStream()->NewLine();
pCCB->GetStream()->Write( '}' );
pCCB->GetStream()->NewLine();
}
void Out_StubDescriptor( CG_HANDLE * pImplicitHandle,
CCB * pCCB );
void Out_ClientLocalVariables( CCB * pCCB,
ITERATOR& LocalVarList );
void Out_HandleInitialize(
CCB * pCCB,
ITERATOR& BindingParamList,
expr_node * pAssignExpr,
BOOL fAuto,
unsigned short OpBits
);
void Out_AutoHandleSendReceive( CCB * pCCB,
expr_node * pDest,
expr_node * pProc
);
void Out_NormalSendReceive( CCB * pCCB, BOOL fAnyOuts );
void Out_NormalFreeBuffer( CCB * pCCB );
void Out_IncludeOfFile( CCB * pCCB, PFILENAME p, BOOL fAngleBracket );
void Out_EP_Info( CCB * pCCB, ITERATOR * I );
void Out_MKTYPLIB_Guid( CCB *pCCB,
GUID_STRS & GStrs,
char * szPrefix,
char * szName );
void Out_Guid( CCB *pCCB,
GUID_STRS & GStrs,
GUIDFORMAT format = GUIDFORMAT_STRUCT );
void Out_IFInfo(
CCB * pCCB,
char * pCIntInfoTypeName,
char * pCIntInfoVarName,
char * pCIntInfoSizeOfString,
GUID_STRS & UserGuidStrs,
unsigned short UserMajor,
unsigned short UserMinor,
// GUID_STRS & XferGuidStrs,
// unsigned short XferSynMajor,
// unsigned short XferSynMinor,
char * pCallbackDispatchTable,
int ProtSeqEpCount,
char * ProtSeqEPTypeName,
char * ProtSeqEPVarName,
BOOL fNoDefaultEpv,
BOOL fSide,
BOOL fHasPipes
);
void Out_OneSyntaxInfo( CCB * pCCB,
BOOL IsForCallback,
SYNTAX_ENUM syntaxType );
void Out_TransferSyntax(
CCB *pCCB,
GUID_STRS & XferGuidStr,
unsigned short XferSynMajor,
unsigned short XferSynMinor );
void Out_DispatchTableStuff( CCB * pCCB,
ITERATOR& ProcList,
short CountOfProcs );
void Out_ManagerEpv( CCB * pCCB,
PNAME InterfaceName,
ITERATOR& ProcList,
short Count);
void Out_ServerStubMessageInit( CCB * pCCB );
void Out_FormatInfoExtern( CCB * pCCB );
void Out_TypeFormatStringExtern( CCB * pCCB );
void Out_ProcFormatStringExtern( CCB * pCCB );
void Out_StubDescriptorExtern( CCB * pCCB );
void Out_ProxyInfoExtern( CCB * pCCB );
void Out_InterpreterServerInfoExtern( CCB * pCCB );
void Out_NdrInitStackTop( CCB * pCCB );
void Out_NdrMarshallCall( CCB * pCCB,
char * pRoutineName,
char * pParamName,
long FormatStringOffset,
BOOL fTakeAddress,
BOOL fDereference );
void Out_NdrUnmarshallCall( CCB * pCCB,
char * pRoutineName,
char * pParamName,
long FormatStringOffset,
BOOL fTakeAddress,
BOOL fMustAllocFlag );
void Out_NdrBufferSizeCall( CCB * pCCB,
char * pRoutineName,
char * pParamName,
long FormatStringOffset,
BOOL fTakeAddress,
BOOL fDereference,
BOOL fPtrToStubMsg );
void Out_NdrFreeCall( CCB * pCCB,
char * pRoutineName,
char * pParamName,
long FormatStringOffset,
BOOL fTakeAddress,
BOOL fDereference );
void Out_NdrConvert( CCB * pCCB,
long FormatStringOffset,
long ParamTotal,
unsigned short ProcOptimFlags );
void Out_NdrNsGetBuffer( CCB * pCCB );
void Out_NdrGetBuffer( CCB * pCCB );
void Out_NdrNsSendReceive( CCB * pCCB );
void Out_NdrSendReceive( CCB * pCCB );
void Out_NdrFreeBuffer( CCB * pCCB );
void Out_FreeParamInline( CCB * pCCB );
void Out_CContextHandleMarshall( CCB * pCCB,
char * pName,
BOOL IsPointer );
void Out_SContextHandleMarshall( CCB * pCCB,
char * pName,
char * pRundownRoutineName );
void Out_SContextHandleNewMarshall( CCB * pCCB,
char * pName,
char * pRundownRoutineName,
long TypeOffset );
void Out_CContextHandleUnmarshall( CCB * pCCB,
char * pName,
BOOL IsPointer,
BOOL IsReturn );
void Out_SContextHandleUnmarshall( CCB * pCCB,
char * pName,
BOOL IsOutOnly );
void Out_SContextHandleNewUnmarshall( CCB * pCCB,
char * pName,
BOOL IsOutOnly,
long TypeOffset );
void Out_DispatchTableTypedef( CCB * pCCB,
PNAME pInterfaceName,
ITERATOR &ProcNodeList,
int flag );
void Out_GenHdlPrototypes( CCB * pCCB,
ITERATOR& List
);
void Out_CtxtHdlPrototypes( CCB * pCCB,
ITERATOR& List
);
void Out_PatchReference( CCB * pCCB,
expr_node * pDest,
expr_node * pSource,
BOOL fIncr );
void Out_If( CCB * pCCB, expr_node * pExpr );
void Out_Else( CCB * pCCB );
void Out_Endif( CCB * pCCB );
void Out_UniquePtrMarshall( CCB * pCCB,
expr_node * pDest,
expr_node * pSrc );
void Out_IfUniquePtrInBuffer( CCB * pCCB,
expr_node * pSrc );
void Out_Assign( CCB * pCCB,
expr_node * pDest,
expr_node * pSrc );
void Out_Memcopy( CCB * pCCB,
expr_node * pDest,
expr_node * pSrc,
expr_node * pLength );
void Out_strlen( CCB * pCCB,
expr_node * pDest,
expr_node * pSource,
unsigned short Size );
void Out_For( CCB * pCCB,
expr_node * pIndexExpr,
expr_node * pInitialExpr,
expr_node * pFinalExpr,
expr_node * pIncrExpr );
void Out_EndFor( CCB * pCCB );
void Out_UPDecision(
CCB * pCCB,
expr_node * pPtrInBuffer,
expr_node * pPtrInMemory );
void Out_TLUPDecision(
CCB * pCCB,
expr_node * pPtrInBuffer,
expr_node * pPtrInMemory );
void Out_IfAlloc(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_If_IfAlloc(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_If_IfAllocRef(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_Alloc(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_IfAllocSet(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_AllocSet(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_IfCopy(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_Copy(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount,
expr_node * pAssign );
void Out_IfAllocCopy(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_AllocCopy(
CCB * pCCB,
expr_node * pPtrInMemory,
expr_node * pBuffer,
expr_node * pExprCount );
void Out_ConfStringHdr(
CCB * pCCB,
expr_node * pDest,
expr_node * pExprSize,
expr_node * pExprLength,
BOOL fMarsh );
void Out_Copy(
CCB * pCCB,
expr_node * pDest,
expr_node * pSource,
expr_node * pExprCount,
expr_node * pAssign );
void Out_CContextMarshall(
CCB * pCCB,
expr_node * pDest,
expr_node * pSource );
void Out_CContextUnMarshall(
CCB * pCCB,
expr_node * pDest,
expr_node * pSource,
expr_node * pHandle,
expr_node * pDRep );
void Out_SContextMarshall(
CCB * pCCB,
expr_node * pDest,
expr_node * pSource,
expr_node * pRDRtn );
void Out_SContextUnMarshall(
CCB * pCCB,
expr_node * pDest,
expr_node * pSource,
expr_node * pDRep );
void Out_RaiseException( CCB * pCCB,
PNAME pExceptionNameVarExpression );
void Out_PlusEquals( CCB * pCCB,
expr_node * pLHS,
expr_node * pRHS );
void Out_IfFree( CCB * pCCB,
expr_node * pSrc );
void Out_RpcTryFinally( CCB * pCCB );
void Out_RpcFinally( CCB * pCCB );
void Out_RpcEndFinally( CCB * pCCB );
void Out_RpcTryExcept( CCB * pCCB );
void Out_RpcExcept( CCB * pCCB,
char * pFilterString );
void Out_RpcEndExcept( CCB * pCCB );
void Out_CallNdrMapCommAndFaultStatus( CCB * pCCB,
expr_node * pAddOfStubMsg,
expr_node * StatRes,
expr_node * pCommExpr,
expr_node * pFaultExpr );
void Out_CallToXmit( CCB * pCCB,
PNAME PresentedName,
expr_node * pPresented,
expr_node * pTransmitted );
void Out_CallFreeXmit( CCB * pCCB,
PNAME PresentedName,
expr_node * Xmitted );
void Out_CallFromXmit( CCB * pCCB,
PNAME PresentedName,
expr_node * pPresented,
expr_node * pXmitted );
void Out_CallFreeInst( CCB * pCCB,
PNAME PresentedName,
expr_node * pPresented );
void Out_TransmitAsPrototypes( CCB * pCCB,
ITERATOR& ListOfPresentedTypes );
void Out_RepAsPrototypes( CCB * pCCB,
ITERATOR& ListOfPresentedTypes );
void Out_UserMarshalPrototypes( CCB * pCCB,
ITERATOR& ListOfPresentedTypes );
void Out_CSSizingAndConversionPrototypes( CCB * pCCB,
ITERATOR& ListOfCSTypes );
void Out_Comment( CCB * pCCB, char * pComment );
void Out_TLUPDecisionBufferOnly( CCB * pCCB,
expr_node * pPtrInBuffer,
expr_node * pPtrInMemory );
void Out_StringMarshall( CCB * pCCB,
expr_node * pMemory,
expr_node * pCount,
expr_node * pSize );
void Out_StringUnMarshall( CCB * pCCB,
expr_node * pMemory,
expr_node * pSize );
void Out_StructSizingCall( CCB * pCCB,
expr_node * pSource,
expr_node * pLengthVar );
void Out_StructMarshallCall( CCB * pCCB,
expr_node * pSrc,
expr_node * pPtrInBuffer );
void Out_FullPointerInit( CCB * pCCB );
void Out_FullPointerFree( CCB * pCCB );
char * MakeRtnName( char * pBuffer, char * pName, int Code );
void Out_RpcSSEnableAllocate( CCB * pCCB );
void Out_RpcSSDisableAllocate( CCB * pCCB );
void Out_RpcSSSetClientToOsf( CCB * pCCB );
void Out_MemsetToZero( CCB * pCCB,
expr_node * pDest,
expr_node * pSize );
void Out_IID(CCB *pCCB);
void Out_CLSID(CCB *pCCB);
void Out_CallAsProxyPrototypes(CCB *pCCB, ITERATOR & ListOfCallAsRoutines);
void Out_CallAsServerPrototypes(CCB *pCCB, ITERATOR & ListOfCallAsRoutines);
void Out_CallMemberFunction( CCB * pCCB,
expr_proc_call * pProcExpr,
expr_node * pRet,
BOOL fThunk );
void Out_SetOperationBits( CCB * pCCB, unsigned int OpBits);
void Out_TypeAlignSizePrototypes( CCB * pCCB, ITERATOR& List );
void Out_TypeEncodePrototypes( CCB * pCCB, ITERATOR& List );
void Out_TypeDecodePrototypes( CCB * pCCB, ITERATOR& List );
void Out_TypeFreePrototypes( CCB * pCCB, ITERATOR& List );
void OutputNdrAlignment( CCB * pCCB, unsigned short Align );
void Out_NotifyPrototypes( CCB * pCCB,
ITERATOR& ListOfNotifyRoutines );
void Out_MultiDimVars( CCB * pCCB, CG_PARAM * pParam );
void Out_MultiDimVarsInit( CCB * pCCB, CG_PARAM * pParam );
void Out_CheckUnMarshallPastBufferEnd( CCB * pCCB, ulong size = 0 );
void Out_NotifyTable ( CCB* pCCB );
void Out_NotifyTableExtern ( CCB* pCCB );
void Out_TypePicklingInfo( CCB* pCCB);
void Out_PartialIgnoreClientMarshall( CCB *pCCB, char *pParamName );
void Out_PartialIgnoreServerUnmarshall( CCB *pCCB, char *pParamName );
void Out_PartialIgnoreClientBufferSize( CCB *pCCB, char *pParamName );
void Out_PartialIgnoreServerInitialize( CCB *pCCB, char *pParamName, long FormatStringOffset );
#endif // __OUTPUT_HXX__