ea55dedd07
- Split ast.h into granular headers in v0/ast/ - Split parser.c into modular implementation files in v0/parser/ - Move and rename parser tests to v0/parser/test_*.c - Update build system (include.mk) with modular sub-makefiles - Maintain v0/ast.h and v0/parser.h as umbrella headers
53 lines
1.2 KiB
C
53 lines
1.2 KiB
C
#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
|