def _run(self, interpreter: Interpreter): function = interpreter.stack_pop() input_values: List[Any] if self.has_all_optionals: inputs = interpreter.stack_pop() inputs.get_value() # check defined input_values = inputs.value else: input_values = [] interpreter.add_stack() # some functions dont have inputs if function.inputs and function.inputs.value: # take input parameters from stack for input_, variable in zip(input_values, function.inputs.value): variable.value = input_.get_value() variable.inputs = input_.inputs interpreter.set_variable(variable.name, variable) try: function.get_value()(interpreter) except TypeError: raise exceptions.TypeException( f"Cannot call variable of type {function.get_value().__class__.__name__}!", token=self, ) from None except exceptions.ReturnException: pass return_value: Variable = interpreter.stack_pop() # type: ignore interpreter.remove_stack() interpreter.set_variable("result", return_value)
def _run(self, interpreter: Interpreter): collection = interpreter.stack_pop() try: list_ = list(collection.get_value()) except TypeError: raise exceptions.TypeException( f"Value of type {collection.get_value().__class__.__name__} is not iterable!" ) from None function = interpreter.stack_pop() # some functions dont have inputs if (not function.inputs or not function.inputs.value or not len(function.inputs.value) == 1): raise exceptions.TypeException( "Apply function should expect one input!") interpreter.add_stack() variable = function.inputs.value[0] interpreter.set_variable(variable.name, variable) for i, value in enumerate(list_): variable.value = value try: function.get_value()(interpreter) except TypeError: raise exceptions.TypeException( f"Cannot call variable of type {function.get_value().__class__.__name__}!" ) from None except exceptions.ReturnException: pass collection.value[i] = interpreter.stack_pop().get_value( ) # return value interpreter.remove_stack()
def run(self, interpreter: Interpreter): interpreter.run(self.tokens[0]) import_variables = interpreter.stack_pop().value filename = self.tokens[-1].value import_ = (self._import_python_module if filename.endswith(".py") else self._import_tokens) try: import_(interpreter, filename) except (FileNotFoundError, ModuleNotFoundError): raise exceptions.ImportException( f"Failed to import because file could not be found: {filename}", token=self, ) from None variables: List[Variable] = [] for import_variable in import_variables: try: variable = interpreter.get_variable(import_variable.name) except AttributeError: type_ = import_variable.value.__class__.__name__ raise exceptions.ValueException( f"Cannot import: value of type {type_} is not a variable!" ) from None if variable.get_qualifier("private"): raise exceptions.ImportException( f"Could not import private variable {variable.name} from module {filename}!", token=self, ) from None variables.append(variable) interpreter.remove_stack() for variable in variables: interpreter.set_variable(variable.name, variable)