ADD: user data value.
parent
47b44d3439
commit
c94bf181fd
|
@ -130,6 +130,16 @@ namespace grino
|
|||
return value;
|
||||
}
|
||||
|
||||
/*static*/
|
||||
std::shared_ptr<Value> Value::make_user_data(Loc const& loc,
|
||||
void* val)
|
||||
{
|
||||
auto value = std::make_shared<Value>(loc);
|
||||
value->m_type = TYPE_PROGRAM;
|
||||
value->m_user_data_val = val;
|
||||
return value;
|
||||
}
|
||||
|
||||
std::shared_ptr<Program> Value::as_program() const
|
||||
{
|
||||
return m_program_val;
|
||||
|
@ -152,6 +162,7 @@ namespace grino
|
|||
case TYPE_FUNCTION: return "<function>";
|
||||
case TYPE_REF: return "&" + std::to_string(*m_ref_val);
|
||||
case TYPE_PROGRAM: return "<program>";
|
||||
case TYPE_USER_DATA: return "<user data>";
|
||||
case TYPE_MODULE: return "<module " + m_module_val->name() + ">";
|
||||
case TYPE_ARRAY: {
|
||||
std::stringstream ss;
|
||||
|
@ -188,6 +199,7 @@ namespace grino
|
|||
case TYPE_REF: return *m_ref_val == *other.m_ref_val;
|
||||
case TYPE_PROGRAM: return false;
|
||||
case TYPE_MODULE: return false;
|
||||
case TYPE_USER_DATA: return m_user_data_val == other.m_user_data_val;
|
||||
|
||||
default:
|
||||
std::cerr << "cannot compare equality with value "
|
||||
|
|
|
@ -44,6 +44,9 @@ namespace grino
|
|||
static std::shared_ptr<Value> make_module(Loc const& loc,
|
||||
std::shared_ptr<Module> val);
|
||||
|
||||
static std::shared_ptr<Value> make_user_data(Loc const& loc,
|
||||
void* val);
|
||||
|
||||
explicit Value(Loc const& loc);
|
||||
virtual ~Value() = default;
|
||||
|
||||
|
@ -59,6 +62,7 @@ namespace grino
|
|||
val_array_t const& as_array() const { return *m_array_val; }
|
||||
std::string const& as_string() const { return *m_string_val; }
|
||||
std::shared_ptr<Module> as_module() const;
|
||||
void* as_user_data() const { return m_user_data_val; }
|
||||
|
||||
std::string string() const;
|
||||
bool equals(Value const& other) const;
|
||||
|
@ -75,6 +79,7 @@ namespace grino
|
|||
std::optional<val_array_t> m_array_val;
|
||||
std::optional<std::string> m_string_val;
|
||||
std::shared_ptr<Module> m_module_val;
|
||||
void* m_user_data_val = nullptr;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
G(TYPE_FLOAT), \
|
||||
G(TYPE_ARRAY), \
|
||||
G(TYPE_STRING), \
|
||||
G(TYPE_MODULE)
|
||||
G(TYPE_MODULE), \
|
||||
G(TYPE_USER_DATA)
|
||||
|
||||
|
||||
namespace grino
|
||||
|
|
Loading…
Reference in New Issue