// // Copyright (c) Microsoft Corporation 1995 // // symtab.h // // Header file for the symbol table. // // History: // 04-30-95 ScottH Created // #ifndef __SYMTAB_H__ #define __SYMTAB_H__ // // DATATYPE // typedef enum { DATA_INT, // Uses er.nVal DATA_BOOL, // Uses er.bVal DATA_STRING, // Uses er.psz DATA_LABEL, // Uses er.dw as code address DATA_PROC, } DATATYPE; DECLARE_STANDARD_TYPES(DATATYPE); // // EVALRES (evaluation result) // typedef struct tagEVALRES { union { LPSTR psz; int nVal; BOOL bVal; ULONG_PTR dw; }; } EVALRES; DECLARE_STANDARD_TYPES(EVALRES); // // Symbol Table Entry // typedef struct tagSTE { LPSTR pszIdent; DATATYPE dt; EVALRES er; } STE; // symbol table entry DECLARE_STANDARD_TYPES(STE); RES PUBLIC STE_Create(PSTE * ppste, LPCSTR pszIdent, DATATYPE dt); RES PUBLIC STE_Destroy(PSTE this); RES PUBLIC STE_GetValue(PSTE this, PEVALRES per); #define STE_GetIdent(pste) ((pste)->pszIdent) #define STE_GetDataType(pste) ((pste)->dt) // // Symbol Table // typedef struct tagSYMTAB { HPA hpaSTE; // element points to STE struct tagSYMTAB * pstNext; } SYMTAB; DECLARE_STANDARD_TYPES(SYMTAB); #define Symtab_GetNext(pst) ((pst)->pstNext) RES PUBLIC Symtab_Destroy(PSYMTAB this); RES PUBLIC Symtab_Create(PSYMTAB * ppst, PSYMTAB pstNext); // Symtab_Find flags #define STFF_DEFAULT 0x0000 #define STFF_IMMEDIATEONLY 0x0001 RES PUBLIC Symtab_FindEntry(PSYMTAB this, LPCSTR pszIdent, DWORD dwFlags, PSTE * ppsteOut, PSYMTAB * ppstScope); RES PUBLIC Symtab_InsertEntry(PSYMTAB this, PSTE pste); RES PUBLIC Symtab_NewLabel(PSYMTAB this, LPSTR pszIdentBuf); #endif // __SYMTAB_H__