]> xenbits.xensource.com Git - libvirt.git/commitdiff
apibuild.py: Handle enum comments properly
authorMichal Privoznik <mprivozn@redhat.com>
Sat, 22 Jul 2017 06:05:12 +0000 (08:05 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 24 Jul 2017 10:03:33 +0000 (12:03 +0200)
After f4cb85c6aff7c1d90 we only have two options for placing enum
values descriptions. It's either:

    typedef enum {
        /* Some long description. Therefore it's placed before
         * the value. */
        VIR_ENUM_A_VAL = 1,
    } virEnumA;

or:

    typedef enum {
        VIR_ENUM_B_VAL = 1, /* Some short description */
    } virEnumB;

However, our apibuild.py script is not able to deal with the
former one. It messes up comments. To fix this couple of things
needs to be done:

a) DO NOT reset self.comment in parseEnumBlock(). This is a
result from our tokenizer. Upon calling token() if it finds a
comment block it stores it in self.comment and returns the next
token (which is not comment). Therefore, if we reset self.comment
we might lose the first comment in the enum block.

b) we need a variable to track if the current enum block uses
value descriptions before or after values. That is if it's type
virEnumA or virEnumB. Depending on that, it we're dealing with
virEnumA type and the current token is a comma ',' we can add the
value into the list as we already have everything needed:
comment, name and value.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
docs/apibuild.py

index 47f340c7d82b520d4129211fd6708654d422a584..87e81f5c3873a7032e99a07ff005780f0b2669d5 100755 (executable)
@@ -1365,9 +1365,9 @@ class CParser:
     def parseEnumBlock(self, token):
         self.enums = []
         name = None
-        self.comment = None
         comment = ""
         value = "-1"
+        commentsBeforeVal = self.comment is not None
         while token is not None:
             if token[0] == "sep" and token[1] == "{":
                 token = self.token()
@@ -1408,6 +1408,10 @@ class CParser:
                         self.warning("Failed to compute value of enum %s" % (name))
                         value=""
                 if token[0] == "sep" and token[1] == ",":
+                    if commentsBeforeVal:
+                        self.cleanupComment()
+                        self.enums.append((name, value, self.comment))
+                        name = comment = self.comment = None
                     token = self.token()
             else:
                 token = self.token()
@@ -1652,6 +1656,8 @@ class CParser:
             self.enums = []
             token = self.token()
             if token is not None and token[0] == "sep" and token[1] == "{":
+                # drop comments before the enum block
+                self.comment = None
                 token = self.token()
                 token = self.parseEnumBlock(token)
             else: