#include "../../include/ground.h" char* _GroundStringifyArg(GroundArg* arg) { if (arg->type == GroundArg_Value) { return Ground.Stringify.Value(&arg->as.value); } else { char* buf = malloc(strlen(arg->as.ref->string) + 2); // add 2 for sigil + null byte if (buf == NULL) { Ground.Flags.error = true; Ground.Log.Error("malloc failed in Ground.Stringify.Arg"); return NULL; } switch (arg->type) { case GroundArg_ValueRef: { buf[0] = '$'; break; } case GroundArg_DirectRef: { buf[0] = '&'; break; } case GroundArg_LineRef: { buf[0] = '%'; break; } case GroundArg_Label: { buf[0] = '@'; break; } case GroundArg_FunctionRef: { buf[0] = '!'; break; } case GroundArg_TypeRef: { buf[0] = '-'; break; } case GroundArg_Value: { break; } } memcpy(buf + 1, arg->as.ref->string, strlen(arg->as.ref->string) + 1); return buf; } }