* 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.
This commit is contained in:
parent
fbb06eb1ba
commit
c806c55a06
5 changed files with 18 additions and 5 deletions
|
@ -1,3 +1,12 @@
|
|||
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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -767,7 +767,7 @@ operator_length_standard (struct expression *expr, int endpos,
|
|||
break;
|
||||
|
||||
case OP_COMPLEX:
|
||||
oplen = 1;
|
||||
oplen = 3;
|
||||
args = 2;
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in a new issue