forked from ground/cground
Fix bugs
This commit is contained in:
25
src/types.c
25
src/types.c
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user