[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl ann
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations |
Date: |
Fri, 05 Oct 2012 17:07:46 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120911 Thunderbird/15.0.1 |
Il 04/10/2012 19:33, Michael Roth ha scritto:
> Signed-off-by: Michael Roth <address@hidden>
> ---
> qidl.h | 113
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 113 insertions(+)
> create mode 100644 qidl.h
>
> diff --git a/qidl.h b/qidl.h
> new file mode 100644
> index 0000000..eae0202
> --- /dev/null
> +++ b/qidl.h
> @@ -0,0 +1,113 @@
> +/*
> + * QEMU IDL Macros/stubs
> + *
> + * See docs/qidl.txt for usage information.
> + *
> + * Copyright IBM, Corp. 2012
> + *
> + * Authors:
> + * Michael Roth <address@hidden>
> + *
> + * This work is licensed under the terms of the GNU GPLv2 or later.
> + * See the COPYING file in the top-level directory.
> + *
> + */
> +
> +#ifndef QIDL_H
> +#define QIDL_H
> +
> +#include <glib.h>
> +#include "qapi/qapi-visit-core.h"
> +#include "qemu/object.h"
> +#include "hw/qdev-properties.h"
> +
> +#ifdef QIDL_GEN
> +
> +/* we pass the code through the preprocessor with QIDL_GEN defined to parse
> + * structures as they'd appear after preprocessing, and use the following
> + * definitions mostly to re-insert the initial macros/annotations so they
> + * stick around for the parser to process
> + */
> +#define QIDL(...) QIDL(__VA_ARGS__)
> +#define QIDL_START(name, ...) QIDL_START(name, ##__VA_ARGS__)
> +
> +#define QIDL_VISIT_TYPE(name, v, s, f, e)
> +#define QIDL_SCHEMA_ADD_LINK(name, obj, path, errp)
> +#define QIDL_PROPERTIES(name)
Ok, a few questions...
Why do you need these to expand to nothing in the QIDL_GEN case?
> +#define QIDL_DECLARE(name, ...) \
Can QIDL_DECLARE replace QIDL_ENABLED as the magic detection string for
qidl compilation?
> + QIDL_START(name, ##__VA_ARGS__) \
> + struct name
> +
> +#else /* !QIDL_GEN */
> +
> +#define QIDL(...)
> +#ifdef QIDL_ENABLED
> +#define QIDL_START(name, ...) \
> + static struct { \
> + void (*visitor)(Visitor *, struct name **, const char *, Error **); \
> + const char *schema_json_text; \
> + Object *schema_obj; \
> + Property *properties; \
> + } qidl_data_##name;
> +#else
> +#define QIDL_START(name, ...)
> +#endif
> +
> +#define QIDL_DECLARE(name, ...) \
> + QIDL_START(name, ##__VA_ARGS__) \
> + struct name
This is the same definition as in the QIDL_GEN case. Please include it
just once.
> +#define QIDL_VISIT_TYPE(name, v, s, f, e) \
> + g_assert(qidl_data_##name.visitor); \
> + qidl_data_##name.visitor(v, s, NULL, e)
> +
> +#define QIDL_SCHEMA_ADD_LINK(name, obj, path, errp) \
> + g_assert(qidl_data_##name.schema_obj); \
> + object_property_add_link(obj, path, "container", \
> + &qidl_data_##name.schema_obj, errp)
Where will QIDL_SCHEMA_ADD_LINK be used?
> +#define QIDL_PROPERTIES(name) \
> + qidl_data_##name.properties
> +
> +#endif /* QIDL_GEN */
> +
> +/* must be "called" in any C files that make use of QIDL-generated code */
> +#define QIDL_ENABLE()
> +
> +/* QIDL annotations/markers
> + *
> + * q_immutable: state is fully restorable via device
> + * [re-]initialization/realization
> + *
> + * q_derived: state can be fully reconstructed from other fields (and will
> be,
> + * via [re-]initialization of the device or a separate hook)
> + *
> + * q_broken: state should (or possibly should) be saved, but isn't. mostly
> an aid
> + * for device developers having issues with serialization of a particular
> + * field, committed code should contain these except in special
> circumstances
> + *
> + * q_optional: <field> should only be serialized if the field by the name of
> + * has_<field> is true
> + *
> + * q_elsewhere: state should be serialized, but is done so elsewhere (for
> + * instance, by another device with a pointer to the same data)
> + *
> + * q_size(field): for static/dynamically-allocated arrays. specifies the
> field
> + * in the structure containing the number of elements that should be
> + * serialized. if argument is wrapped in parenthesis it is instead
> interpreted
> + * as an expression that should be invaluated to determine the size.
> + *
> + * q_property(<property name> [, <default value>]): specifies that field is a
> + * qdev-style property. all properties of the struct are then accessible
> via
> + * QIDL_PROPERTIES(<device name>) macro.
> + */
> +
> +#define q_immutable QIDL(immutable)
> +#define q_derived QIDL(derived)
> +#define q_broken QIDL(broken)
> +#define q_optional QIDL(optional)
> +#define q_elsewhere QIDL(elsewhere)
> +#define q_size(...) QIDL(size_is, ##__VA_ARGS__)
> +#define q_property(name, ...) QIDL(property, name, ##__VA_ARGS__)
> +
> +#endif
>
- [Qemu-devel] [PATCH v3 12/22] qapi: add open-coded visitor for struct tm types, (continued)
- [Qemu-devel] [PATCH v3 12/22] qapi: add open-coded visitor for struct tm types, Michael Roth, 2012/10/04
- [Qemu-devel] [PATCH v3 07/22] qapi: qapi_visit.py, support for visiting non-pointer/embedded structs, Michael Roth, 2012/10/04
- [Qemu-devel] [PATCH v3 11/22] qapi: qapi.py, make json parser more robust, Michael Roth, 2012/10/04
- [Qemu-devel] [PATCH v3 15/22] module additions for schema registration, Michael Roth, 2012/10/04
- [Qemu-devel] [PATCH v3 18/22] qidl: add lexer library (based on QC parser), Michael Roth, 2012/10/04
- [Qemu-devel] [PATCH v3 17/22] qidl: add documentation, Michael Roth, 2012/10/04
- [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Michael Roth, 2012/10/04
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Paolo Bonzini, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations,
Paolo Bonzini <=
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Michael Roth, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Paolo Bonzini, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Michael Roth, 2012/10/05
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Paolo Bonzini, 2012/10/15
- Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations, Michael Roth, 2012/10/15
[Qemu-devel] [PATCH v3 22/22] qidl: unit tests and build infrastructure, Michael Roth, 2012/10/04