diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/ch-exp.y | 91 | ||||
-rw-r--r-- | gdb/ch-lang.c | 2 |
3 files changed, 32 insertions, 68 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ae2d10d..764704a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +Fri Sep 16 00:14:40 1994 Per Bothner (bothner@kalessin.cygnus.com) + + * ch-exp.y: Get rid of some extra non-terminals, and move + their rules into primitive_value. + * ch-lang.c (chill_op_print_tab): Add '->'. + * expprint.c (print_subexp): Recognize unary postfix operator. + Wed Sep 14 18:27:42 1994 Jason Molenda (crash@phydeaux.cygnus.com) * remote-hms.c: use remote_debug instead of hms_silent toggle. diff --git a/gdb/ch-exp.y b/gdb/ch-exp.y index dc46d79..b7a0b5e 100644 --- a/gdb/ch-exp.y +++ b/gdb/ch-exp.y @@ -247,18 +247,14 @@ yyerror PARAMS ((char *)); %token <ivar> GDB_VARIABLE /* Convenience variable */ %token <voidval> GDB_ASSIGNMENT /* Assign value to somewhere */ -%type <voidval> location %type <voidval> access_name %type <voidval> primitive_value -%type <voidval> location_contents %type <voidval> value_name %type <voidval> literal %type <voidval> tuple %type <voidval> value_string_element %type <voidval> value_string_slice -%type <voidval> value_array_element %type <voidval> value_array_slice -%type <voidval> value_structure_field %type <voidval> expression_conversion %type <voidval> value_procedure_call %type <voidval> value_built_in_routine_call @@ -290,7 +286,6 @@ yyerror PARAMS ((char *)); %type <voidval> left_element %type <voidval> right_element %type <voidval> slice_size -%type <voidval> array_primitive_value %type <voidval> expression_list %type <voidval> lower_element %type <voidval> upper_element @@ -336,15 +331,6 @@ undefined_value : FIXME_01 } ; -/* Z.200, 4.2.1 */ - -location : access_name - | primitive_value POINTER - { - write_exp_elt_opcode (UNOP_IND); - } - ; - /* Z.200, 4.2.2 */ access_name : LOCATION_NAME @@ -391,9 +377,26 @@ expression_list : expression /* Z.200, 5.2.1 */ -primitive_value : location_contents +primitive_value : + access_name + | primitive_value '(' + /* This is to save the value of arglist_len + being accumulated for each dimension. */ + { start_arglist (); } + expression_list ')' { - $$ = 0; /* FIXME */ + write_exp_elt_opcode (MULTI_SUBSCRIPT); + write_exp_elt_longcst ((LONGEST) end_arglist ()); + write_exp_elt_opcode (MULTI_SUBSCRIPT); + } + | primitive_value FIELD_NAME + { write_exp_elt_opcode (STRUCTOP_STRUCT); + write_exp_string ($2); + write_exp_elt_opcode (STRUCTOP_STRUCT); + } + | primitive_value POINTER + { + write_exp_elt_opcode (UNOP_IND); } | value_name { @@ -415,18 +418,10 @@ primitive_value : location_contents { $$ = 0; /* FIXME */ } - | value_array_element - { - $$ = 0; /* FIXME */ - } | value_array_slice { $$ = 0; /* FIXME */ } - | value_structure_field - { - $$ = 0; /* FIXME */ - } | expression_conversion { $$ = 0; /* FIXME */ @@ -453,14 +448,6 @@ primitive_value : location_contents } ; -/* Z.200, 5.2.2 */ - -location_contents: location - { - $$ = 0; /* FIXME */ - } - ; - /* Z.200, 5.2.3 */ value_name : synonym_name @@ -568,41 +555,18 @@ value_string_slice: string_primitive_value '(' left_element ':' right_element ') } ; -/* Z.200, 5.2.8 */ - -value_array_element: array_primitive_value '(' - /* This is to save the value of arglist_len - being accumulated for each dimension. */ - { start_arglist (); } - expression_list ')' - { - write_exp_elt_opcode (MULTI_SUBSCRIPT); - write_exp_elt_longcst ((LONGEST) end_arglist ()); - write_exp_elt_opcode (MULTI_SUBSCRIPT); - } - ; - /* Z.200, 5.2.9 */ -value_array_slice: array_primitive_value '(' lower_element ':' upper_element ')' +value_array_slice: primitive_value '(' lower_element ':' upper_element ')' { $$ = 0; /* FIXME */ } - | array_primitive_value '(' first_element UP slice_size ')' + | primitive_value '(' first_element UP slice_size ')' { $$ = 0; /* FIXME */ } ; -/* Z.200, 5.2.10 */ - -value_structure_field: primitive_value FIELD_NAME - { write_exp_elt_opcode (STRUCTOP_STRUCT); - write_exp_string ($2); - write_exp_elt_opcode (STRUCTOP_STRUCT); - } - ; - /* Z.200, 5.2.11 */ expression_conversion: mode_name parenthesised_expression @@ -848,7 +812,7 @@ operand_5 : operand_6 /* Z.200, 5.3.9 */ -operand_6 : POINTER location +operand_6 : POINTER primitive_value { write_exp_elt_opcode (UNOP_ADDR); } @@ -866,7 +830,7 @@ operand_6 : POINTER location /* Z.200, 6.2 */ single_assignment_action : - location GDB_ASSIGNMENT value + primitive_value GDB_ASSIGNMENT value { write_exp_elt_opcode (BINOP_ASSIGN); } @@ -961,15 +925,6 @@ length_argument : expression } ; -/* Z.200, 12.4.3 */ - -array_primitive_value : primitive_value - { - $$ = 0; - } - ; - - /* Things which still need productions... */ array_mode_name : FIXME_08 { $$ = 0; } diff --git a/gdb/ch-lang.c b/gdb/ch-lang.c index e1ac3e7..bfd7728 100644 --- a/gdb/ch-lang.c +++ b/gdb/ch-lang.c @@ -280,6 +280,8 @@ static const struct op_print chill_op_print_tab[] = { {"/", BINOP_DIV, PREC_MUL, 0}, {"//", BINOP_CONCAT, PREC_PREFIX, 0}, /* FIXME: precedence? */ {"-", UNOP_NEG, PREC_PREFIX, 0}, + {"->", UNOP_IND, PREC_SUFFIX, 1}, + {"->", UNOP_ADDR, PREC_PREFIX, 0}, {NULL, 0, 0, 0} }; |