PR guile/17146 preparatory work.
authorDoug Evans <xdje42@gmail.com>
Sun, 27 Jul 2014 00:01:09 +0000 (17:01 -0700)
committerDoug Evans <xdje42@gmail.com>
Sun, 27 Jul 2014 00:03:04 +0000 (17:03 -0700)
* data-directory/Makefile.in (GUILE_FILES): Add support.scm.
* guile/lib/gdb/support.scm: New file.
* guile/guile.c (gdbscm_init_module_name): Change to "gdb".
* guile/lib/gdb.scm: Load gdb/init.scm as an include file.
All uses updated.
* guile/lib/gdb/init.scm (SCM_ARG1, SCM_ARG2): Moved to support.scm.
All uses updated.
(%assert-type): Ditto, and renamed to assert-type.
(%exception-print-style): Delete.

testsuite/
* gdb.guile/types-module.exp: Add tests for wrong type arguments.

13 files changed:
gdb/ChangeLog
gdb/data-directory/Makefile.in
gdb/guile/guile.c
gdb/guile/lib/gdb.scm
gdb/guile/lib/gdb/boot.scm
gdb/guile/lib/gdb/experimental.scm
gdb/guile/lib/gdb/init.scm
gdb/guile/lib/gdb/iterator.scm
gdb/guile/lib/gdb/printing.scm
gdb/guile/lib/gdb/support.scm [new file with mode: 0644]
gdb/guile/lib/gdb/types.scm
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.guile/types-module.exp

index a4cee807210b793b9cb0b7f9f355df8a3f67f066..3520177ebe7ab2a7845a03437717e2c6feceddbc 100644 (file)
@@ -1,3 +1,17 @@
+2014-07-26  Ludovic Courtès  <ludo@gnu.org>
+           Doug Evans  <xdje42@gmail.com>
+
+       PR guile/17146
+       * data-directory/Makefile.in (GUILE_FILES): Add support.scm.
+       * guile/lib/gdb/support.scm: New file.
+       * guile/guile.c (gdbscm_init_module_name): Change to "gdb".
+       * guile/lib/gdb.scm: Load gdb/init.scm as an include file.
+       All uses updated.
+       * guile/lib/gdb/init.scm (SCM_ARG1, SCM_ARG2): Moved to support.scm.
+       All uses updated.
+       (%assert-type): Ditto, and renamed to assert-type.
+       (%exception-print-style): Delete.
+
 2014-07-26  Doug Evans  <xdje42@gmail.com>
 
        PR build/17105
index c7497db5d6af6e769148cd2b7d4d5e570ba05423..b05dba554964fe2789e72fc97b0f659ca373ff8c 100644 (file)
@@ -87,6 +87,7 @@ GUILE_FILE_LIST = \
        gdb/init.scm \
        gdb/iterator.scm \
        gdb/printing.scm \
+       gdb/support.scm \
        gdb/types.scm
 
 @HAVE_GUILE_TRUE@GUILE_FILES = $(GUILE_FILE_LIST)
index 6bc078f779160d65a57f97cc3fcce038fbc61ba0..e81cb4c8ea806bda72fc7f20056c390ab43b47fb 100644 (file)
@@ -120,7 +120,7 @@ static SCM to_string_keyword;
 
 /* The name of the various modules (without the surrounding parens).  */
 const char gdbscm_module_name[] = "gdb";
-const char gdbscm_init_module_name[] = "gdb init";
+const char gdbscm_init_module_name[] = "gdb";
 
 /* The name of the bootstrap file.  */
 static const char boot_scm_filename[] = "boot.scm";
index 4fd4699b9399be55c990e3449f87318447a00c3c..552bfe9ed7c19095f67602cecc2c2af1a23b7daa 100644 (file)
 
 ;; Load the rest of the Scheme side.
 
-(use-modules ((gdb init)))
+(include "gdb/init.scm")
 
 ;; These come from other files, but they're really part of this module.
 
-(re-export
+(export
 
  ;; init.scm
  orig-input-port
index 8c0bb354df8a7914fc15c23e30a317c470766d72..6159354d2099d7c6afaf3adf62d95f76234109af 100644 (file)
@@ -26,5 +26,5 @@
 (load-from-path "gdb.scm")
 
 ;; Now that the Scheme side support is loaded, initialize it.
-(let ((init-proc (@@ (gdb init) %initialize!)))
+(let ((init-proc (@@ (gdb) %initialize!)))
   (init-proc))
index ffded84d01b89fb6cc6839f3ac62a3a3699aa309..9e5a53efb22f5d2c7996e6f4fcdb16c8af2b366e 100644 (file)
@@ -22,8 +22,7 @@
 ;; E.g., (gdb experimental ports), etc.
 
 (define-module (gdb experimental)
-  #:use-module (gdb)
-  #:use-module (gdb init))
+  #:use-module (gdb))
 
 ;; These are defined in C.
 (define-public with-gdb-output-to-port (@@ (gdb) %with-gdb-output-to-port))
index 7607d4967a7636b04bcdda734fefc36786dfce08..98888ed3ac989e2db2d531f505cce61dc8ab5890 100644 (file)
 ;; You should have received a copy of the GNU General Public License
 ;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gdb init)
-  #:use-module (gdb))
-
-(define-public SCM_ARG1 1)
-(define-public SCM_ARG2 2)
+;; This file is included by (gdb).
 
 ;; The original i/o ports.  In case the user wants them back.
 (define %orig-input-port #f)
 (define %orig-output-port #f)
 (define %orig-error-port #f)
 
-;; %exception-print-style is exported as "private" by gdb.
-(define %exception-print-style (@@ (gdb) %exception-print-style))
-
 ;; Keys for GDB-generated exceptions.
 ;; gdb:with-stack is handled separately.
 
 
          (%print-exception-message port frame key args)))))
 
-;; Internal utility to check the type of an argument, akin to SCM_ASSERT_TYPE.
-;; It's public so other gdb modules can use it.
-
-(define-public (%assert-type test-result arg pos func-name)
-  (if (not test-result)
-      (scm-error 'wrong-type-arg func-name
-                "Wrong type argument in position ~a: ~s"
-                (list pos arg) (list arg))))
-
 ;; Internal utility called during startup to initialize the Scheme side of
 ;; GDB+Guile.
 
index 9cfbe85b8d0fc158bb8c75b91d434153a98d32f1..274893149209a3466757d537aa64ff0b30b56c96 100644 (file)
 ;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gdb iterator)
-  #:use-module (gdb))
+  #:use-module (gdb)
+  #:use-module (gdb support))
 
 (define-public (make-list-iterator l)
   "Return a <gdb:iterator> object for a list."
-  (%assert-type (list? l) l SCM_ARG1 'make-list-iterator)
+  (assert-type (list? l) l SCM_ARG1 'make-list-iterator "list")
   (let ((next! (lambda (iter)
                 (let ((l (iterator-progress iter)))
                   (if (eq? l '())
index 2d1274f984dd5c83b683f1684475245101e63898..4e4fb9144082af8023710299a3d103e20304ed83 100644 (file)
                 pretty-printers set-pretty-printers!
                 objfile-pretty-printers set-objfile-pretty-printers!
                 progspace-pretty-printers set-progspace-pretty-printers!))
-  #:use-module (gdb init))
+  #:use-module (gdb support))
 
 (define-public (prepend-pretty-printer! obj matcher)
   "Add MATCHER to the beginning of the pretty-printer list for OBJ.
 If OBJ is #f, add MATCHER to the global list."
-  (%assert-type (pretty-printer? matcher) matcher SCM_ARG1
-               'prepend-pretty-printer!)
+  (assert-type (pretty-printer? matcher) matcher SCM_ARG1
+              'prepend-pretty-printer! "pretty-printer")
   (cond ((eq? obj #f)
         (set-pretty-printers! (cons matcher (pretty-printers))))
        ((objfile? obj)
@@ -39,13 +39,14 @@ If OBJ is #f, add MATCHER to the global list."
         (set-progspace-pretty-printers!
          obj (cons matcher (progspace-pretty-printers obj))))
        (else
-        (%assert-type #f obj SCM_ARG1 'prepend-pretty-printer!))))
+        (assert-type #f obj SCM_ARG1 'prepend-pretty-printer!
+                     "#f, objfile, or progspace"))))
 
 (define-public (append-pretty-printer! obj matcher)
   "Add MATCHER to the end of the pretty-printer list for OBJ.
 If OBJ is #f, add MATCHER to the global list."
-  (%assert-type (pretty-printer? matcher) matcher SCM_ARG1
-               'append-pretty-printer!)
+  (assert-type (pretty-printer? matcher) matcher SCM_ARG1
+              'append-pretty-printer! "pretty-printer")
   (cond ((eq? obj #f)
         (set-pretty-printers! (append! (pretty-printers) (list matcher))))
        ((objfile? obj)
@@ -55,4 +56,5 @@ If OBJ is #f, add MATCHER to the global list."
         (set-progspace-pretty-printers!
          obj (append! (progspace-pretty-printers obj) (list matcher))))
        (else
-        (%assert-type #f obj SCM_ARG1 'append-pretty-printer!))))
+        (assert-type #f obj SCM_ARG1 'append-pretty-printer!
+                     "#f, objfile, or progspace"))))
diff --git a/gdb/guile/lib/gdb/support.scm b/gdb/guile/lib/gdb/support.scm
new file mode 100644 (file)
index 0000000..dc6c20f
--- /dev/null
@@ -0,0 +1,33 @@
+;; Internal support routines.
+;;
+;; Copyright (C) 2014 Free Software Foundation, Inc.
+;;
+;; This file is part of GDB.
+;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gdb support))
+
+;; Symbolic values for the ARG parameter of assert-type.
+
+(define-public SCM_ARG1 1)
+(define-public SCM_ARG2 2)
+
+;; Utility to check the type of an argument, akin to SCM_ASSERT_TYPE.
+
+(define-public (assert-type test-result arg pos func-name expecting)
+  (if (not test-result)
+      (scm-error 'wrong-type-arg func-name
+                "Wrong type argument in position ~a (expecting ~a): ~s"
+                (list pos expecting arg) (list arg))))
index 31ea19276d37e2167fa9f6e4d15abbade5cd6754..296d17005b3c8625f2b705edc07ea7194639f101 100644 (file)
@@ -16,8 +16,8 @@
 
 (define-module (gdb types)
   #:use-module (gdb)
-  #:use-module (gdb init)
-  #:use-module (gdb iterator))
+  #:use-module (gdb iterator)
+  #:use-module (gdb support))
 
 (define-public (type-has-field-deep? type field-name)
   "Return #t if the type, including baseclasses, has the specified field.
@@ -50,8 +50,8 @@
       (set! type (type-target type)))
   (set! type (type-strip-typedefs type))
 
-  (%assert-type (memq (type-code type) (list TYPE_CODE_STRUCT TYPE_CODE_UNION))
-               type SCM_ARG1 'type-has-field-deep?)
+  (assert-type (memq (type-code type) (list TYPE_CODE_STRUCT TYPE_CODE_UNION))
+              type SCM_ARG1 'type-has-field-deep? "struct or union")
 
   (search-class type))
 
@@ -69,8 +69,8 @@
   Raises:
     wrong-type-arg: The type is not an enum."
 
-  (%assert-type (= (type-code enum-type) TYPE_CODE_ENUM)
-               enum-type SCM_ARG1 'make-enum-hashtable)
+  (assert-type (= (type-code enum-type) TYPE_CODE_ENUM)
+              enum-type SCM_ARG1 'make-enum-hashtable "enum")
   (let ((htab (make-hash-table)))
     (for-each (lambda (enum)
                (hash-set! htab (field-name enum) (field-enumval enum)))
index e088b9baf6821feeda9701f8104e8b9496dc8d09..f64371c9cff2c0862436e1d2fcdfa7954fdffe1e 100644 (file)
@@ -1,3 +1,9 @@
+2014-07-26  Ludovic Courtès  <ludo@gnu.org>
+           Doug Evans  <xdje42@gmail.com>
+
+       PR guile/17146
+       * gdb.guile/types-module.exp: Add tests for wrong type arguments.
+
 2014-07-25  Pedro Alves  <palves@redhat.com>
 
        * gdb.threads/signal-command-handle-nopass.c: New file.
index 8562f3ccc6812108f1f22ec7c2b056734311f60c..4dd5ee484db64e17ce14045c660484d8a53556fd 100644 (file)
@@ -43,8 +43,20 @@ gdb_test "guile (print (type-has-field? d \"base_member\"))" \
 gdb_test "guile (print (type-has-field-deep? d \"base_member\"))" \
     "= #t" "type-has-field-deep? member in baseclass"
 
+gdb_test "guile (print (type-has-field-deep? (lookup-type \"int\") \"base_member\"))" \
+    "ERROR: .*Wrong type argument in position 1 \\(expecting struct or union\\): #<gdb:type int>.*" \
+    "type-has-field-deep? from int"
+
 gdb_scm_test_silent_cmd "guile (define enum-htab (make-enum-hashtable (lookup-type \"enum_type\")))" \
     "create enum hash table"
 
 gdb_test "guile (print (hash-ref enum-htab \"B\"))" \
     "= 1" "verify make-enum-hashtable"
+
+gdb_test "guile (define bad-enum-htab (make-enum-hashtable #f))" \
+    "ERROR: .*Wrong type argument in position 1 \\(expecting gdb:type\\): #f.*" \
+    "make-enum-hashtable from #f"
+
+gdb_test "guile (define bad-enum-htab (make-enum-hashtable (lookup-type \"int\")))" \
+    "ERROR: .*Wrong type argument in position 1 \\(expecting enum\\): #<gdb:type int>.*" \
+    "make-enum-hashtable from int"