Enable allTypes() for argument definitions in functions

This commit is contained in:
Bartłomiej Pluta
2019-07-10 11:29:00 +02:00
parent 6fdc437a7f
commit f6d1f91708
3 changed files with 13 additions and 4 deletions

View File

@@ -61,10 +61,10 @@ class ArgumentDefinitionNode(ExpressionNode):
return node return node
return Parser.allOf( return Parser.allOf(
Parser.oneOf( Parser.optional(Parser.oneOf(
TypeNode.parse, TypeNode.parse,
TypeSpecifier.parse TypeSpecifier.parse
), )),
Parser.doAssert(IdentifierNode.identifierParser(), "variable name"), Parser.doAssert(IdentifierNode.identifierParser(), "variable name"),
Parser.optional(Parser.terminalParser(TokenType.DOTS, lambda val, pos: VarargNode(pos))), Parser.optional(Parser.terminalParser(TokenType.DOTS, lambda val, pos: VarargNode(pos))),
createNode=createNode createNode=createNode

View File

@@ -10,7 +10,7 @@ from smnp.runtime.tools import updatePos
from smnp.type.model import Type from smnp.type.model import Type
from smnp.type.signature.matcher.list import listOfMatchers from smnp.type.signature.matcher.list import listOfMatchers
from smnp.type.signature.matcher.map import mapOfMatchers from smnp.type.signature.matcher.map import mapOfMatchers
from smnp.type.signature.matcher.type import ofType, oneOf from smnp.type.signature.matcher.type import ofType, oneOf, allTypes
class FunctionCallEvaluator(Evaluator): class FunctionCallEvaluator(Evaluator):
@@ -53,6 +53,13 @@ def argumentsNodeToMethodSignature(node):
vararg = typeMatcher(child.type) vararg = typeMatcher(child.type)
else: else:
sign.append(typeMatcher(child.type)) sign.append(typeMatcher(child.type))
elif type(child.type) == NoneNode:
if child.vararg:
if i != argumentsCount-1:
raise RuntimeException("Vararg must be the last argument in signature", child.pos)
vararg = allTypes()
else:
sign.append(allTypes())
else: else:
if child.vararg: if child.vararg:
if i != argumentsCount-1: if i != argumentsCount-1:

View File

@@ -4,7 +4,9 @@ from smnp.type.signature.matcher.model import Matcher
def allTypes(): def allTypes():
allowedTypes = [t for t in Type if t != Type.VOID] allowedTypes = [t for t in Type if t != Type.VOID]
return ofTypes(*allowedTypes) matcher = ofTypes(*allowedTypes)
matcher.string = "any"
return matcher
def ofTypes(*types): def ofTypes(*types):