fx: improve fx_value reference management
This commit is contained in:
@@ -45,6 +45,11 @@
|
|||||||
#define FX_WSTR(v) __FX_VALUE_CREATE(WSTR, v_wstr, v)
|
#define FX_WSTR(v) __FX_VALUE_CREATE(WSTR, v_wstr, v)
|
||||||
#define FX_CSTR(v) __FX_VALUE_CREATE(CSTR, v_cstr, v)
|
#define FX_CSTR(v) __FX_VALUE_CREATE(CSTR, v_cstr, v)
|
||||||
#define FX_POINTER(v) __FX_VALUE_CREATE(POINTER, v_pointer, v)
|
#define FX_POINTER(v) __FX_VALUE_CREATE(POINTER, v_pointer, v)
|
||||||
|
#define FX_VALUE_OBJECT_REF(v) \
|
||||||
|
((fx_value) { \
|
||||||
|
.v_type = fx_object_query_type((fx_object *)v), \
|
||||||
|
.v_object = fx_object_ref((fx_object *)(v)), \
|
||||||
|
})
|
||||||
#define FX_VALUE_OBJECT(v) \
|
#define FX_VALUE_OBJECT(v) \
|
||||||
((fx_value) { \
|
((fx_value) { \
|
||||||
.v_type = fx_object_query_type((fx_object *)v), \
|
.v_type = fx_object_query_type((fx_object *)v), \
|
||||||
|
|||||||
+17
-24
@@ -126,9 +126,8 @@ int fx_value_compare(const fx_value *left, const fx_value *right)
|
|||||||
return FX_ERR_NOT_SUPPORTED;
|
return FX_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
fx_comparable_class *comparable = fx_class_get_interface(
|
fx_comparable_class *comparable
|
||||||
c,
|
= fx_class_get_interface(c, FX_TYPE_COMPARABLE);
|
||||||
FX_TYPE_COMPARABLE);
|
|
||||||
if (!comparable || !comparable->c_compare) {
|
if (!comparable || !comparable->c_compare) {
|
||||||
return FX_ERR_NOT_SUPPORTED;
|
return FX_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
@@ -181,8 +180,8 @@ static fx_status value_change_string(fx_value *in, fx_value *out)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
fx_string *result = fx_string_create_from_cstr(
|
fx_string *result
|
||||||
fx_stringstream_ptr(strm));
|
= fx_string_create_from_cstr(fx_stringstream_ptr(strm));
|
||||||
fx_stringstream_unref(strm);
|
fx_stringstream_unref(strm);
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
@@ -212,9 +211,8 @@ fx_status fx_value_change_type(
|
|||||||
return FX_ERR_NOT_SUPPORTED;
|
return FX_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
fx_convertible_class *convertible = fx_class_get_interface(
|
fx_convertible_class *convertible
|
||||||
c,
|
= fx_class_get_interface(c, FX_TYPE_CONVERTIBLE);
|
||||||
FX_TYPE_CONVERTIBLE);
|
|
||||||
if (!convertible) {
|
if (!convertible) {
|
||||||
return FX_ERR_NOT_SUPPORTED;
|
return FX_ERR_NOT_SUPPORTED;
|
||||||
}
|
}
|
||||||
@@ -375,17 +373,15 @@ fx_status fx_value_change_type(
|
|||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
fx_convertible_class *convertible = fx_class_get_interface( \
|
fx_convertible_class *convertible \
|
||||||
c, \
|
= fx_class_get_interface(c, FX_TYPE_CONVERTIBLE); \
|
||||||
FX_TYPE_CONVERTIBLE); \
|
if (!convertible || !convertible->c_to_##fx_type_name) { \
|
||||||
if (!convertible) { \
|
|
||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
c_type_name result; \
|
c_type_name result; \
|
||||||
fx_status status = convertible->c_to_##fx_type_name( \
|
fx_status status \
|
||||||
v, \
|
= convertible->c_to_##fx_type_name(v, &result); \
|
||||||
&result); \
|
|
||||||
if (!FX_OK(status)) { \
|
if (!FX_OK(status)) { \
|
||||||
return status; \
|
return status; \
|
||||||
} \
|
} \
|
||||||
@@ -657,9 +653,8 @@ FX_API fx_type_id fx_value_get_common_type(const fx_value *a, const fx_value *b)
|
|||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
fx_operable_class *operable = fx_class_get_interface( \
|
fx_operable_class *operable \
|
||||||
c, \
|
= fx_class_get_interface(c, FX_TYPE_OPERABLE); \
|
||||||
FX_TYPE_OPERABLE); \
|
|
||||||
if (!operable || !operable->op_##name) { \
|
if (!operable || !operable->op_##name) { \
|
||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
@@ -674,9 +669,8 @@ FX_API fx_type_id fx_value_get_common_type(const fx_value *a, const fx_value *b)
|
|||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
fx_operable_class *operable = fx_class_get_interface( \
|
fx_operable_class *operable \
|
||||||
c, \
|
= fx_class_get_interface(c, FX_TYPE_OPERABLE); \
|
||||||
FX_TYPE_OPERABLE); \
|
|
||||||
if (!operable || !operable->op_##name) { \
|
if (!operable || !operable->op_##name) { \
|
||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
@@ -695,9 +689,8 @@ FX_API fx_type_id fx_value_get_common_type(const fx_value *a, const fx_value *b)
|
|||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
fx_operable_class *operable = fx_class_get_interface( \
|
fx_operable_class *operable \
|
||||||
c, \
|
= fx_class_get_interface(c, FX_TYPE_OPERABLE); \
|
||||||
FX_TYPE_OPERABLE); \
|
|
||||||
if (!operable || !operable->op_##name) { \
|
if (!operable || !operable->op_##name) { \
|
||||||
return FX_ERR_NOT_SUPPORTED; \
|
return FX_ERR_NOT_SUPPORTED; \
|
||||||
} \
|
} \
|
||||||
|
|||||||
Reference in New Issue
Block a user