g-wrap-dev
[Top][All Lists]
Advanced

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

Reliance on GOOPS


From: Ludovic Courtès
Subject: Reliance on GOOPS
Date: Wed, 08 Aug 2007 18:33:23 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux)

Hi,

The attached patch ensures that "(use-modules (oop goops))" is only
generated when needed.

However, G-Wrap's runtime relies on GOOPS anyway, so this change
currently has no impact.

Do you think the GOOPS stuff that occurs in `gw_guile_runtime_init ()'
could be somehow deferred?  WCTs, for instance, do not require GOOPS,
unlike what the `if' statement seems to imply.  Perhaps there could be a
`gw_guile_runtime_init_with_goops ()' function that would only be
invoked by modules that need it?

Thanks,
Ludovic.

# Bazaar revision bundle v0.9
#
# message:
#   Don't use GOOPS in generated modules unless they really need it.
#   
#   * guile/g-wrap/guile.scm (generate-wrapset-scm): Only produce "(use-modules 
(oop goops))"
#     if the module has generics.
#   
# committer: Ludovic Courtes <address@hidden>
# date: Wed 2007-08-08 18:16:26.059000015 +0200

=== modified file guile/g-wrap/guile.scm
--- guile/g-wrap/guile.scm
+++ guile/g-wrap/guile.scm
@@ -867,7 +867,6 @@
       ";; Generated by G-Wrap-TNG: an experimental Guile C API-wrapper 
engine.\n"
       "\n"
       (format #f "(define-module ~S\n" guile-module)
-      (format #f "  #:use-module (oop goops)\n")
       (format #f "  #:use-module (g-wrap config)\n")
       ")\n"
       "\n"
@@ -884,7 +883,8 @@
 ;;      "(module-use! (module-public-interface (current-module)) 
(current-module))\n"
       )
      port)
-    (let ((gf-hash (make-hash-table 67)))
+    (let ((gf-hash       (make-hash-table 67))
+          (has-generics? #f))
       (fold-functions
        (lambda (func rest)
         (let ((gf-name (generic-name func)))
@@ -894,8 +894,17 @@
                    (not (uses-rti-for-function? wrapset func)))
               (let ((handle
                      (hashq-create-handle! gf-hash gf-name '())))
+                 (set! has-generics? #t)
                 (set-cdr! handle (cons func (cdr handle)))))))
        #f wrapset)
+
+      (if has-generics?
+          (begin
+            ;; The generated module requires GOOPS.
+            (newline port)
+            (write '(use-modules (oop goops)) port)
+            (newline port)))
+
       (hash-fold
        (lambda (gf funcs rest)
          (for-each

=== modified directory  // last-changed:address@hidden
... eqf
# revision id: address@hidden
# sha1: adad7522395f871f2ea1739a4f61ece6a1d27bba
# inventory sha1: 4c0192f0e32d5f0a7026572a03523773b7480961
# parent ids:
#   address@hidden
# base id: address@hidden
# properties:
#   branch-nick: g-wrap


reply via email to

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