Add 'source' to RuntimeException
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user