[Libguestfs] Code snippet to work out which RStruct/RStructList structs are used and how

Jim Meyering jim at meyering.net
Fri Aug 14 17:46:25 UTC 2009


Richard W.M. Jones wrote:
> Subject: [PATCH] Work out which RStruct/RStructList structs are really used, and how.

Thanks.  That was just what I needed.
When I apply that along with the following two patches,
the four unused functions are no longer emitted.

>From 71b6bb79fbae53f1f4f2465e693a2c3e9f1a6faa Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Fri, 14 Aug 2009 19:12:18 +0200
Subject: [PATCH libguestfs 1/2] generator.ml: factor out a function

* src/generator.ml (emit_print_list_function): New function.
---
 src/generator.ml |   28 ++++++++++++++++------------
 1 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/generator.ml b/src/generator.ml
index b76f502..3dc2ae5 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -7445,6 +7445,21 @@ py_guestfs_close (PyObject *self, PyObject *args)

 ";

+  let emit_print_list_function typ =
+    pr "static PyObject *\n";
+    pr "put_%s_list (struct guestfs_%s_list *%ss)\n" typ typ typ;
+    pr "{\n";
+    pr "  PyObject *list;\n";
+    pr "  int i;\n";
+    pr "\n";
+    pr "  list = PyList_New (%ss->len);\n" typ;
+    pr "  for (i = 0; i < %ss->len; ++i)\n" typ;
+    pr "    PyList_SetItem (list, i, put_%s (&%ss->val[i]));\n" typ typ;
+    pr "  return list;\n";
+    pr "};\n";
+    pr "\n"
+  in
+
   (* Structures, turned into Python dictionaries. *)
   List.iter (
     fun (typ, cols) ->
@@ -7501,18 +7516,7 @@ py_guestfs_close (PyObject *self, PyObject *args)
       pr "};\n";
       pr "\n";

-      pr "static PyObject *\n";
-      pr "put_%s_list (struct guestfs_%s_list *%ss)\n" typ typ typ;
-      pr "{\n";
-      pr "  PyObject *list;\n";
-      pr "  int i;\n";
-      pr "\n";
-      pr "  list = PyList_New (%ss->len);\n" typ;
-      pr "  for (i = 0; i < %ss->len; ++i)\n" typ;
-      pr "    PyList_SetItem (list, i, put_%s (&%ss->val[i]));\n" typ typ;
-      pr "  return list;\n";
-      pr "};\n";
-      pr "\n"
+      emit_print_list_function typ
   ) structs;

   (* Python wrapper functions. *)
--
1.6.4.357.gfd68c


>From bf64b6fa512012e2a15fa5b40037218b5159d659 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering at redhat.com>
Date: Fri, 14 Aug 2009 19:33:35 +0200
Subject: [PATCH libguestfs 2/2] generator.ml: don't emit unused functions

* src/generator.ml: Use "rstructs_used" to emit definitions only for
put_TYPE_list functions that are used.
---
 src/generator.ml |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/src/generator.ml b/src/generator.ml
index 3dc2ae5..01a4436 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -7516,9 +7516,17 @@ py_guestfs_close (PyObject *self, PyObject *args)
       pr "};\n";
       pr "\n";

-      emit_print_list_function typ
   ) structs;

+  (* Emit a put_TYPE_list function definition only if that function is used. *)
+  List.iter (
+    function
+    | typ, (RStructListOnly | RStructAndList) ->
+        (* generate the function for typ *)
+        emit_print_list_function typ
+    | typ, _ -> () (* empty *)
+  ) rstructs_used;
+
   (* Python wrapper functions. *)
   List.iter (
     fun (name, style, _, _, _, _, _) ->
--
1.6.4.357.gfd68c




More information about the Libguestfs mailing list