Peter,

> On Jan 11, 2017, at 4:13 PM, Peter Hutterer <peter.hutte...@who-t.net> wrote:
> 
> This was already in the DTD but not supported by the scanner.
> 
> The request/event parsing have an additional check that "since" cannot be <
> interface version. This is missing here. For requests/events we can rely on
> the xml containing the required "since" attributes already. enums don't have
> those, so our default version of 1 for an enum introduced in interface version
>> 1 would trigger warnings about version running backwards.
> 
> This doesn't matter for the output, it's just warnings, hence why they're
> skipped here.
> 
> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net>

This addition of the struct entry `since` member, with corresponding generation
and testing are:

Reviewed-by: Yong Bakos <yba...@humanoriented.com>
Tested-by: Yong Bakos <yba...@humanoriented.com>

yong



> ---
> Changes to v1:
> - sync test-scanner data files with the new output
> 
> src/scanner.c               | 28 ++++++++++++++++++++++++----
> tests/data/example-client.h |  9 +++++++++
> tests/data/example-server.h |  9 +++++++++
> tests/data/example.xml      |  2 ++
> 4 files changed, 44 insertions(+), 4 deletions(-)
> 
> diff --git a/src/scanner.c b/src/scanner.c
> index 5d66fa4..9c92316 100644
> --- a/src/scanner.c
> +++ b/src/scanner.c
> @@ -220,6 +220,7 @@ struct entry {
>       char *uppercase_name;
>       char *value;
>       char *summary;
> +     int since;
>       struct wl_list link;
> };
> 
> @@ -797,6 +798,8 @@ start_element(void *data, const char *element_name, const 
> char **atts)
>                       fail(&ctx->loc, "no entry name given");
> 
>               entry = create_entry(name, value);
> +             version = version_from_since(ctx, since);
> +             entry->since = version;
> 
>               if (summary)
>                       entry->summary = xstrdup(summary);
> @@ -1278,16 +1281,33 @@ emit_enumerations(struct interface *interface)
>               }
>               printf("enum %s_%s {\n", interface->name, e->name);
>               wl_list_for_each(entry, &e->entry_list, link) {
> -                     if (entry->summary)
> -                             printf("\t/**\n"
> -                                    "\t * %s\n"
> -                                    "\t */\n", entry->summary);
> +                     if (entry->summary || entry->since > 1) {
> +                             printf("\t/**\n");
> +                             if (entry->summary)
> +                                     printf("\t * %s\n", entry->summary);
> +                             if (entry->since > 1)
> +                                     printf("\t * @since %d\n", 
> entry->since);
> +                             printf("\t */\n");
> +                     }
>                       printf("\t%s_%s_%s = %s,\n",
>                              interface->uppercase_name,
>                              e->uppercase_name,
>                              entry->uppercase_name, entry->value);
>               }
>               printf("};\n");
> +
> +             wl_list_for_each(entry, &e->entry_list, link) {
> +                     if (entry->since == 1)
> +                            continue;
> +
> +                        printf("/**\n * @ingroup iface_%s\n */\n", 
> interface->name);
> +                        printf("#define %s_%s_%s_SINCE_VERSION %d\n",
> +                               interface->uppercase_name,
> +                               e->uppercase_name, entry->uppercase_name,
> +                               entry->since);
> +
> +             }
> +
>               printf("#endif /* %s_%s_ENUM */\n\n",
>                      interface->uppercase_name, e->uppercase_name);
>       }
> diff --git a/tests/data/example-client.h b/tests/data/example-client.h
> index 857aacf..b1d23f9 100644
> --- a/tests/data/example-client.h
> +++ b/tests/data/example-client.h
> @@ -1778,7 +1778,16 @@ enum wl_data_offer_error {
>        * offer doesn't accept this request
>        */
>       WL_DATA_OFFER_ERROR_INVALID_OFFER = 3,
> +     /**
> +      * test 'since' attribute parsing
> +      * @since 3
> +      */
> +     WL_DATA_OFFER_ERROR_TEST_SINCE = 4,
> };
> +/**
> + * @ingroup iface_wl_data_offer
> + */
> +#define WL_DATA_OFFER_ERROR_TEST_SINCE_SINCE_VERSION 3
> #endif /* WL_DATA_OFFER_ERROR_ENUM */
> 
> /**
> diff --git a/tests/data/example-server.h b/tests/data/example-server.h
> index f22f70f..f7190fd 100644
> --- a/tests/data/example-server.h
> +++ b/tests/data/example-server.h
> @@ -1469,7 +1469,16 @@ enum wl_data_offer_error {
>        * offer doesn't accept this request
>        */
>       WL_DATA_OFFER_ERROR_INVALID_OFFER = 3,
> +     /**
> +      * test 'since' attribute parsing
> +      * @since 3
> +      */
> +     WL_DATA_OFFER_ERROR_TEST_SINCE = 4,
> };
> +/**
> + * @ingroup iface_wl_data_offer
> + */
> +#define WL_DATA_OFFER_ERROR_TEST_SINCE_SINCE_VERSION 3
> #endif /* WL_DATA_OFFER_ERROR_ENUM */
> 
> /**
> diff --git a/tests/data/example.xml b/tests/data/example.xml
> index 22dcffd..0ad2577 100644
> --- a/tests/data/example.xml
> +++ b/tests/data/example.xml
> @@ -427,6 +427,8 @@
>            summary="action argument has an invalid value"/>
>       <entry name="invalid_offer" value="3"
>            summary="offer doesn't accept this request"/>
> +      <entry name="test_since" value="4"
> +          summary="test 'since' attribute parsing" since="3"/>
>     </enum>
> 
>     <request name="accept">
> -- 
> 2.9.3
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/wayland-devel

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to