Enable support for types' properties
This commit is contained in:
@@ -2,7 +2,6 @@ from smnp.ast.node.identifier import IdentifierNode
|
||||
from smnp.runtime.evaluator import evaluate, Evaluator, EvaluationResult
|
||||
from smnp.runtime.evaluators.expression import expressionEvaluator
|
||||
from smnp.type.model import Type
|
||||
from smnp.type.value import Value
|
||||
|
||||
|
||||
class AsteriskEvaluator(Evaluator):
|
||||
@@ -22,7 +21,7 @@ class AsteriskEvaluator(Evaluator):
|
||||
results = []
|
||||
automaticVariable = cls._automaticNamedVariable(node.iterator, environment, "_")
|
||||
for i in range(evaluatedIterator.value):
|
||||
environment.scopes[-1][automaticVariable] = Value(Type.INTEGER, i + 1)
|
||||
environment.scopes[-1][automaticVariable] = Type.integer(i + 1)
|
||||
result = evaluate(node.statement, environment).value #TODO check if it isn't necessary to verify 'result' attr of EvaluatioNResult
|
||||
if result is None or result.type == Type.VOID:
|
||||
results = None
|
||||
@@ -32,7 +31,7 @@ class AsteriskEvaluator(Evaluator):
|
||||
|
||||
del environment.scopes[-1][automaticVariable]
|
||||
|
||||
return EvaluationResult.OK(Value(Type.LIST, results).decompose() if results is not None else Value(Type.VOID, None))
|
||||
return EvaluationResult.OK(Type.list(results).decompose() if results is not None else Type.void())
|
||||
|
||||
return EvaluationResult.FAIL()
|
||||
|
||||
@@ -65,7 +64,7 @@ class AsteriskEvaluator(Evaluator):
|
||||
automaticVariableKey = cls._automaticNamedVariable(node.iterator, environment, "_")
|
||||
automaticVariableValue = cls._automaticNamedVariable(node.iterator, environment, "__")
|
||||
for i, v in enumerate(evaluatedIterator.value):
|
||||
environment.scopes[-1][automaticVariableKey] = Value(Type.INTEGER, i + 1)
|
||||
environment.scopes[-1][automaticVariableKey] = Type.integer(i + 1)
|
||||
environment.scopes[-1][automaticVariableValue] = v
|
||||
result = evaluate(node.statement, environment).value # TODO check if it isn't necessary to verify 'result' attr of EvaluatioNResult
|
||||
if result is not None and result.type != Type.VOID:
|
||||
@@ -74,52 +73,8 @@ class AsteriskEvaluator(Evaluator):
|
||||
del environment.scopes[-1][automaticVariableKey]
|
||||
del environment.scopes[-1][automaticVariableValue]
|
||||
|
||||
return EvaluationResult.OK(Value(Type.LIST, results).decompose())
|
||||
return EvaluationResult.OK(Type.list(results).decompose())
|
||||
|
||||
return EvaluationResult.FAIL()
|
||||
|
||||
return evaluator
|
||||
|
||||
#
|
||||
# def evaluateAsterisk(asterisk, environment):
|
||||
# iterator = evaluate(asterisk.iterator, environment)
|
||||
# if iterator.type == Type.INTEGER:
|
||||
# evaluateAsteriskForNumber(asterisk, environment, iterator)
|
||||
#
|
||||
# if iterator.type == Type.LIST:
|
||||
# evaluateAsteriskForList(asterisk, environment, iterator)
|
||||
#
|
||||
#
|
||||
#
|
||||
# def evaluateAsteriskForNumber(asterisk, environment, count):
|
||||
# for i in range(count.value):
|
||||
# if type(asterisk.iterator) == IdentifierNode:
|
||||
# environment.scopes[-1][f"_{asterisk.iterator.identifier}"] = Value(Type.INTEGER, i+1)
|
||||
# else:
|
||||
# environment.scopes[-1]["_"] = Value(Type.INTEGER, i+1)
|
||||
#
|
||||
# evaluate(asterisk.statement, environment)
|
||||
#
|
||||
# if type(asterisk.iterator) == IdentifierNode:
|
||||
# del environment.scopes[-1][f"_{asterisk.iterator.identifier}"]
|
||||
# else:
|
||||
# del environment.scopes[-1]["_"]
|
||||
#
|
||||
#
|
||||
# def evaluateAsteriskForList(asterisk, environment, list):
|
||||
# for i, v in enumerate(list.value):
|
||||
# if type(asterisk.iterator) == IdentifierNode:
|
||||
# environment.scopes[-1][f"_{asterisk.iterator.identifier}"] = Value(Type.INTEGER, i+1)
|
||||
# environment.scopes[-1][f"{asterisk.iterator.identifier}_"] = v
|
||||
# else:
|
||||
# environment.scopes[-1]["_"] = Value(Type.INTEGER, i+1)
|
||||
# environment.scopes[-1]["__"] = v
|
||||
#
|
||||
# evaluate(asterisk.statement, environment)
|
||||
#
|
||||
# if type(asterisk.iterator) == IdentifierNode:
|
||||
# del environment.scopes[-1][f"_{asterisk.iterator.identifier}"]
|
||||
# del environment.scopes[-1][f"{asterisk.iterator.identifier}_"]
|
||||
# else:
|
||||
# del environment.scopes[-1]["_"]
|
||||
# del environment.scopes[-1]["__"]
|
||||
|
||||
Reference in New Issue
Block a user