46 lines
1.3 KiB
C
46 lines
1.3 KiB
C
|
|
#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;
|
||
|
|
}
|
||
|
|
}
|