64 lines
1.6 KiB
C
64 lines
1.6 KiB
C
|
|
#ifndef RAVA_TYPES_H
|
||
|
|
#define RAVA_TYPES_H
|
||
|
|
|
||
|
|
#include <stddef.h>
|
||
|
|
#include <stdbool.h>
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
RAVA_TYPE_VOID,
|
||
|
|
RAVA_TYPE_BOOLEAN,
|
||
|
|
RAVA_TYPE_BYTE,
|
||
|
|
RAVA_TYPE_SHORT,
|
||
|
|
RAVA_TYPE_INT,
|
||
|
|
RAVA_TYPE_LONG,
|
||
|
|
RAVA_TYPE_CHAR,
|
||
|
|
RAVA_TYPE_FLOAT,
|
||
|
|
RAVA_TYPE_DOUBLE,
|
||
|
|
RAVA_TYPE_CLASS,
|
||
|
|
RAVA_TYPE_INTERFACE,
|
||
|
|
RAVA_TYPE_ARRAY,
|
||
|
|
RAVA_TYPE_NULL,
|
||
|
|
RAVA_TYPE_UNKNOWN
|
||
|
|
} RavaTypeKind_e;
|
||
|
|
|
||
|
|
typedef struct RavaType_t RavaType_t;
|
||
|
|
|
||
|
|
struct RavaType_t {
|
||
|
|
RavaTypeKind_e kind;
|
||
|
|
char *name;
|
||
|
|
|
||
|
|
union {
|
||
|
|
struct {
|
||
|
|
RavaType_t *element_type;
|
||
|
|
int dimensions;
|
||
|
|
} array;
|
||
|
|
|
||
|
|
struct {
|
||
|
|
char *class_name;
|
||
|
|
} class_type;
|
||
|
|
} data;
|
||
|
|
};
|
||
|
|
|
||
|
|
RavaType_t* rava_type_create_primitive(RavaTypeKind_e kind);
|
||
|
|
RavaType_t* rava_type_create_class(const char *class_name);
|
||
|
|
RavaType_t* rava_type_create_array(RavaType_t *element_type, int dimensions);
|
||
|
|
void rava_type_destroy(RavaType_t *type);
|
||
|
|
|
||
|
|
RavaType_t* rava_type_from_name(const char *type_name);
|
||
|
|
bool rava_type_is_primitive(RavaType_t *type);
|
||
|
|
bool rava_type_is_numeric(RavaType_t *type);
|
||
|
|
bool rava_type_is_integral(RavaType_t *type);
|
||
|
|
bool rava_type_is_floating(RavaType_t *type);
|
||
|
|
bool rava_type_is_reference(RavaType_t *type);
|
||
|
|
|
||
|
|
bool rava_type_equals(RavaType_t *a, RavaType_t *b);
|
||
|
|
bool rava_type_is_assignable_to(RavaType_t *from, RavaType_t *to);
|
||
|
|
bool rava_type_is_castable_to(RavaType_t *from, RavaType_t *to);
|
||
|
|
|
||
|
|
RavaType_t* rava_type_binary_result(RavaType_t *left, RavaType_t *right);
|
||
|
|
RavaType_t* rava_type_unary_result(RavaType_t *operand);
|
||
|
|
|
||
|
|
const char* rava_type_to_string(RavaType_t *type);
|
||
|
|
|
||
|
|
#endif
|