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_CSTR(v) __FX_VALUE_CREATE(CSTR, v_cstr, 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) \
|
||||
((fx_value) { \
|
||||
.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;
|
||||
}
|
||||
|
||||
fx_comparable_class *comparable = fx_class_get_interface(
|
||||
c,
|
||||
FX_TYPE_COMPARABLE);
|
||||
fx_comparable_class *comparable
|
||||
= fx_class_get_interface(c, FX_TYPE_COMPARABLE);
|
||||
if (!comparable || !comparable->c_compare) {
|
||||
return FX_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
@@ -181,8 +180,8 @@ static fx_status value_change_string(fx_value *in, fx_value *out)
|
||||
return status;
|
||||
}
|
||||
|
||||
fx_string *result = fx_string_create_from_cstr(
|
||||
fx_stringstream_ptr(strm));
|
||||
fx_string *result
|
||||
= fx_string_create_from_cstr(fx_stringstream_ptr(strm));
|
||||
fx_stringstream_unref(strm);
|
||||
|
||||
if (!result) {
|
||||
@@ -212,9 +211,8 @@ fx_status fx_value_change_type(
|
||||
return FX_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
fx_convertible_class *convertible = fx_class_get_interface(
|
||||
c,
|
||||
FX_TYPE_CONVERTIBLE);
|
||||
fx_convertible_class *convertible
|
||||
= fx_class_get_interface(c, FX_TYPE_CONVERTIBLE);
|
||||
if (!convertible) {
|
||||
return FX_ERR_NOT_SUPPORTED;
|
||||
}
|
||||
@@ -375,17 +373,15 @@ fx_status fx_value_change_type(
|
||||
return FX_ERR_NOT_SUPPORTED; \
|
||||
} \
|
||||
\
|
||||
fx_convertible_class *convertible = fx_class_get_interface( \
|
||||
c, \
|
||||
FX_TYPE_CONVERTIBLE); \
|
||||
if (!convertible) { \
|
||||
fx_convertible_class *convertible \
|
||||
= fx_class_get_interface(c, FX_TYPE_CONVERTIBLE); \
|
||||
if (!convertible || !convertible->c_to_##fx_type_name) { \
|
||||
return FX_ERR_NOT_SUPPORTED; \
|
||||
} \
|
||||
\
|
||||
c_type_name result; \
|
||||
fx_status status = convertible->c_to_##fx_type_name( \
|
||||
v, \
|
||||
&result); \
|
||||
fx_status status \
|
||||
= convertible->c_to_##fx_type_name(v, &result); \
|
||||
if (!FX_OK(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; \
|
||||
} \
|
||||
\
|
||||
fx_operable_class *operable = fx_class_get_interface( \
|
||||
c, \
|
||||
FX_TYPE_OPERABLE); \
|
||||
fx_operable_class *operable \
|
||||
= fx_class_get_interface(c, FX_TYPE_OPERABLE); \
|
||||
if (!operable || !operable->op_##name) { \
|
||||
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; \
|
||||
} \
|
||||
\
|
||||
fx_operable_class *operable = fx_class_get_interface( \
|
||||
c, \
|
||||
FX_TYPE_OPERABLE); \
|
||||
fx_operable_class *operable \
|
||||
= fx_class_get_interface(c, FX_TYPE_OPERABLE); \
|
||||
if (!operable || !operable->op_##name) { \
|
||||
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; \
|
||||
} \
|
||||
\
|
||||
fx_operable_class *operable = fx_class_get_interface( \
|
||||
c, \
|
||||
FX_TYPE_OPERABLE); \
|
||||
fx_operable_class *operable \
|
||||
= fx_class_get_interface(c, FX_TYPE_OPERABLE); \
|
||||
if (!operable || !operable->op_##name) { \
|
||||
return FX_ERR_NOT_SUPPORTED; \
|
||||
} \
|
||||
|
||||
Reference in New Issue
Block a user