forked from solstice/solstice
Friendship ended with C++, C is my new best friend
This commit is contained in:
46
src/lexer/SolsLiteral.h
Normal file
46
src/lexer/SolsLiteral.h
Normal file
@@ -0,0 +1,46 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user