#ifndef __GRAVITY__TYPE_H #define __GRAVITY__TYPE_H #include "list.h" #include #include #include typedef struct GravityOpaqueType* GravityType; typedef enum { GravityIntTypeKind = 0, GravityFloatTypeKind, GravityPointerTypeKind, GravityFunctionTypeKind, } GravityTypeKind; typedef struct { GravityType* argTypes; size_t numArgs; GravityType returnType; } GravityFunctionType; typedef struct { uint8_t width; bool isSigned; } GravityIntType; struct GravityOpaqueType { GravityTypeKind typeKind; union { GravityFunctionType function; GravityIntType integer; }; }; GravityType gravityCreateFunctionType(int numArgs, GravityType* argTypes, GravityType returnType); GravityType gravityCreateIntegerType(uint8_t width, bool isSigned); GravityType gravityCreateType(void); #endif