nodes: 0, module; 1, function_definition; 2, function_name:append_data; 3, parameters; 4, comment:# pylint:disable=unused-argument; 5, block; 6, identifier:self; 7, identifier:name; 8, identifier:initial_content; 9, identifier:size; 10, default_parameter; 11, default_parameter; 12, expression_statement; 13, if_statement; 14, if_statement; 15, expression_statement; 16, expression_statement; 17, if_statement; 18, identifier:readonly; 19, False; 20, identifier:sort; 21, string:"unknown"; 22, comment:"""
          Append a new data entry into the binary with specific name, content, and size.
  
          :param str name: Name of the data entry. Will be used as the label.
          :param bytes initial_content: The initial content of the data entry.
          :param int size: Size of the data entry.
          :param bool readonly: If the data entry belongs to the readonly region.
          :param str sort: Type of the data.
          :return: None
          """; 23, identifier:readonly; 24, block; 25, else_clause; 26, comparison_operator:initial_content is None; 27, block; 28, assignment; 29, assignment; 30, comparison_operator:section_name == '.rodata'; 31, block; 32, else_clause; 33, expression_statement; 34, block; 35, identifier:initial_content; 36, None; 37, expression_statement; 38, identifier:initial_content; 39, call; 40, identifier:data; 41, call; 42, identifier:section_name; 43, string; 44, expression_statement; 45, block; 46, assignment; 47, expression_statement; 48, assignment; 49, attribute; 50, argument_list; 51, identifier:Data; 52, argument_list; 53, string_content:.rodata; 54, call; 55, expression_statement; 56, identifier:section_name; 57, string:".rodata"; 58, assignment; 59, identifier:initial_content; 60, string:b""; 61, identifier:initial_content; 62, identifier:ljust; 63, identifier:size; 64, string:b"\x00"; 65, identifier:self; 66, keyword_argument; 67, keyword_argument; 68, keyword_argument; 69, keyword_argument; 70, keyword_argument; 71, keyword_argument; 72, attribute; 73, argument_list; 74, call; 75, identifier:section_name; 76, string; 77, identifier:memory_data; 78, None; 79, identifier:section_name; 80, identifier:section_name; 81, identifier:name; 82, identifier:name; 83, identifier:initial_content; 84, identifier:initial_content; 85, identifier:size; 86, identifier:size; 87, identifier:sort; 88, identifier:sort; 89, attribute; 90, identifier:append; 91, identifier:data; 92, attribute; 93, argument_list; 94, string_content:.data; 95, identifier:self; 96, identifier:extra_rodata; 97, attribute; 98, identifier:append; 99, identifier:data; 100, identifier:self; 101, identifier:extra_data
code: def append_data(self, name, initial_content, size, readonly=False, sort="unknown"):  # pylint:disable=unused-argument
          """
          Append a new data entry into the binary with specific name, content, and size.
  
          :param str name: Name of the data entry. Will be used as the label.
          :param bytes initial_content: The initial content of the data entry.
          :param int size: Size of the data entry.
          :param bool readonly: If the data entry belongs to the readonly region.
          :param str sort: Type of the data.
          :return: None
          """
  
          if readonly:
              section_name = ".rodata"
          else:
              section_name = '.data'
  
          if initial_content is None:
              initial_content = b""
          initial_content = initial_content.ljust(size, b"\x00")
          data = Data(self, memory_data=None, section_name=section_name, name=name, initial_content=initial_content,
                      size=size, sort=sort
                      )
  
          if section_name == '.rodata':
              self.extra_rodata.append(data)
          else:
              self.extra_data.append(data)