libabacus/include/parsetype.h

57 lines
1.4 KiB
C

#ifndef LIBABACUS_PARSETYPE_H
#define LIBABACUS_PARSETYPE_H
#include "result.h"
#include "vec.h"
/**
* The variant of the given parse type.
*/
enum libab_parsetype_variant_e {
PT_STRING,
PT_PARENT
};
/**
* A parse type.
* A parse type is a type as it was parsed, not
* resolved. Effectively, it doesn't have to be valid,
* or it can contain references to types whose adresses
* are not yet known. The parse type is recursive,
* with PT_STRING being the "base case", and PT_PARENT
* meaning an initialized children vector with the sub-parse types.
*/
struct libab_parsetype_s {
/**
* The variant of the given parse type.
*/
enum libab_parsetype_variant_e variant;
/**
* The name of the type that this parse type describes.
*/
char* name;
/**
* A vector of children that this parse type contains.
* The children are effectively type parameters.
*/
vec children;
};
typedef enum libab_parsetype_variant_e libab_parsetype_variant;
typedef struct libab_parsetype_s libab_parsetype;
/**
* Frees the data associated with this type, ignoring
* its children.
* @param type the type to free.
*/
void libab_parsetype_free(libab_parsetype* type);
/**
* Recursively frees the given parse type, calling free
* on every single type (including the one passed in).
* @param type the type to free.
*/
void libab_parsetype_free_recursive(libab_parsetype* type);
#endif