#ifndef SOLSLITERAL_H #define SOLSLITERAL_H #include #include #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