OSDN Git Service

* expression.h (enum exp_opcode): Document OP_COMPLEX to take
authorUlrich Weigand <uweigand@de.ibm.com>
Thu, 11 Sep 2008 14:12:15 +0000 (14:12 +0000)
committerUlrich Weigand <uweigand@de.ibm.com>
Thu, 11 Sep 2008 14:12:15 +0000 (14:12 +0000)
a type parameter as expression element.
* eval.c (evaluate_subexp_standard) [OP_COMPLEX]: Retrieve result
type as expression element.
* f-exp.y: Pass in type when buildin OP_COMPLEX expression.
* parse.c (operator_length_standard): Update length of OP_COMPLEX.

gdb/ChangeLog
gdb/eval.c
gdb/expression.h
gdb/f-exp.y
gdb/parse.c

index 91869e4..f98c925 100644 (file)
@@ -1,5 +1,14 @@
 2008-09-11  Ulrich Weigand  <uweigand@de.ibm.com>
 
+       * expression.h (enum exp_opcode): Document OP_COMPLEX to take
+       a type parameter as expression element.
+       * eval.c (evaluate_subexp_standard) [OP_COMPLEX]: Retrieve result
+       type as expression element.
+       * f-exp.y: Pass in type when buildin OP_COMPLEX expression.
+       * parse.c (operator_length_standard): Update length of OP_COMPLEX.
+
+2008-09-11  Ulrich Weigand  <uweigand@de.ibm.com>
+
        * language.h (struct language_arch_info): New members
        bool_type_default and bool_type_symbol.
        (lang_bool_type): Remove prototype.
index 9086e1b..92b2d72 100644 (file)
@@ -1369,10 +1369,11 @@ evaluate_subexp_standard (struct type *expect_type,
     case OP_COMPLEX:
       /* We have a complex number, There should be 2 floating 
          point numbers that compose it */
+      (*pos) += 2;
       arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
       arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
 
-      return value_literal_complex (arg1, arg2, builtin_type_f_complex_s16);
+      return value_literal_complex (arg1, arg2, exp->elts[pc + 1].type);
 
     case STRUCTOP_STRUCT:
       tem = longest_to_int (exp->elts[pc + 1].longconst);
index 4590feb..fe5f8fc 100644 (file)
@@ -193,8 +193,9 @@ enum exp_opcode
        indicates that we have found something of the form <name> ( <stuff> ) */
     OP_F77_UNDETERMINED_ARGLIST,
 
-    /* The following OP is a special one, it introduces a F77 complex
-       literal. It is followed by exactly two args that are doubles.  */
+    /* OP_COMPLEX takes a type in the following element, followed by another
+       OP_COMPLEX, making three exp_elements.  It is followed by two double
+       args, and converts them into a complex number of the given type. */
     OP_COMPLEX,
 
     /* OP_STRING represents a string constant.
index 1aacc37..108f1bd 100644 (file)
@@ -328,7 +328,9 @@ complexnum:     exp ',' exp
         ;
 
 exp    :       '(' complexnum ')'
-                       { write_exp_elt_opcode(OP_COMPLEX); }
+                       { write_exp_elt_opcode(OP_COMPLEX);
+                         write_exp_elt_type (parse_f_type->builtin_complex_s16);
+                         write_exp_elt_opcode(OP_COMPLEX); }
        ;
 
 exp    :       '(' type ')' exp  %prec UNARY
index e3a62c7..2a6b8cb 100644 (file)
@@ -767,7 +767,7 @@ operator_length_standard (struct expression *expr, int endpos,
       break;
 
     case OP_COMPLEX:
-      oplen = 1;
+      oplen = 3;
       args = 2;
       break;