scummvm random work
[patches.git] / gdb-lookup-internal-first-2.patch
CommitLineData
5e993f12 12006-08-21 Mike Frysinger <vapier@gentoo.org>
2
3 * value.h (lookup_only_internalvar): New prototype.
4 * value.c (lookup_only_internalvar): New function.
5 (lookup_internalvar): Use lookup_only_internalvar.
6 * parse.c (write_dollar_variable): Look up $ symbols in internal
7 table first rather than last.
8
9--- gdb/value.h
10+++ gdb/value.h
11@@ -419,6 +419,8 @@ extern void set_internalvar_component (s
12 int bitpos, int bitsize,
13 struct value *newvalue);
14
15+extern struct internalvar *lookup_only_internalvar (char *name);
16+
17 extern struct internalvar *lookup_internalvar (char *name);
18
19 extern int value_equal (struct value *arg1, struct value *arg2);
20--- gdb/value.c
21+++ gdb/value.c
22@@ -741,10 +741,10 @@ init_if_undefined_command (char* args, i
23 normally include a dollar sign.
24
25 If the specified internal variable does not exist,
26- one is created, with a void value. */
27+ the return value is NULL. */
28
29 struct internalvar *
30-lookup_internalvar (char *name)
31+lookup_only_internalvar (char *name)
32 {
33 struct internalvar *var;
34
35@@ -752,6 +752,25 @@ lookup_internalvar (char *name)
36 if (strcmp (var->name, name) == 0)
37 return var;
38
39+ return NULL;
40+}
41+
42+
43+/* Look up an internal variable with name NAME. NAME should not
44+ normally include a dollar sign.
45+
46+ If the specified internal variable does not exist,
47+ one is created, with a void value. */
48+
49+struct internalvar *
50+lookup_internalvar (char *name)
51+{
52+ struct internalvar *var;
53+
54+ var = lookup_only_internalvar (name);
55+ if (var)
56+ return var;
57+
58 var = (struct internalvar *) xmalloc (sizeof (struct internalvar));
59 var->name = concat (name, (char *)NULL);
60 var->value = allocate_value (builtin_type_void);
61--- gdb/parse.c
62+++ gdb/parse.c
63@@ -448,6 +448,7 @@ write_dollar_variable (struct stoken str
64 {
65 struct symbol *sym = NULL;
66 struct minimal_symbol *msym = NULL;
67+ struct internalvar *isym = NULL;
68
69 /* Handle the tokens $digits; also $ (short for $0) and $$ (short for $$1)
70 and $$digits (equivalent to $<-digits> if you could type that). */
71@@ -486,6 +487,17 @@ write_dollar_variable (struct stoken str
72 if (i >= 0)
73 goto handle_register;
74
75+ /* Any names starting with $ are probably debugger internal variables. */
76+
77+ isym = lookup_only_internalvar (copy_name (str) + 1);
78+ if (isym)
79+ {
80+ write_exp_elt_opcode (OP_INTERNALVAR);
81+ write_exp_elt_intern (isym);
82+ write_exp_elt_opcode (OP_INTERNALVAR);
83+ return;
84+ }
85+
86 /* On some systems, such as HP-UX and hppa-linux, certain system routines
87 have names beginning with $ or $$. Check for those, first. */
88
89@@ -508,7 +520,7 @@ write_dollar_variable (struct stoken str
90 return;
91 }
92
93- /* Any other names starting in $ are debugger internal variables. */
94+ /* Any other names are assumed to be debugger internal variables. */
95
96 write_exp_elt_opcode (OP_INTERNALVAR);
97 write_exp_elt_intern (lookup_internalvar (copy_name (str) + 1));