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.
310 lines
7.3 KiB
310 lines
7.3 KiB
/*****************************************************************************/
|
|
/** Microsoft LAN Manager **/
|
|
/** Copyright(c) Microsoft Corp., 1987-1990 **/
|
|
/*****************************************************************************/
|
|
/*****************************************************************************
|
|
File : ptrarray.hxx
|
|
Title : semantic context stack manager for the MIDL compiler
|
|
History :
|
|
08-Aug-1991 VibhasC Created
|
|
|
|
*****************************************************************************/
|
|
#ifndef __PTRARRAY_HXX__
|
|
#define __PTRARRAY_HXX__
|
|
|
|
#include "newexpr.hxx"
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// ptrarray node
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
class npa : public node_skl
|
|
{
|
|
public:
|
|
npa( NODE_T NT ) : node_skl( NT )
|
|
{
|
|
}
|
|
|
|
void GetAttrPath (
|
|
BufferManager *,
|
|
BufferManager *,
|
|
BufferManager *);
|
|
|
|
virtual
|
|
void GetAllocBoundInfo( BufferManager *,
|
|
BufferManager *,
|
|
BOUND_PAIR * ,
|
|
node_skl *);
|
|
virtual
|
|
void GetValidBoundInfo( BufferManager *,
|
|
BufferManager *,
|
|
BOUND_PAIR * ,
|
|
node_skl *);
|
|
virtual
|
|
void UseProcessingAction();
|
|
|
|
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
|
|
void PropogateOriginalName( char *p )
|
|
{
|
|
GetChild()->PropogateOriginalName( p );
|
|
}
|
|
|
|
virtual
|
|
unsigned short AllocWRTOtherAttrs()
|
|
{
|
|
return GetChild()->AllocWRTOtherAttrs();
|
|
}
|
|
virtual
|
|
BOOL DerivesFromTransmitAs()
|
|
{
|
|
return GetChild()->DerivesFromTransmitAs();
|
|
}
|
|
} ;
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// array node
|
|
/////////////////////////////////////////////////////////////////////////
|
|
class node_array : public npa
|
|
{
|
|
|
|
class expr_node * pLowerBound;
|
|
class expr_node * pUpperBound;
|
|
unsigned long ArraySize;
|
|
|
|
public:
|
|
node_array( class expr_node *, class expr_node * );
|
|
|
|
virtual
|
|
BOOL IsFixedSizedArray();
|
|
|
|
BOOL IsThisOutermostDimension();
|
|
|
|
unsigned long GetFixedDimension();
|
|
|
|
virtual
|
|
unsigned long GetSize( unsigned long );
|
|
|
|
virtual
|
|
node_state PostSCheck( class BadUseInfo * );
|
|
|
|
virtual
|
|
void SetAttribute( type_node_list * );
|
|
|
|
virtual
|
|
void GetAllocBoundInfo( BufferManager *,
|
|
BufferManager *,
|
|
BOUND_PAIR * ,
|
|
node_skl *);
|
|
virtual
|
|
void GetValidBoundInfo( BufferManager *,
|
|
BufferManager *,
|
|
BOUND_PAIR * ,
|
|
node_skl *);
|
|
virtual
|
|
node_skl * Clone();
|
|
|
|
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 *);
|
|
|
|
|
|
unsigned long GetUpperBound()
|
|
{
|
|
return (unsigned long)pUpperBound->Evaluate();
|
|
}
|
|
|
|
unsigned long GetLowerBound()
|
|
{
|
|
return (unsigned long)pLowerBound->Evaluate();
|
|
}
|
|
virtual
|
|
void CheckBadConstructs( class BadUseInfo * );
|
|
|
|
virtual
|
|
BOOL IsItARealConformantArray()
|
|
{
|
|
return ((GetNodeState() & NODE_STATE_CONF_ARRAY) == NODE_STATE_CONF_ARRAY);
|
|
}
|
|
|
|
STATUS_T MopCodeGen(
|
|
MopStream * pStream,
|
|
node_skl * pParent,
|
|
BOOL fMemory );
|
|
|
|
unsigned long MopGetBufferSize( unsigned long CurrentSize );
|
|
unsigned long MopGetStackSize ( unsigned long CurrentSize );
|
|
|
|
unsigned long GetNoOfElems() { return ArraySize; }
|
|
|
|
int GetNoOfDimensions( node_skl ** pElem );
|
|
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// pointer node
|
|
/////////////////////////////////////////////////////////////////////////
|
|
class node_pointer : public npa
|
|
{
|
|
public:
|
|
node_pointer( void );
|
|
|
|
node_pointer( ATTR_T ); // for pickling
|
|
|
|
virtual
|
|
node_state PreSCheck( class BadUseInfo * );
|
|
|
|
virtual
|
|
node_state PostSCheck( class BadUseInfo * );
|
|
|
|
virtual
|
|
void SetAttribute( type_node_list * );
|
|
|
|
virtual
|
|
void GetAllocBoundInfo( BufferManager *,
|
|
BufferManager *,
|
|
BOUND_PAIR * ,
|
|
node_skl *);
|
|
virtual
|
|
void GetValidBoundInfo( BufferManager *,
|
|
BufferManager *,
|
|
BOUND_PAIR * ,
|
|
node_skl *);
|
|
|
|
virtual
|
|
node_skl * Clone();
|
|
|
|
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 *);
|
|
|
|
ATTR_T WhatPtrIsThis();
|
|
|
|
virtual
|
|
void CheckBadConstructs( class BadUseInfo * );
|
|
|
|
STATUS_T MopCodeGen(
|
|
MopStream * pStream,
|
|
node_skl * pParent,
|
|
BOOL fMemory );
|
|
|
|
unsigned long MopGetBufferSize( unsigned long CurrentSize );
|
|
|
|
BOOL IsPointerBufferSizeable( void );
|
|
|
|
BOOL MopOptimizePointers(
|
|
MopStream * pStream,
|
|
node_skl * pParent,
|
|
BOOL fMemory,
|
|
unsigned char Token );
|
|
|
|
STATUS_T MopMemoryManagementCodeGen(
|
|
MopStream * pStream,
|
|
node_skl * pParent,
|
|
BOOL fMemory);
|
|
};
|
|
|
|
|
|
#endif // __PTRARRAY_HXX__
|