diff --git a/smnp/library/loader.py b/smnp/library/loader.py index 673eb89..c40f6f4 100644 --- a/smnp/library/loader.py +++ b/smnp/library/loader.py @@ -5,7 +5,5 @@ from smnp.program.interpreter import Interpreter def loadStandardLibrary(): mainSource = resource_string('smnp.library.code', 'main.mus').decode("utf-8") - boolSource = resource_string('smnp.library.code', 'bool.mus').decode("utf-8") env = Interpreter.interpretString(mainSource) - return Interpreter.interpretString(boolSource, baseEnvironment=env) - + return env diff --git a/smnp/main.py b/smnp/main.py index be51437..e68357a 100644 --- a/smnp/main.py +++ b/smnp/main.py @@ -1,13 +1,14 @@ import sys from smnp.error.base import SmnpException +from smnp.library.loader import loadStandardLibrary from smnp.program.interpreter import Interpreter def main(): try: - #stdLibraryEnv = loadStandardLibrary() - Interpreter.interpretFile(sys.argv[1], printTokens=False, printAst=True, execute=True, baseEnvironment=None) + stdLibraryEnv = loadStandardLibrary() + Interpreter.interpretFile(sys.argv[1], printTokens=False, printAst=True, execute=True, baseEnvironment=stdLibraryEnv) #draft() #tokens = tokenize(['function a(b...) { x+y}']) #FunctionDefinitionParser(tokens).node.print() diff --git a/smnp/runtime/evaluator.py b/smnp/runtime/evaluator.py index bab28d1..97eb148 100644 --- a/smnp/runtime/evaluator.py +++ b/smnp/runtime/evaluator.py @@ -1,5 +1,6 @@ from smnp.ast.node.block import Block from smnp.ast.node.condition import IfElse +from smnp.ast.node.imports import Import from smnp.ast.node.program import Program from smnp.error.runtime import RuntimeException from smnp.type.model import Type @@ -69,10 +70,12 @@ def evaluate(node, environment): from smnp.runtime.evaluators.expression import expressionEvaluator from smnp.runtime.evaluators.condition import IfElseStatementEvaluator from smnp.runtime.evaluators.block import BlockEvaluator + from smnp.runtime.evaluators.imports import ImportEvaluator result = Evaluator.oneOf( Evaluator.forNodes(ProgramEvaluator.evaluate, Program), Evaluator.forNodes(IfElseStatementEvaluator.evaluate, IfElse), Evaluator.forNodes(BlockEvaluator.evaluate, Block), + Evaluator.forNodes(ImportEvaluator.evaluate, Import), #Evaluator.forNodes(ImportEvaluator.evaluate, ImportNode), #Evaluator.forNodes(FunctionDefinitionEvaluator.evaluate, FunctionDefinitionNode), #Evaluator.forNodes(ExtendEvaluator.evaluate, ExtendNode), diff --git a/smnp/runtime/evaluators/imports.py b/smnp/runtime/evaluators/imports.py index b971650..11b56a1 100644 --- a/smnp/runtime/evaluators/imports.py +++ b/smnp/runtime/evaluators/imports.py @@ -1,4 +1,3 @@ -from smnp.ast.node.none import NoneNode from smnp.program.interpreter import Interpreter from smnp.runtime.evaluator import Evaluator @@ -7,13 +6,6 @@ class ImportEvaluator(Evaluator): @classmethod def evaluator(cls, node, environment): - if type(node.type) == NoneNode: - cls._evaluateCodeImport(node, environment) - else: - raise RuntimeError("Importing types is not implemented yet") - - @classmethod - def _evaluateCodeImport(cls, node, environment): source = node.source newEnvironment = Interpreter.interpretFile(source.value) environment.extend(newEnvironment) \ No newline at end of file