feat: исправлено поведение консоли при переполнении сделана обработка исключений
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
from dpdebugger import Debugger
|
from dpdebugger import Debugger
|
||||||
|
from vm import VMException, VMExceptionType, VMStatus
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import cast
|
from typing import cast
|
||||||
import math
|
import math
|
||||||
@ -86,13 +87,41 @@ class DebuggerUI:
|
|||||||
user_input = self.commands_history[0]
|
user_input = self.commands_history[0]
|
||||||
self.history_index = 0
|
self.history_index = 0
|
||||||
self.commands_history.appendleft("")
|
self.commands_history.appendleft("")
|
||||||
dbg_output = self.dbg.do_command(user_input.split())
|
|
||||||
self.terminal_panel.write(dbg_output)
|
try:
|
||||||
|
dbg_output = self.dbg.do_command(user_input.split())
|
||||||
|
except VMException as vme:
|
||||||
|
self._terminal_append(
|
||||||
|
"VM Exception: " + vme.message
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
# self._terminal_append(dbg_output)
|
||||||
|
self._terminal_append(dbg_output)
|
||||||
self._display_source_lines()
|
self._display_source_lines()
|
||||||
self.commands_history[0] = user_input
|
self.commands_history[0] = user_input
|
||||||
|
|
||||||
|
def _terminal_append(self, text: str):
|
||||||
|
self.terminal_panel.write(text)
|
||||||
|
viewport_height = self.terminal_panel.get_viewport_height()
|
||||||
|
contents = self.terminal_panel.get().split('\n')[-viewport_height:]
|
||||||
|
self.terminal_panel.set_text("\n".join(contents))
|
||||||
|
|
||||||
def _display_source_lines(self):
|
def _display_source_lines(self):
|
||||||
active_line = self.dbg.get_current_source_line_number()
|
if self.dbg._vm.status == VMStatus.FINISHED:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
active_line = self.dbg.get_current_source_line_number()
|
||||||
|
except KeyError:
|
||||||
|
self._terminal_append(
|
||||||
|
"Cant find source line your are on. "
|
||||||
|
"May be you reached end of program. "
|
||||||
|
)
|
||||||
|
self._terminal_append(
|
||||||
|
"Please type \"reset\" to reset vm "
|
||||||
|
"it's initial state"
|
||||||
|
)
|
||||||
|
return
|
||||||
lines = _get_source_lines(
|
lines = _get_source_lines(
|
||||||
srcline=active_line,
|
srcline=active_line,
|
||||||
lines=self.srclines,
|
lines=self.srclines,
|
||||||
|
|||||||
Reference in New Issue
Block a user