#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