Ejemplo n.º 1
0
 def traverse_members(self, view, pos, full = False):
     filename = self.currentfile
     line = view.line(pos)
     line.b=pos
     line=view.substr(line)
     oldline=""
     while oldline != line:
         oldline = line
         line = re.sub(r'\[[^\[]*\]', '', line)
         self.debug(line)
     line = re.split(',|&|;|!|\+|\(|\[|\s+', line.strip())[-1].strip()
     self.debug(line)
     chain = [x.split("[", 1)[0] for x in re.split('->|\.|::', line.strip())]
     self.debug(chain)
     func = self.current_function(view)
     if not filename in self.cc.functiontokens or not func in self.cc.functiontokens[filename]:
         self.debug("Not in a filled function (%s, %s)" % (filename, func))
         return []
     tokens = [x for x in self.cc.functiontokens[filename][func] if x[Tokenizer.T_NAME] == chain[0]]
     token = None
     if len(tokens) > 0:
         token = tokens[0]
     else:
         token = self.cc.tokens[chain[0]]
         if not token or token[Tokenizer.T_KIND] != Tokenizer.K_VARIABLE:
             return []
     type=""
     self.debug("Token: %s" % str(token))
     if token[Tokenizer.T_KIND] == Tokenizer.K_PARAM:
         type = token[Tokenizer.T_EXTRA]["type"]
     elif 'typeref' in token[Tokenizer.T_EXTRA]:
         type = token[Tokenizer.T_EXTRA]['typeref']
         if type[0:7] == "struct:":
             type=type[7:]
         elif type[0:6] == "union:":
             type=type[6:]
     else:
         type = Tokenizer.parsevariable(token[Tokenizer.T_SEARCH])[1]
     type = self.get_base_type(type)
     self.debug("type: %s" % str(type))
     pchain = chain[1:]
     if not full:
         pchain = pchain[0:-1]
     for newtype in pchain:
         type = type + "::" + newtype
         type = self.get_base_type(type)
         self.debug("type: %s" % str(type))
     members = self.cc.search_tokens(type + "::")
     goodmembers = self.filter_members(members,type)
     return goodmembers
Ejemplo n.º 2
0
 def traverse_members(self, view, pos, full = False):
     filename = self.currentfile
     line = view.line(pos)
     line.b=pos
     line=view.substr(line)
     oldline=""
     while oldline != line:
         oldline = line
         line = re.sub(r'\[[^\[]*\]', '', line)
         print(line)
     line = re.split(',|;|\(|\[|\s+', line.strip())[-1].strip()
     print(line)
     chain = [x.split("[", 1)[0] for x in re.split('->|\.|::', line.strip())]
     print(chain)
     func = self.current_function(view)
     if not filename in self.cc.functiontokens or not func in self.cc.functiontokens[filename]:
         print("Not in a filled function (%s, %s)" % (filename, func))
         return []
     tokens = [x for x in self.cc.functiontokens[filename][func] if x[Tokenizer.T_NAME] == chain[0]]
     token = None
     if len(tokens) > 0:
         token = tokens[0]
     else:
         token = self.cc.tokens[chain[0].lower()]
         if not token or token[Tokenizer.T_KIND] != Tokenizer.K_VARIABLE:
             return []
     type=""
     if token[Tokenizer.T_KIND] == Tokenizer.K_PARAM:
         type = token[Tokenizer.T_EXTRA]["type"]
     else:
         type = Tokenizer.parsevariable(token[Tokenizer.T_SEARCH])[1]
     type = self.get_base_type(type)
     pchain = chain[1:]
     if not full:
         pchain = pchain[0:-1]
     for newtype in pchain:
         type = type + "::" + newtype
         type = self.get_base_type(type)
     members = self.cc.search_tokens(type + "::")
     goodmembers = [x for x in members if x[Tokenizer.T_NAME][len(type)+2:].find("::") == -1]
     return goodmembers