Struct and object printing
This commit is contained in:
43
src/types.c
43
src/types.c
@@ -149,8 +149,47 @@ void printGroundValue(GroundValue* gv) {
|
||||
printf("<function>");
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
printf("FIXME");
|
||||
case STRUCTVAL: {
|
||||
printf("<struct fields: { ");
|
||||
for (size_t i = 0; i < gv->data.structVal->size; i++) {
|
||||
if (i != 0) {
|
||||
printf(", ");
|
||||
}
|
||||
printf("%s: ", gv->data.structVal->fields[i].id);
|
||||
if (gv->data.structVal->fields[i].value.type == STRING) {
|
||||
printf("\"");
|
||||
printGroundValue(&gv->data.structVal->fields[i].value);
|
||||
printf("\"");
|
||||
} else {
|
||||
printGroundValue(&gv->data.structVal->fields[i].value);
|
||||
}
|
||||
}
|
||||
printf(" }>");
|
||||
break;
|
||||
}
|
||||
case CUSTOM: {
|
||||
printf("<object fields: { ");
|
||||
for (size_t i = 0; i < gv->customType->size; i++) {
|
||||
if (i != 0) {
|
||||
printf(", ");
|
||||
}
|
||||
printf("%s: ", gv->customType->fields[i].id);
|
||||
GroundObjectField* field = findField(*gv->data.customVal, gv->customType->fields[i].id);
|
||||
if (field == NULL) {
|
||||
printf("<missing>");
|
||||
} else {
|
||||
printGroundValue(&field->value);
|
||||
}
|
||||
}
|
||||
printf(" }>");
|
||||
break;
|
||||
}
|
||||
case ERROR: {
|
||||
printf("<error type: %s, what: %s>", gv->data.errorVal.type, gv->data.errorVal.what);
|
||||
break;
|
||||
}
|
||||
case NONE: {
|
||||
printf("<none>");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user