WONKY



LOG | FILES | OVERVIEW


#ifndef WONKY_VALUE_H
#define WONKY_VALUE_H WONKY_VALUE_H
#include <value.hh>
#include <object.h>
#include <constant.h>
#include <common.h>

struct Expression_Value
{
	enum Expression_Value_Type type;
};

struct Expression_Value_LValue
{
	enum Expression_Value_Type type;
	struct Object *object;
	char is_modifiable;
};
struct Expression_Value_Constant
{
	enum Expression_Value_Type type;
	struct Constant *constant;
};
struct Expression_Value_RValue
{
	enum Expression_Value_Type type;
	struct Object *temp_object;
};
struct Expression_Value_Function_Designator
{
	enum Expression_Value_Type type;
	struct Denoted_Function *function;
};
struct Expression_Value_Void
{
	enum Expression_Value_Type type;
	struct Type *void_type;
};


struct Expression_Value* get_expression_value_void(struct Translation_Data *translation_data);
struct Expression_Value* get_expression_value_lvalue(struct Object *object);
struct Expression_Value_Constant* get_expression_value_constant(struct Constant *constant);
struct Expression_Value* get_expression_value_rvalue(struct Object *temp_object);
struct Expression_Value* get_expression_value_function_designator(struct Denoted_Function *function);

struct Type* extract_expresion_value_type(struct Expression_Value *expression_value);
size_t get_expression_value_size(struct Expression_Value *expression_value);

char expression_value_is_modifiable(struct Expression_Value *expression_value);


void delete_expression_value(struct Expression_Value *expression_value);
void delete_expression_value_void(struct Expression_Value *void_expression_value);
void delete_expression_value_lvalue(struct Expression_Value_LValue *lvalue);
void delete_expression_value_constant(struct Expression_Value_Constant *constant_expression_value);
void delete_expression_value_rvalue(struct Expression_Value_RValue *temp_value);
void delete_expression_value_function_designator(struct Expression_Value_Function_Designator *function_designator);


#endif