diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/dwarf2/macro.c | 117 |
1 files changed, 56 insertions, 61 deletions
diff --git a/gdb/dwarf2/macro.c b/gdb/dwarf2/macro.c index a511d0a..bc781c2 100644 --- a/gdb/dwarf2/macro.c +++ b/gdb/dwarf2/macro.c @@ -154,88 +154,83 @@ parse_macro_definition (struct macro_source_file *file, int line, } macro_define_object (file, line, name.c_str (), replacement); + return; } - else if (*p == '(') - { - /* It's a function-like macro. */ - std::string name (body, p - body); - int argc = 0; - int argv_size = 1; - char **argv = XNEWVEC (char *, argv_size); - - p++; - p = consume_improper_spaces (p, body); + /* It's a function-like macro. */ + gdb_assert (*p == '('); + std::string name (body, p - body); + int argc = 0; + int argv_size = 1; + char **argv = XNEWVEC (char *, argv_size); - /* Parse the formal argument list. */ - while (*p && *p != ')') - { - /* Find the extent of the current argument name. */ - const char *arg_start = p; + p++; - while (*p && *p != ',' && *p != ')' && *p != ' ') - p++; - - if (! *p || p == arg_start) - dwarf2_macro_malformed_definition_complaint (body); - else - { - /* Make sure argv has room for the new argument. */ - if (argc >= argv_size) - { - argv_size *= 2; - argv = XRESIZEVEC (char *, argv, argv_size); - } + p = consume_improper_spaces (p, body); - argv[argc++] = savestring (arg_start, p - arg_start); - } + /* Parse the formal argument list. */ + while (*p && *p != ')') + { + /* Find the extent of the current argument name. */ + const char *arg_start = p; - p = consume_improper_spaces (p, body); + while (*p && *p != ',' && *p != ')' && *p != ' ') + p++; - /* Consume the comma, if present. */ - if (*p == ',') + if (! *p || p == arg_start) + dwarf2_macro_malformed_definition_complaint (body); + else + { + /* Make sure argv has room for the new argument. */ + if (argc >= argv_size) { - p++; - - p = consume_improper_spaces (p, body); + argv_size *= 2; + argv = XRESIZEVEC (char *, argv, argv_size); } + + argv[argc++] = savestring (arg_start, p - arg_start); } - if (*p == ')') + p = consume_improper_spaces (p, body); + + /* Consume the comma, if present. */ + if (*p == ',') { p++; - if (*p == ' ') - /* Perfectly formed definition, no complaints. */ - macro_define_function (file, line, name.c_str (), - argc, (const char **) argv, - p + 1); - else if (*p == '\0') - { - /* Complain, but do define it. */ - dwarf2_macro_malformed_definition_complaint (body); - macro_define_function (file, line, name.c_str (), - argc, (const char **) argv, - p); - } - else - /* Just complain. */ - dwarf2_macro_malformed_definition_complaint (body); + p = consume_improper_spaces (p, body); + } + } + + if (*p == ')') + { + p++; + + if (*p == ' ') + /* Perfectly formed definition, no complaints. */ + macro_define_function (file, line, name.c_str (), + argc, (const char **) argv, + p + 1); + else if (*p == '\0') + { + /* Complain, but do define it. */ + dwarf2_macro_malformed_definition_complaint (body); + macro_define_function (file, line, name.c_str (), + argc, (const char **) argv, + p); } else /* Just complain. */ dwarf2_macro_malformed_definition_complaint (body); - - { - int i; - - for (i = 0; i < argc; i++) - xfree (argv[i]); - } - xfree (argv); } else + /* Just complain. */ dwarf2_macro_malformed_definition_complaint (body); + + for (int i = 0; i < argc; i++) + xfree (argv[i]); + + xfree (argv); } /* Skip some bytes from BYTES according to the form given in FORM. |