* cli/cli-cmds.c (source_script_with_search): Pass full path to
authorDoug Evans <dje@google.com>
Thu, 27 Oct 2011 15:46:11 +0000 (15:46 +0000)
committerDoug Evans <dje@google.com>
Thu, 27 Oct 2011 15:46:11 +0000 (15:46 +0000)
source_script_from_stream if it may have been found on the search path.
* python/py-auto-load.c (source_section_scripts): Pass full path to
source_python_script_for_objfile.
* python/python.c (source_python_script): Delete stream parameter.
All callers updated.
(source_python_script_for_objfile): Ditto.
* python/python-internal.h (source_python_script_for_objfile): Update.
* python/python.h (source_python_script): Update.

testsuite/
* gdb.python/python.exp: Test source -s.

gdb/ChangeLog
gdb/cli/cli-cmds.c
gdb/python/py-auto-load.c
gdb/python/python-internal.h
gdb/python/python.c
gdb/python/python.h
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/python.exp

index 456533228b9e9095f063dd55cd15be9de4cafebc..60be3817f1c3194089d5ff8f72fc8bb4c558a22e 100644 (file)
@@ -1,3 +1,15 @@
+2011-10-27  Doug Evans  <dje@google.com>
+
+       * cli/cli-cmds.c (source_script_with_search): Pass full path to
+       source_script_from_stream if it may have been found on the search path.
+       * python/py-auto-load.c (source_section_scripts): Pass full path to
+       source_python_script_for_objfile.
+       * python/python.c (source_python_script): Delete stream parameter.
+       All callers updated.
+       (source_python_script_for_objfile): Ditto.
+       * python/python-internal.h (source_python_script_for_objfile): Update.
+       * python/python.h (source_python_script): Update.
+
 2011-10-27  Tom Tromey  <tromey@redhat.com>
 
        * ada-lang.h (ada_start_decode_line_1, ada_finish_decode_line_1)
index 34a530af032f1d911df0840c520ad72e6ae03363..624d0de28574c9122da4a4cf8e44eeada8bf517a 100644 (file)
@@ -535,7 +535,9 @@ source_script_from_stream (FILE *stream, const char *file)
 
       TRY_CATCH (e, RETURN_MASK_ERROR)
        {
-         source_python_script (stream, file);
+          /* The python support reopens the file using python functions,
+             so there's no point in passing STREAM here.  */
+         source_python_script (file);
        }
       if (e.reason < 0)
        {
@@ -577,7 +579,7 @@ source_script_with_search (const char *file, int from_tty, int search_path)
 
   if (!find_and_open_script (file, search_path, &stream, &full_path))
     {
-      /* The script wasn't found, or was otherwise inaccessible.  
+      /* The script wasn't found, or was otherwise inaccessible.
          If the source command was invoked interactively, throw an
         error.  Otherwise (e.g. if it was invoked by a script),
         silently ignore the error.  */
@@ -588,7 +590,12 @@ source_script_with_search (const char *file, int from_tty, int search_path)
     }
 
   old_cleanups = make_cleanup (xfree, full_path);
-  source_script_from_stream (stream, file);
+  /* The python support reopens the file, so we need to pass full_path here
+     in case the file was found on the search path.  It's useful to do this
+     anyway so that error messages show the actual file used.  But only do
+     this if we (may have) used search_path, as printing the full path in
+     errors for the non-search case can be more noise than signal.  */
+  source_script_from_stream (stream, search_path ? full_path : file);
   do_cleanups (old_cleanups);
 }
 
index 75fa0411ad9daa68f88e92704091aee17584bc22..2a17ed00f32838d19b2050930d7daa895d99d72c 100644 (file)
@@ -312,7 +312,7 @@ Use `info auto-load-scripts [REGEXP]' to list them."),
        {
          /* If this file is not currently loaded, load it.  */
          if (! in_hash_table)
-           source_python_script_for_objfile (objfile, stream, file);
+           source_python_script_for_objfile (objfile, full_path);
          fclose (stream);
          free (full_path);
        }
@@ -431,7 +431,7 @@ auto_load_objfile_script (struct objfile *objfile, const char *suffix)
         It's highly unlikely that we'd ever load it twice,
         and these scripts are required to be idempotent under multiple
         loads anyway.  */
-      source_python_script_for_objfile (objfile, input, debugfile);
+      source_python_script_for_objfile (objfile, debugfile);
       fclose (input);
     }
 
index e593612b234495368e97ba88e3ad27663220cb13..ef39d5dfbe2c4d5726461a0570f1dabace243c35 100644 (file)
@@ -247,7 +247,7 @@ extern const struct language_defn *python_language;
 void gdbpy_print_stack (void);
 
 void source_python_script_for_objfile (struct objfile *objfile,
-                                      FILE *stream, const char *file);
+                                      const char *file);
 
 PyObject *python_string_to_unicode (PyObject *obj);
 char *unicode_to_target_string (PyObject *unicode_str);
index df8e3d5fde3df359f3d535d7e9c19da081d722f7..3a5a6b5b2dabe93182896ca71b93d253246730fa 100644 (file)
@@ -599,21 +599,18 @@ gdbpy_parse_and_eval (PyObject *self, PyObject *args)
   return value_to_value_object (result);
 }
 
-/* Read a file as Python code.  STREAM is the input file; FILE is the
-   name of the file.
-   STREAM is not closed, that is the caller's responsibility.  */
+/* Read a file as Python code.
+   FILE is the name of the file.
+   This does not throw any errors.  If an exception occurs python will print
+   the traceback and clear the error indicator.  */
 
 void
-source_python_script (FILE *stream, const char *file)
+source_python_script (const char *file)
 {
   struct cleanup *cleanup;
 
   cleanup = ensure_python_env (get_current_arch (), current_language);
-
-  /* Note: If an exception occurs python will print the traceback and
-     clear the error indicator.  */
   python_run_simple_file (file);
-
   do_cleanups (cleanup);
 }
 
@@ -941,15 +938,12 @@ gdbpy_progspaces (PyObject *unused1, PyObject *unused2)
    source_python_script_for_objfile; it is NULL at other times.  */
 static struct objfile *gdbpy_current_objfile;
 
-/* Set the current objfile to OBJFILE and then read STREAM,FILE as
-   Python code.
-   STREAM is left open, it is up to the caller to close it.
-   If an exception occurs python will print the traceback and
-   clear the error indicator.  */
+/* Set the current objfile to OBJFILE and then read FILE as Python code.
+   This does not throw any errors.  If an exception occurs python will print
+   the traceback and clear the error indicator.  */
 
 void
-source_python_script_for_objfile (struct objfile *objfile,
-                                 FILE *stream, const char *file)
+source_python_script_for_objfile (struct objfile *objfile, const char *file)
 {
   struct cleanup *cleanups;
 
@@ -1032,7 +1026,7 @@ eval_python_from_control_command (struct command_line *cmd)
 }
 
 void
-source_python_script (FILE *stream, const char *file)
+source_python_script (const char *file)
 {
   throw_error (UNSUPPORTED_ERROR,
               _("Python scripting is not supported in this copy of GDB."));
index ce0eb351f739b487e4c768f77ae7cbd90a2b0a89..ae55cc2cd654befdec25b831e97feb7d879b7304 100644 (file)
@@ -30,7 +30,7 @@ extern void finish_python_initialization (void);
 
 void eval_python_from_control_command (struct command_line *);
 
-void source_python_script (FILE *stream, const char *file);
+void source_python_script (const char *file);
 
 int apply_val_pretty_printer (struct type *type, const gdb_byte *valaddr,
                              int embedded_offset, CORE_ADDR address,
index 00d21610b00b0ca6246680cfece530677ac01c5c..5bb77c2edf4274316820c0da127bb837c68a6fbd 100644 (file)
@@ -1,12 +1,16 @@
+2011-10-27  Doug Evans  <dje@google.com>
+
+       * gdb.python/python.exp: Test source -s.
+
 2011-10-26  Paul Koning  <paul_koning@dell.com>
 
        * gdb.python/lib-types.cc (struct A): New structure.
        * gdb.python/lib-types.exp (deepitems): New tests.
-       
+
 2011-10-25  Paul Koning  <paul_koning@dell.com>
 
        PR python/13327
-       
+
        * gdb.python/py-value.exp: Add testcases for is_lazy attribute,
        fetch_lazy method.
 
index ea8a4d56ca640c06329d38ff2f9c568522bc6a19..94d6d0da26be25e1afdbeffc14080de46b7a7981 100644 (file)
@@ -77,6 +77,8 @@ gdb_py_test_multiple "indented multi-line python command" \
 
 gdb_test "source $srcdir/$subdir/source2.py" "yes" "source source2.py"
 
+gdb_test "source -s source2.py" "yes" "source -s source2.py"
+
 gdb_test "python print gdb.current_objfile()" "None"
 gdb_test "python print gdb.objfiles()" "\\\[\\\]"