]> xenbits.xensource.com Git - libvirt.git/commitdiff
hyperv: add inheritance to the WMI generator
authorMatt Coleman <mcoleman@datto.com>
Thu, 21 Jan 2021 18:50:43 +0000 (13:50 -0500)
committerLaine Stump <laine@redhat.com>
Fri, 22 Jan 2021 19:04:24 +0000 (14:04 -0500)
This enables casting subtypes to their parent.

Signed-off-by: Matt Coleman <matt@datto.com>
Reviewed-by: Laine Stump <laine@redhat.com>
scripts/hyperv_wmi_generator.py

index d72e5d8ca150e4406d2d1391630d07f818656e5f..e5e961d2dbe21a0b46d54cfc2f955e554ccb0782 100755 (executable)
@@ -221,10 +221,10 @@ def report_error(message):
 
 
 def parse_class(block, number):
-    # expected format: class <name>
+    # expected format: class <name> : <optional parent>
     header_items = block[0][1].split()
 
-    if len(header_items) != 2:
+    if len(header_items) not in [2, 4]:
         report_error("line %d: invalid block header" % (number))
 
     assert header_items[0] == "class"
@@ -234,7 +234,13 @@ def parse_class(block, number):
     if name in wmi_classes_by_name:
         report_error("class '%s' has already been defined" % name)
 
-    properties = []
+    if len(header_items) == 4:
+        parent_class = header_items[3]
+        if parent_class not in wmi_classes_by_name:
+            report_error("nonexistent parent class specified: %s" % parent_class)
+        properties = wmi_classes_by_name[parent_class].properties.copy()
+    else:
+        properties = []
 
     for line in block[1:]:
         # expected format: <type> <name>