Add a parse type struct, used to hold type data as it is parsed.
This commit is contained in:
56
include/parsetype.h
Normal file
56
include/parsetype.h
Normal file
@@ -0,0 +1,56 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user