Better tiger_print.

This commit is contained in:
Jon Michael Aanes 2017-11-13 18:28:21 +01:00
parent 2086af34d9
commit de369fd440

View File

@ -3,12 +3,14 @@ from enum import Enum
from llvm_emulator import ll
import sys
import random
############
# Messages #
PRINT_LEVEL_SILENT = -1
PRINT_LEVEL_NONE = 0
PRINT_LEVEL_ERR = 1
PRINT_LEVEL_ERROR = 1
PRINT_LEVEL_WARN = 2
PRINT_LEVEL_INFO = 3
@ -20,7 +22,7 @@ def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
def err(msg):
if PRINT_LEVEL >= PRINT_LEVEL_ERR:
if PRINT_LEVEL >= PRINT_LEVEL_ERROR:
eprint('ERROR: {}'
.format(msg))
@ -37,6 +39,13 @@ def info(*args, **kwargs):
if PRINT_LEVEL >= PRINT_LEVEL_INFO:
print(*args, **kwargs)
def tiger_print(msg):
if PRINT_LEVEL == PRINT_LEVEL_SILENT:
return
if not isinstance(msg, str):
msg = ''.join([chr(random.randint(0, 255)) for i in range(random.randint(1, 5))])
sys.stdout.write(msg)
##########
# Stuff? #
@ -624,7 +633,7 @@ def emulate_builtin(name, arguments_v, ssa_env, heap):
info('Printing string, heap[{}]:'
.format(struct_begin))
printee = heap[struct_begin + 1]
info(printee)
tiger_print(printee)
if not isinstance(printee, str):
warn('What was printed, was not stored as a string in the heap')
elif name in builtins: