X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fobjc-lang.c;h=8e8cc053531846c0516751fb102a9c086d7006f8;hb=c04da66c264162e6efc37686c0e4ee46c5b048ab;hp=0c952730a967f53cc4be88885ebc057a8ca17744;hpb=4ffc13fb0e4a1c5158cdf00f2751378653101207;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index 0c952730a9..8e8cc05353 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -1,6 +1,6 @@ /* Objective-C language support routines for GDB, the GNU debugger. - Copyright (C) 2002-2020 Free Software Foundation, Inc. + Copyright (C) 2002-2021 Free Software Foundation, Inc. Contributed by Apple Computer, Inc. Written by Michael Snyder. @@ -33,7 +33,7 @@ #include "value.h" #include "symfile.h" #include "objfiles.h" -#include "target.h" /* for target_has_execution */ +#include "target.h" #include "gdbcore.h" #include "gdbcmd.h" #include "frame.h" @@ -43,6 +43,7 @@ #include "infcall.h" #include "valprint.h" #include "cli/cli-utils.h" +#include "c-exp.h" #include #include @@ -112,7 +113,7 @@ lookup_objc_class (struct gdbarch *gdbarch, const char *classname) struct type *char_type = builtin_type (gdbarch)->builtin_char; struct value * function, *classval; - if (! target_has_execution) + if (! target_has_execution ()) { /* Can't call into inferior to lookup class. */ return 0; @@ -141,7 +142,7 @@ lookup_child_selector (struct gdbarch *gdbarch, const char *selname) struct type *char_type = builtin_type (gdbarch)->builtin_char; struct value * function, *selstring; - if (! target_has_execution) + if (! target_has_execution ()) { /* Can't call into inferior to lookup selector. */ return 0; @@ -164,7 +165,7 @@ lookup_child_selector (struct gdbarch *gdbarch, const char *selname) } struct value * -value_nsstring (struct gdbarch *gdbarch, char *ptr, int len) +value_nsstring (struct gdbarch *gdbarch, const char *ptr, int len) { struct type *char_type = builtin_type (gdbarch)->builtin_char; struct value *stringValue[3]; @@ -172,7 +173,7 @@ value_nsstring (struct gdbarch *gdbarch, char *ptr, int len) struct symbol *sym; struct type *type; - if (!target_has_execution) + if (!target_has_execution ()) return 0; /* Can't call into inferior to create NSString. */ stringValue[2] = value_string(ptr, len, char_type); @@ -281,81 +282,33 @@ objc_demangle (const char *mangled, int options) return NULL; /* Not an objc mangled name. */ } - -/* Table mapping opcodes into strings for printing operators - and precedences of the operators. */ - -static const struct op_print objc_op_print_tab[] = - { - {",", BINOP_COMMA, PREC_COMMA, 0}, - {"=", BINOP_ASSIGN, PREC_ASSIGN, 1}, - {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0}, - {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0}, - {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0}, - {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0}, - {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0}, - {"==", BINOP_EQUAL, PREC_EQUAL, 0}, - {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0}, - {"<=", BINOP_LEQ, PREC_ORDER, 0}, - {">=", BINOP_GEQ, PREC_ORDER, 0}, - {">", BINOP_GTR, PREC_ORDER, 0}, - {"<", BINOP_LESS, PREC_ORDER, 0}, - {">>", BINOP_RSH, PREC_SHIFT, 0}, - {"<<", BINOP_LSH, PREC_SHIFT, 0}, - {"+", BINOP_ADD, PREC_ADD, 0}, - {"-", BINOP_SUB, PREC_ADD, 0}, - {"*", BINOP_MUL, PREC_MUL, 0}, - {"/", BINOP_DIV, PREC_MUL, 0}, - {"%", BINOP_REM, PREC_MUL, 0}, - {"@", BINOP_REPEAT, PREC_REPEAT, 0}, - {"-", UNOP_NEG, PREC_PREFIX, 0}, - {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0}, - {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0}, - {"*", UNOP_IND, PREC_PREFIX, 0}, - {"&", UNOP_ADDR, PREC_PREFIX, 0}, - {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0}, - {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0}, - {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0}, - {NULL, OP_NULL, PREC_NULL, 0} -}; - -static const char *objc_extensions[] = -{ - ".m", NULL -}; - -/* Constant data representing the Objective-C language. */ - -extern const struct language_data objc_language_data = -{ - "objective-c", /* Language name */ - "Objective-C", - language_objc, - range_check_off, - case_sensitive_on, - array_row_major, - macro_expansion_c, - objc_extensions, - &exp_descriptor_standard, - "self", /* name_of_this */ - false, /* la_store_sym_names_in_linkage_form_p */ - objc_op_print_tab, /* Expression operators for printing */ - 1, /* C-style arrays */ - 0, /* String lower bound */ - &default_varobj_ops, - c_is_string_type_p, - "{...}" /* la_struct_too_deep_ellipsis */ -}; - /* Class representing the Objective-C language. */ class objc_language : public language_defn { public: objc_language () - : language_defn (language_objc, objc_language_data) + : language_defn (language_objc) { /* Nothing. */ } + /* See language.h. */ + + const char *name () const override + { return "objective-c"; } + + /* See language.h. */ + + const char *natural_name () const override + { return "Objective-C"; } + + /* See language.h. */ + + const std::vector &filename_extensions () const override + { + static const std::vector extensions = { ".m" }; + return extensions; + } + /* See language.h. */ void language_arch_info (struct gdbarch *gdbarch, struct language_arch_info *lai) const override @@ -373,7 +326,7 @@ public: /* See language.h. */ - char *demangle (const char *mangled, int options) const override + char *demangle_symbol (const char *mangled, int options) const override { return objc_demangle (mangled, options); } @@ -420,6 +373,16 @@ public: return real_stop_pc; } + + /* See language.h. */ + + const char *name_of_this () const override + { return "self"; } + + /* See language.h. */ + + enum macro_expansion macro_expansion () const override + { return macro_expansion_c; } }; /* Single instance of the class representing the Objective-C language. */ @@ -502,15 +465,20 @@ end_msglist (struct parser_state *ps) char *p = msglist_sel; CORE_ADDR selid; + std::vector args = ps->pop_vector (val); + expr::operation_up target = ps->pop (); + selname_chain = sel->next; msglist_len = sel->msglist_len; msglist_sel = sel->msglist_sel; selid = lookup_child_selector (ps->gdbarch (), p); if (!selid) error (_("Can't find selector \"%s\""), p); - write_exp_elt_longcst (ps, selid); + + ps->push_new (selid, std::move (target), + std::move (args)); + xfree(p); - write_exp_elt_longcst (ps, val); /* Number of args */ xfree(sel); return val; @@ -1189,10 +1157,10 @@ print_object_command (const char *args, int from_tty) { expression_up expr = parse_expression (args); - int pc = 0; - object = evaluate_subexp (builtin_type (expr->gdbarch)->builtin_data_ptr, - expr.get (), &pc, EVAL_NORMAL); + object + = evaluate_expression (expr.get (), + builtin_type (expr->gdbarch)->builtin_data_ptr); } /* Validate the address for sanity. */