aboutsummaryrefslogtreecommitdiff
path: root/gdb/ch-exp.y
diff options
context:
space:
mode:
authorPer Bothner <per@bothner.com>1994-03-30 06:59:16 +0000
committerPer Bothner <per@bothner.com>1994-03-30 06:59:16 +0000
commit58cda66eeb172461c8b9361b20311448a6384983 (patch)
treecda340fb9f31fed8cbceb2296deb2894e1a20025 /gdb/ch-exp.y
parent73cd3b4911899b642e8b560cec05180a40480feb (diff)
downloadgdb-58cda66eeb172461c8b9361b20311448a6384983.zip
gdb-58cda66eeb172461c8b9361b20311448a6384983.tar.gz
gdb-58cda66eeb172461c8b9361b20311448a6384983.tar.bz2
* ch-exp.y: Implement SIZE(mode_name) and SIZE(expression).
Diffstat (limited to 'gdb/ch-exp.y')
-rw-r--r--gdb/ch-exp.y17
1 files changed, 8 insertions, 9 deletions
diff --git a/gdb/ch-exp.y b/gdb/ch-exp.y
index e818803..cb6aa18 100644
--- a/gdb/ch-exp.y
+++ b/gdb/ch-exp.y
@@ -295,7 +295,7 @@ yyerror PARAMS ((char *));
%type <voidval> lower_element
%type <voidval> upper_element
%type <voidval> first_element
-%type <voidval> mode_argument
+%type <tval> mode_argument
%type <voidval> upper_lower_argument
%type <voidval> length_argument
%type <voidval> array_mode_name
@@ -903,14 +903,13 @@ chill_value_built_in_routine_call :
{
$$ = 0; /* FIXME */
}
- | SIZE '(' location ')'
- {
- $$ = 0; /* FIXME */
- }
+ | SIZE '(' expression ')'
+ { write_exp_elt_opcode (UNOP_SIZEOF); }
| SIZE '(' mode_argument ')'
- {
- $$ = 0; /* FIXME */
- }
+ { write_exp_elt_opcode (OP_LONG);
+ write_exp_elt_type (builtin_type_int);
+ write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
+ write_exp_elt_opcode (OP_LONG); }
| UPPER '(' upper_lower_argument ')'
{
$$ = 0; /* FIXME */
@@ -927,7 +926,7 @@ chill_value_built_in_routine_call :
mode_argument : mode_name
{
- $$ = 0; /* FIXME */
+ $$ = $1.type;
}
| array_mode_name '(' expression ')'
{