This commit is contained in:
2025-11-24 10:15:53 +11:00
parent 251dd719b0
commit 51e9df75c3
6 changed files with 127 additions and 16 deletions

View File

@@ -142,8 +142,33 @@ void freeGroundInstruction(GroundInstruction* gi) {
for (size_t i = 0; i < gi-> args.length; i++) {
freeGroundArg(&gi->args.args[i]);
}
free(gi->args.args);
}
GroundInstruction copyGroundInstruction(const GroundInstruction* inst) {
GroundInstruction newInst;
newInst.type = inst->type;
newInst.args.length = inst->args.length;
if (inst->args.length > 0) {
newInst.args.args = malloc(inst->args.length * sizeof(GroundArg));
for (size_t i = 0; i < inst->args.length; i++) {
newInst.args.args[i].type = inst->args.args[i].type;
if (inst->args.args[i].type == VALUE) {
newInst.args.args[i].value.value = inst->args.args[i].value.value;
if (inst->args.args[i].value.value.type == STRING) {
newInst.args.args[i].value.value.data.stringVal = strdup(inst->args.args[i].value.value.data.stringVal);
}
} else {
newInst.args.args[i].value.refName = strdup(inst->args.args[i].value.refName);
}
}
} else {
newInst.args.args = NULL;
}
return newInst;
}
void addArgToInstruction(GroundInstruction* gi, GroundArg arg) {
gi->args.length ++;
GroundArg* newArgs = realloc(gi->args.args, gi->args.length * sizeof(GroundArg));