diff options
author | Ting-Wei Lan <lantw44@gmail.com> | 2015-12-06 22:44:02 +0800 |
---|---|---|
committer | Ting-Wei Lan <lantw44@gmail.com> | 2015-12-06 22:44:02 +0800 |
commit | 21e57e72f5d7417bc2704d0356d66c21c269114a (patch) | |
tree | 1f90a760e7c5deb0219182a12e095e726cb86733 /src/symbol-table.h | |
parent | 8d62e54178600c5e62dd9cbf186340d7fe6f079d (diff) | |
download | compiler2015-21e57e72f5d7417bc2704d0356d66c21c269114a.tar compiler2015-21e57e72f5d7417bc2704d0356d66c21c269114a.tar.gz compiler2015-21e57e72f5d7417bc2704d0356d66c21c269114a.tar.bz2 compiler2015-21e57e72f5d7417bc2704d0356d66c21c269114a.tar.lz compiler2015-21e57e72f5d7417bc2704d0356d66c21c269114a.tar.xz compiler2015-21e57e72f5d7417bc2704d0356d66c21c269114a.tar.zst compiler2015-21e57e72f5d7417bc2704d0356d66c21c269114a.zip |
Add a flag to mark whether the type is a function
Diffstat (limited to 'src/symbol-table.h')
-rw-r--r-- | src/symbol-table.h | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/symbol-table.h b/src/symbol-table.h index 1d71e09..9038366 100644 --- a/src/symbol-table.h +++ b/src/symbol-table.h @@ -9,8 +9,8 @@ #define CCMMC_SYMBOL_SCOPE_HASH_TABLE_SIZE 256 typedef enum CcmmcSymbolKind_enum { - CCMMC_SYMBOL_KIND_VARIABLE, CCMMC_SYMBOL_KIND_TYPE, + CCMMC_SYMBOL_KIND_VARIABLE, CCMMC_SYMBOL_KIND_FUNCTION } CcmmcSymbolKind; @@ -19,6 +19,7 @@ typedef struct CcmmcSymbolType_struct { CcmmcAstValueType type_base; size_t array_dimension; size_t *array_size; + bool param_valid; size_t param_count; CcmmcSymbolType *param_list; } CcmmcSymbolType; @@ -49,11 +50,23 @@ typedef struct CcmmcSymbolTable_struct { CcmmcSymbolScope *current; } CcmmcSymbolTable; +static inline bool ccmmc_symbol_type_is_scalar(CcmmcSymbolType type) { + return type.array_dimension == 0 && !type.param_valid; +} +static inline bool ccmmc_symbol_type_is_array(CcmmcSymbolType type) { + return type.array_dimension != 0; +} +static inline bool ccmmc_symbol_type_is_function(CcmmcSymbolType type) { + return type.param_valid; +} static inline bool ccmmc_symbol_is_scalar(CcmmcSymbol *symbol) { - return symbol->type.array_dimension == 0; + return ccmmc_symbol_type_is_scalar(symbol->type); } static inline bool ccmmc_symbol_is_array(CcmmcSymbol *symbol) { - return symbol->type.array_dimension != 0; + return ccmmc_symbol_type_is_array(symbol->type); +} +static inline bool ccmmc_symbol_is_function(CcmmcSymbol *symbol) { + return ccmmc_symbol_type_is_function(symbol->type); } void ccmmc_symbol_table_open_scope (CcmmcSymbolTable *table); |