Add call stack to RuntimeException based errors

This commit is contained in:
Bartłomiej Pluta
2019-07-10 12:53:58 +02:00
parent d10df10282
commit 9ea2202d14
7 changed files with 39 additions and 24 deletions

View File

@@ -19,9 +19,13 @@ class Function:
return f"{self.name}{self.signature.string}"
def call(self, env, args):
from smnp.environment.environment import CallStackItem
result = self.signature.check(args)
if result[0]:
env.callStack.append(CallStackItem(self.name))
ret = self.function(env, *result[1:])
env.callStack.pop(-1)
if ret is None:
return Type.void()
return ret
@@ -38,10 +42,14 @@ class CombinedFunction(Function):
return "\nor\n".join([f"{self.name}{function.signature.string}" for function in self.functions])
def call(self, env, args):
from smnp.environment.environment import CallStackItem
for function in self.functions:
result = function.signature.check(args)
if result[0]:
env.callStack.append(CallStackItem(self.name))
ret = function.function(env, *result[1:])
env.callStack.pop(-1)
if ret is None:
return Type.void()
return ret