[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v1 2/8] qom: Add property overloading
From: |
Peter Crosthwaite |
Subject: |
[Qemu-devel] [RFC PATCH v1 2/8] qom: Add property overloading |
Date: |
Sun, 14 Jun 2015 15:36:48 -0700 |
Add a mechanism to allow property name overloading. The property being
overloaded must explicitly allow it and the property types must match,
otherwise an error is returned as normal.
Once the property has been overloaded, set a flag indicating as such,
so operations that don't make sense for overloaded properties can raise
an error at their time of invocation.
Signed-off-by: Peter Crosthwaite <address@hidden>
---
include/qom/object.h | 2 ++
qom/object.c | 20 ++++++++++++--------
2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/include/qom/object.h b/include/qom/object.h
index 0505f20..9fae8a4 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -343,6 +343,8 @@ typedef struct ObjectProperty
ObjectPropertyAccessor *set;
ObjectPropertyResolve *resolve;
ObjectPropertyRelease *release;
+ bool allows_overloading;
+ bool overloaded;
void *opaque;
QTAILQ_ENTRY(ObjectProperty) node;
diff --git a/qom/object.c b/qom/object.c
index 2a65ab5..79172f7 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -728,7 +728,7 @@ object_property_add(Object *obj, const char *name, const
char *type,
ObjectPropertyRelease *release,
void *opaque, Error **errp)
{
- ObjectProperty *prop;
+ ObjectProperty *first, *prop;
size_t name_len = strlen(name);
if (name_len >= 3 && !memcmp(name + name_len - 3, "[*]", 4)) {
@@ -754,13 +754,12 @@ object_property_add(Object *obj, const char *name, const
char *type,
return ret;
}
- QTAILQ_FOREACH(prop, &obj->properties, node) {
- if (strcmp(prop->name, name) == 0) {
- error_setg(errp, "attempt to add duplicate property '%s'"
- " to object (type '%s')", name,
- object_get_typename(obj));
- return NULL;
- }
+ first = object_property_find(obj, name, NULL);
+
+ if (first && (!first->allows_overloading || strcmp(type, first->type))) {
+ error_setg(errp, "attempt to add duplicate property '%s'"
+ " to object (type '%s')", name, object_get_typename(obj));
+ return NULL;
}
prop = g_malloc0(sizeof(*prop));
@@ -773,6 +772,11 @@ object_property_add(Object *obj, const char *name, const
char *type,
prop->release = release;
prop->opaque = opaque;
+ if (first) {
+ first->overloaded = true;
+ prop->overloaded = true;
+ }
+
QTAILQ_INSERT_TAIL(&obj->properties, prop, node);
return prop;
}
--
2.4.3.3.g905f831
- [Qemu-devel] [RFC PATCH v1 0/8] QOM prop overloading + ARM MPCore CPUs, Peter Crosthwaite, 2015/06/14
- [Qemu-devel] [RFC PATCH v1 1/8] qom: Refactor array property code path, Peter Crosthwaite, 2015/06/14
- [Qemu-devel] [RFC PATCH v1 2/8] qom: Add property overloading,
Peter Crosthwaite <=
- [Qemu-devel] [RFC PATCH v1 3/8] qom: Implement overloaded property setters, Peter Crosthwaite, 2015/06/14
- [Qemu-devel] [RFC PATCH v1 4/8] qom: Delete all instances of an overloaded property, Peter Crosthwaite, 2015/06/14
- [Qemu-devel] [RFC PATCH v1 5/8] qom: Disallow getting/resolving an overloaded property, Peter Crosthwaite, 2015/06/14
- [Qemu-devel] [RFC PATCH v1 6/8] qom: Enable overloading of Alias properties, Peter Crosthwaite, 2015/06/14
- [Qemu-devel] [RFC PATCH v1 7/8] arm: realview: Factor out CPU property setters, Peter Crosthwaite, 2015/06/14
- [Qemu-devel] [RFC PATCH v1 8/8] arm: axxmpcore: Add CPUs to MPCore, Peter Crosthwaite, 2015/06/14
- Re: [Qemu-devel] [RFC PATCH v1 0/8] QOM prop overloading + ARM MPCore CPUs, Liviu Ionescu, 2015/06/15
- Re: [Qemu-devel] [RFC PATCH v1 0/8] QOM prop overloading + ARM MPCore CPUs, Alistair Francis, 2015/06/18