aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/ch-exp.y91
-rw-r--r--gdb/ch-lang.c2
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}
};