mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 12:24:45 +00:00
Fix: REPL can save execution state
This commit is contained in:
parent
74de987b3f
commit
7a6d59b347
3 changed files with 97 additions and 6 deletions
34
src/scripts/repl_server.py
Normal file
34
src/scripts/repl_server.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
# Append __ to all variables to prevent name collisions in exec
|
||||
import socket as __socket
|
||||
import sys as __sys
|
||||
import importlib as __importlib
|
||||
import io as __io
|
||||
|
||||
__server_socket = __socket.socket()
|
||||
__server_socket.bind(('0.0.0.0', 8736))
|
||||
__server_socket.listen(1)
|
||||
(__client_socket, __client_address) = __server_socket.accept()
|
||||
|
||||
__already_loaded = False
|
||||
__res = ""
|
||||
|
||||
while True:
|
||||
__order = __client_socket.recv(1024).decode()
|
||||
if __order == 'quit' or __order == 'exit':
|
||||
__client_socket.send("closed".encode())
|
||||
break
|
||||
elif __order == 'load':
|
||||
__sys.stdout = __io.StringIO()
|
||||
if __already_loaded:
|
||||
__res = str(exec("__importlib.reload(o)"))
|
||||
else:
|
||||
__res = str(exec("import o"))
|
||||
__already_loaded = True
|
||||
__out = __sys.stdout.getvalue().strip()
|
||||
__res = __out + "\n" + __res
|
||||
__client_socket.send(__res.encode())
|
||||
else:
|
||||
__client_socket.send("unknown operation".encode())
|
||||
|
||||
__client_socket.close()
|
||||
__server_socket.close()
|
Loading…
Add table
Add a link
Reference in a new issue