def __create_property_symbol(self, node, parent_name): unique_name, name, klass_name = get_symbol_names(node) type_desc = type_description_from_node(node) type_ = QualifiedSymbol(type_tokens=type_desc.type_tokens) self.add_attrs(type_, type_desc=type_desc) flags = [] writable = node.attrib.get('writable') construct = node.attrib.get('construct') construct_only = node.attrib.get('construct-only') flags.append(ReadableFlag()) if writable == '1': flags.append(WritableFlag()) if construct_only == '1': flags.append(ConstructOnlyFlag()) elif construct == '1': flags.append(ConstructFlag()) res = self.get_or_create_symbol( PropertySymbol, node, prop_type=type_, display_name=name, unique_name=unique_name, filename=self.__get_symbol_filename(klass_name), parent_name=parent_name) extra_content = self.formatter._format_flags(flags) res.extension_contents['Flags'] = extra_content return res
def __create_alias_symbol(self, node, gi_name, parent_name): name = get_symbol_names(node)[0] type_desc = type_description_from_node(node) aliased_type = QualifiedSymbol(type_tokens=type_desc.type_tokens) self.add_attrs(aliased_type, type_desc=type_desc) filename = self.__get_symbol_filename(name, node) alias_link = [l for l in type_desc.type_tokens if isinstance(l, Link)] for lang in self.languages: if lang.language_name == 'c': continue fund_type = lang.get_fundamental(type_desc.c_name) if fund_type: # The alias name is now considered as a FUNDAMENTAL type. lang.add_fundamental(name, fund_type) else: if alias_link: lang.add_alias_type(name, aliased_type) return self.create_symbol(AliasSymbol, node, aliased_type=aliased_type, display_name=name, filename=filename, parent_name=parent_name)
def __get_structure_members(self, node, filename, struct_name, parent_name, in_union=False): members = [] for field in node.getchildren(): if field.tag in [core_ns('record'), core_ns('union')]: if 'name' in field.attrib: struct_name = '%s.%s' % (struct_name, field.attrib['name']) new_union = field.tag == core_ns('union') union_members = self.__get_structure_members( node=field, filename=filename, struct_name=struct_name, parent_name=parent_name, in_union=in_union or new_union) members += union_members continue elif field.tag != core_ns('field'): continue children = field.getchildren() if not children: continue if field.attrib.get('private', False): continue if children[0].tag == core_ns('callback'): continue type_desc = type_description_from_node(field) if is_callback_type(type_desc.c_name): continue field_name = field.attrib['name'] name = "%s.%s" % (struct_name, field_name) qtype = QualifiedSymbol(type_tokens=type_desc.type_tokens) self.add_attrs(qtype, type_desc=type_desc) member = self.create_symbol(FieldSymbol, member_name=field_name, qtype=qtype, filename=filename, display_name=name, unique_name=name, parent_name=parent_name) if member: self.add_attrs(member, type_desc=type_desc, in_union=in_union) members.append(member) return members
def __create_parameter_symbol(self, gi_parameter): param_name = gi_parameter.attrib['name'] type_desc = type_description_from_node(gi_parameter) direction = gi_parameter.attrib.get('direction') if direction is None: direction = 'in' res = ParameterSymbol(argname=param_name, type_tokens=type_desc.type_tokens) self.add_attrs(res, type_desc=type_desc, direction=direction) return res, direction
def __create_return_value_symbol(self, gi_retval, out_parameters): type_desc = type_description_from_node(gi_retval) if type_desc.gi_name == 'none': ret_item = None else: ret_item = ReturnItemSymbol(type_tokens=type_desc.type_tokens) self.add_attrs(ret_item, type_desc=type_desc) res = [ret_item] for out_param in out_parameters: ret_item = ReturnItemSymbol(type_tokens=out_param.input_tokens, name=out_param.argname) self.add_attrs(ret_item, type_desc=self.get_attr(out_param, 'type_desc')) res.append(ret_item) return res
def __create_alias_symbol(self, node, gi_name, parent_name): name = get_symbol_names(node)[0] type_desc = type_description_from_node(node) aliased_type = QualifiedSymbol(type_tokens=type_desc.type_tokens) self.add_attrs(aliased_type, type_desc=type_desc) filename = self.__get_symbol_filename(name) alias_link = [l for l in type_desc.type_tokens if isinstance(l, Link)] for lang in ('python', 'javascript'): fund_type = FUNDAMENTALS[lang].get(type_desc.c_name) if fund_type: # The alias name is now conciderd as a FUNDAMENTAL type. FUNDAMENTALS[lang][name] = fund_type else: if alias_link: ALIASED_LINKS[lang][name] = alias_link[0] return self.get_or_create_symbol(AliasSymbol, node, aliased_type=aliased_type, display_name=name, filename=filename, parent_name=parent_name)