mirror of
https://github.com/ZDoom/acc.git
synced 2024-11-15 00:41:30 +00:00
a96324456a
the size of an array. Now #defines are fully processed inside an import but are forgotten when the import is popped if they weren't created with #libdefine. SVN r280 (trunk)
129 lines
2.5 KiB
C
129 lines
2.5 KiB
C
|
|
//**************************************************************************
|
|
//**
|
|
//** symbol.h
|
|
//**
|
|
//**************************************************************************
|
|
|
|
#ifndef __SYMBOL_H__
|
|
#define __SYMBOL_H__
|
|
|
|
// HEADER FILES ------------------------------------------------------------
|
|
|
|
#include "common.h"
|
|
#include "pcode.h"
|
|
|
|
// MACROS ------------------------------------------------------------------
|
|
|
|
#define MAX_ARRAY_DIMS 8
|
|
|
|
// TYPES -------------------------------------------------------------------
|
|
|
|
typedef enum
|
|
{
|
|
SY_DUMMY,
|
|
SY_LABEL,
|
|
SY_SCRIPTVAR,
|
|
SY_SCRIPTALIAS,
|
|
SY_MAPVAR,
|
|
SY_WORLDVAR,
|
|
SY_GLOBALVAR,
|
|
SY_MAPARRAY,
|
|
SY_WORLDARRAY,
|
|
SY_GLOBALARRAY,
|
|
SY_SPECIAL,
|
|
SY_CONSTANT,
|
|
SY_INTERNFUNC,
|
|
SY_SCRIPTFUNC
|
|
} symbolType_t;
|
|
|
|
typedef struct
|
|
{
|
|
U_BYTE index;
|
|
} symVar_t;
|
|
|
|
typedef struct
|
|
{
|
|
U_BYTE index;
|
|
int dimensions[MAX_ARRAY_DIMS];
|
|
int ndim;
|
|
int size;
|
|
} symArray_t;
|
|
|
|
typedef struct
|
|
{
|
|
int address;
|
|
} symLabel_t;
|
|
|
|
typedef struct
|
|
{
|
|
U_BYTE value;
|
|
int argCount;
|
|
} symSpecial_t;
|
|
|
|
typedef struct
|
|
{
|
|
int value;
|
|
int fileDepth;
|
|
} symConstant_t;
|
|
|
|
typedef struct
|
|
{
|
|
pcd_t directCommand;
|
|
pcd_t stackCommand;
|
|
int argCount;
|
|
int optMask;
|
|
int outMask;
|
|
boolean hasReturnValue;
|
|
boolean latent;
|
|
} symInternFunc_t;
|
|
|
|
typedef struct
|
|
{
|
|
int address;
|
|
int argCount;
|
|
int varCount;
|
|
int funcNumber;
|
|
boolean hasReturnValue;
|
|
int sourceLine;
|
|
char *sourceName;
|
|
boolean predefined;
|
|
} symScriptFunc_t;
|
|
|
|
typedef struct symbolNode_s
|
|
{
|
|
struct symbolNode_s *left;
|
|
struct symbolNode_s *right;
|
|
char *name;
|
|
symbolType_t type;
|
|
boolean unused;
|
|
boolean imported;
|
|
union
|
|
{
|
|
symVar_t var;
|
|
symArray_t array;
|
|
symLabel_t label;
|
|
symSpecial_t special;
|
|
symConstant_t constant;
|
|
symInternFunc_t internFunc;
|
|
symScriptFunc_t scriptFunc;
|
|
} info;
|
|
} symbolNode_t;
|
|
|
|
// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
|
|
|
|
void SY_Init(void);
|
|
symbolNode_t *SY_Find(char *name);
|
|
symbolNode_t *SY_FindLocal(char *name);
|
|
symbolNode_t *SY_FindGlobal(char *name);
|
|
symbolNode_t *SY_InsertLocal(char *name, symbolType_t type);
|
|
symbolNode_t *SY_InsertGlobal(char *name, symbolType_t type);
|
|
symbolNode_t *SY_InsertGlobalUnique(char *name, symbolType_t type);
|
|
void SY_FreeLocals(void);
|
|
void SY_FreeGlobals(void);
|
|
void SY_FreeConstants(int depth);
|
|
void SY_ClearShared(void);
|
|
|
|
// PUBLIC DATA DECLARATIONS ------------------------------------------------
|
|
|
|
#endif
|