203 lines
5.2 KiB
C++
203 lines
5.2 KiB
C++
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
Copyright (c) 1989-1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
resdef.hxx
|
|
|
|
Abstract:
|
|
|
|
Resource related definitions.
|
|
|
|
Notes:
|
|
|
|
|
|
History:
|
|
|
|
VibhasC Aug-14-1993 Created.
|
|
|
|
----------------------------------------------------------------------------*/
|
|
#ifndef __RESDEF_HXX__
|
|
#define __RESDEF_HXX__
|
|
|
|
#include "stream.hxx"
|
|
#include "expr.hxx"
|
|
|
|
class node_id;
|
|
class node_param;
|
|
|
|
node_id * MakeIDNode( PNAME pName ,
|
|
node_skl * pType,
|
|
expr_node * pExpr = 0 );
|
|
node_id * MakePtrIDNode( PNAME pName ,
|
|
node_skl * pType,
|
|
expr_node * pExpr = 0 );
|
|
node_id * MakeIDNodeFromTypeName( PNAME pName ,
|
|
PNAME pTypeName,
|
|
expr_node * pExpr = 0 );
|
|
node_id * MakePtrIDNodeFromTypeName( PNAME pName ,
|
|
PNAME pTypeName,
|
|
expr_node * pExpr = 0 );
|
|
node_id * MakePtrIDNodeFromTypeNameWithCastedExpr( PNAME pName ,
|
|
PNAME pTypeName,
|
|
expr_node * pExpr = 0 );
|
|
|
|
node_id * MakePtrIDNodeWithCastedExpr( PNAME pName,
|
|
node_skl * pType,
|
|
expr_node * pExpr );
|
|
|
|
extern node_param * MakeParamNode( PNAME pName , node_skl * pType );
|
|
extern node_param * MakePtrParamNode( PNAME pName , node_skl * pType );
|
|
extern node_param * MakeParamNodeFromTypeName( PNAME pName , PNAME pTypeName );
|
|
extern node_param * MakePtrParamNodeFromTypeName( PNAME pName , PNAME pTypeName );
|
|
|
|
node_proc * MakeProcNodeWithNewName( PNAME pName,
|
|
node_proc * pProc );
|
|
|
|
typedef unsigned short RESOURCE_KIND;
|
|
typedef unsigned short RESOURCE_LOCATION;
|
|
|
|
//
|
|
// Resource kind. The resource may be an abstract resource if it represents
|
|
// an expression or a concrete resource if it is an actually declared variable
|
|
// in the stub / aux routine.
|
|
//
|
|
|
|
#define RESOURCE_KIND_ABSTRACT 0
|
|
#define RESOURCE_KIND_CONCRETE 1
|
|
|
|
//
|
|
// Resource location refers to the place in the stubs environment where the
|
|
// resource has been declared. For example a global resource or a local or
|
|
// parameter resource. Transient resources are temporary variables emitted
|
|
// by the stub within code blocks. Some of these transient resources may
|
|
// become local resources depending upon the optimiser's actions.
|
|
//
|
|
|
|
#define RESOURCE_LOCATION_GLOBAL 0
|
|
#define RESOURCE_LOCATION_PARAM 1
|
|
#define RESOURCE_LOCATION_LOCAL 2
|
|
#define RESOURCE_LOCATION_TRANSIENT 3
|
|
|
|
//
|
|
// This class and the variable class may be merge-able, but I anticipate the
|
|
// need for this to be a separate class just so that the post optimiser can
|
|
// treat this specially and may be able to use the separation from the normal
|
|
// variable class.
|
|
//
|
|
|
|
|
|
class RESOURCE : public expr_node
|
|
{
|
|
private:
|
|
|
|
//
|
|
// is this a concrete or abstract resource ?
|
|
//
|
|
|
|
unsigned short ResourceKind : 2;
|
|
|
|
//
|
|
// the location of the resource.
|
|
//
|
|
|
|
unsigned short ResourceLocation : 2;
|
|
|
|
|
|
PNAME pName; // name of concrete resource.
|
|
|
|
public:
|
|
|
|
//
|
|
// A resource is constructed by simply declaring a name and a type.
|
|
//
|
|
|
|
RESOURCE( PNAME p,
|
|
node_skl * pT )
|
|
{
|
|
SetResourceName( p );
|
|
SetType( pT );
|
|
|
|
//
|
|
// These don't seem to be used anywhere.
|
|
// It's also not clear what they should be
|
|
// initialized to...
|
|
//
|
|
|
|
// ResourceKind = ??;
|
|
// ResourceLocation = ??;
|
|
}
|
|
|
|
virtual void CopyTo( expr_node* pExpr )
|
|
{
|
|
RESOURCE* lhs = (RESOURCE*) pExpr;
|
|
expr_node::CopyTo( lhs );
|
|
lhs->ResourceKind = ResourceKind;
|
|
lhs->ResourceLocation = ResourceLocation;
|
|
_STRDUP( lhs->pName, pName );
|
|
}
|
|
|
|
virtual expr_node* Clone() { return new RESOURCE(0,0); };
|
|
//
|
|
// queries.
|
|
//
|
|
|
|
virtual
|
|
BOOL IsResource()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// set and get the Information fields.
|
|
//
|
|
|
|
void SetKind( unsigned short K )
|
|
{
|
|
ResourceKind = K;
|
|
}
|
|
|
|
|
|
RESOURCE_KIND GetKind()
|
|
{
|
|
return ResourceKind;
|
|
}
|
|
|
|
unsigned short GetLocation()
|
|
{
|
|
return ResourceLocation;
|
|
}
|
|
|
|
unsigned short SetLocation( unsigned short L )
|
|
{
|
|
return (ResourceLocation = L);
|
|
}
|
|
|
|
PNAME SetResourceName( PNAME p )
|
|
{
|
|
return (pName = p);
|
|
}
|
|
|
|
PNAME GetResourceName()
|
|
{
|
|
return pName;
|
|
}
|
|
|
|
//
|
|
// Given an output steam, output the expression.
|
|
//
|
|
|
|
virtual
|
|
void Print( ISTREAM * pS )
|
|
{
|
|
pS->Write( (char *)GetResourceName() );
|
|
}
|
|
|
|
virtual
|
|
BOOL IsConstant()
|
|
{
|
|
return FALSE;
|
|
}
|
|
};
|
|
#endif // __RESDEF_HXX__
|