qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH RFC 13/21] qapi: Record 'include' directives in


From: Marc-Andre Lureau
Subject: Re: [Qemu-devel] [PATCH RFC 13/21] qapi: Record 'include' directives in parse tree
Date: Mon, 5 Feb 2018 14:45:31 +0100

On Fri, Feb 2, 2018 at 2:03 PM, Markus Armbruster <address@hidden> wrote:
> The parse tree is a list of expressions.  Except include expressions
> currently get replaced by the included file's parse tree.
>
> Instead of throwing away the include expression, keep it with the file
> name expanded so you don't have to track the including file's
> directory to make sense of it.
>
> A future commit will put this include expression to use.
>
> Signed-off-by: Markus Armbruster <address@hidden>

Reviewed-by: Marc-André Lureau <address@hidden>


> ---
>  scripts/qapi/common.py | 21 +++++++++++++++++----
>  1 file changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 7a327bfe9f..d5b93e7381 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -286,8 +286,11 @@ class QAPISchemaParser(object):
>                  if not isinstance(include, str):
>                      raise QAPISemError(info,
>                                         "Value of 'include' must be a string")
> -                exprs_include = self._include(include, info,
> -                                              os.path.dirname(self.fname),
> +                incl_fname = os.path.join(os.path.dirname(self.fname),
> +                                          include)
> +                self.exprs.append({'expr': {'include': incl_fname},
> +                                   'info': info})
> +                exprs_include = self._include(include, info, incl_fname,
>                                                previously_included)
>                  if exprs_include:
>                      self.exprs.extend(exprs_include.exprs)
> @@ -322,8 +325,7 @@ class QAPISchemaParser(object):
>                  "Documentation for '%s' is not followed by the definition"
>                  % doc.symbol)
>
> -    def _include(self, include, info, base_dir, previously_included):
> -        incl_fname = os.path.join(base_dir, include)
> +    def _include(self, include, info, incl_fname, previously_included):
>          incl_abs_fname = os.path.abspath(incl_fname)
>          # catch inclusion cycle
>          inf = info
> @@ -889,6 +891,9 @@ def check_exprs(exprs):
>          info = expr_elem['info']
>          doc = expr_elem.get('doc')
>
> +        if 'include' in expr:
> +            continue
> +
>          if not doc and doc_required:
>              raise QAPISemError(info,
>                                 "Expression missing documentation comment")
> @@ -927,6 +932,9 @@ def check_exprs(exprs):
>
>      # Try again for hidden UnionKind enum
>      for expr_elem in exprs:
> +        if 'include' in expr:
> +            continue
> +
>          expr = expr_elem['expr']
>          if 'union' in expr and not discriminator_find_enum_define(expr):
>              name = '%sKind' % expr['union']
> @@ -939,6 +947,9 @@ def check_exprs(exprs):
>
>      # Validate that exprs make sense
>      for expr_elem in exprs:
> +        if 'include' in expr:
> +            continue
> +
>          expr = expr_elem['expr']
>          info = expr_elem['info']
>          doc = expr_elem.get('doc')
> @@ -1663,6 +1674,8 @@ class QAPISchema(object):
>                  self._def_command(expr, info, doc)
>              elif 'event' in expr:
>                  self._def_event(expr, info, doc)
> +            elif 'include' in expr:
> +                pass
>              else:
>                  assert False
>
> --
> 2.13.6
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]