mirror of https://github.com/lianthony/NT4.0
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
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__
|
|
|