From fc9292fc5c10b5199f176da2fcec7d62df4c88d4 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 22 Jul 2021 18:25:18 +0200 Subject: lsp/document.py: extend source buffer if necessary during reload --- pyGHDL/lsp/document.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'pyGHDL') diff --git a/pyGHDL/lsp/document.py b/pyGHDL/lsp/document.py index d60f216d4..15a7ff0cd 100644 --- a/pyGHDL/lsp/document.py +++ b/pyGHDL/lsp/document.py @@ -49,10 +49,24 @@ class Document(object): files_map_editor.Fill_Text(sfe, ctypes.c_char_p(src_bytes), src_len) return sfe + def __extend_source_buffer(self, new_size): + self.gap_size *= 2 + fileid = files_map.Get_File_Name(self._fe) + dirid = files_map.Get_Directory_Name(self._fe) + buf_len = files_map.Get_File_Length(self._fe) + new_size + self.gap_size + files_map.Discard_Source_File(self._fe) + new_sfe = files_map.Reserve_Source_File(dirid, fileid, buf_len) + files_map_editor.Copy_Source_File(new_sfe, self._fe) + files_map.Free_Source_File(self._fe) + self._fe = new_sfe + def reload(self, source): """Reload the source of a document.""" src_bytes = source.encode(Document.encoding, "replace") - files_map_editor.Fill_Text(self._fe, ctypes.c_char_p(src_bytes), len(src_bytes)) + l = len(src_bytes) + if l >= files_map.Get_Buffer_Length(self._fe): + self.__extend_source_buffer(l) + files_map_editor.Fill_Text(self._fe, ctypes.c_char_p(src_bytes), l) def __str__(self): return str(self.uri) @@ -93,15 +107,7 @@ class Document(object): # Failed to replace text. # Increase size - self.gap_size *= 2 - fileid = files_map.Get_File_Name(self._fe) - dirid = files_map.Get_Directory_Name(self._fe) - buf_len = files_map.Get_File_Length(self._fe) + len(text_bytes) + self.gap_size - files_map.Discard_Source_File(self._fe) - new_sfe = files_map.Reserve_Source_File(dirid, fileid, buf_len) - files_map_editor.Copy_Source_File(new_sfe, self._fe) - files_map.Free_Source_File(self._fe) - self._fe = new_sfe + self.__extend_source_buffer(len(text_bytes)) status = files_map_editor.Replace_Text( self._fe, start_line + 1, -- cgit v1.2.3