[052/203] Split out eval_op_m2_high

Message ID 20210101214723.1784144-53-tom@tromey.com
State Superseded
Headers show
Series
  • Refactor expressions
Related show

Commit Message

Tom Tromey Jan. 1, 2021, 9:44 p.m.
This splits UNOP_HIGH into a new function for future use.

gdb/ChangeLog
2021-01-01  Tom Tromey  <tom@tromey.com>

	* m2-lang.c (eval_op_m2_high): New function.
	(evaluate_subexp_modula2): Use it.
---
 gdb/ChangeLog |  5 +++++
 gdb/m2-lang.c | 55 ++++++++++++++++++++++++++++++---------------------
 2 files changed, 37 insertions(+), 23 deletions(-)

-- 
2.26.2

Comments

Andrew Burgess Jan. 4, 2021, 12:05 p.m. | #1
* Tom Tromey <tom@tromey.com> [2021-01-01 14:44:52 -0700]:

> This splits UNOP_HIGH into a new function for future use.

> 

> gdb/ChangeLog

> 2021-01-01  Tom Tromey  <tom@tromey.com>

> 

> 	* m2-lang.c (eval_op_m2_high): New function.

> 	(evaluate_subexp_modula2): Use it.

> ---

>  gdb/ChangeLog |  5 +++++

>  gdb/m2-lang.c | 55 ++++++++++++++++++++++++++++++---------------------

>  2 files changed, 37 insertions(+), 23 deletions(-)

> 

> diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c

> index fb49ba470d6..982bc264a3b 100644

> --- a/gdb/m2-lang.c

> +++ b/gdb/m2-lang.c

> @@ -29,6 +29,37 @@

>  #include "valprint.h"

>  #include "gdbarch.h"

>  

> +/* A helper function for UNOP_HIGH.  */

> +

> +static struct value *

> +eval_op_m2_high (struct type *expect_type, struct expression *exp,

> +		 enum noside noside,

> +		 struct value *arg1)

> +{

> +  if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)

> +    return arg1;

> +  else

> +    {

> +      arg1 = coerce_ref (arg1);

> +      struct type *type = check_typedef (value_type (arg1));

> +

> +      if (m2_is_unbounded_array (type))

> +	{

> +	  struct value *temp = arg1;

> +

> +	  type = type->field (1).type ();

> +	  /* i18n: Do not translate the "_m2_high" part!  */

> +	  arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL,

> +				   _("unbounded structure "

> +				     "missing _m2_high field"));

> +	  


Not your mistake (copied code), but there's an unneeded tab at the end
of the previous otherwise empty line.  Maybe you could clean this up?

Thanks,
Andrew

> +	  if (value_type (arg1) != type)

> +	    arg1 = value_cast (type, arg1);

> +	}

> +    }

> +  return arg1;

> +}

> +

>  static struct value *

>  evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,

>  			 int *pos, enum noside noside)

> @@ -43,29 +74,7 @@ evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,

>      case UNOP_HIGH:

>        (*pos)++;

>        arg1 = evaluate_subexp_with_coercion (exp, pos, noside);

> -

> -      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)

> -	return arg1;

> -      else

> -	{

> -	  arg1 = coerce_ref (arg1);

> -	  type = check_typedef (value_type (arg1));

> -

> -	  if (m2_is_unbounded_array (type))

> -	    {

> -	      struct value *temp = arg1;

> -

> -	      type = type->field (1).type ();

> -	      /* i18n: Do not translate the "_m2_high" part!  */

> -	      arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL,

> -				       _("unbounded structure "

> -					 "missing _m2_high field"));

> -	  

> -	      if (value_type (arg1) != type)

> -		arg1 = value_cast (type, arg1);

> -	    }

> -	}

> -      return arg1;

> +      return eval_op_m2_high (expect_type, exp, noside, arg1);

>  

>      case BINOP_SUBSCRIPT:

>        (*pos)++;

> -- 

> 2.26.2

>
Tom Tromey Feb. 10, 2021, 12:56 a.m. | #2
>>>>> "Andrew" == Andrew Burgess <andrew.burgess@embecosm.com> writes:


>> +	  struct value *temp = arg1;

>> +

>> +	  type = type->field (1).type ();

>> +	  /* i18n: Do not translate the "_m2_high" part!  */

>> +	  arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL,

>> +				   _("unbounded structure "

>> +				     "missing _m2_high field"));

>> +	  


Andrew> Not your mistake (copied code), but there's an unneeded tab at the end
Andrew> of the previous otherwise empty line.  Maybe you could clean this up?

I've fixed this.

Tom

Patch

diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c
index fb49ba470d6..982bc264a3b 100644
--- a/gdb/m2-lang.c
+++ b/gdb/m2-lang.c
@@ -29,6 +29,37 @@ 
 #include "valprint.h"
 #include "gdbarch.h"
 
+/* A helper function for UNOP_HIGH.  */
+
+static struct value *
+eval_op_m2_high (struct type *expect_type, struct expression *exp,
+		 enum noside noside,
+		 struct value *arg1)
+{
+  if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
+    return arg1;
+  else
+    {
+      arg1 = coerce_ref (arg1);
+      struct type *type = check_typedef (value_type (arg1));
+
+      if (m2_is_unbounded_array (type))
+	{
+	  struct value *temp = arg1;
+
+	  type = type->field (1).type ();
+	  /* i18n: Do not translate the "_m2_high" part!  */
+	  arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL,
+				   _("unbounded structure "
+				     "missing _m2_high field"));
+	  
+	  if (value_type (arg1) != type)
+	    arg1 = value_cast (type, arg1);
+	}
+    }
+  return arg1;
+}
+
 static struct value *
 evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,
 			 int *pos, enum noside noside)
@@ -43,29 +74,7 @@  evaluate_subexp_modula2 (struct type *expect_type, struct expression *exp,
     case UNOP_HIGH:
       (*pos)++;
       arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-
-      if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
-	return arg1;
-      else
-	{
-	  arg1 = coerce_ref (arg1);
-	  type = check_typedef (value_type (arg1));
-
-	  if (m2_is_unbounded_array (type))
-	    {
-	      struct value *temp = arg1;
-
-	      type = type->field (1).type ();
-	      /* i18n: Do not translate the "_m2_high" part!  */
-	      arg1 = value_struct_elt (&temp, NULL, "_m2_high", NULL,
-				       _("unbounded structure "
-					 "missing _m2_high field"));
-	  
-	      if (value_type (arg1) != type)
-		arg1 = value_cast (type, arg1);
-	    }
-	}
-      return arg1;
+      return eval_op_m2_high (expect_type, exp, noside, arg1);
 
     case BINOP_SUBSCRIPT:
       (*pos)++;