Create evaluator for extend statement

This commit is contained in:
Bartłomiej Pluta
2019-07-12 22:31:14 +02:00
parent 41f385de09
commit 033d864b0f
3 changed files with 7 additions and 4 deletions

View File

@@ -8,7 +8,7 @@ from smnp.program.interpreter import Interpreter
def main():
try:
stdLibraryEnv = loadStandardLibrary()
Interpreter.interpretFile(sys.argv[1], printTokens=False, printAst=True, execute=True, baseEnvironment=stdLibraryEnv)
Interpreter.interpretFile(sys.argv[1], printTokens=False, printAst=False, execute=True, baseEnvironment=stdLibraryEnv)
#draft()
#tokens = tokenize(['function a(b...) { x+y}'])
#FunctionDefinitionParser(tokens).node.print()

View File

@@ -1,5 +1,6 @@
from smnp.ast.node.block import Block
from smnp.ast.node.condition import IfElse
from smnp.ast.node.extend import Extend
from smnp.ast.node.function import FunctionDefinition
from smnp.ast.node.imports import Import
from smnp.ast.node.program import Program
@@ -75,6 +76,7 @@ def evaluate(node, environment):
from smnp.runtime.evaluators.imports import ImportEvaluator
from smnp.runtime.evaluators.function import FunctionDefinitionEvaluator
from smnp.runtime.evaluators.function import ReturnEvaluator
from smnp.runtime.evaluators.extend import ExtendEvaluator
result = Evaluator.oneOf(
Evaluator.forNodes(ProgramEvaluator.evaluate, Program),
Evaluator.forNodes(IfElseStatementEvaluator.evaluate, IfElse),
@@ -82,6 +84,7 @@ def evaluate(node, environment):
Evaluator.forNodes(ImportEvaluator.evaluate, Import),
Evaluator.forNodes(FunctionDefinitionEvaluator.evaluate, FunctionDefinition),
Evaluator.forNodes(ReturnEvaluator.evaluate, Return),
Evaluator.forNodes(ExtendEvaluator.evaluate, Extend),
#Evaluator.forNodes(ImportEvaluator.evaluate, ImportNode),
#Evaluator.forNodes(FunctionDefinitionEvaluator.evaluate, FunctionDefinitionNode),
#Evaluator.forNodes(ExtendEvaluator.evaluate, ExtendNode),

View File

@@ -17,11 +17,11 @@ class ExtendEvaluator(Evaluator):
@classmethod
def _typeToMethodSignature(cls, node):
if type(node.specifiers) == NoneNode:
return signature(ofType(node.type))
return signature(ofType(node.type.value))
elif node.type == Type.LIST:
elif node.type.value == Type.LIST:
return signature(listSpecifier(node.specifiers[0]))
elif node.type == Type.MAP:
elif node.type.value == Type.MAP:
return signature(mapSpecifier(node.specifiers[0], node.specifiers[1]))
@classmethod