Add a "quiet" mode.

This brings the Python Joy interpreter into better congruence with the
Nim interpreter for ease of automated testing.
This commit is contained in:
Simon Forman 2021-04-06 11:28:30 -07:00
parent 1cf82b8bcb
commit c00c6a4e32
3 changed files with 37 additions and 3 deletions

6
README
View File

@ -64,6 +64,12 @@ To start a crude REPL:
python -m joy
There is a "quiet" mode for e.g. using joy from a shell script:
python -m joy -q
This supresses the initial banner output and the prompt text.
§.3 Documentation

View File

@ -17,12 +17,18 @@
# You should have received a copy of the GNU General Public License
# along with Thun. If not see <http://www.gnu.org/licenses/>.
#
import sys
from .library import initialize, inscribe
from .joy import repl
from .joy import repl, interp
from .utils.pretty_print import trace
inscribe(trace)
if '-q' in sys.argv:
j = interp
else:
j = repl
print('''\
Thun - Copyright © 2017 Simon Forman
This program comes with ABSOLUTELY NO WARRANTY; for details type "warranty".
@ -31,4 +37,4 @@ under certain conditions; type "sharing" for details.
Type "words" to see a list of all words, and "[<name>] help" to print the
docs for a word.
''')
stack = repl(dictionary=initialize())
stack = j(dictionary=initialize())

View File

@ -107,3 +107,25 @@ def repl(stack=(), dictionary=None):
print_exc()
print()
return stack
def interp(stack=(), dictionary=None):
'''
Simple REPL with no extra output, suitable for use in scripts.
'''
if dictionary is None:
dictionary = {}
try:
while True:
try:
text = input()
except (EOFError, KeyboardInterrupt):
break
try:
stack, _, dictionary = run(text, stack, dictionary)
except:
print_exc()
print(stack_to_string(stack))
except:
print_exc()
return stack