aboutsummaryrefslogtreecommitdiff
path: root/gdb/rust-exp.y
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-03-24 22:50:14 -0600
committerTom Tromey <tom@tromey.com>2019-04-04 19:55:11 -0600
commit2a61252965c91540133bece7deb92eb22e3cf929 (patch)
tree5774206de4966e8835801e71da5c6661b368dcec /gdb/rust-exp.y
parent43476f0b1b628352ad8e3064e50128cb3461d3d0 (diff)
downloadgdb-2a61252965c91540133bece7deb92eb22e3cf929.zip
gdb-2a61252965c91540133bece7deb92eb22e3cf929.tar.gz
gdb-2a61252965c91540133bece7deb92eb22e3cf929.tar.bz2
Move completion parsing to parser_state
This moves the globals and functions related to parsing for completion to parser_state. A new structure is introduced in order to return completion results from the parse back to parse_expression_for_completion. gdb/ChangeLog 2019-04-04 Tom Tromey <tom@tromey.com> * rust-exp.y (rust_parser::lex_identifier, rustyylex) (rust_parser::convert_ast_to_expression, rust_parse) (rust_lex_test_completion, rust_lex_tests): Update. * parser-defs.h (struct expr_completion_state): New. (struct parser_state) <parser_state>: Add completion parameter. <mark_struct_expression, mark_completion_tag>: New methods. <parse_completion, m_completion_state>: New members. (prefixify_expression, null_post_parser): Update. (mark_struct_expression, mark_completion_tag): Don't declare. * parse.c (parse_completion, expout_last_struct) (expout_tag_completion_type, expout_completion_name): Remove globals. (parser_state::mark_struct_expression) (parser_state::mark_completion_tag): Now methods. (prefixify_expression): Add last_struct parameter. (prefixify_subexp): Likewise. (parse_exp_1): Update. (parse_exp_in_context): Add cstate parameter. Update. (parse_expression_for_completion): Create an expr_completion_state. (null_post_parser): Add "completion" parameter. * p-exp.y: Update rules. (yylex): Update. * language.h (struct language_defn) <la_post_parser>: Add "completing" parameter. * go-exp.y: Update rules. (lex_one_token): Update. * expression.h (parse_completion): Don't declare. * d-exp.y: Update rules. (lex_one_token): Update rules. * c-exp.y: Update rules. (lex_one_token): Update. * ada-lang.c (resolve): Add "parse_completion" parameter. (resolve_subexp): Likewise. (ada_resolve_function): Likewise.
Diffstat (limited to 'gdb/rust-exp.y')
-rw-r--r--gdb/rust-exp.y16
1 files changed, 8 insertions, 8 deletions
diff --git a/gdb/rust-exp.y b/gdb/rust-exp.y
index 782117e..999ab25 100644
--- a/gdb/rust-exp.y
+++ b/gdb/rust-exp.y
@@ -1438,10 +1438,10 @@ rust_parser::lex_identifier (YYSTYPE *lvalp)
return 0;
}
- if (token == NULL || (parse_completion && pstate->lexptr[0] == '\0'))
+ if (token == NULL || (pstate->parse_completion && pstate->lexptr[0] == '\0'))
lvalp->sval = make_stoken (copy_name (start, length));
- if (parse_completion && pstate->lexptr[0] == '\0')
+ if (pstate->parse_completion && pstate->lexptr[0] == '\0')
{
/* Prevent rustyylex from returning two COMPLETE tokens. */
pstate->prev_lexptr = pstate->lexptr;
@@ -1650,7 +1650,7 @@ rustyylex (YYSTYPE *lvalp, rust_parser *parser)
pstate->prev_lexptr = pstate->lexptr;
if (pstate->lexptr[0] == '\0')
{
- if (parse_completion)
+ if (pstate->parse_completion)
{
lvalp->sval = make_stoken ("");
return COMPLETE;
@@ -2225,7 +2225,7 @@ rust_parser::convert_ast_to_expression (const struct rust_op *operation,
convert_ast_to_expression (operation->left.op, top);
if (operation->completing)
- mark_struct_expression (pstate);
+ pstate->mark_struct_expression ();
write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
write_exp_string (pstate, operation->right.sval);
write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
@@ -2544,7 +2544,7 @@ rust_parse (struct parser_state *state)
result = rustyyparse (&parser);
- if (!result || (parse_completion && parser.rust_ast != NULL))
+ if (!result || (state->parse_completion && parser.rust_ast != NULL))
parser.convert_ast_to_expression (parser.rust_ast, parser.rust_ast);
return result;
@@ -2684,14 +2684,14 @@ rust_lex_test_completion (rust_parser *parser)
{
const int expected[] = { IDENT, '.', COMPLETE, 0 };
- parse_completion = 1;
+ parser->pstate->parse_completion = 1;
rust_lex_test_sequence (parser, "something.wha", ARRAY_SIZE (expected),
expected);
rust_lex_test_sequence (parser, "something.", ARRAY_SIZE (expected),
expected);
- parse_completion = 0;
+ parser->pstate->parse_completion = 0;
}
/* Test pushback. */
@@ -2726,7 +2726,7 @@ rust_lex_tests (void)
// Set up dummy "parser", so that rust_type works.
struct parser_state ps (&rust_language_defn, target_gdbarch (),
- nullptr, 0, 0, nullptr);
+ nullptr, 0, 0, nullptr, 0);
rust_parser parser (&ps);
rust_lex_test_one (&parser, "", 0);