Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

266 lines
5.7 KiB

/*****************************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1987-1990 **/
/*****************************************************************************/
/*****************************************************************************
File : procnode.hxx
Title : semantic context stack manager for the MIDL compiler
History :
08-Aug-1991 VibhasC Created
*****************************************************************************/
#ifndef __PROCNODE_HXX__
#define __PROCNODE_HXX__
#include "baduse.hxx"
class MopStream;
class node_proc;
/////////////////////////////////////////////////////////////////////////
// param node
/////////////////////////////////////////////////////////////////////////
class node_param : public node_skl
{
public:
node_param() : node_skl(NODE_PARAM)
{
}
virtual
node_state PreSCheck( class BadUseInfo * );
virtual
node_state PostSCheck( class BadUseInfo * );
virtual
node_state AcfSCheck();
virtual
void SetAttribute( type_node_list * );
void GetAllocatedetails( short *, short * );
virtual
node_skl * StaticSize(SIDE_T, NODE_T, unsigned long *);
virtual
node_skl * UpperBoundTree(SIDE_T, NODE_T, unsigned long *);
virtual
STATUS_T EmitProc(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T WalkTree(ACTION_T, SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PrintType(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PrintDecl(SIDE_T, NODE_T, BufferManager *);
virtual
void RegisterFDeclUse();
virtual
void CheckBadConstructs( class BadUseInfo * );
void CheckHandleSpecs( BadUseInfo *,
node_proc *,
BOOL,
BOOL,
BOOL );
STATUS_T MopCodeGen(
MopStream * pStream,
node_skl * pParent,
BOOL fMemory );
unsigned long MopGetBufferSize( unsigned long CurrentSize );
};
/////////////////////////////////////////////////////////////////////////
// proc node
/////////////////////////////////////////////////////////////////////////
class node_proc : public node_skl
{
private:
unsigned int ImportLevel : 8;
unsigned int fIsErrorStatusTReturn : 1;
unsigned int fErrorStatusTParamDetected : 1;
unsigned int fDefinedInLocalInterface : 1;
unsigned int fHasAHandle : 1;
unsigned int fHasAPotentialHandle : 1;
node_skl * pReturnType;
public:
void PassHandleInfo();
STATUS_T EmitBindProlog(SIDE_T);
STATUS_T EmitBindEpilog(SIDE_T);
STATUS_T EmitClientStub(node_skl *, BufferManager *, BOOL);
STATUS_T EmitServerStub(node_skl *, BufferManager *, BOOL);
public:
node_proc( short, BOOL );
void SetHasAtLeastOneHandle()
{
fHasAHandle = 1;
}
BOOL HasAtLeastOneHandle()
{
return (BOOL) (fHasAHandle == 1);
}
void SetHasAPotentialHandle()
{
fHasAPotentialHandle = 1;
}
BOOL HasAPotentialHandle()
{
return (BOOL) (fHasAPotentialHandle == 1);
}
short GetImportLevel() { return ImportLevel; };
void SetErrorStatusTReturn()
{
fIsErrorStatusTReturn = 1;
}
BOOL IsErrorStatusTReturn()
{
return (BOOL)fIsErrorStatusTReturn;
}
void SetErrorStatusTParamDetected()
{
fErrorStatusTParamDetected = 1;
}
BOOL IsErrorStatusTParamDetected()
{
return (BOOL)fErrorStatusTParamDetected;
}
virtual
STATUS_T SetBasicType( node_skl *pNode );
virtual
node_skl * GetBasicType();
virtual
node_state SCheck( class BadUseInfo * );
virtual
node_state PostSCheck( class BadUseInfo * );
virtual
void SetAttribute( type_node_list * );
virtual
void RegisterFDeclUse();
virtual
void RegFDAndSetE();
short HasHandle( type_node_list * );
virtual
void UseProcessing();
virtual
node_skl * StaticSize(SIDE_T, NODE_T, unsigned long *);
virtual
node_skl * UpperBoundTree(SIDE_T, NODE_T, unsigned long *);
virtual
STATUS_T EmitProc(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T WalkTree(ACTION_T, SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PrintType(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PrintDecl(SIDE_T, NODE_T, BufferManager *);
STATUS_T GetReturnType( class node_skl **p )
{
if( (*p = pReturnType) == (node_skl *)NULL )
return I_ERR_NO_RETURN_TYPE;
else
return STATUS_OK;
}
node_skl * GetReturnType()
{
return pReturnType;
}
BOOL FHasHandleParam();
virtual
node_skl * GetOneNEUnionSwitchType()
{
return (node_skl *)0;
}
BOOL HasOnlyFirstLevelRefPtr();
virtual
BOOL HasAnyNETransmitAsType()
{
return CheckNodeStateInMembers(
NODE_STATE_TRANSMIT_AS );
}
virtual
BOOL HasAnyPtrToNEArray()
{
return CheckNodeStateInMembers(
NODE_STATE_ANY_ARRAY );
}
virtual
BOOL HasPtrToCompWEmbeddedPtr()
{
return CheckNodeStateInMembers(
NODE_STATE_PTR_TO_EMBEDDED_PTR );
}
virtual
BOOL HasSizedComponent();
virtual
BOOL HasLengthedComponent();
short GetNumberOfArguments();
virtual
node_state AcfSCheck();
node_skl * GetBindingHandle();
BOOL IsSuitableForMops();
STATUS_T EmitMessageInfo ( SIDE_T Side );
STATUS_T EmitMopStub ( SIDE_T Side );
STATUS_T EmitProcMopStreams( SIDE_T Sides );
STATUS_T MopCreateProcStream( MopStream * pStream );
STATUS_T MopProcBindingCodeGen( MopStream * pStream );
unsigned long MopGetIOBufferSize( BOOL fIn );
};
#endif // __PROCNODE_HXX__