aboutsummaryrefslogtreecommitdiff
path: root/src/id_table.c
diff options
context:
space:
mode:
authorShinya Sato <shinnya.sato@gmail.com>2022-02-09 14:35:38 +0900
committerShinya Sato <shinnya.sato@gmail.com>2022-02-09 14:35:38 +0900
commitbe334c15c2718a66378666358eaefabbda21bff9 (patch)
tree71e6b93d0d5df6c8fb5c13258b8511e0455a55c2 /src/id_table.c
parent03d7d92b4c401b553bc64da535b0621da67f6cc4 (diff)
downloadinpla-be334c15c2718a66378666358eaefabbda21bff9.tar.gz
inpla-be334c15c2718a66378666358eaefabbda21bff9.zip
v0.7.2
Diffstat (limited to 'src/id_table.c')
-rw-r--r--src/id_table.c88
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) {