gdb
[deliverable/binutils-gdb.git] / gdb / eval.c
index 09564498975f770cd0d7f88a550853d1471378fa..0244f7a039bbe8479fbf94325d5102445231031c 100644 (file)
@@ -1,8 +1,6 @@
 /* Evaluate expressions for GDB.
 
-   Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
-   1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008,
-   2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1986-2003, 2005-2012 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -43,7 +41,6 @@
 #include "gdb_obstack.h"
 #include "objfiles.h"
 #include "python/python.h"
-#include "wrapper.h"
 
 #include "gdb_assert.h"
 
@@ -236,9 +233,21 @@ fetch_subexp_value (struct expression *exp, int *pc, struct value **valp,
 
   /* Make sure it's not lazy, so that after the target stops again we
      have a non-lazy previous value to compare with.  */
-  if (result != NULL
-      && (!value_lazy (result) || gdb_value_fetch_lazy (result)))
-    *valp = result;
+  if (result != NULL)
+    {
+      if (!value_lazy (result))
+       *valp = result;
+      else
+       {
+         volatile struct gdb_exception except;
+
+         TRY_CATCH (except, RETURN_MASK_ERROR)
+           {
+             value_fetch_lazy (result);
+             *valp = result;
+           }
+       }
+    }
 
   if (val_chain)
     {
@@ -1674,13 +1683,7 @@ evaluate_subexp_standard (struct type *expect_type,
           func_name = (char *) alloca (name_len + 1);
           strcpy (func_name, &exp->elts[string_pc + 1].string);
 
-          /* Prepare list of argument types for overload resolution.  */
-          arg_types = (struct type **)
-           alloca (nargs * (sizeof (struct type *)));
-          for (ix = 1; ix <= nargs; ix++)
-            arg_types[ix - 1] = value_type (argvec[ix]);
-
-          find_overload_match (arg_types, nargs, func_name,
+          find_overload_match (&argvec[1], nargs, func_name,
                                NON_METHOD, /* not method */
                               0,          /* strict match */
                                NULL, NULL, /* pass NULL symbol since
@@ -1716,13 +1719,7 @@ evaluate_subexp_standard (struct type *expect_type,
                 evaluation.  */
              struct value *valp = NULL;
 
-             /* Prepare list of argument types for overload resolution.  */
-             arg_types = (struct type **)
-               alloca (nargs * (sizeof (struct type *)));
-             for (ix = 1; ix <= nargs; ix++)
-               arg_types[ix - 1] = value_type (argvec[ix]);
-
-             (void) find_overload_match (arg_types, nargs, tstr,
+             (void) find_overload_match (&argvec[1], nargs, tstr,
                                          METHOD, /* method */
                                          0,      /* strict match */
                                          &arg2,  /* the object */
@@ -1793,13 +1790,7 @@ evaluate_subexp_standard (struct type *expect_type,
              if (op == OP_VAR_VALUE)
                function = exp->elts[save_pos1+2].symbol;
 
-             /* Prepare list of argument types for overload resolution.  */
-             arg_types = (struct type **)
-               alloca (nargs * (sizeof (struct type *)));
-             for (ix = 1; ix <= nargs; ix++)
-               arg_types[ix - 1] = value_type (argvec[ix]);
-
-             (void) find_overload_match (arg_types, nargs,
+             (void) find_overload_match (&argvec[1], nargs,
                                          NULL,        /* no need for name */
                                          NON_METHOD,  /* not method */
                                          0,           /* strict match */
This page took 0.023983 seconds and 4 git commands to generate.