aboutsummaryrefslogtreecommitdiff
path: root/neb/structs.py
diff options
context:
space:
mode:
Diffstat (limited to 'neb/structs.py')
-rw-r--r--neb/structs.py34
1 files changed, 24 insertions, 10 deletions
diff --git a/neb/structs.py b/neb/structs.py
index 8598344..1c5248c 100644
--- a/neb/structs.py
+++ b/neb/structs.py
@@ -61,33 +61,34 @@ 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]}"'
@@ -98,10 +99,20 @@ class Handle:
return f"{self.file.name} :handle"
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):
@@ -121,7 +132,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) + ")"
@@ -130,7 +141,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