qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: kwolf@redhat.com, peter.maydell@linaro.org, aliguori@us.ibm.com,
	qemu-devel@nongnu.org, blauwirbel@gmail.com, eblake@redhat.com
Subject: Re: [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations
Date: Fri, 05 Oct 2012 17:07:46 +0200	[thread overview]
Message-ID: <506EF7C2.1030103@redhat.com> (raw)
In-Reply-To: <1349372021-31212-22-git-send-email-mdroth@linux.vnet.ibm.com>

Il 04/10/2012 19:33, Michael Roth ha scritto:
> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> ---
>  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    <mdroth@linux.vnet.ibm.com>
> + *
> + * 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
> 

  parent reply	other threads:[~2012-10-05 15:07 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-04 17:33 [Qemu-devel] [PATCH v3] Add infrastructure for QIDL-based device serialization Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 01/22] qapi: qapi-visit.py -> qapi_visit.py so we can import Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 02/22] qapi: qapi-types.py -> qapi_types.py Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 03/22] qapi: qapi-commands.py -> qapi_commands.py Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 04/22] qapi: qapi_visit.py, make code useable as module Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 05/22] qapi: qapi_visit.py, support arrays and complex qapi definitions Michael Roth
2012-10-05  8:11   ` Paolo Bonzini
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 06/22] qapi: qapi_visit.py, support generating static functions Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 07/22] qapi: qapi_visit.py, support for visiting non-pointer/embedded structs Michael Roth
2012-10-05  8:09   ` Paolo Bonzini
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 08/22] qapi: add visitor interfaces for C arrays Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 09/22] qapi: QmpOutputVisitor, implement array handling Michael Roth
2012-10-05  8:05   ` Paolo Bonzini
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 10/22] qapi: QmpInputVisitor, " Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 11/22] qapi: qapi.py, make json parser more robust Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 12/22] qapi: add open-coded visitor for struct tm types Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 13/22] qom-fuse: force single-threaded mode to avoid QMP races Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 14/22] qom-fuse: workaround for truncated properties > 4096 Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 15/22] module additions for schema registration Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 16/22] qdev: move Property-related declarations to qdev-properties.h Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 17/22] qidl: add documentation Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 18/22] qidl: add lexer library (based on QC parser) Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 19/22] qidl: add C parser " Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 20/22] qidl: add QAPI-based code generator Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 21/22] qidl: qidl.h, definitions for qidl annotations Michael Roth
2012-10-05  8:14   ` Paolo Bonzini
2012-10-05 14:50     ` Michael Roth
2012-10-05 15:07   ` Paolo Bonzini [this message]
2012-10-05 15:41     ` Michael Roth
2012-10-05 15:53       ` Paolo Bonzini
2012-10-05 16:47         ` Michael Roth
2012-10-15 13:37           ` Paolo Bonzini
2012-10-15 15:50             ` Michael Roth
2012-10-04 17:33 ` [Qemu-devel] [PATCH v3 22/22] qidl: unit tests and build infrastructure Michael Roth
2012-10-05  8:24   ` Paolo Bonzini
2012-10-12 21:39     ` Michael Roth
2012-10-13  7:12       ` Paolo Bonzini
2012-10-15  8:52       ` Kevin Wolf
2012-10-15 14:48         ` Michael Roth
2012-10-05  8:26 ` [Qemu-devel] [PATCH v3] Add infrastructure for QIDL-based device serialization Paolo Bonzini
2012-10-05 14:52   ` Michael Roth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=506EF7C2.1030103@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=blauwirbel@gmail.com \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).