Add initial implementation of types and values.

This commit is contained in:
2018-04-12 23:54:58 -07:00
parent d146b71e56
commit af87c6646d
5 changed files with 101 additions and 1 deletions

38
include/type.h Normal file
View File

@@ -0,0 +1,38 @@
#ifndef LIBABACUS_TYPE_H
#define LIBABACUS_TYPE_H
#include "ref_vec.h"
#include "basetype.h"
/**
* A type instance. This is created at runtime
* for every value that has a type, and represents an instance
* of a basetype with concrete (though possibly templated) parameters.
*/
struct libab_type_s {
/**
* The base type that this type is an instance of.
*/
libab_basetype* base;
/**
* The list of parameters this type holds.
*/
libab_ref_vec params;
};
typedef struct libab_type_s libab_type;
/**
* Initializes a given type with the given basetype.
* @param type the type to initialize.
* @param base the base type to use.
* @return the result of the initialization.
*/
libab_result libab_type_init(libab_type* type, libab_basetype* base);
/**
* Frees the memory allocated by the given type.
* @param type the type to free.
*/
void libab_type_free(libab_type* type);
#endif

37
include/value.h Normal file
View File

@@ -0,0 +1,37 @@
#ifndef LIBABACUS_VALUE_H
#define LIBABACUS_VALUE_H
#include "type.h"
#include "result.h"
/**
* A struct that represents a value.
*/
struct libab_value_s {
/**
* The type of the value.
*/
libab_ref type;
/**
* The data that is specific to this value.
*/
void* data;
};
typedef struct libab_value_s libab_value;
/**
* Initializes a new value with the given allocated memory for the data,
* and the given type.
* @param data the data for this value. It is freed when the value is released
* according to the free function of the base type.
* @param type the type of this value.
*/
void libab_value_init(libab_value* value, void* data, libab_ref* type);
/**
* Frees the given value.
* @param value the value to free.
*/
void libab_value_free(libab_value* value);
#endif