Create evaluator for extend statement
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user