Add support for the sizeof function in Rust
2016-10-29 Manish Goregaokar <manish@mozilla.com> gdb/ChangeLog: * rust-exp.y: Parse `sizeof(exp)` as `UNOP_SIZEOF` gdb/testsuite/ChangeLog: * gdb.rust/simple.exp: Add tests for `sizeof(expr)`
This commit is contained in:
parent
b96645f1a1
commit
cdf5a07c75
|
@ -1,3 +1,7 @@
|
||||||
|
2016-10-29 Manish Goregaokar <manish@mozilla.com>
|
||||||
|
|
||||||
|
* rust-exp.y: Parse `sizeof(exp)` as `UNOP_SIZEOF`
|
||||||
|
|
||||||
2016-10-28 Manish Goregaokar <manish@mozilla.com>
|
2016-10-28 Manish Goregaokar <manish@mozilla.com>
|
||||||
|
|
||||||
* rust-lang.c (rust_union_is_untagged): Add function to
|
* rust-lang.c (rust_union_is_untagged): Add function to
|
||||||
|
|
|
@ -276,6 +276,7 @@ struct rust_op
|
||||||
%token <voidval> KW_EXTERN
|
%token <voidval> KW_EXTERN
|
||||||
%token <voidval> KW_CONST
|
%token <voidval> KW_CONST
|
||||||
%token <voidval> KW_FN
|
%token <voidval> KW_FN
|
||||||
|
%token <voidval> KW_SIZEOF
|
||||||
|
|
||||||
/* Operator tokens. */
|
/* Operator tokens. */
|
||||||
%token <voidval> DOTDOT
|
%token <voidval> DOTDOT
|
||||||
|
@ -371,7 +372,7 @@ expr:
|
||||||
| array_expr
|
| array_expr
|
||||||
| idx_expr
|
| idx_expr
|
||||||
| range_expr
|
| range_expr
|
||||||
| unop_expr
|
| unop_expr /* Must precede call_expr because of ambiguity with sizeof. */
|
||||||
| binop_expr
|
| binop_expr
|
||||||
| paren_expr
|
| paren_expr
|
||||||
| call_expr
|
| call_expr
|
||||||
|
@ -577,7 +578,8 @@ unop_expr:
|
||||||
|
|
||||||
| '&' KW_MUT expr %prec UNARY
|
| '&' KW_MUT expr %prec UNARY
|
||||||
{ $$ = ast_unary (UNOP_ADDR, $3); }
|
{ $$ = ast_unary (UNOP_ADDR, $3); }
|
||||||
|
| KW_SIZEOF '(' expr ')' %prec UNARY
|
||||||
|
{ $$ = ast_unary (UNOP_SIZEOF, $3); }
|
||||||
;
|
;
|
||||||
|
|
||||||
binop_expr:
|
binop_expr:
|
||||||
|
@ -872,6 +874,7 @@ static const struct token_info identifier_tokens[] =
|
||||||
{ "true", KW_TRUE, OP_NULL },
|
{ "true", KW_TRUE, OP_NULL },
|
||||||
{ "extern", KW_EXTERN, OP_NULL },
|
{ "extern", KW_EXTERN, OP_NULL },
|
||||||
{ "fn", KW_FN, OP_NULL },
|
{ "fn", KW_FN, OP_NULL },
|
||||||
|
{ "sizeof", KW_SIZEOF, OP_NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Operator tokens, sorted longest first. */
|
/* Operator tokens, sorted longest first. */
|
||||||
|
@ -2194,6 +2197,7 @@ convert_ast_to_expression (struct parser_state *state,
|
||||||
case UNOP_COMPLEMENT:
|
case UNOP_COMPLEMENT:
|
||||||
case UNOP_IND:
|
case UNOP_IND:
|
||||||
case UNOP_ADDR:
|
case UNOP_ADDR:
|
||||||
|
case UNOP_SIZEOF:
|
||||||
convert_ast_to_expression (state, operation->left.op, top);
|
convert_ast_to_expression (state, operation->left.op, top);
|
||||||
write_exp_elt_opcode (state, operation->opcode);
|
write_exp_elt_opcode (state, operation->opcode);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2016-10-29 Manish Goregaokar <manish@mozilla.com>
|
||||||
|
|
||||||
|
* gdb.rust/simple.exp: Add tests for `sizeof(expr)`
|
||||||
|
|
||||||
2016-10-27 Manish Goregaokar <manish@mozilla.com>
|
2016-10-27 Manish Goregaokar <manish@mozilla.com>
|
||||||
|
|
||||||
* gdb.rust/simple.rs: Add test for univariant enums without discriminants
|
* gdb.rust/simple.rs: Add test for univariant enums without discriminants
|
||||||
|
|
|
@ -33,6 +33,7 @@ if {![runto ${srcfile}:$line]} {
|
||||||
|
|
||||||
gdb_test "print a" " = \\(\\)"
|
gdb_test "print a" " = \\(\\)"
|
||||||
gdb_test "ptype a" " = \\(\\)"
|
gdb_test "ptype a" " = \\(\\)"
|
||||||
|
gdb_test "print sizeof(a)" " = 0"
|
||||||
|
|
||||||
gdb_test "print b" " = \\\[\\\]"
|
gdb_test "print b" " = \\\[\\\]"
|
||||||
gdb_test "ptype b" " = \\\[i32; 0\\\]"
|
gdb_test "ptype b" " = \\\[i32; 0\\\]"
|
||||||
|
@ -41,6 +42,7 @@ gdb_test "print *(&b as *const \[i32; 0_0\])" " = \\\[\\\]"
|
||||||
|
|
||||||
gdb_test "print c" " = 99"
|
gdb_test "print c" " = 99"
|
||||||
gdb_test "ptype c" " = i32"
|
gdb_test "ptype c" " = i32"
|
||||||
|
gdb_test "print sizeof(c)" " = 4"
|
||||||
|
|
||||||
gdb_test "print c = 87" " = \\(\\)"
|
gdb_test "print c = 87" " = \\(\\)"
|
||||||
gdb_test "print c" " = 87"
|
gdb_test "print c" " = 87"
|
||||||
|
@ -127,7 +129,7 @@ gdb_test "print nosuchsymbol" \
|
||||||
gdb_test "print e" " = simple::MoreComplicated::Two\\(73\\)"
|
gdb_test "print e" " = simple::MoreComplicated::Two\\(73\\)"
|
||||||
gdb_test "print e2" \
|
gdb_test "print e2" \
|
||||||
" = simple::MoreComplicated::Four\\{this: true, is: 8, a: 109 'm', struct_: 100, variant: 10\\}"
|
" = simple::MoreComplicated::Four\\{this: true, is: 8, a: 109 'm', struct_: 100, variant: 10\\}"
|
||||||
|
gdb_test "print sizeof(e)" " = 24"
|
||||||
gdb_test_sequence "ptype e" "" {
|
gdb_test_sequence "ptype e" "" {
|
||||||
" = enum simple::MoreComplicated \\{"
|
" = enum simple::MoreComplicated \\{"
|
||||||
" One,"
|
" One,"
|
||||||
|
|
Loading…
Reference in New Issue