aboutsummaryrefslogtreecommitdiffstats
path: root/pyGHDL
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2021-07-22 18:25:18 +0200
committerTristan Gingold <tgingold@free.fr>2021-07-22 18:25:18 +0200
commitfc9292fc5c10b5199f176da2fcec7d62df4c88d4 (patch)
treecc693b441430b1077c66bcb00033b9516b705df3 /pyGHDL
parent6ec5bc7f0942919003406a04029b8c408efc1e8c (diff)
downloadghdl-fc9292fc5c10b5199f176da2fcec7d62df4c88d4.tar.gz
ghdl-fc9292fc5c10b5199f176da2fcec7d62df4c88d4.tar.bz2
ghdl-fc9292fc5c10b5199f176da2fcec7d62df4c88d4.zip
lsp/document.py: extend source buffer if necessary during reload
Diffstat (limited to 'pyGHDL')
-rw-r--r--pyGHDL/lsp/document.py26
1 files changed, 16 insertions, 10 deletions
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,