summaryrefslogtreecommitdiffstats
path: root/src/symbol-table.h
diff options
context:
space:
mode:
authorTing-Wei Lan <lantw44@gmail.com>2015-12-06 22:44:02 +0800
committerTing-Wei Lan <lantw44@gmail.com>2015-12-06 22:44:02 +0800
commit21e57e72f5d7417bc2704d0356d66c21c269114a (patch)
tree1f90a760e7c5deb0219182a12e095e726cb86733 /src/symbol-table.h
parent8d62e54178600c5e62dd9cbf186340d7fe6f079d (diff)
downloadcompiler2015-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.h19
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);