aboutsummaryrefslogtreecommitdiff
path: root/neb/structs.py
diff options
context:
space:
mode:
Diffstat (limited to 'neb/structs.py')
-rw-r--r--neb/structs.py39
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