diff options
| author | mryouse | 2022-07-01 02:45:23 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-01 02:45:23 +0000 |
| commit | d914e16f0b4de7a20df9dbd2d5baa97fa08424a7 (patch) | |
| tree | af5a686e6159fd129bac304ba26ea3eb7b481f7e /neb/structs.py | |
| parent | bf8900200c25d383c883501446a8048ad8966d94 (diff) | |
attempt to add a generic list type
Diffstat (limited to 'neb/structs.py')
| -rw-r--r-- | neb/structs.py | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/neb/structs.py b/neb/structs.py index 80252a0..0ba2aaa 100644 --- a/neb/structs.py +++ b/neb/structs.py @@ -61,48 +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): - self.name = name - def __str__(self): - return self.name - -class MultiType: - def __init__(self, name, inner): + 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): @@ -122,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) + ")" @@ -131,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 |
