def METHOD_NAME(one_param, members_list, hfile):
    """Check if param is struct or union definition, function, array, bitfield
    or there are multiple parameters.
    Structs, unions and functions need additional parsing.
    """
    if '{' in one_param.type_text:
        name = re.search(r'\}([\w\s\*,]+)$', one_param.type_text)
        if name:
            one_param.name = name.group(1).strip()
        type_text = re.sub(r'\}[\w\s*,]*$', '};', one_param.type_text)
        if one_param.type_text.startswith('struct'):
            s = parse_struct(type_text, hfile)
        elif one_param.type_text.startswith('union'):
            s = parse_union(type_text, hfile)
        elif one_param.type_text.startswith('enum'):
            s = parse_enum(type_text, hfile)
        else:
            s = ''
        one_param.type = s
        return
    # Members that looks like: 'int __SOCKADDR(su_);' are usually macros
    # It's invalid member, we try to determine correct member's type and name.
    one_param.type = re.sub(
        r'^([\w\s\*]*?)\s*\w+\((\w+)[\w\s,\*]*\)', r'\1 \2 ', one_param.type_text).strip()
    if one_param.type_text.endswith(')'):
        parse_function_type(one_param)
        return
    elif one_param.type_text.endswith(']'):
        param = one_param.type_text
        p_type, p_name = split_param_to_type_and_name(param[:param.find('[')])
        one_param.name = p_name
        one_param.type = p_type + ' ' + param[param.find('['):]
        return
    elif':' in one_param.type_text:
        one_param.parse_param_size()
        if ',' in one_param.type_text:
            one_param.parse_multiple_variables(members_list)
            return
    elif ',' in one_param.type_text:
        one_param.parse_multiple_variables(members_list)
        return
    p_type, p_name = split_param_to_type_and_name(one_param.type_text)
    one_param.name = p_name
    one_param.type = p_type