evaluate_subexp_standard: Factor out OP_VAR_VALUE handling.
authorPedro Alves <palves@redhat.com>
Mon, 4 Sep 2017 19:21:14 +0000 (20:21 +0100)
committerPedro Alves <palves@redhat.com>
Mon, 4 Sep 2017 19:21:14 +0000 (20:21 +0100)
A following patch will want to call the new evaluate_var_value
function in another spot.

gdb/ChangeLog:
2017-09-04  Pedro Alves  <palves@redhat.com>

* eval.c (evaluate_var_value): New function, factored out from ...
(evaluate_subexp_standard): ... here.

gdb/ChangeLog
gdb/eval.c

index 2f0e8ddba3b7e834ec6a38cfd8170b747bf0b2e7..7859c64731603e8c14f1e722c130898d01212345 100644 (file)
@@ -1,3 +1,8 @@
+2017-09-04  Pedro Alves  <palves@redhat.com>
+
+       * eval.c (evaluate_var_value): New function, factored out from ...
+       (evaluate_subexp_standard): ... here.
+
 2017-09-04  Pedro Alves  <palves@redhat.com>
 
        * eval.c (evaluate_subexp_standard) <UNOP_COMPLEMENT, UNOP_ADDR>:
index cb41a4a03ed4622e5f42f1f7f8df9b32b713b90d..a97f4a999e6624ac2709a4dfb93d77a7753f6755 100644 (file)
@@ -676,6 +676,39 @@ make_params (int num_types, struct type **param_types)
   return type;
 }
 
+/* Helper for evaluating an OP_VAR_VALUE.  */
+
+static value *
+evaluate_var_value (enum noside noside, const block *blk, symbol *var)
+{
+  /* JYG: We used to just return value_zero of the symbol type if
+     we're asked to avoid side effects.  Otherwise we return
+     value_of_variable (...).  However I'm not sure if
+     value_of_variable () has any side effect.  We need a full value
+     object returned here for whatis_exp () to call evaluate_type ()
+     and then pass the full value to value_rtti_target_type () if we
+     are dealing with a pointer or reference to a base class and print
+     object is on.  */
+
+  struct value *ret = NULL;
+
+  TRY
+    {
+      ret = value_of_variable (var, blk);
+    }
+
+  CATCH (except, RETURN_MASK_ERROR)
+    {
+      if (noside != EVAL_AVOID_SIDE_EFFECTS)
+       throw_exception (except);
+
+      ret = value_zero (SYMBOL_TYPE (var), not_lval);
+    }
+  END_CATCH
+
+  return ret;
+}
+
 /* Helper for evaluating an OP_VAR_MSYM_VALUE.  */
 
 static value *
@@ -763,37 +796,9 @@ evaluate_subexp_standard (struct type *expect_type,
       (*pos) += 3;
       if (noside == EVAL_SKIP)
        return eval_skip_value (exp);
-
-      /* JYG: We used to just return value_zero of the symbol type
-        if we're asked to avoid side effects.  Otherwise we return
-        value_of_variable (...).  However I'm not sure if
-        value_of_variable () has any side effect.
-        We need a full value object returned here for whatis_exp ()
-        to call evaluate_type () and then pass the full value to
-        value_rtti_target_type () if we are dealing with a pointer
-        or reference to a base class and print object is on.  */
-
-      {
-       struct value *ret = NULL;
-
-       TRY
-         {
-           ret = value_of_variable (exp->elts[pc + 2].symbol,
-                                    exp->elts[pc + 1].block);
-         }
-
-       CATCH (except, RETURN_MASK_ERROR)
-         {
-           if (noside == EVAL_AVOID_SIDE_EFFECTS)
-             ret = value_zero (SYMBOL_TYPE (exp->elts[pc + 2].symbol),
-                               not_lval);
-           else
-             throw_exception (except);
-         }
-       END_CATCH
-
-       return ret;
-      }
+      return evaluate_var_value (noside,
+                                exp->elts[pc + 1].block,
+                                exp->elts[pc + 2].symbol);
     case OP_VAR_MSYM_VALUE:
       (*pos) += 3;
       return evaluate_var_msym_value (noside,