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.
 
 
 
 
 
 

691 lines
14 KiB

/*****************************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1987-1990 **/
/*****************************************************************************/
/*****************************************************************************
File : compnode.hxx
Title : definitions for struct/union/enum
History :
08-Jun-1991 VibhasC Created
*****************************************************************************/
#ifndef __COMPNODE_HXX__
#define __COMPNODE_HXX__
#include "baduse.hxx"
#include "tlnmgr.hxx"
/////////////////////////////////////////////////////////////////////////
// field node
/////////////////////////////////////////////////////////////////////////
class node_field : public node_skl
{
private:
public:
node_field();
node_field( char *);
~node_field( void );
virtual
BOOL IsBitField();
virtual
node_state PostSCheck( class BadUseInfo * );
virtual
void SetAttribute( type_node_list * );
virtual
node_skl * StaticSize(SIDE_T, NODE_T, unsigned long *);
virtual
node_skl * UpperBoundNode(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 CalcSize(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T SendNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T RecvNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PeekNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T InitNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T FreeNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PrintType(SIDE_T, NODE_T, BufferManager *);
BOOL IsEmptyArm();
virtual
unsigned short GetFieldSize();
expr_list * GetCaseExprList();
virtual
void CheckBadConstructs( class BadUseInfo * );
virtual
node_state PreSCheck( class BadUseInfo * );
virtual
short GetTopLevelNames( TLNDICT * , BOOL );
virtual
BOOL DerivesFromTransmitAs()
{
return GetChild()->DerivesFromTransmitAs();
}
char * SpecialActionUnnamedFields( BufferManager *, char ** );
STATUS_T MopCodeGen(
MopStream * pStream,
node_skl * pParent,
BOOL fMemory );
unsigned long MopGetBufferSize( unsigned long CurrentSize );
};
////////////////////////////////////////////////////////////////////////
// bit field
////////////////////////////////////////////////////////////////////////
class node_bitfield : public node_field
{
private:
short FieldSize;
public:
node_bitfield( short s ) : node_field()
{
FieldSize = s;
// SetNodeState( NODE_STATE_BIT_FIELD );
};
node_bitfield( short s, char * p ) : node_field( p )
{
FieldSize = s;
};
~node_bitfield( void );
virtual
unsigned short GetFieldSize() { return FieldSize; };
void SetBitField( short size )
{
FieldSize = size;
};
BOOL IsBitField()
{
return TRUE;
}
virtual
node_state PostSCheck( class BadUseInfo * );
};
/////////////////////////////////////////////////////////////////////////
// su nodes : struct / union derives from here
/////////////////////////////////////////////////////////////////////////
class su : public node_skl
{
private:
struct _baduseortempname
{
class BadUseInfo * pBadUseInfo;
char * pOriginalTypedefName;
} SUInfo;
unsigned short fHasOriginalTypedefName : 1;
unsigned short fLastMemberIsEncapUnion : 1;
unsigned short ForcedAlignment : 3;
unsigned short fUsageAsCtxtHdl : 1;
unsigned short fUsageAsNonCtxtHdl : 1;
unsigned short fDerivesFromTransmitAs : 1;
unsigned short fDontGenerateAuxRoutines : 1;
unsigned short fHasOnlyEmptyArm : 1;
unsigned short fAuxRoutineRequired : 1;
public:
su( NODE_T Nt );
void SetAuxRoutineRequired()
{
fAuxRoutineRequired = 1;
}
BOOL IsAuxRoutineRequired()
{
return (BOOL) fAuxRoutineRequired;
}
void ResetAuxRoutineRequired()
{
fAuxRoutineRequired = 0;
}
void SetHasOnlyEmptyArm()
{
fHasOnlyEmptyArm = 1;
}
void ResetHasOnlyEmptyArm()
{
fHasOnlyEmptyArm = 0;
}
BOOL HasOnlyEmptyArm()
{
return (BOOL) fHasOnlyEmptyArm;
}
void DontGenerateAuxRoutines()
{
fDontGenerateAuxRoutines = 1;
}
BOOL ShouldAuxRoutineNotBeGenerated()
{
return (BOOL) fDontGenerateAuxRoutines;
}
void SetDerivesFromTransmitAs()
{
fDerivesFromTransmitAs = 1;
}
BOOL DerivesFromTransmitAs()
{
return (BOOL) fDerivesFromTransmitAs;
}
virtual
void MarkUsage();
void SetUsageAsCtxtHdl( BOOL f )
{
if( f == TRUE )
fUsageAsCtxtHdl = 1;
else
fUsageAsNonCtxtHdl = 1;
}
BOOL IsUsageOnlyAsCtxtHdl()
{
return( (fUsageAsCtxtHdl == 1) &&
(fUsageAsNonCtxtHdl == 0 ) );
}
virtual
void SetLastMemberIsEncapUnion()
{
fLastMemberIsEncapUnion = 1;
}
virtual
BOOL IsLastMemberEncapUnion()
{
return (BOOL)( fLastMemberIsEncapUnion == 1);
}
virtual
void SetForcedAlignment( unsigned short A)
{
if( A != 0 )
ForcedAlignment = A;
}
virtual
unsigned short GetForcedAlignment()
{
return ForcedAlignment;
}
void SetOriginalTypedefName( char *p )
{
SUInfo.pOriginalTypedefName = p;
fHasOriginalTypedefName = 1;
}
char * GetOriginalTypedefName()
{
return SUInfo.pOriginalTypedefName;
}
BOOL HasOriginalTypedefName()
{
return fHasOriginalTypedefName;
}
void ResetOriginalTypedefName()
{
fHasOriginalTypedefName = 0;
}
void GetPtrTypeCastOfOriginalName( char *p );
void SetAllBadConstructReasons( class BadUseInfo *p)
{
CopyAllBadConstructReasons( SUInfo.pBadUseInfo, p );
}
void SetAllNonRPCAbleReasons( class BadUseInfo *p )
{
CopyAllNonRPCAbleReasons( SUInfo.pBadUseInfo, p );
}
void SetNonRPCAbleReason( NON_RPCABLE Reason )
{
SUInfo.pBadUseInfo->SetNonRPCAbleBecause( Reason );
}
virtual
void UpdateBadUseInfo( class BadUseInfo *p );
virtual
void RegFDAndSetE();
virtual
BOOL HasOnlyFirstLevelRefPtr();
virtual
BOOL HasAnyNETransmitAsType()
{
return CheckNodeStateInMembers(
NODE_STATE_TRANSMIT_AS );
}
virtual
BOOL HasPtrToAnyNEArray()
{
return CheckNodeStateInMembers(
NODE_STATE_PTR_TO_ANY_ARRAY );
}
virtual
BOOL HasPtrToCompWEmbeddedPtr()
{
return CheckNodeStateInMembers(
NODE_STATE_PTR_TO_EMBEDDED_PTR );
}
BOOL HasAnyEmbeddedUnion()
{
return (BOOL)
((GetNodeState() & NODE_STATE_EMBEDDED_UNION)
== NODE_STATE_EMBEDDED_UNION);
}
virtual
BOOL HasSizedComponent();
virtual
BOOL HasLengthedComponent();
virtual
short GetTopLevelNames( TLNDICT *, BOOL );
class SymTable * GetSymScopeOfTopLevelName( char * );
virtual
void PropogateOriginalName( char *p )
{
SetOriginalTypedefName( p );
}
virtual
unsigned short AllocWRTOtherAttrs();
virtual
BOOL HasEmbeddedFixedArrayOfStrings();
node_skl * GetFirstNamedFieldInNesting();
};
/////////////////////////////////////////////////////////////////////////
// structure node
/////////////////////////////////////////////////////////////////////////
class node_struct : public su
{
public:
node_struct( char *pName ) : su(NODE_STRUCT)
{
SetSymName( pName );
};
~node_struct() { };
virtual
node_skl * GetLargestElement();
virtual
node_skl * GetLargestNdr();
virtual
unsigned long GetSize(unsigned long);
virtual
node_state PostSCheck( class BadUseInfo * );
virtual
void SetAttribute( type_node_list * );
virtual
node_skl * StaticSize(SIDE_T, NODE_T, unsigned long *);
virtual
node_skl * UpperBoundNode(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 CalcSize(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T SendNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T RecvNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PeekNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T InitNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T FreeNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PrintType(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PrintDecl(SIDE_T, NODE_T, BufferManager *);
node_skl * SkipBlock(type_node_list *, node_skl **, unsigned long *);
virtual
node_skl * GetOneNEUnionSwitchType()
{
return (node_skl *)0;
}
virtual
BOOL IsEncapsulatedStruct()
{
return FALSE;
}
BOOL IsStringableStruct();
STATUS_T MopCodeGen(
MopStream * pStream,
node_skl * pParent,
BOOL fMemory );
STATUS_T MopCodeGenConfSizes(
MopStream * pStream,
unsigned long TopSize );
unsigned long MopGetBufferSize( unsigned long CurrentSize );
unsigned long MopGetStackSize ( unsigned long CurrentSize );
};
class node_en_struct : public node_struct
{
public:
node_en_struct( char *p ) : node_struct(p)
{
};
~node_en_struct()
{
}
virtual
BOOL IsEncapsulatedStruct()
{
return TRUE;
}
node_skl * GetSwitchField()
{
return GetFirstMember();
}
};
/////////////////////////////////////////////////////////////////////////
// union node
/////////////////////////////////////////////////////////////////////////
class node_union : public su
{
private:
union
{
class BufferManager * pSwStringBuffer;
Dictionary * pCaseValueDict;
} Info;
int fCaseChecked : 1;
int fCaseValueDictReleased : 1;
public:
node_union( char * );
~node_union( void );
virtual
void UseProcessingAction();
virtual
node_skl * GetLargestElement();
virtual
node_skl * GetLargestNdr();
void SetCaseExpr( class expr_list * );
virtual
unsigned long GetSize( unsigned long );
virtual
node_state PreSCheck( class BadUseInfo * );
virtual
node_state PostSCheck( class BadUseInfo * );
virtual
void SetAttribute( type_node_list * );
node_skl * GetSwitchType();
virtual
node_skl * StaticSize(SIDE_T, NODE_T, unsigned long *);
virtual
node_skl * UpperBoundNode(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 CalcSize(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T SendNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T RecvNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PeekNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T InitNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T FreeNode(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 SetUpUnionSwitch( class BufferManager * pB );
node_skl * SkipBlock(type_node_list *, node_skl **, unsigned long *);
node_skl * CopyBlock(type_node_list *, node_skl **, unsigned long *);
virtual
node_skl * GetOneNEUnionSwitchType()
{
return GetSwitchType();
}
virtual
BOOL IsEncapsulatedUnion()
{
return FALSE;
}
void CheckCaseValuesInRange();
STATUS_T MopCodeGen(
MopStream * pStream,
node_skl * pParent,
BOOL fMemory );
unsigned long MopGetBufferSize( unsigned long CurrentSize );
unsigned long MopGetStackSize ( unsigned long CurrentSize );
};
class node_en_union : public node_union
{
public:
node_en_union( char * p ) : node_union(p)
{
};
~node_en_union( void );
virtual
BOOL IsEncapsulatedUnion()
{
return TRUE;
}
};
class node_enum : public node_skl
{
public:
node_enum( char * pName ) : node_skl( NODE_ENUM )
{
SetSymName( pName );
}
virtual
node_state SCheck( class BadUseInfo * );
virtual
node_skl * StaticSize(SIDE_T, NODE_T, unsigned long *);
virtual
node_skl * UpperBoundNode(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 CalcSize(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T SendNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T RecvNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T PeekNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T InitNode(SIDE_T, NODE_T, BufferManager *);
virtual
STATUS_T FreeNode(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 MopCodeGen(
MopStream * pStream,
node_skl * pParent,
BOOL fMemory );
};
class node_label : public node_skl
{
private:
class expr_node * pExpr;
public:
node_label( char *, class expr_node * );
void SetExpr( class expr_node * );
class expr_node * GetExpr()
{
return pExpr;
}
long GetValue();
virtual
STATUS_T PrintType(SIDE_T, NODE_T, BufferManager *);
};
#endif // __COMPNODE_HXX__