%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
%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
}
;
-/* 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
/* 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
{
{
$$ = 0; /* FIXME */
}
- | value_array_element
- {
- $$ = 0; /* FIXME */
- }
| value_array_slice
{
$$ = 0; /* FIXME */
}
- | value_structure_field
- {
- $$ = 0; /* FIXME */
- }
| expression_conversion
{
$$ = 0; /* FIXME */
}
;
-/* Z.200, 5.2.2 */
-
-location_contents: location
- {
- $$ = 0; /* FIXME */
- }
- ;
-
/* Z.200, 5.2.3 */
value_name : synonym_name
}
;
-/* 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
/* Z.200, 5.3.9 */
-operand_6 : POINTER location
+operand_6 : POINTER primitive_value
{
write_exp_elt_opcode (UNOP_ADDR);
}
/* Z.200, 6.2 */
single_assignment_action :
- location GDB_ASSIGNMENT value
+ primitive_value GDB_ASSIGNMENT value
{
write_exp_elt_opcode (BINOP_ASSIGN);
}
}
;
-/* Z.200, 12.4.3 */
-
-array_primitive_value : primitive_value
- {
- $$ = 0;
- }
- ;
-
-
/* Things which still need productions... */
array_mode_name : FIXME_08 { $$ = 0; }
yylval.sval.length = tokptr - lexptr;
lexptr = tokptr;
result = copy_name (yylval.sval);
- for (tokptr = result; *tokptr; tokptr++)
- if (isupper (*tokptr))
- *tokptr = tolower(*tokptr);
return result;
}
return (NULL);
{
unsigned int i;
int token;
- char *simplename;
+ char *inputname;
struct symbol *sym;
/* Skip over any leading whitespace. */
the token from lexptr, so we can't back out if we later find that
we can't classify what sort of name it is. */
- simplename = match_simple_name_string ();
+ inputname = match_simple_name_string ();
- if (simplename != NULL)
+ if (inputname != NULL)
{
+ char *simplename = (char*) alloca (strlen (inputname));
+
+ char *dptr = simplename, *sptr = inputname;
+ for (; *sptr; sptr++)
+ *dptr++ = isupper (*sptr) ? tolower(*sptr) : *sptr;
+
/* See if it is a reserved identifier. */
for (i = 0; i < sizeof (idtokentab) / sizeof (idtokentab[0]); i++)
{
return (BOOLEAN_LITERAL);
}
- sym = lookup_symbol (simplename, expression_context_block,
+ sym = lookup_symbol (inputname, expression_context_block,
VAR_NAMESPACE, (int *) NULL,
(struct symtab **) NULL);
+ if (sym == NULL && strcmp (inputname, simplename) != 0)
+ {
+ sym = lookup_symbol (simplename, expression_context_block,
+ VAR_NAMESPACE, (int *) NULL,
+ (struct symtab **) NULL);
+ }
if (sym != NULL)
{
yylval.ssym.stoken.ptr = NULL;
case LOC_UNDEF:
case LOC_CONST_BYTES:
case LOC_OPTIMIZED_OUT:
- error ("Symbol \"%s\" names no location.", simplename);
+ error ("Symbol \"%s\" names no location.", inputname);
break;
}
}
}
else
{
- error ("No symbol \"%s\" in current context.", simplename);
+ error ("No symbol \"%s\" in current context.", inputname);
}
}
case '.': /* Not float for example. */
lexptr++;
while (isspace (*lexptr)) lexptr++;
- simplename = match_simple_name_string ();
- if (!simplename)
+ inputname = match_simple_name_string ();
+ if (!inputname)
return '.';
return FIELD_NAME;
}