Add 'source' to RuntimeException

This commit is contained in:
Bartłomiej Pluta
2019-07-13 15:06:53 +02:00
parent 86cf5d01f3
commit b6983df2d3
6 changed files with 39 additions and 18 deletions

View File

@@ -1,6 +1,7 @@
from smnp.ast.parser import parse
from smnp.environment.factory import createEnvironment
from smnp.environment.environment import Environment
from smnp.error.runtime import RuntimeException
from smnp.module import functions, methods
from smnp.program.FileReader import readLines
from smnp.runtime.evaluator import evaluate
from smnp.token.tokenizer import tokenize
@@ -9,16 +10,31 @@ from smnp.token.tokenizer import tokenize
class Interpreter:
@staticmethod
def interpretString(string, printTokens=False, printAst=False, execute=True, baseEnvironment=None):
return Interpreter._interpret(string.splitlines(), printTokens, printAst, execute, baseEnvironment)
def interpretString(string, source, printTokens=False, printAst=False, execute=True, baseEnvironment=None):
return Interpreter._interpret(
string.splitlines(),
source,
printTokens,
printAst,
execute,
baseEnvironment,
)
@staticmethod
def interpretFile(file, printTokens=False, printAst=False, execute=True, baseEnvironment=None):
return Interpreter._interpret(readLines(file), printTokens, printAst, execute, baseEnvironment)
def interpretFile(file, printTokens=False, printAst=False, execute=True, baseEnvironment=None, source=None):
return Interpreter._interpret(
readLines(file),
source if source is not None else file,
printTokens,
printAst,
execute,
baseEnvironment,
)
@staticmethod
def _interpret(lines, printTokens=False, printAst=False, execute=True, baseEnvironment=None):
environment = createEnvironment()
def _interpret(lines, source, printTokens=False, printAst=False, execute=True, baseEnvironment=None):
environment = Environment([{}], functions, methods, source=source)
if baseEnvironment is not None:
environment.extend(baseEnvironment)
@@ -37,4 +53,5 @@ class Interpreter:
return environment
except RuntimeException as e:
e.environment = environment
e.file = environment.source
raise e