Initial commit
This commit is contained in:
90
src/types.c
Normal file
90
src/types.c
Normal file
@@ -0,0 +1,90 @@
|
||||
#include "types.h"
|
||||
|
||||
GroundValue createIntGroundValue(int64_t in) {
|
||||
GroundValue gv;
|
||||
gv.data.intVal = in;
|
||||
gv.type = INT;
|
||||
return gv;
|
||||
}
|
||||
|
||||
GroundValue createDoubleGroundValue(double in) {
|
||||
GroundValue gv;
|
||||
gv.data.doubleVal = in;
|
||||
gv.type = DOUBLE;
|
||||
return gv;
|
||||
}
|
||||
|
||||
GroundValue createStringGroundValue(const char* in) {
|
||||
GroundValue gv;
|
||||
gv.data.stringVal = strdup(in);
|
||||
gv.type = STRING;
|
||||
return gv;
|
||||
}
|
||||
|
||||
GroundValue createCharGroundValue(char in) {
|
||||
GroundValue gv;
|
||||
gv.data.charVal = in;
|
||||
gv.type = CHAR;
|
||||
return gv;
|
||||
}
|
||||
|
||||
GroundValue createBoolGroundValue(bool in) {
|
||||
GroundValue gv;
|
||||
gv.data.boolVal = in;
|
||||
gv.type = BOOL;
|
||||
return gv;
|
||||
}
|
||||
|
||||
void freeGroundValue(GroundValue* gv) {
|
||||
if (gv->type == STRING && gv->data.stringVal != NULL) {
|
||||
free(gv->data.stringVal);
|
||||
}
|
||||
}
|
||||
|
||||
GroundArg createValueGroundArg(GroundValue value) {
|
||||
GroundArg ga;
|
||||
ga.value.value = value;
|
||||
ga.type = VALUE;
|
||||
return ga;
|
||||
}
|
||||
|
||||
GroundArg createRefGroundArg(GroundArgType type, const char* refname) {
|
||||
GroundArg ga;
|
||||
ga.value.refName = strdup(refname);
|
||||
ga.type = type;
|
||||
return ga;
|
||||
}
|
||||
|
||||
void freeGroundArg(GroundArg* ga) {
|
||||
if (ga->type == VALUE) {
|
||||
freeGroundValue(&ga->value.value);
|
||||
} else {
|
||||
free(ga->value.refName);
|
||||
}
|
||||
}
|
||||
|
||||
GroundInstruction createGroundInstruction(GroundInstType type) {
|
||||
GroundInstruction gi;
|
||||
gi.type = type;
|
||||
gi.args.args = NULL;
|
||||
gi.args.length = 0;
|
||||
return gi;
|
||||
}
|
||||
|
||||
void freeGroundInstruction(GroundInstruction* gi) {
|
||||
for (size_t i = 0; i < gi-> args.length; i++) {
|
||||
freeGroundArg(&gi->args.args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void addArgToInstruction(GroundInstruction* gi, GroundArg arg) {
|
||||
gi->args.length ++;
|
||||
GroundArg* newArgs = realloc(gi->args.args, gi->args.length * sizeof(GroundArg));
|
||||
if (newArgs == NULL) {
|
||||
perror("Failed to allocate memory for instruction argument");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
gi->args.args = newArgs;
|
||||
gi->args.args[gi->args.length - 1] = arg;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user