aboutsummaryrefslogtreecommitdiff
path: root/neb/typeclass.py
blob: 75f61b18c07b661d3cf88f9ef0cdb31b5d11f263 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from enum import Enum, auto

class TypeEnum(Enum):
    ANY = auto()
    STRING = auto()
    INT = auto()
    FLOAT = auto()
    NUMBER = auto()
    LIST = auto()
    LITERAL = auto()
    BOOL = auto()
    HANDLE = auto()
    TYPE = auto()
    USER = auto()

    def __str__(self):
        return f":{self.name.lower()}"

HIERARCHY = { TypeEnum.ANY: None,
                    TypeEnum.LITERAL: TypeEnum.ANY,
                    TypeEnum.LIST: TypeEnum.ANY,
                    TypeEnum.STRING: TypeEnum.LITERAL,
                    TypeEnum.BOOL: TypeEnum.LITERAL,
                    TypeEnum.NUMBER: TypeEnum.LITERAL,
                    TypeEnum.INT: TypeEnum.NUMBER,
                    TypeEnum.FLOAT: TypeEnum.NUMBER }

def is_subtype_of(candidate, expected):
    if candidate == expected:
        return True
    parent = HIERARCHY[candidate]
    while parent is not None:
        if parent == expected:
            return True
        parent = HIERARCHY[parent]
    return False