forked from solstice/solstice
47 lines
1.2 KiB
C
47 lines
1.2 KiB
C
#ifndef SOLSLITERAL_H
|
|
#define SOLSLITERAL_H
|
|
|
|
#include <inttypes.h>
|
|
#include <stdarg.h>
|
|
|
|
#include "../include/error.h"
|
|
#include "../include/nothing.h"
|
|
|
|
typedef char* charptr;
|
|
|
|
typedef enum SolsLiteralType {
|
|
SLT_INT, SLT_STRING, SLT_DOUBLE, SLT_BOOL, SLT_CHAR
|
|
} SolsLiteralType;
|
|
|
|
// Stores literal values which will be added to the Ground code.
|
|
// Not much explaining needed here.
|
|
typedef struct SolsLiteral {
|
|
SolsLiteralType type;
|
|
union {
|
|
int64_t intv;
|
|
char* stringv;
|
|
double doublev;
|
|
bool boolv;
|
|
char charv;
|
|
} as;
|
|
} SolsLiteral;
|
|
|
|
Result(SolsLiteral, charptr);
|
|
|
|
// Creates a SolsLiteral, based on the type provided.
|
|
// SolsLiteralType -> C type:
|
|
// SLT_INT -> int64_t
|
|
// SLT_STRING -> char*
|
|
// SLT_DOUBLE -> double
|
|
// SLT_BOOL -> bool
|
|
// SL_CHAR -> char
|
|
// An error will only be returned if there is an issue copying a provided char*.
|
|
// There is no way to detect incorrectly provided types, so ensure that the right type
|
|
// is provided!!!!
|
|
ResultType(SolsLiteral, charptr) createSolsLiteral(SolsLiteralType type, ...);
|
|
|
|
// Frees a SolsLiteral. Primarily concerned with freeing .as.stringv
|
|
void freeSolsLiteral(SolsLiteral* lit);
|
|
|
|
#endif
|