def isObservableListName(self, name, func, cl): """ list of struct, robject """ parts = self.dot_re.split(name) firstName = parts[0] # if begin from this then search in class variables if firstName == 'this' and cl: vname = parts[1] va = cl.variables[vname] if self.isArrayType(va) == False: return False firstType = va.decltype[0].word if firstType == 'robject' or common.isStructName(firstType): return True elif firstName == 'world': # TODO(dem) check struct field is array type return self.isWorldListName(name) else: if func: for pname, pdecltype in func.params: if firstName == pname: firstType = pdecltype[0].word if firstType == 'robject' or common.isStructName(self.module, firstType): return True return False
def isObservableValueName(self, name, func, cl): """ Search name type, must be struct simple field or robject struct, robject """ # raise Exception('implement isStructFieldSimple') # split name parts = self.dot_re.split(name) count = len(parts) firstName = parts[0] if count == 1: return False # if name begin from this then search in class variables if firstName == 'this' and cl: vname = parts[1] va = cl.variables.get(vname, None) # is function name if va == None: return False # raise Exception('module "%s", class "%s" not contain "%s" variable, class variables "%s"' % (self.module.name, cl.name, vname, cl.getVariablesName())) if self.isStructType(va) or va.decltype[0].word == 'robject': return True # is value from world elif firstName == 'world': # TODO(dem) remove this hack if len(parts) == 1: return False # return True return not self.isObservableListName(name, func, cl) else: # check if value from func params if func: for pname, pdecltype in func.params: if firstName == pname: firstType = pdecltype[0].word if firstType == 'robject' or common.isStructName(self.module, firstType): return True # if value from robject list # if value from struct return False
def isArrayOfStructType(self, va): return self.isArrayType(va) and common.isStructName(self.module, va.decltype[0].word)
def isStructType(self, va): return (len(va.decltype) == 1) and common.isStructName(self.module, va.decltype[0].word)