#ifndef AST_EXPRESSION_H #define AST_EXPRESSION_H #include "../bool.h" typedef enum { EXPRESSION_INTEGER, EXPRESSION_STRING, EXPRESSION_BOOLEAN } ExpressionTag; typedef struct { ExpressionTag tag; union { int integer; const char* string; bool boolean; }; } Expression; typedef enum { TYPE_EXPRESSION_BUILTIN, TYPE_EXPRESSION_ARRAY } TypeExpressionTag; /** * An expression that evaluates to a type. */ typedef struct TypeExpression TypeExpression; struct TypeExpression { /** @brief defines which entry in the union is valid */ TypeExpressionTag tag; union { /** @brief Evaluates to an array of the given type. */ struct { /** @brief A pointer to the type of the elements stored in the array. */ TypeExpression* array; } array; /** @brief Evaluates to a builtin integer type.*/ struct { /** * @brief The number of bits in the integer. * Typical values are 8, 16, 32, and 64. */ int bitSize; /** @brief `true` if the type is signed, `false` if it's unsigned. */ bool isSigned; } builtin; }; }; #endif