diff options
| author | mryouse | 2022-07-01 02:45:23 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-02 03:15:45 +0000 |
| commit | 2f43cbc79d5aa5d4677e44377492a3010840b58a (patch) | |
| tree | edd8f6b9202f59a406d57b11c586853bdd02bf11 /neb/structs.py | |
| parent | 74a048dd493788bab9f9c93b0ed6d925a998822b (diff) | |
attempt to add a generic list type
Diffstat (limited to 'neb/structs.py')
| -rw-r--r-- | neb/structs.py | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/neb/structs.py b/neb/structs.py index b8effd0..0ba2aaa 100644 --- a/neb/structs.py +++ b/neb/structs.py @@ -61,41 +61,52 @@ class Literal: def __init__(self, value, type_=None): self.value = value if type_ is None: - self.type_ = TypeEnum.ANY + #self.type_ = TypeEnum.ANY + self.type_ = ALL_TYPES[":literal"] else: - self.type_ = type_ + self.type_ = ALL_TYPES[type_] def __str__(self): return f"{self.value}:literal" class Int(Literal): def __init__(self, value): - super().__init__(value, TypeEnum.INT) + super().__init__(value, ":int") def __str__(self): return f"{self.value}" class Float(Literal): def __init__(self, value): - super().__init__(value, TypeEnum.FLOAT) + super().__init__(value, ":float") def __str__(self): return f"{self.value}" class Bool(Literal): def __init__(self, value): - super().__init__(value, TypeEnum.BOOL) + super().__init__(value, ":bool") def __str__(self): return f"#{str(self.value).lower()}" class String(Literal): def __init__(self, value): - super().__init__(value, TypeEnum.STRING) + super().__init__(value, ":string") def __str__(self): return f'"{repr(self.value)[1:-1]}"' class Type: - def __init__(self, name): + def __init__(self, name, inner=None): self.name = name + self.inner = inner def __str__(self): - return self.name + if self.name == ":[]": + if self.inner is None: + return f":[:any]" + else: + return f":[{self.inner}]" + else: + return self.name + +_native_types = ":any :literal :string :bool :number :int :float :[]" +ALL_TYPES = {x: Type(x) for x in _native_types.split(" ")} class Symbol: def __init__(self, name, line): @@ -115,7 +126,7 @@ class Expr: class List: def __init__(self, args): self.args = args - self.type_ = TypeEnum.LIST + self.type_ = ALL_TYPES[":[]"] def __str__(self): return "(" + " ".join(f"{arg}" for arg in self.args) + ")" @@ -124,7 +135,10 @@ class Arg: def __init__(self, name, type_, *, optional=False, lazy=False): self.name = name - self.type_ = type_ + if f"{type_}" == ":list": + self.type_ = ALL_TYPES[":[]"] + else: + self.type_ = ALL_TYPES[f"{type_}"] self.optional = optional self.lazy = lazy |
