Update copyright year in most headers.
[deliverable/binutils-gdb.git] / gdb / linespec.c
index 1be2686a448e71361b90cdc2e35cc0788db23ffa..138f0d8a3360b31b12cfc456487202f5aeafab3a 100644 (file)
@@ -2,7 +2,7 @@
 
    Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
-   2009 Free Software Foundation, Inc.
+   2009, 2010 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -1428,6 +1428,7 @@ lookup_prefix_sym (char **argptr, char *p)
 {
   char *p1;
   char *copy;
+  struct symbol *sym;
 
   /* Extract the class name.  */
   p1 = p;
@@ -1446,7 +1447,26 @@ lookup_prefix_sym (char **argptr, char *p)
   /* At this point p1->"::inA::fun", p->"inA::fun" copy->"AAA",
      argptr->"inA::fun" */
 
-  return lookup_symbol (copy, 0, STRUCT_DOMAIN, 0);
+  sym = lookup_symbol (copy, 0, STRUCT_DOMAIN, 0);
+  if (sym == NULL)
+    {
+      /* Typedefs are in VAR_DOMAIN so the above symbol lookup will
+        fail when the user attempts to lookup a method of a class
+        via a typedef'd name (NOT via the class's name, which is already
+        handled in symbol_matches_domain).  So try the lookup again
+        using VAR_DOMAIN (where typedefs live) and double-check that we
+        found a struct/class type.  */
+      struct symbol *s = lookup_symbol (copy, 0, VAR_DOMAIN, 0);
+      if (s != NULL)
+       {
+         struct type *t = SYMBOL_TYPE (s);
+         CHECK_TYPEDEF (t);
+         if (TYPE_CODE (t) == TYPE_CODE_STRUCT)
+           return s;
+       }
+    }
+
+  return sym;
 }
 
 /* This finds the method COPY in the class whose type is T and whose
This page took 0.026513 seconds and 4 git commands to generate.