diff options
Diffstat (limited to 'neb/typeclass.py')
| -rw-r--r-- | neb/typeclass.py | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/neb/typeclass.py b/neb/typeclass.py new file mode 100644 index 0000000..eae412c --- /dev/null +++ b/neb/typeclass.py @@ -0,0 +1,34 @@ +from enum import Enum, auto + +class TypeEnum(Enum): +    ANY = auto() +    STRING = auto() +    INT = auto() +    FLOAT = auto() +    NUMBER = auto() +    LIST = auto() +    LITERAL = auto() +    BOOL = 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 + | 
