diff options
| author | Shinya Sato <shinnya.sato@gmail.com> | 2022-02-09 14:35:38 +0900 |
|---|---|---|
| committer | Shinya Sato <shinnya.sato@gmail.com> | 2022-02-09 14:35:38 +0900 |
| commit | be334c15c2718a66378666358eaefabbda21bff9 (patch) | |
| tree | 71e6b93d0d5df6c8fb5c13258b8511e0455a55c2 /src/id_table.c | |
| parent | 03d7d92b4c401b553bc64da535b0621da67f6cc4 (diff) | |
| download | inpla-be334c15c2718a66378666358eaefabbda21bff9.tar.gz inpla-be334c15c2718a66378666358eaefabbda21bff9.zip | |
v0.7.2
Diffstat (limited to 'src/id_table.c')
| -rw-r--r-- | src/id_table.c | 88 |
1 files changed, 54 insertions, 34 deletions
diff --git a/src/id_table.c b/src/id_table.c index f0e006a..e113c8f 100644 --- a/src/id_table.c +++ b/src/id_table.c @@ -1,7 +1,6 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include "ast.h" #include "id_table.h" @@ -19,35 +18,39 @@ void IdTable_init() { // START_IS_OF_AGENT .. NUM_AGENTS-1: user defined agents // NUM_AGENTS(=ID_NAME) .. : names - for (i=0; i<IDTABLE_SIZE; i++) { - IdTable[i].arity = -1; + for (i=0; i<=END_ID_OF_AGENT; i++) { IdTable[i].name = NULL; + IdTable[i].aux.arity = -1; + } + for (i=START_ID_OF_GNAME; i<IDTABLE_SIZE; i++) { + IdTable[i].name = NULL; + IdTable[i].aux.heap = (VALUE)NULL; } // built-in agent - IdTable[ID_TUPLE0].arity = 0; - IdTable[ID_TUPLE1].arity = 1; - IdTable[ID_TUPLE2].arity = 2; - IdTable[ID_TUPLE3].arity = 3; - IdTable[ID_TUPLE4].arity = 4; - IdTable[ID_TUPLE5].arity = 5; - IdTable[ID_NIL].arity = 0; - IdTable[ID_CONS].arity = 2; - IdTable[ID_INTAGENT].arity = 1; - - IdTable[ID_APPEND].arity = 2; - IdTable[ID_MERGER].arity = 1; - IdTable[ID_MERGER_P].arity = 1; - IdTable[ID_ADD].arity = 2; - IdTable[ID_ADD2].arity = 2; - IdTable[ID_SUB].arity = 2; - IdTable[ID_SUB2].arity = 2; - IdTable[ID_MUL].arity = 2; - IdTable[ID_MUL2].arity = 2; - IdTable[ID_DIV].arity = 2; - IdTable[ID_DIV2].arity = 2; - IdTable[ID_MOD].arity = 2; - IdTable[ID_MOD2].arity = 2; + IdTable[ID_TUPLE0].aux.arity = 0; + IdTable[ID_TUPLE1].aux.arity = 1; + IdTable[ID_TUPLE2].aux.arity = 2; + IdTable[ID_TUPLE3].aux.arity = 3; + IdTable[ID_TUPLE4].aux.arity = 4; + IdTable[ID_TUPLE5].aux.arity = 5; + IdTable[ID_NIL].aux.arity = 0; + IdTable[ID_CONS].aux.arity = 2; + IdTable[ID_INTAGENT].aux.arity = 1; + + IdTable[ID_APPEND].aux.arity = 2; + IdTable[ID_MERGER].aux.arity = 1; + IdTable[ID_MERGER_P].aux.arity = 1; + IdTable[ID_ADD].aux.arity = 2; + IdTable[ID_ADD2].aux.arity = 2; + IdTable[ID_SUB].aux.arity = 2; + IdTable[ID_SUB2].aux.arity = 2; + IdTable[ID_MUL].aux.arity = 2; + IdTable[ID_MUL2].aux.arity = 2; + IdTable[ID_DIV].aux.arity = 2; + IdTable[ID_DIV2].aux.arity = 2; + IdTable[ID_MOD].aux.arity = 2; + IdTable[ID_MOD2].aux.arity = 2; IdTable[ID_INT].name = "int"; IdTable[ID_TUPLE0].name = "Tuple0"; @@ -162,29 +165,46 @@ void IdTable_set_name(int id, char *symname) IdTable[id].name = symname; } +char *IdTable_get_name(int id) +{ + return IdTable[id].name; +} + void IdTable_set_arity(int id, int arity) { - if ((IdTable[id].arity == -1) || (IdTable[id].arity == arity)) { - IdTable[id].arity = arity; + if ((IdTable[id].aux.arity == -1) || (IdTable[id].aux.arity == arity)) { + IdTable[id].aux.arity = arity; } else { printf("Warning: The agent '%s' has been already defined as whose arity is %d, but now used as the arity is %d.\n", - IdTable[id].name, IdTable[id].arity, arity); - IdTable[id].arity = arity; + IdTable[id].name, IdTable[id].aux.arity, arity); + IdTable[id].aux.arity = arity; } } +int IdTable_get_arity(int id) +{ + return IdTable[id].aux.arity; +} -char *IdTable_get_name(int id) + +void IdTable_set_heap(int id, VALUE heap) { - return IdTable[id].name; + if (id > IDTABLE_SIZE) { + printf("Error: The given id %d was beyond of the size of IdTable (%d)\n", + id, IDTABLE_SIZE); + exit(-1); + } + IdTable[id].aux.heap = heap; } -int IdTable_get_arity(int id) +VALUE IdTable_get_heap(int id) { - return IdTable[id].arity; + return IdTable[id].aux.heap; } + + int IdTable_new_agentid() { NextAgentId++; if (NextAgentId > ID_NAME) { |
