diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2008-09-11 14:12:15 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2008-09-11 14:12:15 +0000 |
commit | c806c55a0672b52f228ce56f5bf57f065c447506 (patch) | |
tree | 1ba1bd00de1325503ac16e28493fec8e1d0ef10a | |
parent | fbb06eb1ba120adde645d64133f5a9bbf2d62ec7 (diff) | |
download | gdb-c806c55a0672b52f228ce56f5bf57f065c447506.zip gdb-c806c55a0672b52f228ce56f5bf57f065c447506.tar.gz gdb-c806c55a0672b52f228ce56f5bf57f065c447506.tar.bz2 |
* 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.
-rw-r--r-- | gdb/ChangeLog | 9 | ||||
-rw-r--r-- | gdb/eval.c | 3 | ||||
-rw-r--r-- | gdb/expression.h | 5 | ||||
-rw-r--r-- | gdb/f-exp.y | 4 | ||||
-rw-r--r-- | gdb/parse.c | 2 |
5 files changed, 18 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 91869e4..f98c925 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. @@ -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); diff --git a/gdb/expression.h b/gdb/expression.h index 4590feb..fe5f8fc 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -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. diff --git a/gdb/f-exp.y b/gdb/f-exp.y index 1aacc37..108f1bd 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -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 diff --git a/gdb/parse.c b/gdb/parse.c index e3a62c7..2a6b8cb 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -767,7 +767,7 @@ operator_length_standard (struct expression *expr, int endpos, break; case OP_COMPLEX: - oplen = 1; + oplen = 3; args = 2; break; |