From e58282878a1ed7b4e4e9fdabcfff845445db4db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Pluta?= Date: Tue, 9 Jul 2019 23:51:50 +0200 Subject: [PATCH] Allow to use types as keys in maps --- smnp/ast/node/map.py | 2 ++ smnp/module/iterable/function/get.py | 2 +- smnp/module/iterable/function/map.py | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/smnp/ast/node/map.py b/smnp/ast/node/map.py index c7064b0..419eb95 100644 --- a/smnp/ast/node/map.py +++ b/smnp/ast/node/map.py @@ -5,6 +5,7 @@ from smnp.ast.node.iterable import abstractIterableParser from smnp.ast.node.none import NoneNode from smnp.ast.node.note import NoteLiteralNode from smnp.ast.node.string import StringLiteralNode +from smnp.ast.node.type import TypeNode from smnp.ast.parser import Parser from smnp.token.type import TokenType @@ -56,4 +57,5 @@ class MapNode(AccessNode): IntegerLiteralNode._literalParser(), StringLiteralNode._literalParser(), NoteLiteralNode._literalParser(), + TypeNode.parse ) \ No newline at end of file diff --git a/smnp/module/iterable/function/get.py b/smnp/module/iterable/function/get.py index 4086887..30b5409 100644 --- a/smnp/module/iterable/function/get.py +++ b/smnp/module/iterable/function/get.py @@ -12,7 +12,7 @@ def _function1(env, list, index): raise RuntimeException(f"Attempt to access item which is outside the list", None) -_signature2 = signature(ofType(Type.MAP), ofTypes(Type.INTEGER, Type.STRING, Type.NOTE)) +_signature2 = signature(ofType(Type.MAP), ofTypes(Type.INTEGER, Type.STRING, Type.NOTE, Type.TYPE)) def _function2(env, map, key): try: return map.value[key] diff --git a/smnp/module/iterable/function/map.py b/smnp/module/iterable/function/map.py index bd85b9d..7d27b5c 100644 --- a/smnp/module/iterable/function/map.py +++ b/smnp/module/iterable/function/map.py @@ -4,7 +4,7 @@ from smnp.type.model import Type from smnp.type.signature.matcher.list import listOfMatchers, listMatches from smnp.type.signature.matcher.type import allTypes, ofTypes -_signature1 = varargSignature(listMatches(ofTypes(Type.INTEGER, Type.STRING, Type.NOTE), allTypes())) +_signature1 = varargSignature(listMatches(ofTypes(Type.INTEGER, Type.STRING, Type.NOTE, Type.TYPE), allTypes())) def _function1(env, vararg): map = {} for entry in vararg: @@ -14,7 +14,7 @@ def _function1(env, vararg): return Type.map(map) -_signature2 = signature(listOfMatchers(listMatches(ofTypes(Type.INTEGER, Type.STRING, Type.NOTE), allTypes()))) +_signature2 = signature(listOfMatchers(listMatches(ofTypes(Type.INTEGER, Type.STRING, Type.NOTE, Type.TYPE), allTypes()))) def _function2(env, list): map = {} for entry in list.value: